From 9cdc744be6b770d7b82657ded2f07e47239537c1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 30 Aug 2024 17:19:45 +0000 Subject: [PATCH] Deployed 0a42a182f to main with MkDocs 1.6.1 and mike 1.1.2 --- main/404.html | 2 +- main/CHANGELOG/index.html | 6 +- main/changelog_section_template/index.html | 2 +- .../blockchain_test/index.html | 2 +- .../blockchain_test_engine/index.html | 2 +- main/consuming_tests/common_types/index.html | 2 +- main/consuming_tests/eof_test/index.html | 2 +- main/consuming_tests/exceptions/index.html | 2 +- main/consuming_tests/index.html | 2 +- main/consuming_tests/state_test/index.html | 2 +- main/dev/coding_style/index.html | 2 +- main/dev/docs/index.html | 2 +- main/dev/index.html | 2 +- main/dev/precommit/index.html | 2 +- main/dev/test_actions_locally/index.html | 2 +- main/getting_help/index.html | 2 +- .../debugging_t8n_tools/index.html | 2 +- .../executing_tests_command_line/index.html | 2 +- .../executing_tests_dev_fork/index.html | 2 +- .../executing_tests_vs_code/index.html | 2 +- .../installation_troubleshooting/index.html | 2 +- main/getting_started/quick_start/index.html | 2 +- .../repository_overview/index.html | 2 +- main/getting_started/setup_vs_code/index.html | 2 +- main/index.html | 2 +- .../ethereum_test_base_types/index.html | 2 +- .../ethereum_test_exceptions/index.html | 2 +- .../library/ethereum_test_fixtures/index.html | 2 +- main/library/ethereum_test_forks/index.html | 390 +++++- main/library/ethereum_test_specs/index.html | 2 +- main/library/ethereum_test_tools/index.html | 2 +- main/library/ethereum_test_types/index.html | 2 +- main/library/ethereum_test_vm/index.html | 2 +- main/library/evm_transition_tool/index.html | 2 +- main/library/index.html | 2 +- main/library/pytest_plugins/filler/index.html | 2 +- main/library/pytest_plugins/forks/index.html | 1098 +++++++++-------- main/library/pytest_plugins/index.html | 2 +- .../pytest_plugins/navigation/index.html | 2 +- .../spec_version_checker/index.html | 2 +- main/navigation/index.html | 2 +- main/objects.inv | Bin 28778 -> 28845 bytes main/search/search_index.json | 2 +- main/sitemap.xml | 930 +++++--------- main/sitemap.xml.gz | Bin 2475 -> 2453 bytes .../berlin/eip2930_access_list/index.html | 4 +- .../eip2930_access_list/test_acl/index.html | 4 +- .../test_acl/index/test_cases/index.html | 4 +- main/tests/berlin/index.html | 4 +- .../eip198_modexp_precompile/index.html | 4 +- .../test_modexp/index.html | 4 +- .../test_modexp/index/test_cases/index.html | 4 +- main/tests/byzantium/index.html | 4 +- main/tests/cancun/eip1153_tstore/index.html | 4 +- .../cancun/eip1153_tstore/spec/index.html | 4 +- .../test_basic_tload/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_tload_calls/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_tload_reentrancy/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../eip1153_tstore/test_tstorage/index.html | 4 +- .../test_tstorage/index/test_cases/index.html | 4 +- .../test_tstorage_create_contexts/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../index.html | 4 +- .../index/test_cases/index.html | 4 +- .../index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_tstorage_selfdestruct/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_tstore_reentrancy/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../cancun/eip4788_beacon_root/index.html | 4 +- .../eip4788_beacon_root/spec/index.html | 4 +- .../test_beacon_root_contract/index.html | 4 +- .../index/test_cases/index.html | 4 +- main/tests/cancun/eip4844_blobs/index.html | 4 +- .../README_./index.html | 2 +- .../cancun/eip4844_blobs/spec/index.html | 4 +- .../eip4844_blobs/test_blob_txs/index.html | 4 +- .../test_blob_txs/index/test_cases/index.html | 4 +- .../test_blob_txs_full/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_blobhash_opcode/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_blobhash_opcode_contexts/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_excess_blob_gas/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../index.html | 4 +- .../index/test_cases/index.html | 4 +- .../index.html | 4 +- .../index/test_cases/index.html | 4 +- .../index.html | 4 +- .../index/test_cases/index.html | 4 +- main/tests/cancun/eip5656_mcopy/index.html | 4 +- .../eip5656_mcopy/test_mcopy/index.html | 4 +- .../test_mcopy/index/test_cases/index.html | 4 +- .../test_mcopy_contexts/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_mcopy_memory_expansion/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../cancun/eip6780_selfdestruct/index.html | 4 +- .../index.html | 4 +- .../index/test_cases/index.html | 4 +- .../index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_selfdestruct/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_selfdestruct_revert/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../cancun/eip7516_blobgasfee/index.html | 4 +- .../test_blobgasfee_opcode/index.html | 4 +- .../index/test_cases/index.html | 4 +- main/tests/cancun/index.html | 4 +- .../constantinople/eip1014_create2/index.html | 4 +- .../eip1014_create2/spec/index.html | 4 +- .../test_create_returndata/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../eip1014_create2/test_recreate/index.html | 4 +- .../test_recreate/index/test_cases/index.html | 4 +- main/tests/constantinople/index.html | 4 +- main/tests/frontier/index.html | 4 +- main/tests/frontier/opcodes/index.html | 4 +- .../opcodes/test_all_opcodes/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../index.html | 4 +- .../index/test_cases/index.html | 4 +- .../frontier/opcodes/test_dup/index.html | 4 +- .../test_dup/index/test_cases/index.html | 4 +- .../opcodes/test_selfdestruct/index.html | 4 +- .../index/test_cases/index.html | 4 +- main/tests/homestead/coverage/index.html | 4 +- .../coverage/test_coverage/index.html | 4 +- .../test_coverage/index/test_cases/index.html | 4 +- main/tests/homestead/index.html | 4 +- main/tests/homestead/yul/index.html | 4 +- .../homestead/yul/test_yul_example/index.html | 4 +- .../index/test_cases/index.html | 4 +- main/tests/index.html | 4 +- .../tests/istanbul/eip1344_chainid/index.html | 4 +- .../eip1344_chainid/test_chainid/index.html | 4 +- .../test_chainid/index/test_cases/index.html | 4 +- main/tests/istanbul/index.html | 4 +- main/tests/paris/index.html | 4 +- main/tests/paris/security/index.html | 4 +- .../test_selfdestruct_balance_bug/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../eip2537_bls_12_381_precompiles/index.html | 4 +- .../spec/index.html | 4 +- .../test_bls12_g1add/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_bls12_g1msm/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_bls12_g1mul/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_bls12_g2add/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_bls12_g2msm/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_bls12_g2mul/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_bls12_map_fp2_to_g2/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_bls12_map_fp_to_g1/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_bls12_pairing/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../index.html | 4 +- .../index/test_cases/index.html | 4 +- .../index.html | 4 +- .../index/test_cases/index.html | 4 +- .../vectors/test-vectors./index.html | 2 +- .../index.html | 4 +- .../spec/index.html | 4 +- .../test_block_hashes/index.html | 4 +- .../index/test_cases/index.html | 4 +- main/tests/prague/eip6110_deposits/index.html | 4 +- .../prague/eip6110_deposits/spec/index.html | 4 +- .../eip6110_deposits/test_deposits/index.html | 4 +- .../test_deposits/index/test_cases/index.html | 4 +- .../index.html | 4 +- .../spec/index.html | 4 +- .../test_withdrawal_requests/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../prague/eip7251_consolidations/index.html | 4 +- .../eip7251_consolidations/spec/index.html | 4 +- .../test_consolidations/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../index.html | 4 +- .../spec/index.html | 4 +- .../index.html | 4 +- .../index/test_cases/index.html | 4 +- .../eip7692_eof_v1/eip3540_eof_v1/index.html | 4 +- .../eip3540_eof_v1/spec/index.html | 4 +- .../test_all_opcodes_in_container/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_code_validation/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_container_size/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_container_validation/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_eof_example/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_execution_function/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../eip3540_eof_v1/test_extcode/index.html | 4 +- .../test_extcode/index/test_cases/index.html | 4 +- .../test_migrated_valid_invalid/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_section_order/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_section_size/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../eip4200_relative_jumps/index.html | 4 +- .../test_rjump/index.html | 4 +- .../test_rjump/index/test_cases/index.html | 4 +- .../test_rjumpi/index.html | 4 +- .../test_rjumpi/index/test_cases/index.html | 4 +- .../test_rjumpv/index.html | 4 +- .../test_rjumpv/index/test_cases/index.html | 4 +- .../eip4750_functions/index.html | 4 +- .../test_callf_execution/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_code_validation/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../eip7692_eof_v1/eip6206_jumpf/index.html | 4 +- .../eip6206_jumpf/spec/index.html | 4 +- .../test_jumpf_execution/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../eip6206_jumpf/test_jumpf_stack/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_jumpf_target/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../eip663_dupn_swapn_exchange/index.html | 4 +- .../test_dupn/index.html | 4 +- .../test_dupn/index/test_cases/index.html | 4 +- .../test_exchange/index.html | 4 +- .../test_exchange/index/test_cases/index.html | 4 +- .../test_swapn/index.html | 4 +- .../test_swapn/index/test_cases/index.html | 4 +- .../eip7692_eof_v1/eip7069_extcall/index.html | 4 +- .../eip7069_extcall/spec/index.html | 4 +- .../test_address_space_extension/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../eip7069_extcall/test_calldata/index.html | 4 +- .../test_calldata/index/test_cases/index.html | 4 +- .../eip7069_extcall/test_calls/index.html | 4 +- .../test_calls/index/test_cases/index.html | 4 +- .../eip7069_extcall/test_gas/index.html | 4 +- .../test_gas/index/test_cases/index.html | 4 +- .../index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_returndataload/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../eip7480_data_section/index.html | 4 +- .../eip7480_data_section/spec/index.html | 4 +- .../test_code_validation/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_data_opcodes/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_datacopy_memory_expansion/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../eip7620_eof_create/index.html | 4 +- .../eip7620_eof_create/spec/index.html | 4 +- .../test_eofcreate/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_eofcreate_failures/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_legacy_eof_creates/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_returncontract/index.html | 4 +- .../index/test_cases/index.html | 4 +- .../test_subcontainer_validation/index.html | 4 +- .../index/test_cases/index.html | 4 +- main/tests/prague/eip7692_eof_v1/index.html | 4 +- .../prague/eip7692_eof_v1/tracker./index.html | 2 +- .../prague/eip7702_eoa_code_tx/index.html | 4 +- .../eip7702_eoa_code_tx/spec/index.html | 4 +- .../test_eoa_code_txs/index.html | 4 +- .../index/test_cases/index.html | 4 +- main/tests/prague/index.html | 4 +- .../shanghai/eip3651_warm_coinbase/index.html | 4 +- .../eip3651_warm_coinbase/spec/index.html | 4 +- .../test_warm_coinbase/index.html | 4 +- .../index/test_cases/index.html | 4 +- main/tests/shanghai/eip3855_push0/index.html | 4 +- .../shanghai/eip3855_push0/spec/index.html | 4 +- .../eip3855_push0/test_push0/index.html | 4 +- .../test_push0/index/test_cases/index.html | 4 +- .../shanghai/eip3860_initcode/index.html | 4 +- .../shanghai/eip3860_initcode/spec/index.html | 4 +- .../eip3860_initcode/test_initcode/index.html | 4 +- .../test_initcode/index/test_cases/index.html | 4 +- .../shanghai/eip4895_withdrawals/index.html | 4 +- .../eip4895_withdrawals/spec/index.html | 4 +- .../test_withdrawals/index.html | 4 +- .../index/test_cases/index.html | 4 +- main/tests/shanghai/index.html | 4 +- main/tutorials/blockchain/index.html | 2 +- main/tutorials/state_transition/index.html | 2 +- .../state_transition_bad_opcode/index.html | 2 +- .../adding_a_new_test/index.html | 2 +- main/writing_tests/code_standards/index.html | 2 +- main/writing_tests/exception_tests/index.html | 2 +- main/writing_tests/index.html | 2 +- .../reference_specification/index.html | 2 +- main/writing_tests/test_markers/index.html | 33 +- main/writing_tests/types_of_tests/index.html | 2 +- .../verifying_changes/index.html | 2 +- .../writing_a_new_test/index.html | 2 +- 315 files changed, 1834 insertions(+), 1749 deletions(-) diff --git a/main/404.html b/main/404.html index 02ca29a284..572f81e817 100644 --- a/main/404.html +++ b/main/404.html @@ -14,7 +14,7 @@ - + diff --git a/main/CHANGELOG/index.html b/main/CHANGELOG/index.html index 392ab0c524..504b126363 100644 --- a/main/CHANGELOG/index.html +++ b/main/CHANGELOG/index.html @@ -20,7 +20,7 @@ - + @@ -14559,7 +14559,9 @@

🛠️ Framework✨ Added Container.Init to ethereum_test_types.EOF.V1 package, which allows generation of an EOF init container more easily (#739).
  • ✨ Introduce method valid_opcodes() to the fork class (#748).
  • 🐞 Fixed consume exit 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-version to the fill command, 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 by fill via solc-select (#772.
  • +
  • ✨ Added a new flag --solc-version to the fill command, 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 by fill via solc-select (#772).
  • +
  • 🐞 Fix usage of multiple @pytest.mark.with_all* markers which shared parameters, such as with_all_call_opcodes and with_all_create_opcodes which shared evm_code_type, and now only parametrize compatible values (#762).
  • +
  • ✨ Added selector and marks fields 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).
  • 🔧 EVM Tools

    📋 Misc

    diff --git a/main/changelog_section_template/index.html b/main/changelog_section_template/index.html index 6614c51740..907af7125f 100644 --- a/main/changelog_section_template/index.html +++ b/main/changelog_section_template/index.html @@ -16,7 +16,7 @@ - + diff --git a/main/consuming_tests/blockchain_test/index.html b/main/consuming_tests/blockchain_test/index.html index ad7a392a5f..d79a925451 100644 --- a/main/consuming_tests/blockchain_test/index.html +++ b/main/consuming_tests/blockchain_test/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/consuming_tests/blockchain_test_engine/index.html b/main/consuming_tests/blockchain_test_engine/index.html index ec505f6429..00ac6c7a8a 100644 --- a/main/consuming_tests/blockchain_test_engine/index.html +++ b/main/consuming_tests/blockchain_test_engine/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/consuming_tests/common_types/index.html b/main/consuming_tests/common_types/index.html index 10ca41f8d0..88608867ac 100644 --- a/main/consuming_tests/common_types/index.html +++ b/main/consuming_tests/common_types/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/consuming_tests/eof_test/index.html b/main/consuming_tests/eof_test/index.html index c531bb4319..47b6193d3f 100644 --- a/main/consuming_tests/eof_test/index.html +++ b/main/consuming_tests/eof_test/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/consuming_tests/exceptions/index.html b/main/consuming_tests/exceptions/index.html index 74763f76dd..f16c7b2c02 100644 --- a/main/consuming_tests/exceptions/index.html +++ b/main/consuming_tests/exceptions/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/consuming_tests/index.html b/main/consuming_tests/index.html index 4acffbd6ff..49c6b7efe4 100644 --- a/main/consuming_tests/index.html +++ b/main/consuming_tests/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/consuming_tests/state_test/index.html b/main/consuming_tests/state_test/index.html index df8420756a..41d9c4074f 100644 --- a/main/consuming_tests/state_test/index.html +++ b/main/consuming_tests/state_test/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/dev/coding_style/index.html b/main/dev/coding_style/index.html index 779984c92a..ff2b905223 100644 --- a/main/dev/coding_style/index.html +++ b/main/dev/coding_style/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/dev/docs/index.html b/main/dev/docs/index.html index 7aa5317000..2bc8586140 100644 --- a/main/dev/docs/index.html +++ b/main/dev/docs/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/dev/index.html b/main/dev/index.html index 4fc9db02e5..b559b3a375 100644 --- a/main/dev/index.html +++ b/main/dev/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/dev/precommit/index.html b/main/dev/precommit/index.html index d68a2ef56c..1c30971a5c 100644 --- a/main/dev/precommit/index.html +++ b/main/dev/precommit/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/dev/test_actions_locally/index.html b/main/dev/test_actions_locally/index.html index 16016f14a2..3eb8f13d80 100644 --- a/main/dev/test_actions_locally/index.html +++ b/main/dev/test_actions_locally/index.html @@ -16,7 +16,7 @@ - + diff --git a/main/getting_help/index.html b/main/getting_help/index.html index 546d5bcab2..b91e072439 100644 --- a/main/getting_help/index.html +++ b/main/getting_help/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/getting_started/debugging_t8n_tools/index.html b/main/getting_started/debugging_t8n_tools/index.html index dbee344ccf..2cb09110fb 100644 --- a/main/getting_started/debugging_t8n_tools/index.html +++ b/main/getting_started/debugging_t8n_tools/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/getting_started/executing_tests_command_line/index.html b/main/getting_started/executing_tests_command_line/index.html index 18b47feb46..469e936822 100644 --- a/main/getting_started/executing_tests_command_line/index.html +++ b/main/getting_started/executing_tests_command_line/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/getting_started/executing_tests_dev_fork/index.html b/main/getting_started/executing_tests_dev_fork/index.html index 04bf0287fe..8a6759c811 100644 --- a/main/getting_started/executing_tests_dev_fork/index.html +++ b/main/getting_started/executing_tests_dev_fork/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/getting_started/executing_tests_vs_code/index.html b/main/getting_started/executing_tests_vs_code/index.html index ee6993989b..215d40d4f1 100644 --- a/main/getting_started/executing_tests_vs_code/index.html +++ b/main/getting_started/executing_tests_vs_code/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/getting_started/installation_troubleshooting/index.html b/main/getting_started/installation_troubleshooting/index.html index 0701c757ea..4a7d84d7ed 100644 --- a/main/getting_started/installation_troubleshooting/index.html +++ b/main/getting_started/installation_troubleshooting/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/getting_started/quick_start/index.html b/main/getting_started/quick_start/index.html index bdb11ef059..dac6f47f92 100644 --- a/main/getting_started/quick_start/index.html +++ b/main/getting_started/quick_start/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/getting_started/repository_overview/index.html b/main/getting_started/repository_overview/index.html index bb2eb7382f..53fef3026f 100644 --- a/main/getting_started/repository_overview/index.html +++ b/main/getting_started/repository_overview/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/getting_started/setup_vs_code/index.html b/main/getting_started/setup_vs_code/index.html index 9b72a50744..99166d750b 100644 --- a/main/getting_started/setup_vs_code/index.html +++ b/main/getting_started/setup_vs_code/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/index.html b/main/index.html index ffd5832a98..b8c0239caa 100644 --- a/main/index.html +++ b/main/index.html @@ -18,7 +18,7 @@ - + diff --git a/main/library/ethereum_test_base_types/index.html b/main/library/ethereum_test_base_types/index.html index 84c6c40b83..6b38f70dc6 100644 --- a/main/library/ethereum_test_base_types/index.html +++ b/main/library/ethereum_test_base_types/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/library/ethereum_test_exceptions/index.html b/main/library/ethereum_test_exceptions/index.html index ee9a76e66f..0259a95228 100644 --- a/main/library/ethereum_test_exceptions/index.html +++ b/main/library/ethereum_test_exceptions/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/library/ethereum_test_fixtures/index.html b/main/library/ethereum_test_fixtures/index.html index 9ed3dd3624..97d134d9c7 100644 --- a/main/library/ethereum_test_fixtures/index.html +++ b/main/library/ethereum_test_fixtures/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/library/ethereum_test_forks/index.html b/main/library/ethereum_test_forks/index.html index d17f19c6da..fd2e80dd6d 100644 --- a/main/library/ethereum_test_forks/index.html +++ b/main/library/ethereum_test_forks/index.html @@ -20,7 +20,7 @@ - + @@ -2613,6 +2613,24 @@ + + +
  • + + + get_forks_with_no_descendants + + + +
  • + +
  • + + + get_forks_with_no_parents + + +
  • @@ -2631,6 +2649,24 @@ +
  • + +
  • + + + get_from_until_fork_set + + + +
  • + +
  • + + + get_last_descendants + + +
  • @@ -15639,6 +15675,24 @@ +
  • + +
  • + + + get_forks_with_no_descendants + + + +
  • + +
  • + + + get_forks_with_no_parents + + +
  • @@ -15657,6 +15711,24 @@ +
  • + +
  • + + + get_from_until_fork_set + + + +
  • + +
  • + + + get_last_descendants + + +
  • @@ -22050,15 +22122,15 @@

    Source code in src/ethereum_test_forks/helpers.py -
    159
    -160
    -161
    -162
    -163
    -164
    -165
    -166
    -167
    def forks_from(fork: Fork, deployed_only: bool = True) -> List[Fork]:
    +              
    219
    +220
    +221
    +222
    +223
    +224
    +225
    +226
    +227
    def forks_from(fork: Fork, deployed_only: bool = True) -> List[Fork]:
         """
         Returns the specified fork and all forks after it.
         """
    @@ -22094,26 +22166,26 @@ 

    Source code in src/ethereum_test_forks/helpers.py -
    137
    -138
    -139
    -140
    -141
    -142
    -143
    -144
    -145
    -146
    -147
    -148
    -149
    -150
    -151
    -152
    -153
    -154
    -155
    -156
    def forks_from_until(fork_from: Fork, fork_until: Fork) -> List[Fork]:
    +              
    197
    +198
    +199
    +200
    +201
    +202
    +203
    +204
    +205
    +206
    +207
    +208
    +209
    +210
    +211
    +212
    +213
    +214
    +215
    +216
    def forks_from_until(fork_from: Fork, fork_until: Fork) -> List[Fork]:
         """
         Returns the specified fork and all forks after it until and including the
         second specified fork
    @@ -22325,6 +22397,112 @@ 

    +
    + + +

    + get_forks_with_no_descendants(forks) + +

    + + +
    + +

    Get the forks with no descendants in the inheritance hierarchy.

    + +
    + Source code in src/ethereum_test_forks/helpers.py +
    137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +148
    +149
    +150
    def get_forks_with_no_descendants(forks: Set[Fork]) -> Set[Fork]:
    +    """
    +    Get the forks with no descendants in the inheritance hierarchy.
    +    """
    +    resulting_forks: Set[Fork] = set()
    +    for fork in forks:
    +        descendants = False
    +        for next_fork in forks - {fork}:
    +            if next_fork > fork:
    +                descendants = True
    +                break
    +        if not descendants:
    +            resulting_forks = resulting_forks | {fork}
    +    return resulting_forks
    +
    +
    +
    + +
    + + + + + + +
    + + +

    + get_forks_with_no_parents(forks) + +

    + + +
    + +

    Get the forks with no parents in the inheritance hierarchy.

    + +
    + Source code in src/ethereum_test_forks/helpers.py +
    121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    def get_forks_with_no_parents(forks: Set[Fork]) -> Set[Fork]:
    +    """
    +    Get the forks with no parents in the inheritance hierarchy.
    +    """
    +    resulting_forks: Set[Fork] = set()
    +    for fork in forks:
    +        parents = False
    +        for next_fork in forks - {fork}:
    +            if next_fork < fork:
    +                parents = True
    +                break
    +        if not parents:
    +            resulting_forks = resulting_forks | {fork}
    +    return resulting_forks
    +
    +
    +
    + +
    + + + + + +
    @@ -22395,6 +22573,104 @@

    + + +

    + get_from_until_fork_set(forks, forks_from, forks_until) + +

    + + +
    + +

    Get the fork range from forks_from to forks_until.

    + +
    + Source code in src/ethereum_test_forks/helpers.py +
    106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    def get_from_until_fork_set(
    +    forks: Set[Fork], forks_from: Set[Fork], forks_until: Set[Fork]
    +) -> Set[Fork]:
    +    """
    +    Get the fork range from forks_from to forks_until.
    +    """
    +    resulting_set = set()
    +    for fork_from in forks_from:
    +        for fork_until in forks_until:
    +            for fork in forks:
    +                if fork <= fork_until and fork >= fork_from:
    +                    resulting_set.add(fork)
    +    return resulting_set
    +
    +
    +
    + +
    + + + + + + +
    + + +

    + get_last_descendants(forks, forks_from) + +

    + + +
    + +

    Get the last descendant of a class in the inheritance hierarchy.

    + +
    + Source code in src/ethereum_test_forks/helpers.py +
    153
    +154
    +155
    +156
    +157
    +158
    +159
    +160
    +161
    +162
    +163
    def get_last_descendants(forks: Set[Fork], forks_from: Set[Fork]) -> Set[Fork]:
    +    """
    +    Get the last descendant of a class in the inheritance hierarchy.
    +    """
    +    resulting_forks: Set[Fork] = set()
    +    forks = get_forks_with_no_descendants(forks)
    +    for fork_from in forks_from:
    +        for fork in forks:
    +            if fork >= fork_from:
    +                resulting_forks = resulting_forks | {fork}
    +    return resulting_forks
    +
    +
    +
    + +
    + + + + + +
    @@ -22464,21 +22740,21 @@

    Source code in src/ethereum_test_forks/helpers.py -
    106
    -107
    -108
    -109
    -110
    -111
    -112
    -113
    -114
    -115
    -116
    -117
    -118
    -119
    -120
    def transition_fork_from_to(fork_from: Fork, fork_to: Fork) -> Fork | None:
    +              
    166
    +167
    +168
    +169
    +170
    +171
    +172
    +173
    +174
    +175
    +176
    +177
    +178
    +179
    +180
    def transition_fork_from_to(fork_from: Fork, fork_to: Fork) -> Fork | None:
         """
         Returns the transition fork that transitions to and from the specified
         forks.
    @@ -22519,18 +22795,18 @@ 

    Source code in src/ethereum_test_forks/helpers.py -
    123
    -124
    -125
    -126
    -127
    -128
    -129
    -130
    -131
    -132
    -133
    -134
    def transition_fork_to(fork_to: Fork) -> List[Fork]:
    +              
    183
    +184
    +185
    +186
    +187
    +188
    +189
    +190
    +191
    +192
    +193
    +194
    def transition_fork_to(fork_to: Fork) -> List[Fork]:
         """
         Returns the transition fork that transitions to the specified fork.
         """
    diff --git a/main/library/ethereum_test_specs/index.html b/main/library/ethereum_test_specs/index.html
    index b8c2bb3865..7985d4d88b 100644
    --- a/main/library/ethereum_test_specs/index.html
    +++ b/main/library/ethereum_test_specs/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    diff --git a/main/library/ethereum_test_tools/index.html b/main/library/ethereum_test_tools/index.html
    index 8b27b30cfe..2090c20df8 100644
    --- a/main/library/ethereum_test_tools/index.html
    +++ b/main/library/ethereum_test_tools/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    diff --git a/main/library/ethereum_test_types/index.html b/main/library/ethereum_test_types/index.html
    index 4e131cddac..205ee45603 100644
    --- a/main/library/ethereum_test_types/index.html
    +++ b/main/library/ethereum_test_types/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    diff --git a/main/library/ethereum_test_vm/index.html b/main/library/ethereum_test_vm/index.html
    index ee8d99b1c2..0e9b2b8717 100644
    --- a/main/library/ethereum_test_vm/index.html
    +++ b/main/library/ethereum_test_vm/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    diff --git a/main/library/evm_transition_tool/index.html b/main/library/evm_transition_tool/index.html
    index 2faaed79a3..5b0b79b284 100644
    --- a/main/library/evm_transition_tool/index.html
    +++ b/main/library/evm_transition_tool/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    diff --git a/main/library/index.html b/main/library/index.html
    index 9ce7bb94ed..d4c4cbe4bd 100644
    --- a/main/library/index.html
    +++ b/main/library/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    diff --git a/main/library/pytest_plugins/filler/index.html b/main/library/pytest_plugins/filler/index.html
    index 8150fce11a..9cd45c9122 100644
    --- a/main/library/pytest_plugins/filler/index.html
    +++ b/main/library/pytest_plugins/filler/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    diff --git a/main/library/pytest_plugins/forks/index.html b/main/library/pytest_plugins/forks/index.html
    index f531eaedbe..43e129bde3 100644
    --- a/main/library/pytest_plugins/forks/index.html
    +++ b/main/library/pytest_plugins/forks/index.html
    @@ -16,7 +16,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13608,6 +13608,15 @@
         
       
       
    +
    +      
    +        
  • + + + MarkedValue + + +
  • @@ -13630,18 +13639,18 @@ - - -
  • - -
  • - - - get_from_until_fork_set - - - -
  • - -
  • - - - get_forks_with_no_parents - - - -
  • - -
  • - +
  • + - get_forks_with_no_descendants + add_values
  • - -
  • - - - get_last_descendants - - + + +
  • @@ -13791,6 +13773,15 @@ + + +
  • + + + parameters_from_fork_parametrizer_list + + +
  • @@ -13846,6 +13837,10 @@

    Forks Plugin

  • @@ -13884,6 +13879,18 @@

    Forks Plugin
    Source code in src/pytest_plugins/forks/forks.py -
    26
    -27
    -28
    -29
    -30
    +              
    30
     31
     32
     33
    @@ -13942,7 +13945,11 @@ 

    55 56 57 -58

    def pytest_addoption(parser):
    +58
    +59
    +60
    +61
    +62
    def pytest_addoption(parser):
         """
         Adds command-line options to pytest.
         """
    @@ -13986,6 +13993,70 @@ 

    +
    + + + +

    + MarkedValue + + + + dataclass + + +

    + + +
    + + +

    A processed value for a covariant parameter.

    +

    Value can be a list for inclusive parameters.

    + +
    + Source code in src/pytest_plugins/forks/forks.py +
    65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    @dataclass(kw_only=True)
    +class MarkedValue:
    +    """
    +    A processed value for a covariant parameter.
    +
    +    Value can be a list for inclusive parameters.
    +    """
    +
    +    value: Any
    +    marks: List[pytest.Mark | pytest.MarkDecorator] = field(default_factory=list)
    +
    +
    + + + +
    + + + + + +
    + +
    + +
    + + + + + +
    @@ -14008,21 +14079,21 @@

    Source code in src/pytest_plugins/forks/forks.py -
    61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    @dataclass(kw_only=True)
    +                
    77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    @dataclass(kw_only=True)
     class ForkCovariantParameter:
         """
         Value list for a fork covariant parameter in a given fork.
         """
     
    -    name: str
    -    values: List[Any]
    +    names: List[str]
    +    values: List[List[MarkedValue]]
     
    @@ -14067,23 +14138,7 @@

    Source code in src/pytest_plugins/forks/forks.py -
     71
    - 72
    - 73
    - 74
    - 75
    - 76
    - 77
    - 78
    - 79
    - 80
    - 81
    - 82
    - 83
    - 84
    - 85
    - 86
    - 87
    +                
     87
      88
      89
      90
    @@ -14110,50 +14165,76 @@ 

    111 112 113 -114

    @dataclass(kw_only=True)
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +135
    @dataclass(kw_only=True)
     class ForkParametrizer:
         """
         A parametrizer for a test case that is parametrized by the fork.
         """
     
         fork: Fork
    -    mark: pytest.MarkDecorator | None = None
         fork_covariant_parameters: List[ForkCovariantParameter] = field(default_factory=list)
    +    marks: List[pytest.MarkDecorator | pytest.Mark] = field(default_factory=list)
     
    -    def get_parameter_names(self) -> List[str]:
    +    @property
    +    def parameter_names(self) -> List[str]:
             """
             Return the parameter names for the test case.
             """
             parameter_names = ["fork"]
             for p in self.fork_covariant_parameters:
    -            if "," in p.name:
    -                parameter_names.extend(p.name.split(","))
    -            else:
    -                parameter_names.append(p.name)
    +            parameter_names.extend(p.names)
             return parameter_names
     
    -    def get_parameter_values(self) -> List[Any]:
    +    @property
    +    def parameter_values(self) -> List[ParameterSet]:
             """
             Return the parameter values for the test case.
             """
             param_value_combinations = [
    -            params
    +            # Flatten the list of values for each parameter
    +            list(itertools.chain(*params))
                 for params in itertools.product(
    -                [self.fork],
    +                # Add the fork so it is multiplied by the other parameters.
    +                # It's a list of lists because all parameters are, but it will
    +                # flattened after the product.
    +                [[MarkedValue(value=self.fork)]],
    +                # Add the values for each parameter, all of them are lists of at least one element.
                     *[p.values for p in self.fork_covariant_parameters],
                 )
             ]
    -        for i in range(len(param_value_combinations)):
    -            # if the parameter is a tuple, we need to flatten it
    -            param_value_combinations[i] = list(
    -                itertools.chain.from_iterable(
    -                    [v] if not isinstance(v, tuple) else v for v in param_value_combinations[i]
    -                )
    -            )
    -        return [
    -            pytest.param(*params, marks=[self.mark] if self.mark else [])
    -            for params in param_value_combinations
    -        ]
    +
    +        parameter_set_list: List[ParameterSet] = []
    +        for marked_params in param_value_combinations:
    +            marks = self.marks.copy()
    +            params: List[Any] = []
    +            for p in marked_params:
    +                params.append(p.value)
    +                if p.marks:
    +                    marks.extend(p.marks)
    +            parameter_set_list.append(pytest.param(*params, marks=marks))
    +
    +        return parameter_set_list
     
    @@ -14167,44 +14248,23 @@

    -
    +
    -

    - get_parameter_names() -

    +

    + parameter_names: List[str] + + + property + + +

    Return the parameter names for the test case.

    - -
    - Source code in src/pytest_plugins/forks/forks.py -
    81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -91
    def get_parameter_names(self) -> List[str]:
    -    """
    -    Return the parameter names for the test case.
    -    """
    -    parameter_names = ["fork"]
    -    for p in self.fork_covariant_parameters:
    -        if "," in p.name:
    -            parameter_names.extend(p.name.split(","))
    -        else:
    -            parameter_names.append(p.name)
    -    return parameter_names
    -
    -
    @@ -14214,66 +14274,23 @@

    +
    -

    - get_parameter_values() -

    +

    + parameter_values: List[ParameterSet] + + + property + + +

    Return the parameter values for the test case.

    - -
    - Source code in src/pytest_plugins/forks/forks.py -
     93
    - 94
    - 95
    - 96
    - 97
    - 98
    - 99
    -100
    -101
    -102
    -103
    -104
    -105
    -106
    -107
    -108
    -109
    -110
    -111
    -112
    -113
    -114
    def get_parameter_values(self) -> List[Any]:
    -    """
    -    Return the parameter values for the test case.
    -    """
    -    param_value_combinations = [
    -        params
    -        for params in itertools.product(
    -            [self.fork],
    -            *[p.values for p in self.fork_covariant_parameters],
    -        )
    -    ]
    -    for i in range(len(param_value_combinations)):
    -        # if the parameter is a tuple, we need to flatten it
    -        param_value_combinations[i] = list(
    -            itertools.chain.from_iterable(
    -                [v] if not isinstance(v, tuple) else v for v in param_value_combinations[i]
    -            )
    -        )
    -    return [
    -        pytest.param(*params, marks=[self.mark] if self.mark else [])
    -        for params in param_value_combinations
    -    ]
    -
    -
    @@ -14315,28 +14332,7 @@

    Source code in src/pytest_plugins/forks/forks.py -
    117
    -118
    -119
    -120
    -121
    -122
    -123
    -124
    -125
    -126
    -127
    -128
    -129
    -130
    -131
    -132
    -133
    -134
    -135
    -136
    -137
    -138
    +                
    138
     139
     140
     141
    @@ -14384,7 +14380,65 @@ 

    183 184 185 -186

    @dataclass(kw_only=True)
    +186
    +187
    +188
    +189
    +190
    +191
    +192
    +193
    +194
    +195
    +196
    +197
    +198
    +199
    +200
    +201
    +202
    +203
    +204
    +205
    +206
    +207
    +208
    +209
    +210
    +211
    +212
    +213
    +214
    +215
    +216
    +217
    +218
    +219
    +220
    +221
    +222
    +223
    +224
    +225
    +226
    +227
    +228
    +229
    +230
    +231
    +232
    +233
    +234
    +235
    +236
    +237
    +238
    +239
    +240
    +241
    +242
    +243
    +244
    @dataclass(kw_only=True)
     class CovariantDescriptor:
         """
         A descriptor for a parameter that is covariant with the fork:
    @@ -14394,7 +14448,7 @@ 

    marker_name: str description: str fork_attribute_name: str - parameter_name: str + parameter_names: List[str] def get_marker(self, metafunc: Metafunc) -> pytest.Mark | None: """ @@ -14415,7 +14469,41 @@

    """ return self.get_marker(metafunc) is not None - def filter_values(self, metafunc: Metafunc, values: List[Any]) -> List[Any]: + @staticmethod + def process_value( + values: Any | List[Any] | Tuple[Any], + selector: FunctionType, + marks: None + | pytest.Mark + | pytest.MarkDecorator + | List[pytest.Mark | pytest.MarkDecorator] + | Callable[ + [Any], + List[pytest.Mark | pytest.MarkDecorator] | pytest.Mark | pytest.MarkDecorator | None, + ], + ) -> List[List[MarkedValue]]: + """ + Process a value for a covariant parameter. + + The `selector` is applied to values in order to filter them. + """ + if not isinstance(values, tuple) and not isinstance(values, list): + values = [values] + + if selector(*values[: selector.__code__.co_argcount]): + if isinstance(marks, FunctionType): + marks = marks(*values[: marks.__code__.co_argcount]) + assert not isinstance(marks, FunctionType), "marks must be a list or None" + if marks is None: + marks = [] + elif not isinstance(marks, list): + marks = [marks] # type: ignore + + return [[MarkedValue(value=v, marks=marks) for v in values]] + + return [] + + def process_values(self, metafunc: Metafunc, values: List[Any]) -> List[List[MarkedValue]]: """ Filter the values for the covariant parameter. @@ -14424,20 +14512,23 @@

    """ marker = self.get_marker(metafunc) assert marker is not None - if len(marker.kwargs) == 0: - return values + assert len(marker.args) == 0, "Only keyword arguments are supported" + kwargs = dict(marker.kwargs) - if "selector" in kwargs: - selector = kwargs.pop("selector") - assert isinstance(selector, FunctionType), "selector must be a function" - filtered_values = [] - for value in values: - if selector(value): - filtered_values.append(value) - values = filtered_values + + selector = kwargs.pop("selector", lambda _: True) + assert isinstance(selector, FunctionType), "selector must be a function" + + marks = kwargs.pop("marks", None) + if len(kwargs) > 0: raise ValueError(f"Unknown arguments to {self.marker_name}: {kwargs}") - return values + + processed_values: List[List[MarkedValue]] = [] + for value in values: + processed_values.extend(self.process_value(value, selector, marks)) + + return processed_values def add_values(self, metafunc: Metafunc, fork_parametrizer: ForkParametrizer) -> None: """ @@ -14450,9 +14541,9 @@

    values = get_fork_covariant_values(block_number=0, timestamp=0) assert isinstance(values, list) assert len(values) > 0 - values = self.filter_values(metafunc, values) + values = self.process_values(metafunc, values) fork_parametrizer.fork_covariant_parameters.append( - ForkCovariantParameter(name=self.parameter_name, values=values) + ForkCovariantParameter(names=self.parameter_names, values=values) )

    @@ -14482,18 +14573,18 @@

    Source code in src/pytest_plugins/forks/forks.py -
    129
    -130
    -131
    -132
    -133
    -134
    -135
    -136
    -137
    -138
    -139
    -140
    def get_marker(self, metafunc: Metafunc) -> pytest.Mark | None:
    +              
    150
    +151
    +152
    +153
    +154
    +155
    +156
    +157
    +158
    +159
    +160
    +161
    def get_marker(self, metafunc: Metafunc) -> pytest.Mark | None:
         """
         Get the marker for the given test function.
         """
    @@ -14531,88 +14622,15 @@ 

    Source code in src/pytest_plugins/forks/forks.py -
    142
    -143
    -144
    -145
    -146
    def check_enabled(self, metafunc: Metafunc) -> bool:
    -    """
    -    Check if the marker is enabled for the given test function.
    -    """
    -    return self.get_marker(metafunc) is not None
    -
    - -

    - - - - - - - - -
    - - -

    - filter_values(metafunc, values) - -

    - - -
    - -

    Filter the values for the covariant parameter.

    -

    I.e. if the marker has an argument, the argument is interpreted as a lambda function -that filters the values.

    - -
    - Source code in src/pytest_plugins/forks/forks.py -
    148
    -149
    -150
    -151
    -152
    -153
    -154
    -155
    -156
    -157
    -158
    -159
    -160
    -161
    -162
    -163
    +              
    163
     164
     165
     166
    -167
    -168
    -169
    -170
    def filter_values(self, metafunc: Metafunc, values: List[Any]) -> List[Any]:
    +167
    def check_enabled(self, metafunc: Metafunc) -> bool:
         """
    -    Filter the values for the covariant parameter.
    -
    -    I.e. if the marker has an argument, the argument is interpreted as a lambda function
    -    that filters the values.
    +    Check if the marker is enabled for the given test function.
         """
    -    marker = self.get_marker(metafunc)
    -    assert marker is not None
    -    if len(marker.kwargs) == 0:
    -        return values
    -    kwargs = dict(marker.kwargs)
    -    if "selector" in kwargs:
    -        selector = kwargs.pop("selector")
    -        assert isinstance(selector, FunctionType), "selector must be a function"
    -        filtered_values = []
    -        for value in values:
    -            if selector(value):
    -                filtered_values.append(value)
    -        values = filtered_values
    -    if len(kwargs) > 0:
    -        raise ValueError(f"Unknown arguments to {self.marker_name}: {kwargs}")
    -    return values
    +    return self.get_marker(metafunc) is not None
     
    @@ -14627,19 +14645,27 @@

    -

    - add_values(metafunc, fork_parametrizer) +

    + process_value(values, selector, marks) -

    + + staticmethod + + +
    -

    Add the values for the covariant parameter to the parametrizer.

    +

    Process a value for a covariant parameter.

    +

    The selector is applied to values in order to filter them.

    Source code in src/pytest_plugins/forks/forks.py -
    172
    +              
    169
    +170
    +171
    +172
     173
     174
     175
    @@ -14653,32 +14679,56 @@ 

    183 184 185 -186

    def add_values(self, metafunc: Metafunc, fork_parametrizer: ForkParametrizer) -> None:
    +186
    +187
    +188
    +189
    +190
    +191
    +192
    +193
    +194
    +195
    +196
    +197
    +198
    +199
    +200
    +201
    @staticmethod
    +def process_value(
    +    values: Any | List[Any] | Tuple[Any],
    +    selector: FunctionType,
    +    marks: None
    +    | pytest.Mark
    +    | pytest.MarkDecorator
    +    | List[pytest.Mark | pytest.MarkDecorator]
    +    | Callable[
    +        [Any],
    +        List[pytest.Mark | pytest.MarkDecorator] | pytest.Mark | pytest.MarkDecorator | None,
    +    ],
    +) -> List[List[MarkedValue]]:
         """
    -    Add the values for the covariant parameter to the parametrizer.
    -    """
    -    if not self.check_enabled(metafunc=metafunc):
    -        return
    -    fork = fork_parametrizer.fork
    -    get_fork_covariant_values: ForkAttribute = getattr(fork, self.fork_attribute_name)
    -    values = get_fork_covariant_values(block_number=0, timestamp=0)
    -    assert isinstance(values, list)
    -    assert len(values) > 0
    -    values = self.filter_values(metafunc, values)
    -    fork_parametrizer.fork_covariant_parameters.append(
    -        ForkCovariantParameter(name=self.parameter_name, values=values)
    -    )
    -
    - -
    - - - + Process a value for a covariant parameter. + The `selector` is applied to values in order to filter them. + """ + if not isinstance(values, tuple) and not isinstance(values, list): + values = [values] + if selector(*values[: selector.__code__.co_argcount]): + if isinstance(marks, FunctionType): + marks = marks(*values[: marks.__code__.co_argcount]) + assert not isinstance(marks, FunctionType), "marks must be a list or None" + if marks is None: + marks = [] + elif not isinstance(marks, list): + marks = [marks] # type: ignore - + return [[MarkedValue(value=v, marks=marks) for v in values]] + return [] +
    +
    @@ -14691,96 +14741,71 @@

    -

    - get_from_until_fork_set(forks, forks_from, forks_until) +

    + process_values(metafunc, values) -

    +
    -

    Get the fork range from forks_from to forks_until.

    +

    Filter the values for the covariant parameter.

    +

    I.e. if the marker has an argument, the argument is interpreted as a lambda function +that filters the values.

    Source code in src/pytest_plugins/forks/forks.py -
    242
    -243
    -244
    -245
    -246
    -247
    -248
    -249
    -250
    -251
    -252
    -253
    -254
    def get_from_until_fork_set(
    -    forks: Set[Fork], forks_from: Set[Fork], forks_until: Set[Fork]
    -) -> Set[Fork]:
    +              
    203
    +204
    +205
    +206
    +207
    +208
    +209
    +210
    +211
    +212
    +213
    +214
    +215
    +216
    +217
    +218
    +219
    +220
    +221
    +222
    +223
    +224
    +225
    +226
    +227
    +228
    def process_values(self, metafunc: Metafunc, values: List[Any]) -> List[List[MarkedValue]]:
         """
    -    Get the fork range from forks_from to forks_until.
    -    """
    -    resulting_set = set()
    -    for fork_from in forks_from:
    -        for fork_until in forks_until:
    -            for fork in forks:
    -                if fork <= fork_until and fork >= fork_from:
    -                    resulting_set.add(fork)
    -    return resulting_set
    -
    - -
    - - - - - - - - -
    + Filter the values for the covariant parameter. + I.e. if the marker has an argument, the argument is interpreted as a lambda function + that filters the values. + """ + marker = self.get_marker(metafunc) + assert marker is not None + assert len(marker.args) == 0, "Only keyword arguments are supported" -

    - get_forks_with_no_parents(forks) + kwargs = dict(marker.kwargs) -

    + selector = kwargs.pop("selector", lambda _: True) + assert isinstance(selector, FunctionType), "selector must be a function" + marks = kwargs.pop("marks", None) -
    + if len(kwargs) > 0: + raise ValueError(f"Unknown arguments to {self.marker_name}: {kwargs}") -

    Get the forks with no parents in the inheritance hierarchy.

    + processed_values: List[List[MarkedValue]] = [] + for value in values: + processed_values.extend(self.process_value(value, selector, marks)) -
    - Source code in src/pytest_plugins/forks/forks.py -
    257
    -258
    -259
    -260
    -261
    -262
    -263
    -264
    -265
    -266
    -267
    -268
    -269
    -270
    def get_forks_with_no_parents(forks: Set[Fork]) -> Set[Fork]:
    -    """
    -    Get the forks with no parents in the inheritance hierarchy.
    -    """
    -    resulting_forks: Set[Fork] = set()
    -    for fork in forks:
    -        parents = False
    -        for next_fork in forks - {fork}:
    -            if next_fork < fork:
    -                parents = True
    -                break
    -        if not parents:
    -            resulting_forks = resulting_forks | {fork}
    -    return resulting_forks
    +    return processed_values
     
    @@ -14795,45 +14820,47 @@

    -

    - get_forks_with_no_descendants(forks) +

    + add_values(metafunc, fork_parametrizer) -

    +
    -

    Get the forks with no descendants in the inheritance hierarchy.

    +

    Add the values for the covariant parameter to the parametrizer.

    Source code in src/pytest_plugins/forks/forks.py -
    273
    -274
    -275
    -276
    -277
    -278
    -279
    -280
    -281
    -282
    -283
    -284
    -285
    -286
    def get_forks_with_no_descendants(forks: Set[Fork]) -> Set[Fork]:
    +              
    230
    +231
    +232
    +233
    +234
    +235
    +236
    +237
    +238
    +239
    +240
    +241
    +242
    +243
    +244
    def add_values(self, metafunc: Metafunc, fork_parametrizer: ForkParametrizer) -> None:
         """
    -    Get the forks with no descendants in the inheritance hierarchy.
    +    Add the values for the covariant parameter to the parametrizer.
         """
    -    resulting_forks: Set[Fork] = set()
    -    for fork in forks:
    -        descendants = False
    -        for next_fork in forks - {fork}:
    -            if next_fork > fork:
    -                descendants = True
    -                break
    -        if not descendants:
    -            resulting_forks = resulting_forks | {fork}
    -    return resulting_forks
    +    if not self.check_enabled(metafunc=metafunc):
    +        return
    +    fork = fork_parametrizer.fork
    +    get_fork_covariant_values: ForkAttribute = getattr(fork, self.fork_attribute_name)
    +    values = get_fork_covariant_values(block_number=0, timestamp=0)
    +    assert isinstance(values, list)
    +    assert len(values) > 0
    +    values = self.process_values(metafunc, values)
    +    fork_parametrizer.fork_covariant_parameters.append(
    +        ForkCovariantParameter(names=self.parameter_names, values=values)
    +    )
     
    @@ -14843,46 +14870,8 @@

    - - -

    - get_last_descendants(forks, forks_from) - -

    - - -
    - -

    Get the last descendant of a class in the inheritance hierarchy.

    - -
    - Source code in src/pytest_plugins/forks/forks.py -
    289
    -290
    -291
    -292
    -293
    -294
    -295
    -296
    -297
    -298
    -299
    def get_last_descendants(forks: Set[Fork], forks_from: Set[Fork]) -> Set[Fork]:
    -    """
    -    Get the last descendant of a class in the inheritance hierarchy.
    -    """
    -    resulting_forks: Set[Fork] = set()
    -    forks = get_forks_with_no_descendants(forks)
    -    for fork_from in forks_from:
    -        for fork in forks:
    -            if fork >= fork_from:
    -                resulting_forks = resulting_forks | {fork}
    -    return resulting_forks
    -
    -
    @@ -14909,7 +14898,9 @@

    Source code in src/pytest_plugins/forks/forks.py -
    302
    +              
    300
    +301
    +302
     303
     304
     305
    @@ -15036,9 +15027,7 @@ 

    426 427 428 -429 -430 -431

    @pytest.hookimpl(tryfirst=True)
    +429
    @pytest.hookimpl(tryfirst=True)
     def pytest_configure(config: pytest.Config):
         """
         Register the plugin's custom markers and process command-line options.
    @@ -15194,7 +15183,9 @@ 

    Source code in src/pytest_plugins/forks/forks.py -
    434
    +              
    432
    +433
    +434
     435
     436
     437
    @@ -15214,9 +15205,7 @@ 

    451 452 453 -454 -455 -456

    @pytest.hookimpl(trylast=True)
    +454
    @pytest.hookimpl(trylast=True)
     def pytest_report_header(config, start_path):
         """A pytest hook called to obtain the report header."""
         bold = "\033[1m"
    @@ -15265,12 +15254,12 @@ 

    Source code in src/pytest_plugins/forks/forks.py -
    459
    +              
    457
    +458
    +459
     460
     461
    -462
    -463
    -464
    @pytest.fixture(autouse=True)
    +462
    @pytest.fixture(autouse=True)
     def fork(request):
         """
         Parametrize test cases by fork.
    @@ -15392,7 +15381,9 @@ 

    Source code in src/pytest_plugins/forks/forks.py -
    467
    +              
    465
    +466
    +467
     468
     469
     470
    @@ -15443,9 +15434,7 @@ 

    515 516 517 -518 -519 -520

    def get_validity_marker_args(
    +518
    def get_validity_marker_args(
         metafunc: Metafunc,
         validity_marker_name: str,
         test_name: str,
    @@ -15525,7 +15514,9 @@ 

    Source code in src/pytest_plugins/forks/forks.py -
    523
    +              
    521
    +522
    +523
     524
     525
     526
    @@ -15688,12 +15679,14 @@ 

    ( ForkParametrizer( fork=fork, - mark=pytest.mark.skip( - reason=( - f"Fork '{fork}' unsupported by " - f"'{metafunc.config.getoption('evm_bin')}'." + marks=[ + pytest.mark.skip( + reason=( + f"Fork '{fork}' unsupported by " + f"'{metafunc.config.getoption('evm_bin')}'." + ) ) - ), + ], ) if fork.name() in sorted(list(unsupported_forks)) else ForkParametrizer(fork=fork) @@ -15759,15 +15752,15 @@

    -

    - parametrize_fork(metafunc, fork_parametrizers) +

    + parameters_from_fork_parametrizer_list(fork_parametrizers) -

    +
    -

    Add the fork parameters to the test function.

    +

    Get the parameters from the fork parametrizers.

    Source code in src/pytest_plugins/forks/forks.py @@ -15784,20 +15777,113 @@

    635 636 637 -638

    def parametrize_fork(metafunc: Metafunc, fork_parametrizers: List[ForkParametrizer]) -> None:
    +638
    +639
    +640
    +641
    +642
    +643
    +644
    +645
    +646
    +647
    +648
    +649
    +650
    +651
    +652
    +653
    +654
    +655
    +656
    +657
    +658
    +659
    +660
    +661
    +662
    +663
    +664
    +665
    def parameters_from_fork_parametrizer_list(
    +    fork_parametrizers: List[ForkParametrizer],
    +) -> Tuple[List[str], List[ParameterSet]]:
         """
    -    Add the fork parameters to the test function.
    +    Get the parameters from the fork parametrizers.
         """
         param_names: List[str] = []
    -    param_values: List[Any] = []
    +    param_values: List[ParameterSet] = []
     
         for fork_parametrizer in fork_parametrizers:
             if not param_names:
    -            param_names = fork_parametrizer.get_parameter_names()
    +            param_names = fork_parametrizer.parameter_names
             else:
    -            assert param_names == fork_parametrizer.get_parameter_names()
    -        param_values.extend(fork_parametrizer.get_parameter_values())
    -    metafunc.parametrize(param_names, param_values, scope="function")
    +            assert param_names == fork_parametrizer.parameter_names
    +        param_values.extend(fork_parametrizer.parameter_values)
    +
    +    # Remove duplicate parameters
    +    param_1 = 0
    +    while param_1 < len(param_names):
    +        param_2 = param_1 + 1
    +        while param_2 < len(param_names):
    +            if param_names[param_1] == param_names[param_2]:
    +                i = 0
    +                while i < len(param_values):
    +                    if param_values[i].values[param_1] != param_values[i].values[param_2]:
    +                        del param_values[i]
    +                    else:
    +                        param_values[i] = pytest.param(
    +                            *param_values[i].values[:param_2],
    +                            *param_values[i].values[(param_2 + 1) :],
    +                            id=param_values[i].id,
    +                            marks=param_values[i].marks,
    +                        )
    +                        i += 1
    +
    +                del param_names[param_2]
    +            else:
    +                param_2 += 1
    +        param_1 += 1
    +
    +    return param_names, param_values
    +
    + +
    + + + + + + + + +
    + + +

    + parametrize_fork(metafunc, fork_parametrizers) + +

    + + +
    + +

    Add the fork parameters to the test function.

    + +
    + Source code in src/pytest_plugins/forks/forks.py +
    668
    +669
    +670
    +671
    +672
    +673
    +674
    def parametrize_fork(metafunc: Metafunc, fork_parametrizers: List[ForkParametrizer]) -> None:
    +    """
    +    Add the fork parameters to the test function.
    +    """
    +    metafunc.parametrize(
    +        *parameters_from_fork_parametrizer_list(fork_parametrizers), scope="function"
    +    )
     
    diff --git a/main/library/pytest_plugins/index.html b/main/library/pytest_plugins/index.html index f1de58cf74..77a0ed3495 100644 --- a/main/library/pytest_plugins/index.html +++ b/main/library/pytest_plugins/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/library/pytest_plugins/navigation/index.html b/main/library/pytest_plugins/navigation/index.html index 2da7e25f0f..134ab1709d 100644 --- a/main/library/pytest_plugins/navigation/index.html +++ b/main/library/pytest_plugins/navigation/index.html @@ -16,7 +16,7 @@ - + diff --git a/main/library/pytest_plugins/spec_version_checker/index.html b/main/library/pytest_plugins/spec_version_checker/index.html index aea32f7b2c..e5dbde869d 100644 --- a/main/library/pytest_plugins/spec_version_checker/index.html +++ b/main/library/pytest_plugins/spec_version_checker/index.html @@ -16,7 +16,7 @@ - + diff --git a/main/navigation/index.html b/main/navigation/index.html index a2c2480813..5938f88a54 100644 --- a/main/navigation/index.html +++ b/main/navigation/index.html @@ -16,7 +16,7 @@ - + diff --git a/main/objects.inv b/main/objects.inv index 1cde15616735f059a58d6ffcd70928fc5f72ee2c..5b33ff1f7d852927ee19f8bc81ee68bd6add08f5 100644 GIT binary patch delta 24501 zcma&NQ*@wB(}o*!V%xTDYm%ARw(UHzZQJ(5PA0Z(+n)V?|IuFiXrJ_I9d&iz)m44< z`7UV99%y_KpgNUfG!fBZGsZAhQF#*@m1>YhAfu9`g1S;i#L#^M zjtbJig-AXIA2DiqLqYztOG=1R@7|02u9ran-;LmAuG`_x_V)&(NA&0ElTi5X;J>@x ze_uP_GyhP(o{bvUg3H7P$hr80V*AmV1mF1n)swi309`LhQ&FB_@H0_KqYvo|3upB* zfwv&$ZWwk7sU?i|t;7$*KJObEeg;fGO8i^;oo4drpYO?2S^2SXwBc+Kfqqye?B~_;EVUa1h`t*+X}2EyWJ}Hd8!0uACL!UyPJ363k|% z_-wOFeEQ+N6mwnatYPXB8&e#}x-V`30``v_J@8T2os~exEl5s>?5AK3IA{W+DFU%x zX}@X34=L1uXTx?%pB(EmSyAlpSvt>IT9t)lR_HnrhAl#vTdM_S^WA0y6-W^Q|9KA7 z6oxUhFUYGPH7T(6_~HWZJtFWM^s66*`m@lDFIULl+#WkJ=xpFYW+Im%WhNH@m5KHI zh?b|D-@7;bPiVlt5lSEbEByPI2JS_#XM3kP<6m2o*(+ILkrNX)e@H!Jm6ai*(#H%2 zlUdl!H{)vU8PZf`*4ezar2f~|m;ujk&nC#XoUT$vC{Fxv`bo_2j-mcN9Jg*G^-UX+ z``)@Bh2PES>5%s!0Vi)8H8frT+lC+ znw-`ZKuO7PxIox4FDd%1sq%=|vh=6T<8KE-tfxdO15YT%`D`oGsED zZXK4_J>@4WKwf+0x9s*^@t7k0{JpmZWnn9oZ?rPDhE~4es+M>_GhK8c-kdeNJtDeP zi#E3`YTfw*qx0vFj~{n{4Nr6Hhf>9b&9%_tgJO&1Ypxhmgz-dS$X1lq7isKQ)bSry z+Na=HE;iED6$`(pqTgjJn@*)SLL*oT3mDe}jXO&C_RF}NIhKD4V7P2F?WqeDGX1+d zQO9t8;D>UB^5Th%+EBN2w-_y|sh9`BM=(^U{?Rqq{D`!~yKEx>8dA9|VE)XXPYJTo zc&@OW$~oHfaP%UnS9A_Fpsl=?>ZB0P-L>kx@VUg;FRNai<8HXNc=MG~o=t76R<$pe z{l=eiK=frQCFoz~gsyrTN^gbUSf{C8WGY&vi#FS+uOS$c&2e>?p`M%{ZTM!yijlP! zX#Hb_KH+9+!|RWHdatoFX@OZEG(=n>8`qIaqt))mzSnx>pA)$Q@XXcG!$+4!XQfX>>M^w+WF_kT^XMHVJ-^%Z`FVm2x6n*<#3VNAue(55z9 z4m+r4@AY(`!8EYc_TZ*kGD=$+v)jEV|NPoLvg?Hsp-;g8%Gd2Lz(HxnF+9YX-oW=N zqpIqcc93AehtM&kJ8sY+`o~N#JTjR`Aq;tfBRR^yo<)%}MO6aA{>_UaSIT<*P=C-h z@gg?P`h5a{$MCWA+BxsNivS@nrit|9yI|S8aC)8B4my!JX<3}jk06T?u6h5!PnenS z9whvjv2s=h2*`B5M20a@(14%VG(Gg7j*pDx2NSW0qPxBODGz2y7o3uwFZE7fN)cTemP!pLt*D(*@qYdkg0Z$@^_+L~N1L z43_qa&WhYx+671S4~7l9O|~=bGM*>`U!T0-MdQ*sz>o&x2v(R1#<`pD-Io}uO`Cnv0&5-Y^Q+Ww#f08utS%;gVlCwSVzN1pGW#{ktwVANKeFvV z%X@!dQ z9u|-ebON^gL>N5@kZ^tHQ^VufiRL)rqv#f5c0O<#j$ilAVzHMWmK6^lw2761n@q#g zI;%cenE!|bm(+i~?k`;JC%t$!-V>@VSlizNmUph_ThrHO7yZUJssv>~Z5rB*S7WY6 z)7#3})n(?lx#6H)w}wZaSze6h+(fz_FP`MuSE0MLr*r4)VEV%4wO@md_hsFZ)$^I# zx$caeotZk)pNrn#?l*po*){a@Xw0n(^PbE|Y}Yd6ZRWQ_0KPUhp-qC27vz4lkA+%_gn6TMFtIV_V&S z+PX`JbrwR6y2R*5B#$1J+f-Tn8VpTB-Ia_t=+fEG{+72Ie z&{||uT%1}LE6RMPg@cc8R!%Ls49BUpM&Gw@teUFTxN_lM72 z*j+#v8s3fm0)+vhMMoP;0$+N#%}smJ}GW(hX0)_zTyXRdy1tG3|M z3`H1)@Ye8bHhJ|OfVhu^bn$4f#R`wmi7i^Qnfq>yhzY6p_0zjVJLO&IHxtWx;v)ATTR*(mFf`=tL6o4?R$( zB>NvEKwgyfx`L+5jL+4ZXOi~$;PLVN$((;Y4sh=xYXNw5#22J}z38pm(W>J>RFp-x%#Pm`}bq7i|IV79D`z0UryfQH{iV0SmZi1GEqOXM3IFVE5zNtbz@0f_H%gzj{N5TI>B9AKS$mT2U zB_pChZ=f~w26({ z`IPBDO-t)d{HLk?^(@#}j`gN$Ni)hTX+^PyA5QgWkWp^8QDx8!1xa^7p=bX&aD9$S zK#SM0Wi6uy3v=o;4~f&x}mAc=QtXJK&HhJgd)bd=bQ4P-vcysOQY&5@Cr1P3Aq~w2OL1Ami>)X}0uTV{a$vj6=@22QY`PbM`#I zFv@P^8I_0kJOeSyyhqd43RV07$;i8~BO`wSh3X~hQ!8@8p-C0kj#w)R9BwoO82#PC zxJ?1IDG*1~LRfm&!aNicvnhEcgnfbK&tVI3r}Pgs2y0UpI^PZO%4hbQ8C`F;`RUO}hc_^You z=Rm-NPI7{GoNuu4@jA6gRBUXpp=}i%3Ea<|U=o{%3lOL2DhSi+vkSvkq)v!Z`a=%l z5NK1;LN|GKe@Jr!(fw9{9^Ej;NEDnC>5W|^gJ-nheg;Oh*eX2cC5=ZO-M@N95>(5F zm9!fts;03r1ax0=CXM+l+KL%Ni~q`VH2 zk^?e5v*iRNRC|MYAF{)FK`@;wHp36sx)fBOnSxg4QG9UX*=0wdq13?{kKy#&*wt|C zO%M0A@WGR$VS^C2O#u2+6xG>=Jzs%e;Cx)mBCsjMkVcylw@;u9O^oz^1H)AKVyy1E z?C~FnGNHl8Zx#mbidvz;HH)q&2#9{-jJTs$V#p*S@V1a$3DDwVN^)AX=#uAsmf@t2 zxE1~{_}T~q6TsX`-(jvN!q^(~EXWlP3m$5kaS`YgpDSKsYi(VC$+ z(%^WDQs7ZuG?LibqS^o+?{6X~mBYe_Nr4oi%r?V95PHECqQK@V#;{djzKaw`T_s1# zhh2bJe+2@j&C|b_W`9xwT+>5PklgXFIJkz-z<-q$NHEXcct0{oWRG(UDTi|*2T(0W zuTkH>03WFHLpA#@w4N{sEK~h_Adyc3s10ban^MTBFHK-Wql2yj`k0qxGyMF^GSn*S zZFckQ8x!CkV&?_2d%r_y2-a~{95C$*3rX%cD2%7_2?y_ST#H5DQ?X24KOf4)TW+ao zF$k7}MzNP4z$)`>@5cq_olDZ9$Tr6c_DQh$M{GBh$_FP}or z0SXq%8z!+01A}iC5nYXd?DD`sP@2w$MQpO&=`SC!(%pBbj(OLgdvOusc>V+i*ZTGi zAS!odL{U2ZgHOz#d$Y@zIPI|>vmv1snl-`(@L@0W;pco{lkY@L-10-1Kg#z#`wup3 zkU7L=108mpOjqq-Y|y90;6tzbXsm|N!zA!g*z^j`&8ES_UgK)Cs+2hFTQ~O{UZbGPX>)r9-H)>$qux6 zsfXA#vBYH;_>{b+EFQAO+{O81{hux2$Ue`99Gv$|6y~;?jzQ-|2DpE&KD(a^cnB8# zbYH{)+L*ShWxM81kQnlw+kxEX961-~=+P zto{y;m-)?H6hM*OnJn*py_?w8#*?c0cE=~|vaOf-A?qy^cnJC4(Zq(v#pLHOx{U;@ zWBGa>2%Yk)hR1#Ul)8R@0QJSbqh02bi z(UTbgQBi>zQp2!kD{;MnRGR7xNZL|%u9Ry1)JuwQ$#eVSye+op<*~=$fi7&FqZC~b zEserk{VPLp+D5P_yj$g`u<2%7r`cJx%MZiu+F|3|Nw7x#w6bNr_0W15(z}J(8&ai7 zkalGW*oZ%b`piove$9Fpr+x38S!G-Sn!i)be%7tpmymYR#jI0 zTk)#Vqs98xy-{+`796h=(Fm9=`vMqzdzXjSb#k1```=+8nQ+Qm(tjcqnC2e zRLd_VsPrKpm-Lt8BGLx$XLI5kFNlRWF_R%ePqh3tB$TfjWO1$`Pw%v(G%fvY6?`Sk zE1MNkB$R4Lod7vF>Wm||o&^)sf2je3Bl8M@?X+k%Vv0`?=XXwC4^Ftv-+>-_WvH;V zu_YZU7hraKpF9KHMI1}H<{^gcN`qvys}Qp%ENSd-pJ`C5)kct37zkovw;Yk0#H^`c z8`y89XQep1ZW?oG8hqG%>(r7*Uio#NUDuvqI^>^qHr=&)AcWY-F=9xeKGyv4H?s0} zLALx#T|XZZ{F~!%+S`^c{_FMNVR~nj;b#JtF>I{V%~~ALO%}obOw>M+%yYYFUw9jT zn?m8hDR`APa6q{^9vWtps8|PlpdU5cSB@*ql8Ot~d}W2d%5>0Nm!)+PK4sVq4s!B8 z;*9P#Frk!BxL^=kAc-+8lJH+kYwLi86{88A*>f@(){|_XwUyv%$8pALc(sxLDhbUw zbVNFYMqmc?-3xl32qP44!m&aO!KP>%e?geqMhdh%+IuruOi3av&gPtGj)M5@cvtfd zHt)ez($Ikpgz}@j?MZ3xs%fL8_IZ$er@D^Yync(rd>#MG4h**m@Zu`?glVp<@SjV0 zshKf`FuL>M8*TE2uYP(CFKkgW=rf{xxBQ6wfZWLTRc z*5kmk46nE*4*LW9BK4Mm&oUb=FhQu;8CnV%c87kvPpos|LKD~m{>jVYNV{PjPvk-JY(Jq(Buh3_KaE(AOmcj>z9${zf(G!?! z(O3LFmD}wIeu}{tOw8K8Zpbhu6MHaHgyk$CestiG58dBbhA*Q2ZB9d@|ivo&* zlCHTEzCM>y^wcoY-~0J!Y0@X&g?5N5e6yju4`hZ~B|m>m8I_%U7sA~YOP#;(u9(?? zp->#MF_iz`2o9V+Lx~)$-P=NW6bJ4EQ+V!RYBXs4pNl-fymcQgf$30+W(C8i^kYgV zeF^rb$UM>l?AS^sB8X+oFEeV`dgRjgxRA}yce*pSjDS^5#f`N?-@Q1y7avgI*e6r) zKg%(3iI@hOcJuO)ZbNeI>pCl-g(aBBf^fO|-bjh?^Bd=U?5}HW2jWIbKV5hD=)mri zVc-RFXM|rjYHmPk1D(8u>G5tZY!CuqiTT1@n8xKS_hCcg_Fcv5+&oIDk3-z=-KNsv<)&Zb4QgZ z@Vy@k4=Dxz9jD%qi@yX7$2qD-z_Oi76Jc)i4Wys{%w0JUvn({k22h z26Nz_TN@BT>-$qrujtu&i2(h@)vvhQmPcC%|Am8=cq$|zk_RG9vo%xemOjm3t7I$~ zG#L<%X?`y(97PYr|1OjvVa9dO%I~CaOG0!No%9UjrFvczi+Q4NMB>m}gbl}~n#UK9 zL3YJ09Pz}=fEkIR!U5(=`qSb@akk3Hv0-Yf#bpkeSrS8--sOQMbcHrQBQ|~7zN%8q{=Azulq9@V$bMR~+2=-_*?eS+AB28sE3~I-06h5CPbiN1Iyh} zT06Kog9o8>aGxxGVHl>tJBkq$JvSvTgj*}8_#@94kbsWKOja|#)8AIXKXRdTg*W$m zQ73%S(nW8GRE-)vgJG13H}ND<2Yf!#MX!+yrazbp`;hy&R*B84=nPj3J)?%Kl=L3l z@DtU^HNft16ONwhQrKR}KQH5D8!^fksNtT>_oH;M(~$$~yTu(jGxSl2qp#_>Pte{d z;J#scV}MB3zMGIC)SVX*UZfj3?yxyu*gd=T9`QcRJ@-Bb$X5b>pF3YX6ibht5pm3| zKX);6`_4sZ(G>Y6Qy`&2v zHPD~_+9PK}d`Oo9cQL3v;u-7a z5vc);8yz#W-0Xjvedq9>X0z*H^TmclwX8~$?mf>tv=u;l1ba($5|qara4(4=&e93P$M~Y`puAxSn#t27;<%M7GP)xdMuE=)g!kE z?tcS(avE|uK2BH=o(JbQWq}qxMz^i@eue908S&ShyI}Q?PWfeIL610S#IEVQOl zyue;Sfo!=0=+%ja2ln(lW5Pe5dBD_}5706vhyz6l2cB6v51wJECWpmFUl)LU!Jl z#}D_sGeZrY994!FwTo_tBBAd%42nlz`}`zkIV%O8c_%es3wBY}R8M%!(wkA|4ZLLrh^cFfmxvjA zvX_uq=aZL^IUBL)e(V*FX(9xW@+}#{V4Zzn1+OwXt0gL7|5o!YSHh_}cjV1(M7?jD z)_4liRM3d{g?~~NY@ji(Y9zc`uf`D$si3Ah^^;Ot^&eZ4ELjFPSRPr@5oH|2f351;qcTB=! z;_ygjB)KU*Tz)vHY&23}!>UOT2b=yl9fyX-)x0bfv^0d($TtuDHGCQWtjqNn_MiNd z)no+5YV`iemr`M_r5V$5>QG=f(5c(;GeN2X0m%25qgNLM=tx`8O_AT3)sPl6C3)P3l&Z`#4YRAJ)40_{Xe&sdbY6`5^oV>=+$`-&7(BFOlDEPT|fke^u~ z8b1nZW3cdMeqq*RXv8uy3ui-h>W92dBnDTYkQG|5A^rGC*yk=yRqOAy~ zm~#;$8Y$m1^}8oYaK|4)U%UhkDq9Hq0d3vqD(F2O=&SCikcxHNEG9(K{+Y)vj!i~d z#JbYDmqrhw76)b(##;V9vQN|k8w<`16%+meU<7hwqWX%ng2{B*OF@suQ2f(H|M4?r zUr4Zd_asPVNb}_mK8~=o#$x`Va@#`U8wm8sfwtOu%kY{4<-ZJ3}6eR&HlB%b4!mVZE1`{oOw>pQE)QUU0 zTG4)P1;c1xdj#nIGw#v79L)vk3e(K6WeyCS(Y`%PH5(EZs*(~zCS!=@{fyuwa zS&QMc3Tsg&4Id8OhLG3D#X^%9z+p6Fsr$=CZ&%jZ<8x-ly9{cDho8)fFXtjTXzD`e z@CpsKh}cimej&mps@+{*qUV`r@|cG&s&AHC7;T#P>&w}87~jT5`KNT5BxB;b`MYU# zBy(eD-+!gqusx+M=toiQ%U>En@7&hdg{@nrLtU<@)KxD05=L>#yiHLkM*FuZLnvulv zh}GgKB%`%xS+d-c!{&w7CRSRuks%WzbL}XblQ;Zv7&;}xR<`N|VE15AdEVK+iU@oWXgc`2r(grTE z544SXWJO{}iC%JPh*=kW3 z6Gn9~M`~RwGv6*+k=R`J&X>}#@C{MhHNU{qVoy2^f*MB%Kh8tN`rn`HUIwIQu_yvu*v?++2zJYmLr5Jss zG96My6QH4LV5I1OC8W~AEGmx4VM79CfB9+^{}RkKosZx7u3_($;v!jY{mWb)R<7R| zyXhhz(ZPoStC^T)S+UJ=?fw^gmhXyZgGyGoM#B)lqHf2OR6N^OBY$5gEX6vCTWK$c z=VVd)zWl2J;O5hFZ{Z=+d*Kj*7wl@*`Xd65sb@WQxANOsrZrX4+R_!1|Ds|EljQ== zRh`P3=DCJ*8MT&)U>S9wJ~L?Izz0$)Xndd&VUAWee1pHno#|aM|f_1GQ%W=CS;8RLG0vGtR2NUissGdeY1_csKk+*2XYV z-+NQ%$FS2?L$6xZTG>X0yFh1qhOWToya?FC<2BX9+IZW=)#JnAIg=dcHqpfJCmS7( zu$9%SGfS`DWR2eBdfPjCD?~Mys%|P_sYcU`pJb2(89^BQ+?F>UJG95jTdUFB#F;Ns zFy-ykuj@K8YT!J+(?@Cs)H1B_n|o@@DBsSIU3)ThYRseB=Pr`nAM`1!m_qTt(`$Nl zn5Y1GyBKs6PjCGZxTK25HA z!l$7W!3=CGum1MLj`bg1ok`z$1$8&eHU^0wpQz?dD;aD3ov&bGRE&NMp_jMJZ#9OAN}<58!e2tcIWUYV5($t$8xhxt#lN zpp&*pQCBUV$oKr7JMMoSN$UF4RLZ|3>63&0n_qsLT$b*1t`C3fyTiEt;``*<(D7Xv zXOsbzB^;&+460B!Vz~yv1=eg?thKo0N2&r~TaqrNWxx(~&Xs2#B%5of8&;TYL}Cs0O@IPP znJpgY%0kxIpl#}Bk2x%zk}GES_J173S+Tfk;g0!(HMroP1rF!-Trd67B9h(HK zp=1$&x7)V$hkMdY6P@yYm1X7!L?(dkWOxO>dhl)7eUJHnAO)Q9RGqX!X$vP)yd!uV zXYW~FsLirbh#h<9L7MZxLHK!KFiN@~>KdYe;aclbIeb(o!CeLqC8S8vy zD`q^pLi8t1Z{|10Zue{9Q};qd*Vo+_XQWmFS&Gpu$@^x2md;Em9a^`Xpo};j8r$1M zc1J%UtMeOg(jBJ~A{Cq1oTPSsNPAXwT~B(FA{QwDZ_Y+J+fqx`K2D_=yq^fv zcfb!!8+Q<%u1Z9}QMv!X3mac8{XLb0Mlrq#)N36yA#XwV$q7;@_-`DybKp#+`N--a zCt>K{QRImY=-;dsZ}S59)YX0EbTIt$3?oS&Yst3E%l4d8-DT%VDgsP@#9^CAme zjWfch#0-B6!BY)1?*!+2c@Ek0%qkz|&gE0B3HXU9DjKoz#*5rsJ1N9n>p4pFuaQV+ zUVO2K5U+S7XKFibhSU+88#c4A9gKKC8#8O(C)xZwvw#tPn%)sF*cT@Lu#2;+Cc_8d zld+^?mWtleK9Y?YEK!~k`RDQoI89v1@vcf|l{yWi+OrD@#Jw%xdS4sF)zHgQ_tP#_;kU|OgF zndd!ss2U7o6rU*w>$ zL!9A#(`+{7P3ISHVYaG8#tw1Z-26B9lt@noW>7DX_b1f+1TC33Qa^VmfR5fuxJtZb z7pRZ$A*60toDDG0c^~ZZ(#x!_UWbUJuevrbM>=1PEDkzFp@H#6dpcyBRAVc zV~!90y!s&it~xok726&ITkBRMuCaWP20x~5Hk;ub1}5be;wIMhFH=lmDq$xA3!)y4 z>1Dt(FKuD0Lj%IHs9l!FJI$;+W?R5bblRm|hrau4f21CKh?Ef)fWL9$H8h7UfzGLp z#z{42(JhhM+nQFho*AE29@*TCS2>)XM$Gid?V$1c51yJ^s|7uvR4Thb!0oT@Bx;r+ z!Whx5oEx1lOnZwp>t?nS`RBvz9)$bl+XG zVL1hy$-Bkba?IQm7(1zAAS(L8z*E?i|94yZXQA`Vr<>I(*-nr3yg9RRO7{#W{f&fZ z7xRp=$9?;KhTb-bA||@Df>x@P#hRyG%UhjZ4SZFDZC9Od<4w6CE$j*xjN8DiFJn0G zNOM1xH7?~tfZ%eIKD8IG)$nht7Z=i>KbF7LL$~IqB;8`@0Uhb(MRlZ?%OP*ECDJSZ zepYm(Fa}RJM3bsN-<4#8?jJ=uY!w_&s!2Ha0o+3sRU__S7sWs}=8}K5ggM=I@7LF) zE@g=W#k!NvLQL<5CyLC^xq=VbxnE0_MdZxn{fylF-W$8#AipMKbNf;mV2<))%3Y=n z6v|hWHZ1yt0SBG@NLA&^m1Jk~oJ8Z21>+T6teRcb$Vcp!l@;pMLsS9Em{_U)0N-9I zLH%e<$%e0W#@k~e{K~Ok5wsxf+z!p~CT-Rho_o~IQP;AkGrk_yMah-2(lNdm@AP82 zx!B@9@0Eh8>e{dgfPa;sp0YY@jPrMupt^zz=JB1Y7r7EhgP#zj&SJ~g9? ztr!*IhEQJsOG-Nm_32mLz#>%K`$JCJqeS zk3<-9z=u_A4g)g)U%#7KfhQH5Q{Z1}?r7?_v*NSi;eVga z5>0s#-RJhLEcZs)PQ9F;dN)>oTLZ4Pmr8BH0lpsVjaCJl_v0y9?3~T~yvYv4hZLF@ z7LBrV#L`N&Ys2PH4*qD>=FMR(U*jzfv>7h<-m9C7e>qGJENeEWMNgdZ>qrcAt_i{0 zjPY9){N=d0h{P`PC;Lgg4@h`USVP|Wb}Lnh*KJrqW198N2;A{ao`U;SA4Ql*!!sE|Lgu=HT90{bf)x& z&9|0TYg4WJctC~Gg3s`yp`X`0mf8YM{)q_j@Fc+owK3%A`gEYkd)TmqrTRSea#b9* zn);1MquV^OPYmjE6+vkj8z5|&3?;JQ?vdFI9{W!3^72#DHRjf>Y&@b2d{mV=9i$l$ zkoetx$&UMm24c#7aq}JGO`4aO#tirUbH~3;kicEM7wJ-3Z#F*olGUj-ec;Ed1U^3z zadF+Jz}gmz$(8lozY$r9UvpK|7)QAFnJO#Te?%QMVoP)jn&-(ZBLTylR^ppmV_yb0 zNxUp|pE0DtB^<_OQ)4$?W^Z*~zEAdWm=6+Z^+}#w1x*^hR1EoWwOp-Ex;Wnu8dtl9 zDXjvWJM!Y9FzQ?P<{;y;XAufT+92xkTt!~h8kOqU9>{L;oQ3H}7e=%HyzTa}<%L6L zJlR+3r#j#cX8uz`0TBN8Q%~8pzByWY6~c$m<2$#e60Eoo?*-+@$}q@yW5=DLTg z{3A3+B!H?VrudDh!`%xO-ytR1<9UZjIm;-1u&<%zu;*gP03?MfUGdeR$|ttgh2sZ! zfnM{Zy=x6y9EZkx|HB|>y-*GF33iTF>woAsm%`qW>US3+K|Vm{!Bd8uz_hc)i;&9! zmDR-~HK@I4(1;>v_|mwvDBhe58k$w7a1E42T@FDw+&I6N`sa%EuFadc(Icw&X5k*3 zd>}b%urF~?0bqWJ$Tq23jRcSF@vVit8;a`kQo}+^nu%`{Shf%Vnt2L?Y~e zS+w(u{mExg;5!~CxFqp9tkHKwY;f~?4qn0gFCVKHU|@4Ixm(z_Suh9I*sWY-Y7hLC z1P57}j(L>Zm*|6o;K1SGy5==xIQZ=dlHdL=H^sVi`ee!2rtBz#0VNPTai_wt5oioM z(w**#AN?v&Lr|Uz35+xADnKHxUXY~{Nuo`cP%p5fn}WP1G2(uw&)J@Y2sb(kBix~k?)-(DzEw0SDC>oT*aFr}DKuJ{gUACRnd2}B5;FeJ znLh=bOF3;eb>Ay4Gi4C8;ZnnBKb9Xur#@B^XxUs$y?=Qv=Ts8A9F4TUlunBH^CFUg z@>OXYmj7N8MBld3fV{|*uhYH>)Wp!wH6RKAEL>{>-Q_B0S{h)~`y+h;VPG=>yIXCa zj72LoN1`jzuVOkL2S}+aG^SX#p3sJ`-q%=2cs!`ZT5htF9yj_?$Fv;0kN3ET130=2 zR&~2+j?rQzI41sQh<@V4G|>xP^cwIbl+*zn9m$%YA&j)abNZg;ed?v+$*^V1i+td= z`6EBNXT0Os_~@y_r?;m>#tQ=9)ReOPGbwvadUE?ni8-Dh-d8qAy=6uLQ>Tqu4y~bx z4!)Q#`OIPrSB~**Ui{n<2NEuUYd31#2n2ep!K&R@?k}oH1^7eUfi3+a4zdO( zX=|hOO~=$rA9QVcSkJ!kju4w%MX~%h{YHC|EMOY(t8>R>ab6HiNzn@{BN`ho9Ax}z z6jaF;SO={fBT^tCI3T*fDQ@Nx?v%7+Xnz$qVAtoip z^6b&r6e|Z&*?Sw@q6(i}1rs-Z_Jm?S?Cu4d^=}hYKO4GOcS2kN3GQPUsKFSec-Tf&t^vXgC?4~med6G%TzM64>43%`I$^49{R@cB*P|2DP+L5!^(AfHlO z`iIK^J~bU%?va6r7 zEK|Fb#b%j1|JN9;YCM}&m$>*Ey=nqm*PMH2LUZPs_7r(F?hXAfCs~Z*=xr;!?i99; zMb3_7Hm@?<$Dh-u-K`1or!G}%nRce@b2;C{r$3!uoy+p3x{~BgtrWK>rZ#uZ;wrAm zrIdNC@3nCo&3Z-K#)g2rr?iRk|3LWhwbPX-dE?dUyI5R`Dix6ti<%3v1;u7Pm!jij z%O6<`>@k>5lrbwu)VL+MgJv!6=hQfJH*)ExYVFimjeE4-kMEFAZ7rO$&?^ix^FVa2V~zR zmS&Sa=%il?#|J{+C6^4FzZvDmI3p-;mE79&Ick1WNAguQBS~%HqbbB`HKQqCm7M?d z`R~@Ij{iSRI{!>2?YkXN7quG`zAAT+oF%@sY2chd*!<~dYZKV1pouq<|Fl@^4ah04 zi8rEutXS&~$SJ3ZH-i69vC>kx6taRL@rmhjHTu$u6`OG z7623$?`pW8u6?P$Yh|qBZ7KNBhL0&%`I#YwJlYitxw=>lnSI-+?068}B-+l^*RI6I zrRoc-!fMA?Gxz^iyz<|ori`GCS_fJiT?Ni&%5(9utevbiBr{}tVoqSNRwswmp4x$_ zf27-QW$LFF$jUb*P}r;yJjkW!->@=36&Hw}y~z|Y9Hnlf97vO#W|KRJ*^SB6Hh6k> z8pj8S!L!KnC7J)4)PL4^C(#xFu?n*}0x8F9R0YpB8&&(^??s}`;5YZ@U1I)R-M31g zqQ-CG&%46BRjoZmQtVkz*YB~~#Dw}qqVQS@=t67%fDJ9T-RH9F{T!hZwVPEy2$|W< zh1B43SGsTYJ;T4DNet9@q6}>0XDnniK{hEtOTdD4u6u(iT!tVB%2s|l-MJVX0+JHh-TE-2kCtD z*awGT6xol5Y&6*i>wHw%3x{QN*$3%pl-Y-bWVG3b$OeaxyKwU@oyB?~yCcXrZ^+Wo zK(`Oe%z(Gg(fPo)AI^X20Jskg$w0Ul(anIk52w=0QdaLXaX zGNk38xgN-JklYVnxlp(UtsF$xLscFUk^w3Q&CRfs1A=2P$^kPo1Qi&$8F+GFj0`t9 zKCTCuTqKu6OAZi@0VNO2$uN=w0zY`3ZvgMpoD)i7#bSF_=rb$K>ED{H5d=b%`9WaPcRmOaS)8Skx`BGcm_&8HhGD9 zhZ#T?fO|NMr+Umi$eYUZFu4g&hwbcepEoSPr{&_5->M0kPAr)OvDG31?!U@M}#98 zCZcnf4-*mf4<2D|W!GaIqw8dvn9F58O+-pZ4n^ zvpz3Oe-<9dzy@mt2(I901T16gK13|z>pn);W9&XQ_v7q-I$UGzK33P`?Orw{W9~ji zH?z-uL^yxO-F<}a#@>BY;Nx#em+_>oN8$Z!E=S^hWH?6Sy@XEYx%-IRk9!B`?2mnm zeLY^xHugyFBUkA?`h@k_(2SDDFmtEL!A8p-Afo$`{TOKHL;W$Z2*&>7aFGQAW8j@f z2cuxIgbQP!9mNl05Rn8FV~_{7O#wfSd3HdBa1?(gjlqPEo5r~T6v25wH4fHkgf#{g zNys${*-Z>K1`#$W8)F3nZ#`zC{oPCN`3DLB9Jx{ESmG}c9+o&p#OFF>5plVXPQ+xm z0ud3X>zG5xg(SQX@wtg4L^L>p1`!>6d?05sp3+SKAR+=E>q~izV{|>37jwBBw~MH7 z4AFmubWTR&A{y9%_prfeI_o3rL%JDp;GhTv2(I901T16hK13|z>^?@dR_v7t; zI$UG!K33P`?p`(|WA8pjH{T)3930ZVZXa$>J5oC#srixY zaHQtXE}jB90*z$8oqe)L#DLbtbav0ykFDt^W(nEzu47A@tv>VecH?bc$mSa}YMJmp z#Q$L%V1W10kBOI!@dDAi-Bqtes-1uR-jDn}NuuCy0&TLPW733p$0$6KC70|Nu97A|}Cmx3pFE5J2ZdmC%yrP{FnZA8=7bY`7dkLlMb(Fz!K2$NNmdM@Dx0Y4>#46eRKmL;-*%6~QEGmD9Y0G=0}NPVd31zST#dDAqb zp4S1BccrLitTrcpaxzq5$Ed(?7kl9fQDY%a03&LmvR@ALbQDxv##dQ>kk0*W0J6kra6C$4I3n}AJX`F zL*f{2$lZ3@lH)FXWe;kWkWNh5P|YnH*wFeO8}%TeZ%F@+-V@;Zn*PZ~VFaGJxTD2Y zr;TD0kv%yiu?@3?4a`hb+tMmKfYVr=q7}(|e5F@yOMaSBH+PL##v$!OSSA@>{ur4M z1rL70=$lkJJN=+o0$6|O;wt>^M}dDxuJd$9Rs)8*6;-NZj zg%exTW-Q~f_oHvpV{v7t{282GM5|_?ckG7#SvuYqsade9$K>x@^9e?TFRHZif&QId zBR@$ZgFe;GfH1mawRZcps7)Xji8bEMfam@HN@p_@7{R+CJi5o0S*7_oDa)MW*5ZY?8a#q-x_IB{G(B# z+Lc%Hef^t`j)T*lSA^ns+%GWJx4-?G=IeeQS$cL8?vH=@swSb5=u6`)vP+TuSk0~` zpl;p9=-v!vkd1%XoOo3}`$hMoDe&75@4O_Yfin?*v-!C}p^Ku&ky2wHmXo|#<+{cA zNnbX-l#hNKY`kO_`dex0_7}%nb$;OaPb^d}??tC-*duxN<6{(TTw{dE3kzn`%aUNY zF6n|`KO28-Jd)?mw4-gFA4Ou-EJJ3-CcEQt4W#zP@m5^#F$Gn1j|gEiB!|tbN@=Ta zE1HT?#ut7(4EwkLOh%SG|JF#8?0>Yg@lJ8>IjV>{t~9jsXml6s*cu2gd}0_@0UCY2 zQs)L{pJ1@}Xl(g6i9)*=>5dNCM!fvTv`)lXLbZQ8d0+~~%U9vEiCOY9iPhR(TSXJ% zf+a!L#pPLLADSJm^2y^X_USy7lNpX7K)om;^KABeQ!9bWP1Y?$bxgD7eeVkCqhudo z2MTmoxY;DDo?p6GiK7GnlRr!HUvL)$T1AY>?rBT169N=3R9!;HzI|!xzY7k}dY4KS zlBjL;M@5=nDmCwifdoNRwbsf9LOyn6E4OpOe2!w;C0+ zh+*50KBSn{o^oW6tdXbNvUcR~oV;MGm%)D_UF6dIM1jm(Smqjdf7&HMcHn%o0u*ft zWw&|=`TdoTxaKB5Ssx{Ow3-C{_5FKxhadZclImkaG7>|nN~>q=(G(mWKB3&;0l~RDYleXiaA8BZJ2iODq(ya=Tw)CH~HqxYja7ecZZqk(Lqrdan0+akBNHA!hy=Q0B zF^t$MQ$9dpKYj7zmtyS-OLnA#f#Z%8of-zFnEsIxxdKY>)wpb|Ar>}7W53&kr$gcZ z;Sff98fgtrL76b8x4~)QssG;p={B(s-cpwz@iCst-2Gdg2}{-jIVI1!3#}MQ-+Rz8S*$u3Do{%vN`iE$fK5JId^HweP0?7=BOBz+~HPHZT6+nV@4tij`lq^y@`UB-u_S ziM3qjc@N~7w$kr}*VDNLWBY%Visv*oI2P{&n=`?xYMU1x@|sw0(ay0`v^KQM-Z0y~ z-JH%*eeAcjK!7faJ%;rk!d6Fv+{JxAhD9N=K9?N(vfG|P8S)f!tq899 zk7012QrY`aSiR`oMka>o(a{E}X4H#ud3qxK$jfD(kVXn5I`}*9dwPE=F+RYe9;R;u z!-rS>-+Lraq1t?mRm|-vVvzz$%;cxX7BjwPpG1d;v?h)Y+y}HkfTTVowd)6j{=>%) zAHDr1JoYd8tv)s+lP~cZqgZ`ogm~?rY;;TZM|Q{$*>~S;V8%JC^SS?#9XlhDZ`ZY! zOV)8+2J&D1cI67F>;iwM8J1IeLJ+(5rz4vaN}uU85TS#i^py-s*TOtywl&2GXO2aF z9@)5VAiCh&wk34z>%V(BJrge9=nG?t&?4N&Uw(Zfzh9*DX-UznaNE~|zo(&lRxd9b zpGZ$|2?lFQ7hr_40obtx>$!{PT(o?d>)=H2S(h>S5qjI;DLsEsC#fF-5Thw|ZSPn^ zEux)&l&G|g=$UlQ8KN!{7-n=2;_BqxFj4QM_u?R@JlqjGgl~ zFj);{uR@Sm-QQLY`s@lItdwB2uqgY#%woN^4_`vZzWOnHZ7Tb@ ze5%|9oqUGe1)cO^MK0j7d{anUz|*etE;Il@8gM1-aKwK@c;rv^H9jEzYI;z^o44_;?ojQ>$A4j7Ksg=3LkhiC! z^cA9?l@e?yOBO{+dmx*|R~E%L!xnit!V`N->bF2}?$bEemyjK!K)6TtmcQeE;UaBL z{4*}AZx$cwm#DQ*X~D)<#>jWgI@eImE`Qsl5S=9cUiiffivEK}&;Fi2E^8{azaTGN z{$QZ&LoNY(-aT>)UHpoZnqVsd^OMG4E`Jx@kESmU`0(x*8gs?o+e`1=uWxH>X=1Tb z|Mx~4i6SI9w|4v@Zz+hEOxorlZcKmm{MO%Yl}p_g(nqO{yTnUX-NK1-9&V}f6{-ly zka6wfJxqP4Li#AC>N_ADaLocF!^XuO$*G_;$9-xj#%dNE9AHlhNCjQr;mB}tU4KH2 z94@sx^-FUj2S_-$`VL72Ti+qcka0nc94@sVHJ9c_4v=ubH4Bgo8yC>X;Zna-H#c&C zgahnJ0jZ$tI~*A*uDyTso{pDnspaz}M7?ha!l9XI2S#DR+J#X{&~{>!6ftKi^cJr9 zWO`s=CL50tRN$s#gwa65F~W(F@_*qr&_>d`;%Peb*MF>b@*KPM6=diOvi3X9mw-cwzX)62Fx;9^{Uc*`C-aY&y+)oF*~ zD$xDBw6H{T8fv(mQ7HyLSNHjaiC0Ox1YO~WysblunD{D1iC2k)62Xq(x2 z$5TX~RD?Aoxvp>E%W9SqEn>*Gr``^kH=fw_K4etQ9s-ngF zA6ND~g6KH|?EjDJ;Jgm}MxXcLllT4YKtn7)Hz>sZ`|iX0H)D01UmI&9)7uHX`uaJc zVf$DBb`BDYu>Ih`J%7hRilkQ*7P0zm`N~cb?bFvl9-e!TWx!h!(XBYcB1oM7b1sEA z9kyp#iqjz?{^li(f;er%^PlKXX&J-gKdfN+LI!jtOHUI?`zp~XD)MA4EfApWhdUZ? zY+kDqCCm4{rC;nnl@%jDV*0!`d2#SJ(X0)1DF~drwWTjlV}CEgWj zk>bT9CCa;8a@ewi`=B22u+U)rQ&$iUt+?sW!KMWaave<~|I9j%yhg-lz|7t!yCV(k zGoYp;&-B24gw=!nTYN&2JW)+Y8-z=yakY%Hd7Bd*-0l0`Jcxz#=tusZ&|cp?=1;OY zrB9)fLaXw1lQ?StniJ@&kKg<-jIL-~5~B_Z*K&^0b5 zBz!T-&)(+jJ%-y?svqzDWb>kRh5LlzQERdFP>D1yynneeh0#_sgWXU9fawH=ZBl^i z2+N9;P&-jl7t%-J!vS0>NW3JXJbv+-ovZ?;FS-yOhK`e$z3#vT^83p-Z@h@?(nT2F zf1mcpcuW=Kd|lNxKfs;+TbH0x0)VOgGtY1-rnan-KKh$)Km2GLd%=zk)QWexzL4Pg zB{>i9!+#S?a}#eDj-BdoL>!UyolhI$g@@fMX5?%RDI1+2<_r!=mTg>2?YB zA=$lQm{?Vl&sM2fQib&j$e7hZFdCh*j>ZEb^W6m=feq5`IazO&+m?)>3d z&*O@knL;zf2|aE$g$X>7W(d>BT$(9X1Jh}SP~m6P41vN=s+j~mhZbdSYRwcdbmVN3 zGdLH}?`HrCJ4mJXgbof66e*E1kBHF;$Q zHxCDKgT~*2V|-qnK?bY3(b+bwp{W%Epv9cUnP9?Bs=$LH&Q~QqJK|uAbddcWZc61l z1Wx_mCZ|*kz$Vb$juA!!(?0N=M)LaxF}3{j#?~pT^o;rg^HZsR!5Yr?3V}d-f20hOsN%+f$ zH`RHiqh?GR-&8QmkN0CCdUcSg1_4hF3akD@op-c2MNT`zw{I@rpCdDy;898Epn+$> z-dV7x8%@(U&&TIj*Sq-VRquQF5mqDhck^(u6kZS`fmNN%o&GEsJrn>!{T_Jv=41Mt zej0P3s&9=n8U1#=nv?X)@oIMIbxHrJlL2WR0f&`%KS$bSx#jcFx+D}9%6 z{*s~no@@g@8GQq-GiyDa9nmVzJXyenY%mQ$IJD;f(mGqb|Jg{bwNiq!;4f#(L25?& zGa#tiKTTgwQ`mIimcAjn7+xaBHP?~J6aVt&<8SG!2I(yyQ!VS?8*MZ?(c5s7PW3h{ zvlpFjw-JeHe020Tg#C&f;*m*z-v&ybC@kV2zkJOxT>|#6Vu85&RV`FBA)5co4_lA( z?Tqp1v8eYtmk$&*|5coY^5YlUo5$M{_8zT-Y_eekQcBvnCcy?BW31mQVjcTxYB8&2 zn;r3^Jc-~vo}Qk@u9&yL$o{ogc%`l-v=}d1@1yToDS)&-3N#C zUxawiKE7MKkDt9QIVLaY$RhHcM0C9K7)A*?xa^7LJ?;GGESXOuuoJ$@hYqdt`gK%& z3dqahVd?TdLwyuN1=Ov}5n6st0D3TWo^0U5#&nzTNS{VzA4aeABS#+~FdPs!gUtQV z%jubL3#W6{@f7deO12As{Vi10VpwsLTd!3297c>4Qd(k4^$)HXaLDa%=u zB>hQvWQs9BeW}YqVby+8yy+}HZ8l`=<~Iw-`eQCJqsEhaByj70*AQbZgvG*GqK}tv zvcR-FJw>|WG{351H~s(goI;L88f=Xm)jKOfROAsC}4&KF}Gw&W*r);z_^K3_#9$eGh=5`~#yJDmCC zT-sNq({-aqa&|a><6wVeM;NM|W@a2Rod-KbBggH%RHY;&Ui0CUuHmnfLtRmW?Cf*Z z?^I`l9Mb1Mr_{UfHN6G#S;KqD&$HtX4)N*fDcA(*7Pllgjy@XISs}{NMLN$IpBr`d z1V0<IM^L2L-;*;h%_iJGhV$e%WC{=Uaw+8nVc_|MG?j`q?-lo2C@UgRKwCNlL8KYwPx`%;Sk)ta69V&W~eY zgM8kg{6RdfD4nmX+BR4ArCm`>vhm+gr7_HuZY5(sVJn?+Af<0hLdTR}ru0k%Y*0nU z);}eGFJTn?o%R`CaystNAf{&rvd6KIG|q#fqA*z+C3u$TSTPj>A$Aga{$>-N4oNux zV(U0l(&5D|7AebAZ2CwHFEa&By35> z77;>g|0^h1%#JmC@dM7Vr}!1`;3Q}8UTjD;n9ytp9uF0^3tMV=74^C zBsgG_4cYaI)YZ@e;QS~XVuYu}qp^W#)sK5hwp{EK`+{TC;rM?2ljm+BfAgOG>xx#E zEBe@^?VP6`}D>1+%nTUgfv@Do<8^_Tz`5bCNBrQIPTk7uinJ09u-7n$_-+ z-7C|uFV-`rx!G(-bpIAOe}i=8JXRHZuW{34pr&qHMl6~S7lk7+}mei1Fv<3mwA3XXyW&g0rZY3pp+=YSz zwQWMBZ#?q+J<9?)huQmw*LK(86zD*H>|XPy(YF8m6suUFN51cy?^kpR)W|onXJnpN pbPm?&1JK;R;s@zyBJ_?C*@XLJAbKl}O*Hlba^UXZ{{d~)ITBET_HO_H delta 24480 zcma%?V{_m?w8v{~xwVb0ZF6gEwY6=#zuLBK+s4+mv9)d7{onfr?vqS%GRb5nb56cF z`J`$W^mGR_wg4zPl&d=s)o$KT-skq>&}xKOKbOc)FN|;X`2gW11VMpd_pM6LpdL=% zdIE*@UBQKp-wzVqZ+t>Qq1-AUL}hU2i+|pZuK98$w2|kzwYB}S#^e?Exql@Tz25zL z-v0Wu{W=1|K0TOLt@`JQ_2V^k$fR)$|B4F!n^l+$iAn0gFa^HR80Jj1-VMv6cLW1=rcxhF6&=^E zdUwL?+q^&v9EZsWM`Lln;g#gQ%mfIbFexUtT>l8bPV`PHq0_lX4XzV?!A@cizxsnk zZ0*-CA>b;FOi1{#io%gfpR}ePrwG{Nl-!N`Vj4>vllJR;zKKvw+z|YB zC>WVvcpFb70H5$4D|W&!->C4-Uq;n`C+I!U#WWseN`HSgIv%S7A;^bN>ShM)G>3n? z`cgioL+=jPosBG_>B^Fc`w~Qx6~?0vBkpf?Eg(TR1FrWWr+-;@* zQ9w>63D|m8QhjJg19!pOWu;s|0Z#>L+tpM$>*YUF%)n)3zujDx$|F{LgErPB@f%Zd zNHh5OuGW(l7gR7k%}@JHwIr-+o-({a^{d2Jp5x?Sy6_+0--wKW1*>nlZJj1n%p}%C zK!eUAG2y2I!^ zT{3~Ak`K}_!M9p1)b6P!CvswV(c>guGxTzEskDIQ++-Uh2)Cw_G8VfvsB-^Y0>KlU zu(9O*uus27p$bwzEs43AuIm^-*Kil8S%zcq)i)Oy0I&0kEIiFmsDbFQU#b29K&@vp zH>~325%}nUED7l0P!C{;_7VNMMGNv|(7m!C_TDz;(bWefjKQE6htEd4kN z$7~pI1u(6a?^8?`C!J2{3bsEsNA(*M0FO^L$Tw9(oSH6wh#90V!L!1sBKsg z-+t*rXB3)IF~aS`fluGHXe!+UCe7Z;ry19=&wa$~N44ZUsCRrxpzoscMb>8Z<;=OK zaa_*NZ3R+1?4IWApMK?7b5k^3*blb*i?O$#gFfdj_A@ZA`UfL< ztCAbnzGP%HX1)>@AXL9}$-Z5kGz417l0|Z!(kuP+!rO5&R`VeH?$+%GnC>z5EVK~I z!{sU99z;1aL;a=ar@?*QH#K6kIccctkoVAlTKwck)BLbHe@)2F$KEI@2~kYJledTZ zAgRXpd1Qa1dWdapep6q6DVb9vS$zvJ#m#NP_Y2piG?mY_Syq>fF5!%+MxC`0_QZu# z>5voEgsZw>RzBxuI%gRK8V+XGE=7u}8`{1UrUe#pc0Cch$fD^YFkBeQA0jv(8Pd1M zN*7SMw44c7>)EK6#C^+X!fFs54%G`k?vI4^CI=P^o?4!?G2u~K(E ztZbDl(yk}fU1(hbtAp@@jAPi6QEV#ONvG7|;o;@UkJa7F{kv2&EW~9K&&gLYTBAtb zKYuEF8hL`S?|x$avAS#6!MF0j1$Ah;0ohY)76NfzcmUnS?Tw8CWBD4gCrU&xmt}Qa zjz7y69QU-xhtbpi9Yn*rY?8j#Zg+Uev@PzJ((!=ey^^}}<3MIaFy>=?4$;U7C@3Vro{ct6Qt(8g@LG}tL`1qCZ}F$drPiHQM9@x_{04a z>u7)hqgq`dJji1T7hI;GntPf#4Jn*hPCXMkeGdloS&UWO-XKB*4A3l~|C>6@FIQ#m zo7SGvh~P^4Ew$G>>4e@6^@UEoh!2^AS6twhVO=p@QVo`rE_ zeDSwsY0m?+Rx4GQa94Nd5ll25*z?k+13x-+?``O8Z7=~W$MnrjhGff_58I}6@9r#* z<%W!m)y08}*P4aRjvQK3nuyPqd4`0Fo=RK~fEM$Pp|bJeKoesF^X_bDW436j6Tna6 zrL$JOUR)l1A737wX!q2)9~w(*m@K~7VHTLEu_>XUS@iU2`b}S=W?6GH((u>yA;Y!d z_m=Du#(6QIBdbh@cfl)JdrhhI!kKNqFut+_&oDl zlDLbCT6%q0kV`ve^zKgAsxpmeE2>Bp@amRR)s6D}VA2G-bmTr$H*n}TZXdfND=3zi zrC(`l_ncWWwp2mGo^HAnmlr)=?3#RXi|&f=M_u_c0H#y59`C!MboSmbplvH6D8@D6 zMb{mY?J!|%9`{&#R%m;padIqU;$+0A>vy{AYo}IakDM&7F)2t5o(FcbXX+Qb?z_I% z&hFr!w`C{TRPc0q8=3v7(|Sy`h?jJBT#W3gPd2s$Zc8j3d0Pr6yi~;Nt5w6fSfq++ z*QW$$oLrTncWd?@_ER?=K%1rKtn4Z2u{yR&%_D$o$vtC{6~D@F z*g(XmvJ2a>1IP_{9va~O5THv73f6|tn`_U(oXbb|_SKgEVzv4Gn2e#VUeTc~Q+?68 zIgwo9tls^g`=m4wY_jgYdqWukR^wC9wR}FVHgBybSF_h5PJx6zwZK_~UIj89vd8x0ZW zE2A25bBETA2DHgfvb1&G9?w=DdRu0ijlQl44~uFIIt%5gT#W0kMm|VRo#36Uxx2p( zOHWBhliV9Rby6Mk^Zs1Tudlf|cX_4i$}TA>^<8;zrES(jJ-#HY!m)v#B_P4;fYv0~ zz!L)i=5k|3{c-lo+T9&R%Ry1C8gqVY|8l1T!DQU8^emk&;E&yq8mnOy;@&O1B{NKNcQ8v)*3RGY)HqsN@s!(3 zSEbLQY0jd1)?FJHclTT#I$)^_+Cq+s$DT?9d2kM-H`gv?W zOp`Une|aU(MI>=#aOucZFKwYmI12%$S5TRj85jbXN+DM5C{DmU2zbQFI70Ih%Q*Tl zAAa{HZE}w~ixE#?XGX~SzZgkl*?mG=LL*&~lIBcO5#re#wBaTuMFo0@66u5>ER~0q8KTKdbYyQ_iT6LN=E#jEBPy3EO_#{ zd-qwR#^s#6@-ur*NH5HqiDSUD1k-1&7JO|~K{VV>h9NOKvth8^>5_?MyD(SC+sSNN0~PIOU#{8_DL)H}R;S(wi962~~KV zD$YAZjz@SbFgdlG(;gQbR;3l|C}mygm!WY58hHP^kwMr3a3fsGMCS1HwUl;;vRvA(#* zchyyu6M{ls7qsCk*B(ZpJAm6_n(M%~6%W&R|5EYDE;p$eY^xXh1UV55j&EfO`>eOH zs2int5cGnvlTVy_=iP8iNFifR%FcUuV1V%!4^07hlS>H!IXJP@PjAonf+k40yz7HeEv$*l+~hYXtU(9x?%tjpp7@|%3R8rk3Q^1INO zV(9&|bP!Muq*zw5%r-M3xar{#vddI6kO=vef0cGYA|$*y+d>d9`K~<}xesW1!ErI9 zwkyDmQqLwk3F^HU4u)tKQdQ$RfPvYU&UXf}9Jz}@j8PS%x+083ogvCa=yhuiL=!AK z0fYPN0I7CH770Y_bDdO1kRywAri~%bm&^vsEFfH0A9Q--!GDNj5eHIr?OGg~jSkNG zcdlbT86K;`aMv7oJ&eOtafGU;Qs_g!qAd`*hi#3fjfr6NsVPHbpMgkJifm4d4afMq zPg;2*uLYhBj`=i+b|xsEnL|s^ag@s46_HAHW zKb*sHR`e1OLSg0JMrefDbfrt96Fq>|fd3mq>WA+{oX+6KtP?tc*obUGsKU$O=9Phv zZvvx%eCb&|fl;IntC3n%ghH!drNyMplKG{| zjJhvNiQv>XK1r0OiGfq=!0};~KZbKxt)A=$5?>z~FwV}GX%XNwo^u^6@_gVbUC3cd0 zVteT#*w2-&S-8Z=Ot#+aJlDSO!a+vF-0D#Ne!tjjAWX3Fa@?I3%c*m#@AI*1uFju_bv7nGN__1LZMqQ@6FY;unbHAPNS<3h-y|Z zXCcUTyha=qj-N{QXIb3JC-G;xL2rB)uu>_rUQy|A4t2kVX7M)L5y6y3%TZy|VQ6(H zMg13)Bl?$;ubWApE})gh0j>h}giT8&I?5W!ku~`aA6&ONj;zd<@Jw*Ubu-jFbK?0S zg!8|JC{7!Q7DU%7Jrp(_&C8XWDs}`A>D=1QZJW_n@vmo>O_%PPkNw*=5k38jmC@sm zjRNfX?jro=q@zA3d~?#k^%F(JLzZaYyyb}mZlmAaX5j3Wyur#hAT|P{>)Xfbdb}Gd z=Es&Olf{OC<$VM}mx;0VoSjE{w{?cinTPaleXKoJ@Cvok$o4a~Hu&+U@k#!#v_K8hCwihh3>=A3TKMWo;R6`jGP-iawXM3CWMMNm+=!+EoM+eJdXdoUK%f zkm@>OOA{Cztny-Kxu|l!1W-Og_H0OPma~j!J4Wvx5Ki0gK&E^uJZYYJcm{J2)f5Yj zk~0}PW1zb^V|j4Ew>-`ggyEHYg*?28(1AXOD&ac*(qs zVKbxT-%74qVO#2V^HTTk&bIl*xGplvnb8_y;^ZyAC`f$bZNlG9$ZLLj7q4H}A|QD~ zF}s~hL!2^e2SKk5%)mLr#PG~vr1TP>49dTzOiE)}g}QRvl>J#Mh$2lUpqErG)2DRb z0Dlnz2PT%ak8Qht?#=V;iRq^bHiTQD38`lo$kTnSZ^3CaD1x&&9l2vL`))rGR7^2i zxB6R*N%__i%ZvIv&tkMLE(MY^>V)B2Ws=vI55Y1QR|v)W0<@0<6&A`tWa!!7X&2T| zwMj7?gL0mcUF-f2MIVZv@T`W@^~3Ykc~pMLAstaINQgUsqoQkRBj1ezXdwk!{?q|c zs6amynYtM$$HWPYbT8StQ7loFvLx1}9s``37SuQPP+Zh{?Z> zerQJYPFE87(d(|DAR0T{zFoN03}1#yR*ha!WxB{8Bk|?V3 zavI+7G6I^R%~W)#YhRSxvex{d{(c&1udMd=n<6sO^zWnY*5>4v++dPlT^;m zL%~FH6!{&Ms!>Q6=|*OI?G(vjxi$}bgxM!Y&g@Z5FnyP(;>joz#(U1^`VLvp#I{H@sfs`8F~ym<6nx(-7fF(8jlu!N<@ob-cwr zK~C^h!gt^0Cdbg!*4`f_*yIXz6KseD+&Okur0tO(ffbRvnqU_g*k=SL!PlVUx@TEs;@!@YS>TYKmkelc6?o<19iB8 zEg*REPR({R5Z83H<4W0do&!Q(ve&4bmnGrH!oZ(EvR8S<8A^~}Qcn#P_{EOWxC^P% zM2ZiZoQp(ZI)ml^31fv; zBo)mHF161Vqwv4klLW+_%&!kf9mJogV4?hJXcSSnWMm5AOC3-nVN5+p$Q{%3^dNHI zay?Oryz+5hwJHB+bX<3`{&^yDU>HJQ`iXWV0>aeisy|*xDQMlB!W21z zgk{IlYNN@{%wc7`zZW)Ot8Ko5{jyuS7#Nl(wh+%$07{tvR|XXAv4Qh{FyY6J>ive= zCq-91@puRnt)1(&3_qiftq32o2W@pTHLI+$&|9_pTESiD9h`yk(z%x2?-A~bYb_4a zqpy|wYlTq@>SrTj95D6Lshb7$6-gL^aiF!0Oqs0S4JvnZ=ZU}{!s6+S=<4X<{7uVK z%-yKfkchHg;;B}EPq<`)j>kzY|9 zX;)<%HMMI$fDZYI)iV&z+<#Rvh_e0ki#z7h(h1SJ9d#Xv9lF8iFI4mzI$;jRRMZRI!L^EQSWK!ttL+psVEa+y z&Vx8ggF*}H9yN0Nx;%#Mh2rBPLB9HJ!5l5w>4Z^P8h_XWdbqpML2ikF1>yqe2T=VF)g1sXWbU$}Tg|c?q8j?g@ zuDhA}zp-Q0uXIO+ur}6Af9HufheXB#^Ss347WGv+Zbv-JAW|)O9b2;OUM&oEj>?73_6c)%j0=IiXo2hNL$VR9Xj-*+8R(TuM*0z%21Fi5$P zGT~T5^c|yj=*J-Tz@kOOFfzSyVv@3<)4%Ac1Jeq2A5c z8_B-zRUlVx^?h`t<%KsjPZ;dm`5e(G=_RnA=EKIP=lx@{+py9 zMS2{XAe@adSgxNb^@c52G{PfpXsPfUR9f7VH3ywc;LcF5965w-ZytOrOFz+L^L{Iw zu8?i`d~Q|<$h*eP82Bw`i`L>G&CuDLOTfm)N-xi_qdBXPc{Dg0-aZmkn*s>y&P0|m z*i?SV0wULV_0k8gPuLzndtC`L6O@gfez(&g+9!atEiT4&wFMVuoZW?la&51^${A@W z4RaP}<+&3td3A4;8qo(j~o_O@|~$Ha=(!z5M#+k5W&q9IV58o=kH9QhH}|c zAP#oAvA_zO?3Y0jbNtZ?K*rF%6_NN9pug*my^8;yh+ z$t;xOq?K@>)Mf^(M$r)S63(Skz@0AqiNXd<$NnVT55ql%KmXrRQ&yFu*7g&jNU<9; zJLQm(_rjxJ?Oew!mm+bGC0d(o+`jjdyB9q5AkHm4OO&uodNZ0G^Bnta)u0nLaX_+MES4rtXvl z47T~01q|+L1bVRD?0#jiU|iNIV_?Mn2b{1~3Kxy!4|u8ye&y0gl?P6IIdxcfEz`=^ zzDkP9!5`6gD#DDkC)7+tR=+E72K^~2%1tN}s>;7OXo6J3DNQS*!m~CGC={ducD80;+Q$n!;Dh7TH*5;4Z3}0K9n8T zt&|}Us#rP`8%0(714;&ic}vE=+NqfJJab1=L+7#VMYyly|AKy;>RvnP(iNRq?zcZ| zOi{yk!p(_i> zWLNv?jaAj+stj>z_GsA1pZx$WSt?Buj}Hw#O)MJQh8R9w;rA;_H7dp^K{d&{mG2@{ zf#@SsVdua60^5h_!^#3${^FG&i2(7hp#)6XPVkr2(iQW2q4o7R_O^nYPG1}X-T7^T zkI-Na*syk{#Bz}|FWHa%zC+k!w$SN%czY=2j5H|h(3T+(3rbp z0o)n$FOmKduaSY109I-|T`m8y73AFA_$Q?AVe%aiFhQ4?3r4+<{1Q170Xl8t1o{b|G7$rp=+$$~ zY(7IOKd?%uBI~ZIc8NIgp}Bxg7E2teCYigL_F@unY);8k|gNUH7COL!RchZ z4jwJf-rvM$ViQEKV}{RRIo-BHK3M1^|9S~^0Pwv1haU4qd)%0L@~S{`83BvA1N^=U z_tuNUpp{ki)plZn5zLb(%Fyd!TXdmi9gOOBi*mg47CxvJhi3xOUB5|#Gj^};QZngV)SYCO?~*-E*08wxDizhnPf`d^-e5O%W>MseP{-V_ z^}fa}5JD{FO6A07YAHZ_YNmi`wSuwHLL!bi0!KgkNcn9j1?le0DdJzMX(JO6sD1x}<2q~%zG@gNR@#H{hf9$)Pbq5ku*V)Xh$ zlz3J809Bn-a~=!pz;xAtrBA=?b;bQ1#_1QvdanBh#%QwL1U(=tcx}*zoa`vXmTH(t z-;^ulFli50qF)HX{Ux82SX5d(*X{Im&g_V(^}@G6-Fl9gg&8W|E_TqdS(%*D?^rB^ zM`6L6(rKDCUx|BIJf^-2*ZQ=)YQq{_K8GKZQKTr({@3{UznklKkaS2??cO`Hdutn` z2#Pf~H)aC5`a>X{EQ=||A z=i+z_wOx$t4tfhPkM30Yugt2Y`ImN?vQw#G3L8C<#X%tHy7T8!o1X>0NfYAfm`R_Z zM?N~4u_0(;@lv+vGz7{eGMG*;CoJg~whTRAY;LQ^8swIZc_rEzN2*N7x~Ot8Lv4vF z)spRtuuuOA6S1F);>#kTd6~c9M`CB7;_L#&^DoYP{`~sP8uAH?d0}HRjs9 zkR4g?Q|rL@{-IsWnf7x%qs=At<+rO;M2(g{3MP{DED11o?}JBX$!}5XV`L29oX7$y z^In@9i9-&{ZSm0~8vZ(~Ww7iy>;3~k2Ba&TaU1n^o09PWx~60!OY_ELRnxwPYz^!0 z4b=*+&h^O#+ZKj&yRUQlbj0u#T&=uQYIdxpw3Waba@AZ=>*T!0Q~p;X)d4;KHa)+m zE(Oh%K3mr#MUHxlH%~`Km3|#VF;Ja?dgW1{?bh&em9W0b_A%U_IqFe&%|G1@f;$73 zq=V;pyXu|ms_*XD@eKYOaB=PVUCsB{vuN@7;&Q4zZDV7ihScH|+soVaHtNvKeCfgS z!3?y$j>ktm4LdM>^-Dp;rsF(nP1ImIR$#I?HfoGD8mSYj=~CV?=u)ysXS*|D(v15Y zX5=@)y)gE)XH~832U_2FwQ-t$PhS>SJp5xW{yhZi%#&1^qjM~Xp&N$Zx|@vTVu7Y6 zaLoT^epw&Fbg{&64Zb&5N}IY|rm=1NT^Z&6z6@TaQj7y#RdZG*>BB9WRYRe6wrXH= z&wa4@zC3zbK^!7ra#piEK1!INNeZdHwUtuWzyInX`KB9yXkJ~8=jKVcjeD(8l>#8C zok44$*h=NlE;qbjg3~{&GwW8G2c!u;QPRG*WlVgH(O}nlP)pfHx{8H}II`@~*fN*M z-#-|bOMTrr)O~WZk>>D;bUC;g4DRcHu6x~tB(sm zoPjlFSK5lJS@L0Hdfu0f|E(T7RsvGc_kZTJ^G+H5XW3uG92-?m{0?{U-vDaf1FGW8 z*JUuT?Usl~Z(VQg%Icoeg5Sk`6f^oujOgL#lRdfqdNeKNO(c2-#8pizh+t`aa}z8*aJaBp&JmqFfhrQZKdIZLeOKQe-wN-^oUW%Yf{clyF< zQmeXTYx!hfLx3Jrb03n)I9AR!gKl7RfBbwb@!2B%kl*i+Fj(vN8^~iT@Vln-|Hz1- zxig}F;%#l{VpBdZt@*?cUHO3neP4VkP`)h^6lU5pS8Y#x=U(Nz-28Q`;7-K;F zOLWDy8NmE@yC`#!HE-FFSxuOHxB4F8>d5nAFlh3UgXH?O_2AT$JxTdTL(0BEfT7xS zJ}GRAJclelDJ<>XSZ-4fDXs0DKY^V?0nwC2WL8`=H>fS6vZgydA(4Xw_~P%XidtJ5 z4|!QM;tN8UUK$@gPi7092C7PWjeq!_D3N4%hFsqMerU_XJX%wT)H=za>ARoy)DS8Y zTf**x-WhVL3O@Z!qS^3F2if>4U8y8PAgy_Ui%9mhkNeXq-ebdXh^<4p1?MqpFM zU+$GW$B-U$Kap=lnt#|G$Q*X!o2iRHL6^J4VnlPyZ8q?Af*`_gOrV@lkP1fHE&hV1hNkl=@y(i5d5(xAdCU~5^+vnDT6;u;lOSE9gUz#d4_xTl8-NJ@>me6 zt7DvvuibM99nv&}$h`V#9?f6tucC#`s6A%4e`e6^oKXz!)oM(i(WrbqS5W~m$RZDb z8WaxhcizF*UKec#&?@NQv8l!!>Ru{EHx-I4NZ*PAt}C&NaaN5P!Xg*`_y-Q*F31;o zRPTGkTP-5be|x9&!u<9Uip7u{c6rYxo3HnRS6zKvu4GR{qAJtNSyjVM%&5OT>G=F8 z$AIz-7}B zSDePmABZcO!QdS;V(gf$%Ro8UrPA0O8_yG%9%yLZ?&r9K9oZ5^OOA_;K6!K7(K)_z zr&sz<+|sL@`Jf4#S4hvJtP_FpOxNa3mDd~*HmgKM_wnuRTz8IV@Gbb8V@;Cn6CKcNUK3pB?b6@n;gw+$CCN{;|ouhOrrkcm|K}hqKA7aE>6{}v& zQ^gOf{Lllc70@nj6Oq=~Ia=Cu1jk>t1c%EscP>^yl)n8X(!zI3E=dH| z2@eVYmcy7@T7w9w$+9?~Y6HU^EYHZmKbGdOeG;?MdQ$bA0-N>6(p8aba8+x=fpIy8 zk*at{&ji>pghVy?#Q^5`>MO(5xC6I3W(1Kns~VN*)m&xEY{#(NNE&@gL=lJf29}HO z??G}ve|J-k@|-sBJ~ttWY2cQ&xZ?gt=lZI}g*vv!SZW4teE7!ds!#%h5{Fn##yS=E zI-A}G#Hmx45NWFOQvmx(L4T_>8;-ihJ@fW#CFUQxV}NjCGgrJv3-8i=ly3dN@D_C8 zo@L94$HlzRa&*c{Hso$hvrM zTNxj4K>)>L~-Z?#JTk9VTXqdB=bT-*Dq=Ui*dUhABxp!3+b=rqwp_+czX*fe>*;%=LF;; zECi?W8_=(|KYb4A6MnU#SaWrs{Mo+f3?(Z$p7Aa^F11)xM8S&J`v+%tSzq({{xJC| zuQ!encsnhw%xzjrv0zzh&8i0wandUcl~XNRj&a4yjn>Vb)SXpFs9sZxc|@+AS)y4v zgb^f&4;Sq8c5jpBFo?qytoT@Cy4@imF7B6#qWfy$ajro!Z?H9X+M%t9xsu->@pm>U zN~w?+{^|baot#H64^P7Ht&&q-Q585M(5pgNQ&ti9hwDovr-FhS&iDZknsg1eG}e~n z!m z995BF%3V+iIXIsw_dGtosGjb@_oJpH>!g*e#kbtXnJVt=(@iS0B`h>2R(g8d zh7@IZ?F7oN5(TX7U*yu??P~nOLuC&C$$*gyF1Z=>s5&Cu zH=E&bUcj`XX#sd+BPahym(=E2>`A$8k*=R2mcOJfa+lI%WJMfbx$Hv4|GHElY?o539j^}d)@wB_Ji63y(nMnuWZ68&R^9Zh~ssQ zG>NJnWU>HL<~s1AkO@n4(US-ojWiU8_NPu#LHE-f7?3Oi^Hbasz%MY&)t zjU;OC%U4Z+Y<)7fgPh!wp@{46Un7NTMX@<)@UKQ+g z%#iW=1|DsxFVigh#dB;AL`cH z`K92i9qxk;f7Du+xW=oIM|jMh)Qs^a{{~Qw_#i4;rDiki-@nc}7ye+(tInE|iQl_0 zh;5=%fg0a(POQKkovMf)B?i{xtH0Z7b~K|YPqo;>wdNaL`ByE}d((RsP^MP^r%!fLp~ke{i-pdGi$jM&SE@Nj{0J^8d}#xA{5_D(?D=j}7oK zHoKbGDQaELn1QZtmCe?-^cWU^`dS`|zmngO=t26YM`q%>X4NL!mvMs3Xnho!q*>g* zvSMzOwHAI0Am~4ED^IrWtAqHfGr^50{+_*rs66d2V4PZA3Pq0QTrtqB%}D zGswFnCc>AL!k=yyu7cf6i_z5EBU^wqlST;JbBZ@6*tMF%5Kkn9hd}YNdoghg#(Gvi zGP@~d42^D5A7)or);KUYpG?qGwj`TN377qn{zKVivM`tqa$F?I+tOp;@Z(G(3A??% z>j&SNoCuu_N~5HR5zbLsn01R zp}p{NeP;|^OZ!BNUxy-Rjn06A+nTq6xURAGUEQsRcDL^K92p;2bUibw@~7mK5t+%A z!w)Qp>>&Q4zKXRY3OIVL#GcC=AF+K+e#lx{3H&l}3=_NUtM1lQPhEq=Cg-7zz>!yy<5+h6 zVCkkUvxPY!Xenh^gp7D3f+)y=%RWeHv%m$&;(iQOtYU;7P1yTmgnkp|Evm!`?yA+h zZ3-d(>51$=`93^8YMp>5>J6HokS1&2CI!B0X=l&zpoQeitV~nME(y9Agm2s2;4*lL93^_^9RDZ zM*@VGm-@#=J0TU@AQau9^T8Nh+8|3ATp2e%@MWH%;?IE2 z0C%}#dTjGk5cttc0vjPwLHb*-y4DZ{(9-_9kdA5Ov^vPpKj-7{dLy0yWG<+E$Ysj> zc1ps_1H_KH`&aGjE0p*lT`W8rBHA>0>=X}C){`JNp|2A^*vUIs;T^2Rks20$?x`c} z0xi8?`VhHtoA19;p`jJR0wYCm64*m2Ro4Pzi;&JW0d-p624#zI6`b6|S7-n!pA<~O zE~N)oG0shgSBOiQe?SNw8*o4@a%@ViNlB<+OC;DxG$?{bO;hz?oF&Isl}|xlMxX#~ zf{=PH`gX-XTgH z@x@L-6J^CPato$lA5(*C8|7NUJB0y$aW4?0cQg%$KRv+#O6vl72k{;Y+z)C~)@Am1 zY&ECtwcLHxQHkH5DaFgcXlkSGSFVXl=?K==na8H|YURUEqoB}Ce2IHC%=qR-`I5z; zLhFa&RcB%<&DL2LO_{N5N4dmucUg;-_D>81auEt5<9V;?;BvKM65|yw{E%|}ViNsQ zP4={3O}b}5-oA3E#0s14XWn75IeZ2iqM35N6#9N74#Rgvc4?J;c-#9;8?q{sS5+3+ zia$KkiJ8A3sR~-w#BC2E>6@bH4P#J~vKG zS+2;G($*5599W)QUk%H7MrRYJ(%+MVD_1FDIMSYhhEE4P`qx%v~NA*SA>2PE}_#PSig_dKC;wFbnbM=BkZm1R}c1$IVVd(1^O1te>+$ja0i z)*iixfmG1cnQC2K8_Y>Hr9Nws{QuJgUGQ2B|3b`d@St2*?*c!r+!}RJ1+GB2D_rZd z&;_4}*F8a;2OY_aTZq>!L7Z@yy~Y178cNBP`6nuVTo{$B%7`pg z-hE?1nExfcgl8gTDQy|q=EL1u#P&x^z;S&pp2@b;MRt~TF_v*Y=T%c`>VpoHVkEhq z#i%N!vn*q@vbd@TR&F#57LZsmV?fjytwKEPl9QXPp&&C|cfZN3w=E;nuk7&EBX9E0 zy}{sNBP=E|bgDRWq%khgyy%fqdAl6HUD%+;hgJG0nUcEIZ;yiwyCqIrmlkk{Tc7whtABi(1=K6!`Pr?nUw1~)m9w<5b2#Ci}tSc#rf7fuz(txhJgJ^mWPbY!h^%&;lyNY_F~jK-!T&G zC^^*dkyRUBe7x~x^1lN$jDUvtvm^)82*}kwi)9z^@-W{by}w)pA7I-JmGc zHC^}xeW>||M_D7XZFCYf4sVR@3{0L04;?-RlUC~xQa85%9D;o}%!WPI zCK#Ire+mNlX2Wjz+xG=Wsm}3(+W`$XyoKLe$n?oQ;Stfmu&T=FVw~0pyXf3``7+uJ zw7tz)Z~sZ?chTo|xyh+xs&7v(2e;8aw_sY=(VeVV__Z z<(q>q#YM9NIEfWsc)@91l{_JSS)IzU78d!fxE=#U0|K*(J$~a0aVgNAT;%K5!+i>y zp{N4+({d=@lySsx<#@bZ9`b$D`)J>H;MP$H!O@>0mlnPR** z^eC}M9L;F4j}gtNu@BPu=&=tD!6>pH57}t457zmpvKJ1^=&}#e(I~SI3CU=)50MQH zA9vyATRMyNLUu=xao&)nqk(Q8mYD%>pQH1EZ$F&Ve*thG8j^u!nqzga-rN09tBvqhL2oG*8@mC6p|q%7tYNfl8b_47|BI*H@@TI z7#ZPlom`Lc1W+zVd0ZqM<2*i^laU@5#r+Jr2&*$XRBS{`64QI6JG2Gder)m*^$s(DECBa#7*F+>dyqGk=V5Xao(|jD;XZFzfKSWCDaoIU zTA~k!ZwGqcfQJr`bU@R)D_CLR#*rIkjwRtG!o!mD67jiCdx^N*XTHQ_xRPHYPS^P_ ze<2r=6qtw)Dht*pJ&p)RGE7A0E*~Z$>K{D9+{&)UI7ZjWG%=UUe42;~M@mgd2b5Lo zlO9PV+8qr3J_eu(Fj<^)_sUr#@Bs}uE*GYZ0^U| z{dBm-+I_69$J@PZNXFcKjBaM1`-pIif4ln#-HpBbsKCeHk}l&(U5~>1*<6mq`^a#N z#(N2!%yah0621^%(28@ zB0MZ{jEK*5$Rgr$ADxKFa0MbFPS-JqkPAt8A>wlrNr-501PvlO`1nB1WIUyt06;_p zKGv7=7{};(FfZnEIc^tG;TWO|f9afz#zi!+1Mgvj(R9{F)`xU6;=n->3J_eu(Fj<^ z*nNmt#@T(0uE*MaZ0^U~{dBm-+o$GZJ&F2}olWH`pWy@XE2y?sRPR{{;tL5zKSwfR)C=U!-EBqe_=eNQQ zZm||=s2%-cA=uD5Hb$RMHquZ&dB#q#p?YwQm3Twv*c)phhswb@#-k4PBX=wX9tubH zn9jSao%N$l)e@Ft8#vWRe*ucGD4=;glDKoIp@L~H(dW{CD3bQo&jtU_|2n>=Gs?%^ z={Y#0ece9Xo_3^mLQ?Z1+2Kgd-(5TfbOaj7d^`JOkB9-Si|Op1tsh&{Ps|ds=UvB^ zG+TY<!fAqJ4;a4D@+?DyXQ3i z2!)3_D%*s`!^umZRl&wj#OK2)yX4ijs9tm&wjo(2X6R4rWg?0+U| zX91sQ8N$er{+7g>e<(N_xi*L@lFwRWn@8H>oTQFm^ZZh1Gb{^SKdv;bRaA| zKv-YiOt*Rnx3tF&vj$5@u`^2;+ z9a|47FFrldXE3l+@(H>hZl;N110&AY6WDz{(g6*pENv?a$~_{tvCEFqnkvZ0z=Hn5@fJvQn=Lf?@7 z9la;O^)>x38-)>g=HiYPSDiMBO+@zOki<635;ib1QEf}B>;O(Fo4_VhLcOe~YW|yB`JqA-T@e9a#++>Q+>> zFX$EZ*mOLRZ6wN0X|CHN2Nq6jO`Fj>&oYa4O2*PVdq4UnJ@A)ux}pCq-R_HIDOhD- z^7pL_zY*c|@>I#*1O0yteVuyz;Hv;@GU*zJO>uWBJ5VF`Ur4<)4at7;egw&jcL>v* zDmiR@fBDD0q7l77#Doc3tV5&8V3)5tAqlhvZ4!ye>qP5kunm&eya!2_zCn7_Q!CIF zO7W>YMtf|IaE!K6f^dw1N>WIu&zm@w8F%ofswE8&xr%4$9YSQw1+(5w?gm?6%Br3G z?1>GeEam5nhxN1(c}hO2g_J{6A+0u*4U*Em){0&P^ zdb=QN_x!JOJ}f7hT@Zh>8>d}-Yotl>L!(5sE3fAJ`Zpa>2B$r*2*uyHUtp|nfBlpu ze+PdaSuS`J?vMErDxs3-OXDoEOOgFr&8{Y(Zr#S{-V9}sjeppjcvU|8L-(U8@Y@gX zyd+M-h={-0{M?|>MbYC(sj&~sNnWgS-D3QtFPmPBkKB8zL5Av0q$ z>+!e-Qv2d~E3WsLf~vYlgs|zD!{$|`wAHs2O~okV3qKx){p>%JktNT+HPR&e7wv4k zQ=EH_Dx!`n4ejz2TzE>n@QGnq1!(m7N}U^+eS*Q>qp{`RBns_fq}xYm8}agAf73b< zXX(vu`rQ#FfO=6x z=Gj#Hrd9%#o2*-i>P%?O``#7ON69|GPA}*#r?W{`J->9X5=RLDCV!UXf8ee@w2By$ z-P4w2#}O!AsJeuXef!eX{}vpcfAubvDkM=K+_k^1YTH9I`ce$@y#M9XCmO2wv_g4N z81`3+_J`#phr|7jt~fa7iVp_H_?wC)7oAAkEuj&_#<%#l_PAH>`A^wY0^o0U6 zTljenq)D)+fAjZ8%-5Ct&&l7V`1F!FP# z{y-DZn(QY@6g-|-Vxj2Wf5IbM_Z~ZiDQ1Ln7^f^4u1EUBadk0XkA%^%eFmJhktY3v zL%JVvlcr1`{hiMinB*TpfIM@&O9_?Ta736l+&lvLhV~9CxJX)G#o` z^gk()E1>jVjmyRwVqrrx_P0%VIwTGd4q>#Xk=F1OlnHZs8=MxNfBNtJpWYK89vw`S zk77I|Y*$`lvzJHF$M*EF>4S%DOtlKs?l~;?^0dUeozj3b{icFhkwO1&c5ZK0diLw= zL%|{MxT4)rvHT;s(&tAt;u&=rYTs2dZ2gio%1s!n^j5$mjRzWUU#$bC`e381C+@M> zUL-#X!q@?d-0b0ifAhesoGijHp!&rbiAa8?OMUB)T_CorQZp!f2VT`#`Y@}&uMIMEZzw= zXM$DLHZMHnHL>2JonxnHZD^OhVYcbKIh~{W*l%lr09_P&4C}vyt&Rq{i~D{Ii$Y|9 z8aq^gtu;=+{S=Vh_6*99rKh}(Yd^BlE!iL0 zkvnAHeT{+{=d8}>{zrD~j6}X&*IF)F$8{OVfA!mye=DG}3!G+HPU#6j?Ao7>Y)&YB zrqe)#4u;bAKPX)b^OV`v6epZH7WsK(Pf40F>dZ12HKLj8~Q|j8@v4&biJO3zAX<7Y>fN-(}7=N7si=fd_cD}D{T%{G# z7>?yV59CK}Q%RU6Y{<_b&bHXeErYg<%td7E^|H7}&WBL-dK3G5qTJQlVJjzL(kX_) z6I{%*Mx;jT6@R06)uyegXZ;yF=WSrJ8p__ge;~2S*CAO^9}v{c=94VN+GbTVOCZ

    X9lwD3bE1>h7wnKgh9n=5v;qAvXmG$h$Po#ggqV-uR z!D?Yq_HUWRdTk%RgpPgnYxa&-_IvqMxeGe^47m$B>BEX#z-9TSkhXxQUFXGX0Dv^$ ze@fWlh==gVpX_UVK>XG8poTYZ-xmScuvF^{^3uW`ef|2Kt#ZRAqFsKVM)l!mM3Pf< zDBevsu6%qQZIJq}FZ17foVVv$WGu$Nir1+4x~gp#Lg_N_FlaDGztlQcJ(Dc{#QXR~ zZTp_+Yxzg|zMda#Th6dc>9xNz%7E+Gf4Q0_JU6UM?Hi*2n5GjO{vkUrF^wuX3tgqI z@1PO@OgTGsB3V9;Mio*kbB!TyPe& zZVTz7)W%)nrK)b>L^%()RQU>3gk;FL_VFI3zEdH66jSvb5DvIz0g_?k;*R80P@3aD zH56kt3l0vjCk3Q}uJ3SUxVSEVp+*ju+MW8Pxsd}T99(^eq=K#QkYvcXphgat+K-w` zb0Y^xIN+KENQR9IXykCI->I7$IY7bz_N0JR(DfaT3>DYjKYCBcOSaVV`4XbuHw59( z%(Mfeuwd=NC?#k+F-nS)ux zaw!NLGtC4X5VYcf(_v$)e%)SUs$KK=(k5_6pDcl*FyH+s@Y(W??Cl}hF$v`!j~L<} z3|N@NZyrX%)&`aH8Tz*aSGg|#ndPcIh5kV$%Rlo^tc*p`F8{Gb`)5_je`eSC&+Hgc zb&J2g`{2C<>}{3-9ggRJ`vlpM#w0)5u{?cWJb;kX&;pQHrX)$xvvz0%%JA|fYdFQu zo$`+$m#L!)4B7onF7rCn8qgO&;%#kMi&H!!i;_sZgVb12KE8eXhP_fWq}Q>(PB%U& zAvWBZG!?~dv@1K}Bt% zuE^ke>>0+%g+r8 zv46h%@czwM-R9TE+Q{^FLa)AlPH5OZ7J!|D#3F1zIB?H@agZYE6@^8t{#w4WlSKRU zHIRqr-eVc?mPB+b&aem)=l`5bAx?+wS(f5-h={*=NuwZ6+wlA+`deDY@c0iaSiX<} zUCGkZMAE)Wbc%{RSxXB9DEsA(#v7a0>O{%%eQ)U(`%h)X$d8yluT5SY{7p1#LtP32 zCvR=(%hT9@i?G@6JUTSfzHnwh3q+)NF-eK?E|(m(?BG7AM?5SvSpU=&ghMNC`g5>p z0fSselgK}_&Lgi8@fk3)_sQ-^1N#i9>BuuZupeRdU_XmbNRlV2>1cy+$uzE(Q8sUL zqJz7A-oV~|z`%3lWy`OAew61WUFg$84wjL^x z#)UV3SEex9YG$w-N&qmOz_3jUa2;V;krHYrO6o%TD1118O9hFSM3l!bUbB-`!1P5I z!o$#U^0L<*xIlh?`R0umkzKk7!~5^k{uqy`f}F3b+U5tiv!8VdDkT7z+K+jLOEI-& zmGsfyeEZ=?+t>?sY@k-W%k_l>&o9Y&fFGWJSel!7yKwAOha=*Mr0;y%5HCFJUNIwQ zb4c0f1TklDNWwJ0c)|`jzVCLxcsd@iGtw{iyukw#=+DiIe|SdEc^+;2c#2=Vw`W0# zz6oWo@KKu!c0gMU_|QWJXF>TLJ0&~g{~Q?8N4j?mqw%wAj)2*lJ%ulD#ReOZJ$s*j zM*3#tGeE8dPwBf|&koqTJP%~W^@t8|fB2|}(`+%u<7+~)RQKrYoo&{!%bBh6g{LGA z=w%F(ms)~5%?6zvbr$<0#!k0Oun)=Z4a3B$ntZlO&5|mtS0INiX38>Ejy*%eK;YDWHaR4kZ!_gr|*O`5<{ z)3&t@vQgA|REr9j4*JfD7rOI@XFZQAYGw+}5GVAw*%T)5M4BN?BXen{SPe|48A64h zQ8NSzKdELC^c-50xv4c%z|fJiNzUM0K);^>DD*U&K}=&aZKjw_P6ioeHZr+?Vu~1g zeg&S>>{>c_-gHVR4_wcH)YRma8QeS^#0?sM3y$%5bp{!%>PBbVw1%cu41gAM7H5J9 zJE;N>ia1}D`0R*-Ez&{ucep8)?+`fkpG{7w7=TTnyB#Bp2Bv-BIgRA^4PtsbKYAv# zsXy+>xgeXEsWQoHZl=lrbrzL>oJr4BPW#}-G%@32fbzuN^@+bDs5tRI4r;7BKTggD zb{`X=HlR6sv*hNkgdciAY1B@Y9nfLC>K@nVX(81q?ks zX_7NI7trr#017=lX%N%c^rR_flhcz%nT^aym?DOro`mPD%}OB;S<~}>x8EUWG(B|& zk8EU)#~`Lh_QwQyVhwtpN0RWD4{xgTN=MC@G`^`|mLKoOLiFk&Qw;*1928dlmpbog zaf+OFhHu|ozCTB1Ho>Ek&Ormug1xg~PdA#TZ=R3Ov95RV&#T_|@FT27>hI>^Vkx{J zMgprknLGVmFnTBeg!=J2^3BKeIsG)|LRH@yX)^llcr_>Km*ds!((97`sP;Us+4H0z zaOw?>##)E;os2BE#mmmXPzwJLN=I&ARJorUum5!-v4Z*)> z(-bxxxTSB1E{2!Lam{sP^2EQq`S@%4szG|o$5hMu_eL9yPV_e1q*J{O%j`wx+igT* z8Xq0~4Pk#Ghj?Vtf470sCkl%=$S+@WOqYQDR4fozzp90bCPedJ`C;pEzMU~XJr?y| z=kkG~=6{N_P=5SEd-Hf(!rr5mkWDshKuSqF*Cg1WV~q7%MXY0AO)X}%Y_lVNlqV6q z$J5i(*cI~@7}-yIg;(lYLW}XDB`@TVzD7GnhnK%J8R>n^f9a6k+I?_Heo0^JD`bHm2KzNBT4(`!IT?A36E}f#HC-8D#EktxOi z^`$Ncg;o1a@usu*wAqlco8K%T>yNp_j2chwk-)7#e?yG55Ect#i9TMw$pX{z^c3le z)BLK6-S`Js%TxaG)iN#ua{XdAl>lIx(^Q*qw+j?1izUj_&$LE<_oKisx09m7tWT$* zgDd|@pX24D{Cr6BgkX%GIA4r$*pi>fS@RSt`+OCdAZJdeNfc&+?QrIkb7^0dPS=ed z$=TtIe}nyz9bu?;nwfFPbRO&!jU2c4Qk9aBc+H1Xx`w|_4s}Hhva`=se^Z?ea!8;5 zo>K3^*Yp;|XASQqKhKUoIK-!?r(hGLTilZ1IQnQ*XN4$77wJ4>d~Vd)6Z~wbYt`i0 zk9Ffz6y+#y#rU}~6#UKO7t3ea`IM$U6>nrbe*?gt=TEC&>kn+Yl8|_LI2(m=?9m>E zHO}Hs>E!^pzBUTb&ReG+D5|>3S}W59=^lovRY{t1P*}X*HRE3I4ZwAE2LJY);V(aY zI8XfQK)rGw%Xt+fA<;fK(1+3Jd1A-lXWVelxY^=uv}~(I@d_5zId>kPKo=aen8+^v zfASb6FWxtLrQ`HuVfH$l^t%9;96^y{e^1W5G@Ee$7}A?V$Z_}T9q1p~Qy_aT{L_l{ z4=L0?=I*c)M4p1ESbCCAdH;V=q%6jxYY< zjPF5~`ela+oo^ZPX~-ha7KQulXP8{DfAg|r^E%}Gx~Ik;e?;NoIg`sWf&YZ!jDI~l zf^z%_w!~p;|K$x6^s{k9Hccsx2U{POlayGe*VgS>na2~qSmh3zogc@*2Kl@}`HOg5 zQ955&wQa8KOS__&WaGb~N@JKQ-AcxO!&W-uKuX`1gpMh{OzD{j*r1Axt$#{hf5IsE zJMA;P0{#Q`2 zm>p~O;s=~zPw^+-$5~0jQFFz8T$z0I}HN(su<%ercR)oe=(Vr>Zd z#wyrRMQD6e!7QzoSNZL}%9E8}{P>~hoMa1Y6r?=CMYhv4fR^T&X0>}{_sTTvi}j3Y zZZ_Ky-M0^LIsNq4wo0K=-Q>^j1Z~g?Na` z@9fyJ*D8=*WS=<2Bs)@#B{d`(twF%_7mxnVWIt@OTSethereum/execution-spec-tests is both a collection of test cases and a framework in Python to generate tests for Ethereum execution clients implemented.

    The framework collects and executes the test cases in order to generate test fixtures (JSON) which can be consumed by any execution client to verify their implementation of ethereum/execution-specs. The fixtures, which define state transition and block tests, are generated by the framework using one of the t8n command-line tools that are provided by most execution clients, see below for an overview of the supported t8n tools.

    ---\ntitle: Test Fixture Generation with execution-spec-tests\n---\nflowchart LR\n  style C stroke:#333,stroke-width:2px\n  style D stroke:#333,stroke-width:2px\n  style G stroke:#F9A825,stroke-width:2px\n  style H stroke:#F9A825,stroke-width:2px\n\n  subgraph ethereum/go-ethereum\n    C[<code>evm t8n</code>\\nexternal executable]\n  end\n\n  subgraph ethereum/solidity\n    D[<code>solc</code>\\nexternal executable]\n  end\n\n  subgraph ethereum/EIPs\n    E(<code>EIPS/EIP-*.md</code>\\nSHA digest via Github API)\n  end\n\n  subgraph \"ethereum/execution-spec-tests\"\n    A(<code>./tests/**/*.py</code>\\nPython Test Cases)\n    B([<code>$ fill ./tests/</code>\\nPython Framework])\n  end\n\n  subgraph Test Fixture Consumers\n    subgraph ethereum/hive\n      G([<code>$ hive ...</code>\\nGo Test Framework])\n    end\n    H([Client executables])\n  end\n\n  C <-.-> B  \n  D <-.-> B\n  A --> B\n  E <-.-> |retrieve latest spec version\\ncheck tested spec version| B\n  B -->|output| F(<code>./fixtures/**/*.json</code>\\nJSON Test Fixtures)\n  F -->|input| G\n  F -->|input| H

    The generated test fixtures can be used:

    1. Directly by client teams' test frameworks, and,
    2. In the integration tests executed in the ethereum/hive framework.

    More information on how to use and download the released test fixtures can be found here.

    "},{"location":"#transition-tool-support","title":"Transition Tool Support","text":"

    The following transition tools are supported by the framework:

    Client t8n Tool Tracing Support ethereum/evmone evmone-t8n Yes ethereum/execution-specs ethereum-spec-evm Yes ethereum/go-ethereum evm t8n Yes hyperledger/besu evmtool t8n-server Yes status-im/nimbus-eth1 t8n Yes"},{"location":"#relationship-to-ethereumtests","title":"Relationship to ethereum/tests","text":"

    This collection of tests is relatively new (test case development started Q4, 2022) and mainly targets recent and upcoming Ethereum specification changes. It does not replace, but rather complements the existing tests in ethereum/tests.

    "},{"location":"#motivation","title":"Motivation","text":"

    The motivation to implement test cases in ethereum/execution-spec-tests is:

    1. To implement test cases as code and ensure that changes, due to spec changes, for example, can be easily made. Moreover, changes are easily understandable and available in version control.
    2. To avoid the 2-step approach often used in ethereum/tests:
      1. Code (often unavailable) -> Test case (YAML).
      2. Test case (YAML) -> Fixtures (JSON).

    Contributing

    Contributions via PR are welcome!

    "},{"location":"CHANGELOG/","title":"Changelog","text":"

    Test fixtures for use by clients are available for each release on the Github releases page.

    Key: \u2728 = New, \ud83d\udc1e = Fixed, \ud83d\udd00 = Changed, \ud83d\udca5 = Breaking change.

    "},{"location":"CHANGELOG/#unreleased-2024-xx-xx","title":"\ud83d\udd1c Unreleased - 2024-XX-XX","text":""},{"location":"CHANGELOG/#test-cases","title":"\ud83e\uddea Test Cases","text":"
    • \u2728 EIP-4844 test tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py includes an EOF test case (#610).
    • \u2728 Example test tests/frontier/opcodes/test_dup.py now includes EOF parametrization (#610).
    • \u2728 Convert all opcodes validation test tests/frontier/opcodes/test_all_opcodes.py (#748).
    "},{"location":"CHANGELOG/#framework","title":"\ud83d\udee0\ufe0f Framework","text":"
    • \ud83d\udc1e Fixed consume hive commands from spawning different hive test suites during the same test execution when using xdist (#712).
    • \u2728 consume hive command is now available to run all types of hive tests (#712).
    • \u2728 Generated fixtures now contain the test index index.json by default (#716).
    • \u2728 A metadata folder .meta/ now stores all fixture metadata files by default (#721).
    • \ud83d\udc1e Fixed fill command index generation issue due to concurrency (#725).
    • \u2728 Added with_all_evm_code_types, with_all_call_opcodes and with_all_create_opcodes markers, which allow automatic parametrization of tests to EOF (#610, #739).
    • \u2728 Added with_all_system_contracts marker, which helps parametrize tests with all contracts that affect the chain on a system level (#739).
    • \u2728 Code generators Conditional and Switch now support EOF by adding parameter evm_code_type (#610).
    • \u2728 fill command now supports parameter --evm-code-type that can be (currently) set to legacy or eof_v1 to force all test smart contracts to deployed in normal or in EOF containers (#610).
    • \ud83d\udc1e Fixed fixture index generation on EOF tests (#728).
    • \ud83d\udc1e Fixes consume genesis mismatch exception for hive based simulators (#734).
    • \u2728 Adds reproducible consume commands to hiveview (#717).
    • \ud83d\udca5 Added multiple exceptions to the EOF fixture format (#759).
    • \u2728 Added optional parameter to all with_all_* markers to specify a lambda function that filters the parametrized values (#739).
    • \u2728 Added extend_with_defaults utility function, which helps extend test case parameter sets with default values. @pytest.mark.parametrize (#739).
    • \u2728 Added Container.Init to ethereum_test_types.EOF.V1 package, which allows generation of an EOF init container more easily (#739).
    • \u2728 Introduce method valid_opcodes() to the fork class (#748).
    • \ud83d\udc1e Fixed consume exit 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).
    • \u2728 Added a new flag --solc-version to the fill command, 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 by fill via solc-select (#772.
    "},{"location":"CHANGELOG/#evm-tools","title":"\ud83d\udd27 EVM Tools","text":""},{"location":"CHANGELOG/#misc","title":"\ud83d\udccb Misc","text":"
    • \u2728 Feature releases can now include multiple types of fixture tarball files from different releases that start with the same prefix (#736).
    • \u2728 Releases for feature eip7692 now include both Cancun and Prague based tests in the same release, in files fixtures_eip7692.tar.gz and fixtures_eip7692-prague.tar.gz respectively (#743).
    • \ud83d\udd00 Simplify Python project configuration and consolidate it into pyproject.toml (#764).
    "},{"location":"CHANGELOG/#breaking-change","title":"\ud83d\udca5 Breaking Change","text":"
    • The EOF fixture format contained in eof_tests may now contain multiple exceptions in the \"exception\" field in the form of a pipe (|) separated string (#759).
    "},{"location":"CHANGELOG/#v300-2024-07-22","title":"v3.0.0 - 2024-07-22","text":""},{"location":"CHANGELOG/#test-cases_1","title":"\ud83e\uddea Test Cases","text":"
    • \u2728 Port create2 return data test (#497).
    • \u2728 Add tests for eof container's section bytes position smart fuzzing (#592).
    • \u2728 Add test_create_selfdestruct_same_tx_increased_nonce which tests self-destructing a contract with a nonce > 1 (#478).
    • \u2728 Add test_double_kill and test_recreate which test resurrection of accounts killed with SELFDESTRUCT (#488).
    • \u2728 Add eof example valid invalid tests from ori, fetch EOF Container implementation (#535).
    • \u2728 Add tests for EIP-2537: Precompile for BLS12-381 curve operations (#499).
    • \u2728 EIP-663: Add test_dupn.py and test_swapn.py (#502).
    • \u2728 Add tests for EIP-6110: Supply validator deposits on chain (#530).
    • \u2728 Add tests for EIP-7002: Execution layer triggerable withdrawals (#530).
    • \u2728 Add tests for EIP-7685: General purpose execution layer requests (#530).
    • \u2728 Add tests for EIP-2935: Serve historical block hashes from state (#564, #585).
    • \u2728 Add tests for EIP-4200: EOF - Static relative jumps (#581, #666).
    • \u2728 Add tests for EIP-7069: EOF - Revamped CALL instructions (#595).
    • \ud83d\udc1e Fix typos in self-destruct collision test from erroneous pytest parametrization (#608).
    • \u2728 Add tests for EIP-3540: EOF - EVM Object Format v1 (#634, #668).
    • \ud83d\udd00 Update EIP-7002 tests to match spec changes in ethereum/execution-apis#549 (#600)
    • \u2728 Convert a few eip1153 tests from ethereum/tests repo into .py (#440).
    • \u2728 Add tests for EIP-7480: EOF - Data section access instructions (#518, #664).
    • \u2728 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).
    • \u2728 Add tests for runtime stack overflow at CALLF instruction from EIP-4750: EOF - Functions (#678).
    • \u2728 Add tests for runtime stack overflow at JUMPF instruction from EIP-6206: EOF - JUMPF and non-returning functions (#690).
    • \u2728 Add tests for Devnet-1 version of EIP-7702: Set EOA account code (#621)
    "},{"location":"CHANGELOG/#framework_1","title":"\ud83d\udee0\ufe0f Framework","text":"
    • \ud83d\udc1e Fix incorrect != operator for FixedSizeBytes (#477).
    • \u2728 Add Macro enum that represents byte sequence of Op instructions (#457)
    • \u2728 Number of parameters used to call opcodes (to generate bytecode) is now checked (#492).
    • \u2728 Libraries have been refactored to use pydantic for type checking in most test types (#486, #501, #508).
    • \u2728 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)
    • \u2728 Added EOF fixture format (#512).
    • \u2728 Verify filled EOF fixtures using evmone-eofparse during fill execution (#519).
    • \u2728 Added --traces support when running with Hyperledger Besu (#511).
    • \u2728 Use pytest's \"short\" traceback style (--tb=short) for failure summaries in the test report for more compact terminal output (#542).
    • \u2728 The fill command now generates HTML test reports with links to the JSON fixtures and debug information (#537).
    • \u2728 Add an Ethereum RPC client class for use with consume commands (#556).
    • \u2728 Add a \"slow\" pytest marker, in order to be able to limit the filled tests until release (#562).
    • \u2728 Add a CLI tool that generates blockchain tests as Python from a transaction hash (#470, #576).
    • \u2728 Add more Transaction and Block exceptions from existing ethereum/tests repo (#572).
    • \u2728 Add \"description\" and \"url\" fields containing test case documentation and a source code permalink to fixtures during fill and use them in consume-generated Hive test reports (#579).
    • \u2728 Add git workflow evmone coverage script for any new lines mentioned in converted_ethereum_tests.txt (#503).
    • \u2728 Add a new covariant marker with_all_contract_creating_tx_types that allows automatic parametrization of a test with all contract-creating transaction types at the current executing fork (#602).
    • \u2728 Tests are now encouraged to declare a pre: Alloc parameter to get the pre-allocation object for the test, and use pre.deploy_contract and pre.fund_eoa to deploy contracts and fund accounts respectively, instead of declaring the pre as a dictionary or modifying its contents directly (see the state test tutorial for an updated example) (#584).
    • \u2728 Enable loading of ethereum/tests/BlockchainTests (#596).
    • \ud83d\udd00 Refactor gentest to use ethereum_test_tools.rpc.rpc by adding to get_transaction_by_hash, debug_trace_call to EthRPC (#568).
    • \u2728 Write a properties file to the output directory and enable direct generation of a fixture tarball from fill via --output=fixtures.tgz(#627).
    • \ud83d\udd00 ethereum_test_tools library has been split into multiple libraries (#645).
    • \u2728 Add the consume engine simulator and refactor the consume simulator suite. (#691).
    • \ud83d\udc1e Prevents forcing consume to use stdin as an input when running from hive. (#701).
    "},{"location":"CHANGELOG/#misc_1","title":"\ud83d\udccb Misc","text":"
    • \ud83d\udc1e Fix CI by using Golang 1.21 in Github Actions to build geth (#484).
    • \ud83d\udca5 \"Merge\" has been renamed to \"Paris\" in the \"network\" field of the Blockchain tests, and in the \"post\" field of the State tests (#480).
    • \u2728 Port entry point scripts to use click and add tests (#483).
    • \ud83d\udca5 As part of the pydantic conversion, the fixtures have the following (possibly breaking) changes (#486):
    • State test field transaction now uses the proper zero-padded hex number format for fields maxPriorityFeePerGas, maxFeePerGas, and maxFeePerBlobGas
    • Fixtures' hashes (in the _info field) are now calculated by removing the \"_info\" field entirely instead of it being set to an empty dict.
    • \ud83d\udc1e Relax minor and patch dependency requirements to avoid conflicting package dependencies (#510).
    • \ud83d\udd00 Update all CI actions to use their respective Node.js 20 versions, ahead of their Node.js 16 version deprecations (#527).
    • \u2728 Releases now contain a fixtures_eip7692.tar.gz which contains all EOF fixtures (#573).
    • \u2728 Use solc-select for tox when running locally and within CI (#604).
    "},{"location":"CHANGELOG/#breaking-change_1","title":"\ud83d\udca5 Breaking Change","text":"
    • Cancun is now the latest deployed fork, and the development fork is now Prague (#489).
    • Stable fixtures artifact fixtures.tar.gz has been renamed to fixtures_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_newPayload format in the execution-apis specification (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).
    "},{"location":"CHANGELOG/#v211-2024-03-09","title":"v2.1.1 - 2024-03-09","text":""},{"location":"CHANGELOG/#test-cases_2","title":"\ud83e\uddea Test Cases","text":"
    • \ud83d\udc1e Dynamic create2 collision from different transactions same block (#430).
    • \ud83d\udc1e Fix beacon root contract deployment tests so the account in the pre-alloc is not empty (#425).
    • \ud83d\udd00 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)
    "},{"location":"CHANGELOG/#framework_2","title":"\ud83d\udee0\ufe0f Framework","text":"
    • \u2728 Adds two consume commands #339:

    • consume direct - Execute a test fixture directly against a client using a blocktest-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.

    • \u2728 Add Prague to forks (#419).

    • \u2728 Improve handling of the argument passed to solc --evm-version when compiling Yul code (#418).
    • \ud83d\udc1e Fix fill -m yul_test which failed to filter tests that are (dynamically) marked as a yul test (#418).
    • \ud83d\udd00 Helper methods to_address, to_hash and to_hash_bytes have been deprecated in favor of Address and Hash, which are automatically detected as opcode parameters and pushed to the stack in the resulting bytecode (#422).
    • \u2728 Opcodes enum now contains docstrings with each opcode description, including parameters and return values, which show up in many development environments (#424) @ThreeHrSleep.
    • \ud83d\udd00 Locally calculate state root for the genesis blocks in the blockchain tests instead of calling t8n (#450).
    • \ud83d\udc1e Fix bug that causes an exception during test collection because the fork parameter contains None (#452).
    • \u2728 The _info field in the test fixtures now contains a hash field, which is the hash of the test fixture, and a hasher script has been added which prints and performs calculations on top of the hashes of all fixtures (see hasher -h) (#454).
    • \u2728 Adds an optional verify_sync field to hive blockchain tests (EngineAPI). When set to true a second client attempts to sync to the first client that executed the tests (#431).
    • \ud83d\udc1e Fix manually setting the gas limit in the genesis test env for post genesis blocks in blockchain tests (#472).
    "},{"location":"CHANGELOG/#evm-tools_1","title":"\ud83d\udd27 EVM Tools","text":""},{"location":"CHANGELOG/#misc_2","title":"\ud83d\udccb Misc","text":"
    • \ud83d\udc1e Fix deprecation warnings due to outdated config in recommended VS Code project settings (#420).
    • \ud83d\udc1e Fix typo in the selfdestruct revert tests module (#421).
    "},{"location":"CHANGELOG/#v210-2024-01-29-cancun","title":"v2.1.0 - 2024-01-29: \ud83d\udc0d\ud83c\udfd6\ufe0f Cancun","text":"

    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.

    "},{"location":"CHANGELOG/#test-cases_3","title":"\ud83e\uddea Test Cases","text":"
    • \u2728 EIP-4844: Adds test_blob_gas_subtraction_tx() verifying the blob gas fee is subtracted from the sender before executing the blob tx (#407).
    "},{"location":"CHANGELOG/#framework_3","title":"\ud83d\udee0\ufe0f Framework","text":"
    • \ud83d\udc1e 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).
    "},{"location":"CHANGELOG/#misc_3","title":"\ud83d\udccb Misc","text":"
    • \u2728 Use run-parallel and shared wheel packages for tox (#408).
    "},{"location":"CHANGELOG/#v200-2024-01-25-cancun","title":"v2.0.0 - 2024-01-25: \ud83d\udc0d\ud83c\udfd6\ufe0f Cancun","text":"

    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 \"\ud83d\udca5 Breaking Changes\" section below for more information.

    "},{"location":"CHANGELOG/#test-cases_4","title":"\ud83e\uddea Test Cases","text":"
    • \u2728 EIP-4844: Add test_sufficient_balance_blob_tx() and test_sufficient_balance_blob_tx_pre_fund_tx() (#379).
    • \u2728 EIP-6780: Add a reentrancy suicide revert test (#372).
    • \u2728 EIP-1153: Add test_run_until_out_of_gas() for transient storage opcodes (#401).
    • \u2728 EIP-198: Add tests for the MODEXP precompile (#364).
    • \u2728 Tests for nested CALL and CALLCODE gas consumption with a positive value transfer (previously lacking coverage) (#371).
    • \ud83d\udc1e 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).
    • \ud83d\udc1e EIP-4844: Fixed test_insufficient_balance_blob_tx() to correctly calculate the minimum balance required for the accounts (#379).
    • \ud83d\udc1e EIP-4844: Fix and enable test_invalid_blob_tx_contract_creation (#379).
    • \ud83d\udd00 Convert all eligible BlockchainTests to StateTests (and additionally generate corresponding BlockchainTests) (#368, #370).
    "},{"location":"CHANGELOG/#framework_4","title":"\ud83d\udee0\ufe0f Framework","text":"
    • \u2728 Add StateTest fixture format generation; StateTests now generate a StateTest and a corresponding BlockchainTest test fixture, previously only BlockchainTest fixtures were generated (#368).
    • \u2728 Add StateTestOnly fixture format is now available and its only difference with StateTest is that it does not produce a BlockchainTest (#368).
    • \u2728 Add evm_bytes_to_python command-line utility which converts EVM bytecode to Python Opcodes (#357).
    • \u2728 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).
    • \u2728 Add solc 0.8.23 support (#373).
    • \u2728 Add framework unit tests for post state exception verification (#350).
    • \u2728 Add a helper class ethereum_test_tools.TestParameterGroup to define test parameters as dataclasses and auto-generate test IDs (#364).
    • \u2728 Add a --single-fixture-per-file flag to generate one fixture JSON file per test case (#331).
    • \ud83d\udc1e Storage type iterator is now fixed (#369).
    • \ud83d\udc1e Fix type coercion in FixtureHeader.join() (#398).
    • \ud83d\udd00 Locally calculate the transactions list's root instead of using the one returned by t8n when producing BlockchainTests (#353).
    • \ud83d\udd00 Change custom exception classes to dataclasses to improve testability (#386).
    • \ud83d\udd00 Update fork name from \"Merge\" to \"Paris\" used within the framework and tests (#363).
    • \ud83d\udca5 Replace = with _ in pytest node ids and test fixture names (#342).
    • \ud83d\udca5 The StateTest, spec format used to write tests, is now limited to a single transaction per test (#361).
    • \ud83d\udca5 Tests must now use BlockException and TransactionException to 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).
    • \ud83d\udca5 fill: Remove the --enable-hive flag; now all test types are generated by default (#358).
    • \ud83d\udca5 Rename test fixtures names to match the corresponding pytest node ID as generated using fill (#342).
    "},{"location":"CHANGELOG/#misc_4","title":"\ud83d\udccb Misc","text":"
    • \u2728 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).
    • \ud83d\udd00 Docs: Update t8n tool branch to fill tests for development features in the readme (#338).
    • \ud83d\udd00 Filling tool: Updated the default filling tool (t8n) to go-ethereum@master (#368).
    • \ud83d\udc1e Docs: Fix error banner in online docs due to mermaid syntax error (#398).
    • \ud83d\udc1e Docs: Fix incorrectly formatted nested lists in online doc (#403).
    "},{"location":"CHANGELOG/#breaking-changes","title":"\ud83d\udca5 Breaking Changes","text":"

    A concrete example of the test name renaming and change in directory structure is provided below.

    1. Fixture output, including release tarballs, now contain subdirectories for different test types:

    2. blockchain_tests: Contains BlockchainTest formatted tests

    3. blockchain_tests_hive: Contains BlockchainTest with Engine API call directives for use in hive
    4. state_tests: Contains StateTest formatted tests

    5. StateTest, spec format used to write tests, is now limited to a single transaction per test.

    6. 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.
    7. Produced blockchain_tests fixtures and their corresponding blockchain_tests_hive fixtures now contain the named exceptions BlockException and TransactionException as strings in the expectException and validationError fields, respectively. These exceptions can be used to test whether the client is hitting the proper exception when processing an invalid block.

    Blockchain test:

    \"blocks\": [\n      {\n         ...\n         \"expectException\": \"TransactionException.INSUFFICIENT_ACCOUNT_FUNDS\",\n         ...\n      }\n      ...\n]\n

    Blockchain hive test:

    \"engineNewPayloads\": [\n      {\n         ...\n         \"validationError\": \"TransactionException.INSUFFICIENT_ACCOUNT_FUNDS\",\n         ...\n      }\n      ...\n]\n
    "},{"location":"CHANGELOG/#renaming-and-release-tarball-directory-structure-change-example","title":"Renaming and Release Tarball Directory Structure Change Example","text":"

    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].

    1. Pytest node ID example:

    2. Previous node ID: tests/frontier/opcodes/test_dup.py::test_dup[fork=Frontier].

    3. New node ID: tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier].

    4. Fixture name example:

    5. Previous fixture name: 000-fork=Frontier

    6. New fixture name: tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier] (now the same as the pytest node ID).

    7. Fixture JSON file name example (within the release tarball):

    8. Previous fixture file name: fixtures/frontier/opcodes/dup/dup.json (BlockChainTest format).

    9. New fixture file names (all present within the release tarball):

      • fixtures/state_tests/frontier/opcodes/dup/dup.json (StateTest format).
      • fixtures/blockchain_tests/frontier/opcodes/dup/dup.json (BlockChainTest format).
      • fixtures/blockchain_tests_hive/frontier/opcodes/dup/dup.json (a blockchain test in HiveFixture format).
    "},{"location":"CHANGELOG/#v106-2023-10-19-cancun-devnet-10","title":"v1.0.6 - 2023-10-19: \ud83d\udc0d\ud83c\udfd6\ufe0f Cancun Devnet 10","text":""},{"location":"CHANGELOG/#test-cases_5","title":"\ud83e\uddea Test Cases","text":"
    • \ud83d\udd00 EIP-4844: Update KZG point evaluation test vectors to use data from the official KZG setup and Mainnet Trusted Setup (#336).
    "},{"location":"CHANGELOG/#framework_5","title":"\ud83d\udee0\ufe0f Framework","text":"
    • \ud83d\udd00 Fixtures: Add a non-RLP format field (rlp_decoded) to invalid blocks (#322).
    • \ud83d\udd00 Spec: Refactor state and blockchain spec (#307).
    "},{"location":"CHANGELOG/#evm-tools_2","title":"\ud83d\udd27 EVM Tools","text":"
    • \u2728 Run geth's evm blocktest command to verify JSON fixtures after test case execution (--verify-fixtures) (#325).
    • \u2728 Enable tracing support for ethereum-spec-evm (#289).
    "},{"location":"CHANGELOG/#misc_5","title":"\ud83d\udccb Misc","text":"
    • \u2728 Tooling: Add Python 3.12 support (#309).
    • \u2728 Process: Added a Github pull request template (#308).
    • \u2728 Docs: Changelog updated post release (#321).
    • \u2728 Docs: Add a section explaining execution-spec-tests release artifacts (#334).
    • \ud83d\udd00 T8N Tool: Branch used to generate the tests for Cancun is now lightclient/go-ethereum@devnet-10 (#336)
    "},{"location":"CHANGELOG/#breaking-change_2","title":"\ud83d\udca5 Breaking Change","text":"
    • Fixtures now use the Mainnet Trusted Setup merged on consensus-specs#3521 (#336)
    "},{"location":"CHANGELOG/#v105-2023-09-26-cancun-devnet-9-release-3","title":"v1.0.5 - 2023-09-26: \ud83d\udc0d\ud83c\udfd6\ufe0f Cancun Devnet 9 Release 3","text":"

    This release mainly serves to update the EIP-4788 beacon roots address to 0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02, as updated in ethereum/EIPs/pull/7672.

    "},{"location":"CHANGELOG/#test-cases_6","title":"\ud83e\uddea Test Cases","text":"
    • \ud83d\udc1e EIP-4844: Fix invalid blob txs pre-Cancun engine response (#306).
    • \u2728 EIP-4788: Final update to the beacon root address (#312).
    "},{"location":"CHANGELOG/#misc_6","title":"\ud83d\udccb Misc","text":"
    • \u2728 Docs: Changelog added (#305).
    • \u2728 CI/CD: Run development fork tests in Github Actions (#302).
    • \u2728 CI/CD: Generate test JSON fixtures on push (#303).
    "},{"location":"CHANGELOG/#breaking-change_3","title":"\ud83d\udca5 Breaking Change","text":"

    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
    "},{"location":"CHANGELOG/#v104-2023-09-21-cancun-devnet-9-release-2","title":"v1.0.4 - 2023-09-21: \ud83d\udc0d Cancun Devnet 9 Release 2","text":"

    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.

    "},{"location":"CHANGELOG/#test-cases_7","title":"\ud83e\uddea Test Cases","text":"
    • \u2728 EIP-7516: BLOBBASEFEE opcode: Add first and comprehensive tests (@marioevz in #294).
    • \u2728 EIP-4788: Beacon block root in the EVM: Increase coverage (@spencer-tb in #297).
    • \ud83d\udc1e EIP-1153: Transient storage opcodes: Remove conftest '+1153' in network field (@spencer-tb in #299).
    "},{"location":"CHANGELOG/#framework_6","title":"\ud83d\udee0\ufe0f Framework","text":"
    • \ud83d\udd00 EIP-4788: Beacon root contract is pre-deployed at 0xbEAC020008aFF7331c0A389CB2AAb67597567d7a (@spencer-tb in #297).
    • \u2728 Deprecate empty accounts within framework (@spencer-tb in #300).
    • \u2728 Fixture generation split based on hive specificity (@spencer-tb in #301).
    • \ud83d\udca5 fill: --disable-hive flag removed; replaced by --enable-hive (@spencer-tb in #301).
    • \u2728 Add engine API forkchoice updated information in fixtures (@spencer-tb in #256).
    "},{"location":"CHANGELOG/#v103-2023-09-14-cancun-devnet-9-release","title":"v1.0.3 - 2023-09-14: \ud83d\udc0d Cancun Devnet 9 Release","text":"

    See v1.0.3.

    "},{"location":"CHANGELOG/#v102-2023-08-11-cancun-devnet-8-4788-v2-pre-release","title":"v1.0.2 - 2023-08-11: \ud83d\udc0d Cancun Devnet 8 + 4788 v2 Pre-Release","text":"

    See v1.0.2.

    "},{"location":"CHANGELOG/#v101-2023-08-03-cancun-devnet-8-pre-release","title":"v1.0.1 - 2023-08-03: \ud83d\udc0d Cancun Devnet-8 Pre-Release","text":"

    See v1.0.1.

    "},{"location":"CHANGELOG/#v100-2023-06-27-welcome-to-the-pytest-era","title":"v1.0.0 - 2023-06-27: \ud83e\uddea Welcome to the Pytest Era","text":"

    See v1.0.0.

    Older releases can be found on the releases page.

    "},{"location":"changelog_section_template/","title":"Changelog Section Template","text":"

    The following can be copy-pasted into the CHANGELOG.md file for a new release.

    "},{"location":"changelog_section_template/#unreleased","title":"\ud83d\udd1c [Unreleased]","text":""},{"location":"changelog_section_template/#test-cases","title":"\ud83e\uddea Test Cases","text":""},{"location":"changelog_section_template/#framework","title":"\ud83d\udee0\ufe0f Framework","text":""},{"location":"changelog_section_template/#evm-tools","title":"\ud83d\udd27 EVM Tools","text":""},{"location":"changelog_section_template/#misc","title":"\ud83d\udccb Misc","text":""},{"location":"navigation/","title":"Navigation","text":"
    • Overview
    • Getting Started
      • Quick Start
      • VS Code Setup
      • Repository Overview
      • Installation Troubleshooting
      • Executing Tests at a Prompt
      • Executing Tests in VS Code
      • Executing Tests for Features Under Development
      • Debugging Transition Tools
    • Writing Tests
      • Code Standards
      • Types of Test
      • Adding a New Test
      • Writing a New Test
      • Test Markers
      • Referencing an EIP Spec Version
      • Verifying Changes Locally
      • Exception Tests
    • Tutorials
      • State Transition Tests
    • Consuming Tests
      • State Tests
      • Blockchain Tests
      • Blockchain Engine Tests
      • EOF Tests
      • Common Types
      • Exceptions
    • Getting Help
    • Developer Doc
      • Documentation
      • Coding Style
      • Enabling Precommit Checks
    • Changelog
    • Library Reference
      • Ethereum Test Base Types Package
      • Ethereum Test Exceptions Package
      • Ethereum Test Fixtures Package
      • Ethereum Test Forks Package
      • Ethereum Test Specs Package
      • Ethereum Test Tools Package
      • Ethereum Test Types Package
      • Ethereum Test VM Package
      • EVM Transition Tool Package
      • Pytest Plugins
      • Filler Plugin
    • Test case reference
      • Prague
        • EIP-2537 Bls 12 381 Precompiles
          • Spec
          • Test Bls12 G1add
            • Test Cases
          • Test Bls12 G1msm
            • Test Cases
          • Test Bls12 G1mul
            • Test Cases
          • Test Bls12 G2add
            • Test Cases
          • Test Bls12 G2msm
            • Test Cases
          • Test Bls12 G2mul
            • Test Cases
          • Test Bls12 Map Fp2 To G2
            • Test Cases
          • Test Bls12 Map Fp To G1
            • Test Cases
          • Test Bls12 Pairing
            • Test Cases
          • Test Bls12 Precompiles Before Fork
            • Test Cases
          • Test Bls12 Variable Length Input Contracts
            • Test Cases
          • Vectors
            • Test-vectors
        • EIP-2935 Historical Block Hashes From State
          • Spec
          • Test Block Hashes
            • Test Cases
        • EIP-6110 Deposits
          • Spec
          • Test Deposits
            • Test Cases
        • EIP-7002 El Triggerable Withdrawals
          • Spec
          • Test Withdrawal Requests
            • Test Cases
        • EIP-7251 Consolidations
          • Spec
          • Test Consolidations
            • Test Cases
        • EIP-7685 General Purpose El Requests
          • Spec
          • Test Deposits Withdrawals Consolidations
            • Test Cases
        • EIP-7692 Eof V1
          • Tracker
          • EIP-3540 Eof V1
            • Spec
            • Test All Opcodes In Container
              • Test Cases
            • Test Code Validation
              • Test Cases
            • Test Container Size
              • Test Cases
            • Test Container Validation
              • Test Cases
            • Test Eof Example
              • Test Cases
            • Test Execution Function
              • Test Cases
            • Test Extcode
              • Test Cases
            • Test Migrated Valid Invalid
              • Test Cases
            • Test Section Header Body Mismatch
              • Test Cases
            • Test Section Order
              • Test Cases
            • Test Section Size
              • Test Cases
          • EIP-4200 Relative Jumps
            • Test Rjump
              • Test Cases
            • Test Rjumpi
              • Test Cases
            • Test Rjumpv
              • Test Cases
          • EIP-4750 Functions
            • Test Callf Execution
              • Test Cases
            • Test Code Validation
              • Test Cases
          • EIP-6206 Jumpf
            • Spec
            • Test Jumpf Execution
              • Test Cases
            • Test Jumpf Stack
              • Test Cases
            • Test Jumpf Target
              • Test Cases
          • EIP-663 DUPn Swapn Exchange
            • Test DUPn
              • Test Cases
            • Test Exchange
              • Test Cases
            • Test Swapn
              • Test Cases
          • EIP-7069 Extcall
            • Spec
            • Test Address Space Extension
              • Test Cases
            • Test Calldata
              • Test Cases
            • Test Calls
              • Test Cases
            • Test Gas
              • Test Cases
            • Test Returndatacopy Memory Expansion
              • Test Cases
            • Test Returndataload
              • Test Cases
          • EIP-7480 Data Section
            • Spec
            • Test Code Validation
              • Test Cases
            • Test Data Opcodes
              • Test Cases
            • Test Datacopy Memory Expansion
              • Test Cases
          • EIP-7620 Eof Create
            • Spec
            • Test Eofcreate
              • Test Cases
            • Test Eofcreate Failures
              • Test Cases
            • Test Legacy Eof Creates
              • Test Cases
            • Test Returncontract
              • Test Cases
            • Test Subcontainer Validation
              • Test Cases
        • EIP-7702 Eoa Code Tx
          • Spec
          • Test Eoa Code Txs
            • Test Cases
      • Cancun
        • EIP-1153 Tstore
          • Spec
          • Test Basic Tload
            • Test Cases
          • Test Tload Calls
            • Test Cases
          • Test Tload Reentrancy
            • Test Cases
          • Test Tstorage
            • Test Cases
          • Test Tstorage Create Contexts
            • Test Cases
          • Test Tstorage Execution Contexts
            • Test Cases
          • Test Tstorage Reentrancy Contexts
            • Test Cases
          • Test Tstorage Selfdestruct
            • Test Cases
          • Test Tstore Reentrancy
            • Test Cases
        • EIP-4788 Beacon Root
          • Spec
          • Test Beacon Root Contract
            • Test Cases
        • EIP-4844 Blobs
          • Spec
          • Test Blob Txs
            • Test Cases
          • Test Blob Txs Full
            • Test Cases
          • Test Blobhash Opcode
            • Test Cases
          • Test Blobhash Opcode Contexts
            • Test Cases
          • Test Excess Blob Gas
            • Test Cases
          • Test Excess Blob Gas Fork Transition
            • Test Cases
          • Test Point Evaluation Precompile
            • Test Cases
          • Test Point Evaluation Precompile Gas
            • Test Cases
          • Point Evaluation Vectors
            • Readme
        • EIP-5656 Mcopy
          • Test Mcopy
            • Test Cases
          • Test Mcopy Contexts
            • Test Cases
          • Test Mcopy Memory Expansion
            • Test Cases
        • EIP-6780 Selfdestruct
          • Test Dynamic Create2 Selfdestruct Collision
            • Test Cases
          • Test Reentrancy Selfdestruct Revert
            • Test Cases
          • Test Selfdestruct
            • Test Cases
          • Test Selfdestruct Revert
            • Test Cases
        • EIP-7516 Blobgasfee
          • Test Blobgasfee Opcode
            • Test Cases
      • Shanghai
        • EIP-3651 Warm Coinbase
          • Spec
          • Test Warm Coinbase
            • Test Cases
        • EIP-3855 Push0
          • Spec
          • Test Push0
            • Test Cases
        • EIP-3860 Initcode
          • Spec
          • Test Initcode
            • Test Cases
        • EIP-4895 Withdrawals
          • Spec
          • Test Withdrawals
            • Test Cases
      • Paris
        • Security
          • Test Selfdestruct Balance Bug
            • Test Cases
      • Berlin
        • EIP-2930 Access List
          • Test ACL
            • Test Cases
      • Istanbul
        • EIP-1344 CHAINID
          • Test CHAINID
            • Test Cases
      • Constantinople
        • EIP-1014 Create2
          • Spec
          • Test Create Returndata
            • Test Cases
          • Test Recreate
            • Test Cases
      • Byzantium
        • EIP-198 Modexp Precompile
          • Test Modexp
            • Test Cases
      • Homestead
        • Coverage
          • Test Coverage
            • Test Cases
        • Yul
          • Test Yul Example
            • Test Cases
      • Frontier
        • Opcodes
          • Test All Opcodes
            • Test Cases
          • Test Call And Callcode Gas Calculation
            • Test Cases
          • Test DUP
            • Test Cases
          • Test Selfdestruct
            • Test Cases
    "},{"location":"consuming_tests/","title":"Consuming Tests (Fixtures) Generated by execution-spec-tests","text":"

    ethereum/execution-spec-tests generates JSON test fixtures in different formats that can be consumed by execution clients either directly or via Hive:

    Format Consumed by the client Location in .tar.gz release State Tests directly via a statetest-like command (e.g., go-ethereum/cmd/evm/staterunner.go) ./fixtures/state_tests/ Blockchain Tests directly via a blocktest-like command (e.g., go-ethereum/cmd/evm/blockrunner.go) ./fixtures/blockchain_tests/ Blockchain Engine Tests in the Hive pyspec simulator via the Engine API and other RPC endpoints ./fixtures/blockchain_tests_engine/

    Here's a top-level comparison of the different methods of consuming tests:

    Consumed via Scope Pros Cons statetest or blocktest-like command Module test - Fast feedback loop- Less complex - Smaller coverage scope- Requires a dedicated interface to the client EVM to consume the JSON fixtures and execute tests hive --sim ethereum/pyspec System test / Integration test - Wider Coverage Scope- Tests more of the client stack - Slower feedback loop- Harder to debug- Post-Merge forks only (requires the Engine API)

    Running blocktest, statetest, directly within the execution-spec-tests framework

    It's possible to execute evm blocktest directly within the execution-spec-tests framework. This is intended to verify fixture generation, see Debugging t8n Tools.

    Generating test fixtures using a t8n tool via fill is not considered to be the actual test

    The fill command uses t8n tools to generate fixtures. Whilst this will provide basic sanity checking of EVM behavior and a sub-set of post conditions are typically checked within test cases, it is not considered the actual test. The actual test is the execution of the fixture against the EVM which will check the entire post allocation and typically use different code paths than t8n commands.

    "},{"location":"consuming_tests/#release-formats","title":"Release Formats","text":"

    The ethereum/execution-spec-tests repository provides releases of fixtures in various formats (as of 2023-10-16):

    Release Artifact Consumer Fork/feature scope fixtures.tar.gz Clients All tests until the last stable fork (\"must pass\") fixtures_develop.tar.gz Clients All tests until the last development fork"},{"location":"consuming_tests/#obtaining-the-most-recent-release-artifacts","title":"Obtaining the Most Recent Release Artifacts","text":"

    Artifacts can be downloaded directly from the release page. The following script demonstrates how the most recent release version of a specific artifact can be downloaded using the Github API:

    #!/bin/bash\n\n# requires jq\n# sudo apt install jq\n\n# The following two artifacts are intended for consumption by clients:\n# - fixtures.tar.gz: Generated up to the last deployed fork.\n# - fixtures_develop.tar.gz: Generated up to and including the latest dev fork.\n# As of March 2024, dev is Prague, deployed is Cancun.\n\nARTIFACT=\"fixtures_develop.tar.gz\"  \n\nOWNER=\"ethereum\"\nREPO=\"execution-spec-tests\"\n\nDOWNLOAD_URL=$(curl -s https://api.github.com/repos/$OWNER/$REPO/releases/latest \\\n                   | jq -r '.assets[] | select(.name==\"'$ARTIFACT'\").browser_download_url')\n\n# Sanity check for the download URL: contains a version tag prefixed with \"v\"\nif [[ \"$DOWNLOAD_URL\" =~ v[0-9]+\\.[0-9]+\\.[0-9]+ ]]; then\n    curl -LO $DOWNLOAD_URL\nelse\n    echo \"Error: URL does not contain a valid version tag (URL: ${DOWNLOAD_URL}).\"\n    exit 1\nfi\n
    "},{"location":"consuming_tests/blockchain_test/","title":"Blockchain Tests","text":"

    The Blockchain Test fixture format tests are included in the fixtures subdirectory blockchain_tests.

    These are produced by the StateTest and BlockchainTest test specs.

    "},{"location":"consuming_tests/blockchain_test/#description","title":"Description","text":"

    The blockchain test fixture format is used to test block validation and the consensus rules of the Ethereum blockchain.

    It does so by defining a pre-execution state, a series of blocks, and a post-execution state, verifying that, after all the blocks have been processed, appended if valid or rejected if invalid, the result is the expected post-execution state.

    A single JSON fixture file is composed of a JSON object where each key-value pair is a different Fixture test object, with the key string representing the test name.

    The JSON file path plus the test name are used as the unique test identifier.

    "},{"location":"consuming_tests/blockchain_test/#consumption","title":"Consumption","text":"

    For each Fixture test object in the JSON fixture file, perform the following steps:

    1. Use network to configure the execution fork schedule according to the Fork type definition.
    2. Use pre as the starting state allocation of the execution environment for the test and calculate the genesis state root.
    3. Decode genesisRLP to obtain the genesis block header, if the block cannot be decoded, fail the test.
    4. Compare the genesis block header with genesisBlockHeader, if any field does not match, fail the test.
    5. Compare the state root calculated on step 2 with the state root in the genesis block header, if they do not match, fail the test.
    6. Set the genesis block as the current head of the chain.
    7. If blocks contains at least one block, perform the following steps for each FixtureBlock or InvalidFixtureBlock:

      1. Determine whether the current block is valid or invalid:

        1. If the expectException field is not present, it is valid, and object must be decoded as a FixtureBlock.
        2. If the expectException field is present, it is invalid, and object must be decoded as a InvalidFixtureBlock.
      2. Attempt to decode field rlp as the current block

        1. If the block cannot be decoded:
          • If an rlp decoding exception is not expected for the current block, fail the test.
          • If an rlp decoding error is expected, pass the test (Note: A block with an expected exception will be the last block in the fixture).
        2. If the block can be decoded, proceed to the next step.
      3. Attempt to apply the current decoded block on top of the current head of the chain

        1. If the block cannot be applied:
          • If an exception is expected on the current block and it matches the exception obtained upon execution, pass the test. (Note: A block with an expected exception will be the last block in the fixture)
          • If an exception is not expected on the current block, fail the test
        2. If the block can be applied:
          • If an exception is expected on the current block, fail the test
          • If an exception is not expected on the current block, set the decoded block as the current head of the chain and proceed to the next block until you reach the last block in the fixture.
    8. Compare the hash of the current head of the chain against lastblockhash, if they do not match, fail the test.

    9. Compare all accounts and the fields described in post against the current state, if any do not match, fail the test.
    "},{"location":"consuming_tests/blockchain_test/#structures","title":"Structures","text":""},{"location":"consuming_tests/blockchain_test/#fixture","title":"Fixture","text":""},{"location":"consuming_tests/blockchain_test/#-network-fork","title":"- network: Fork","text":"

    Fork configuration for the test.

    "},{"location":"consuming_tests/blockchain_test/#-pre-alloc","title":"- pre: Alloc","text":"

    Starting account allocation for the test. State root calculated from this allocation must match the one in the genesis block.

    "},{"location":"consuming_tests/blockchain_test/#-genesisrlp-bytes","title":"- genesisRLP: Bytes","text":"

    RLP serialized version of the genesis block.

    "},{"location":"consuming_tests/blockchain_test/#-genesisblockheader-fixtureheader","title":"- genesisBlockHeader: FixtureHeader","text":"

    Genesis block header.

    "},{"location":"consuming_tests/blockchain_test/#-blocks-listfixtureblockinvalidfixtureblock","title":"- blocks: List[FixtureBlock|InvalidFixtureBlock]","text":"

    List of blocks to be processed after the genesis block.

    "},{"location":"consuming_tests/blockchain_test/#-lastblockhash-hash","title":"- lastblockhash: Hash","text":"

    Hash of the last valid block, or the genesis block hash if the list of blocks is empty, or contains a single invalid block.

    "},{"location":"consuming_tests/blockchain_test/#-post-alloc","title":"- post: Alloc","text":"

    Account allocation for verification after all the blocks have been processed.

    "},{"location":"consuming_tests/blockchain_test/#-sealengine-str","title":"- sealEngine: str","text":"

    Deprecated: Seal engine used to mine the blocks.

    "},{"location":"consuming_tests/blockchain_test/#fixtureheader","title":"FixtureHeader","text":""},{"location":"consuming_tests/blockchain_test/#-parenthash-hash","title":"- parentHash: Hash","text":"

    Hash of the parent block.

    "},{"location":"consuming_tests/blockchain_test/#-unclehash-hash","title":"- uncleHash: Hash","text":"

    Hash of the uncle block list.

    "},{"location":"consuming_tests/blockchain_test/#-coinbase-address","title":"- coinbase: Address","text":"

    Address of the account that will receive the rewards for building the block.

    "},{"location":"consuming_tests/blockchain_test/#-stateroot-hash","title":"- stateRoot: Hash","text":"

    Root hash of the state trie.

    "},{"location":"consuming_tests/blockchain_test/#-transactionstrie-hash","title":"- transactionsTrie: Hash","text":"

    Root hash of the transactions trie.

    "},{"location":"consuming_tests/blockchain_test/#-receipttrie-hash","title":"- receiptTrie: Hash","text":"

    Root hash of the receipts trie.

    "},{"location":"consuming_tests/blockchain_test/#-bloom-bloom","title":"- bloom: Bloom","text":"

    Bloom filter composed of the logs of all the transactions in the block.

    "},{"location":"consuming_tests/blockchain_test/#-difficulty-zeropaddedhexnumber","title":"- difficulty: ZeroPaddedHexNumber","text":"

    Difficulty of the block.

    "},{"location":"consuming_tests/blockchain_test/#-number-zeropaddedhexnumber","title":"- number: ZeroPaddedHexNumber","text":"

    Number of the block.

    "},{"location":"consuming_tests/blockchain_test/#-gaslimit-zeropaddedhexnumber","title":"- gasLimit: ZeroPaddedHexNumber","text":"

    Total gas limit of the block.

    "},{"location":"consuming_tests/blockchain_test/#-gasused-zeropaddedhexnumber","title":"- gasUsed: ZeroPaddedHexNumber","text":"

    Total gas used by all the transactions in the block.

    "},{"location":"consuming_tests/blockchain_test/#-timestamp-zeropaddedhexnumber","title":"- timestamp: ZeroPaddedHexNumber","text":"

    Timestamp of the block.

    "},{"location":"consuming_tests/blockchain_test/#-extradata-bytes","title":"- extraData: Bytes","text":"

    Extra data of the block.

    "},{"location":"consuming_tests/blockchain_test/#-mixhash-hash","title":"- mixHash: Hash","text":"

    Mix hash or PrevRandao of the block.

    "},{"location":"consuming_tests/blockchain_test/#-nonce-headernonce","title":"- nonce: HeaderNonce","text":"

    Nonce of the block.

    "},{"location":"consuming_tests/blockchain_test/#-hash-hash","title":"- hash: Hash","text":"

    Hash of the block.

    "},{"location":"consuming_tests/blockchain_test/#-basefeepergas-zeropaddedhexnumber-fork-london","title":"- baseFeePerGas: ZeroPaddedHexNumber (fork: London)","text":"

    Base fee per gas of the block.

    "},{"location":"consuming_tests/blockchain_test/#-withdrawalsroot-hash-fork-shanghai","title":"- withdrawalsRoot: Hash (fork: Shanghai)","text":"

    Root hash of the withdrawals trie.

    "},{"location":"consuming_tests/blockchain_test/#-blobgasused-zeropaddedhexnumber-fork-cancun","title":"- blobGasUsed: ZeroPaddedHexNumber (fork: Cancun)","text":"

    Total blob gas used by all the transactions in the block.

    "},{"location":"consuming_tests/blockchain_test/#-excessblobgas-zeropaddedhexnumber-fork-cancun","title":"- excessBlobGas: ZeroPaddedHexNumber (fork: Cancun)","text":"

    Excess blob gas of the block used to calculate the blob fee per gas for this block.

    "},{"location":"consuming_tests/blockchain_test/#-parentbeaconblockroot-hash-fork-cancun","title":"- parentBeaconBlockRoot: Hash (fork: Cancun)","text":"

    Root hash of the parent beacon block.

    "},{"location":"consuming_tests/blockchain_test/#fixtureblock","title":"FixtureBlock","text":""},{"location":"consuming_tests/blockchain_test/#-rlp-bytes","title":"- rlp: Bytes","text":"

    RLP serialized version of the block. Field is only optional when embedded in a InvalidFixtureBlock as the rlp_decoded field.

    "},{"location":"consuming_tests/blockchain_test/#-blockheader-fixtureheader","title":"- blockHeader: FixtureHeader","text":"

    Decoded block header fields included in the block RLP.

    "},{"location":"consuming_tests/blockchain_test/#-blocknumber-number","title":"- blocknumber: Number","text":"

    Block number.

    "},{"location":"consuming_tests/blockchain_test/#-transactions-listfixturetransaction","title":"- transactions: List[FixtureTransaction]","text":"

    List of decoded transactions included in the block RLP.

    "},{"location":"consuming_tests/blockchain_test/#-uncleheaders-listfixtureheader","title":"- uncleHeaders: List[FixtureHeader]","text":"

    List of uncle headers included in the block RLP. An empty list post merge.

    "},{"location":"consuming_tests/blockchain_test/#-withdrawals-optionallistfixturewithdrawal-fork-shanghai","title":"- withdrawals: Optional[List[FixtureWithdrawal]] (fork: Shanghai)","text":"

    Optional list of withdrawals included in the block RLP.

    "},{"location":"consuming_tests/blockchain_test/#invalidfixtureblock","title":"InvalidFixtureBlock","text":""},{"location":"consuming_tests/blockchain_test/#-expectexception-transactionexceptionblockexception","title":"- expectException: TransactionException|BlockException","text":"

    Expected exception that invalidates the block.

    "},{"location":"consuming_tests/blockchain_test/#-rlp-bytes_1","title":"- rlp: Bytes","text":"

    RLP serialized version of the block.

    "},{"location":"consuming_tests/blockchain_test/#-rlp_decoded-optionalfixtureblock","title":"- rlp_decoded: Optional[FixtureBlock]","text":"

    Decoded block attributes included in the block RLP.

    "},{"location":"consuming_tests/blockchain_test/#fixturetransaction","title":"FixtureTransaction","text":""},{"location":"consuming_tests/blockchain_test/#-type-zeropaddedhexnumber","title":"- type: ZeroPaddedHexNumber","text":"

    Transaction type.

    "},{"location":"consuming_tests/blockchain_test/#-chainid-zeropaddedhexnumber","title":"- chainId: ZeroPaddedHexNumber","text":"

    Chain ID of the transaction.

    "},{"location":"consuming_tests/blockchain_test/#-nonce-zeropaddedhexnumber","title":"- nonce: ZeroPaddedHexNumber","text":"

    Nonce of the account that sends the transaction

    "},{"location":"consuming_tests/blockchain_test/#-gasprice-zeropaddedhexnumber","title":"- gasPrice: ZeroPaddedHexNumber","text":"

    Gas price for the transaction (Transaction types 0 & 1)

    "},{"location":"consuming_tests/blockchain_test/#-maxpriorityfeepergas-hexnumber-fork-london","title":"- maxPriorityFeePerGas: HexNumber (fork: London)","text":"

    Max priority fee per gas to pay (Transaction types 2 & 3)

    "},{"location":"consuming_tests/blockchain_test/#-maxfeepergas-hexnumber-fork-london","title":"- maxFeePerGas: HexNumber (fork: London)","text":"

    Max base fee per gas to pay (Transaction types 2 & 3)

    "},{"location":"consuming_tests/blockchain_test/#-gaslimit-zeropaddedhexnumber_1","title":"- gasLimit: ZeroPaddedHexNumber","text":"

    Gas limit of the transaction

    "},{"location":"consuming_tests/blockchain_test/#-to-address-null","title":"- to: Address| null","text":"

    Destination address of the transaction, or null to create a contract

    "},{"location":"consuming_tests/blockchain_test/#-value-zeropaddedhexnumber","title":"- value: ZeroPaddedHexNumber","text":"

    Value of the transaction

    "},{"location":"consuming_tests/blockchain_test/#-data-bytes","title":"- data: Bytes","text":"

    Data bytes of the transaction

    "},{"location":"consuming_tests/blockchain_test/#-accesslist-listmappingaddresslisthash-fork-berlin","title":"- accessList: List[Mapping[Address,List[Hash]]] (fork: Berlin)","text":"

    Account access lists (Transaction types 1, 2 & 3)

    "},{"location":"consuming_tests/blockchain_test/#-maxfeeperblobgas-zeropaddedhexnumber-fork-cancun","title":"- maxFeePerBlobGas: ZeroPaddedHexNumber (fork: Cancun)","text":"

    Max fee per blob gas to pay (Transaction type 3)

    "},{"location":"consuming_tests/blockchain_test/#-blobversionedhashes-listhash-fork-cancun","title":"- blobVersionedHashes: List[Hash] (fork: Cancun)","text":"

    Max fee per blob gas to pay (Transaction type 3)

    "},{"location":"consuming_tests/blockchain_test/#-v-zeropaddedhexnumber","title":"- v: ZeroPaddedHexNumber","text":"

    V value of the transaction signature

    "},{"location":"consuming_tests/blockchain_test/#-r-zeropaddedhexnumber","title":"- r: ZeroPaddedHexNumber","text":"

    R value of the transaction signature

    "},{"location":"consuming_tests/blockchain_test/#-s-zeropaddedhexnumber","title":"- s: ZeroPaddedHexNumber","text":"

    S value of the transaction signature

    "},{"location":"consuming_tests/blockchain_test/#-sender-address","title":"- sender: Address","text":"

    Sender address of the transaction

    "},{"location":"consuming_tests/blockchain_test/#-secretkey-hash","title":"- secretKey: Hash","text":"

    Private key that must be used to sign the transaction

    "},{"location":"consuming_tests/blockchain_test/#fixturewithdrawal","title":"FixtureWithdrawal","text":""},{"location":"consuming_tests/blockchain_test/#-index-zeropaddedhexnumber","title":"- index: ZeroPaddedHexNumber","text":"

    Index of the withdrawal

    "},{"location":"consuming_tests/blockchain_test/#-validatorindex-zeropaddedhexnumber","title":"- validatorIndex: ZeroPaddedHexNumber","text":"

    Withdrawing validator index

    "},{"location":"consuming_tests/blockchain_test/#-address-address","title":"- address: Address","text":"

    Address to withdraw to

    "},{"location":"consuming_tests/blockchain_test/#-amount-zeropaddedhexnumber","title":"- amount: ZeroPaddedHexNumber","text":"

    Amount of the withdrawal

    "},{"location":"consuming_tests/blockchain_test_engine/","title":"Blockchain Engine Tests","text":"

    The Blockchain Engine Test fixture format tests are included in the fixtures subdirectory blockchain_tests_engine, and use Engine API directives instead of the usual BlockchainTest format.

    These are produced by the StateTest and BlockchainTest test specs.

    "},{"location":"consuming_tests/blockchain_test_engine/#description","title":"Description","text":"

    The Blockchain Engine Test fixture format is used to test block validation and the consensus rules of the Ethereum blockchain, when a block is delivered through the Engine API as a engine_newPayloadVX directive.

    It does so by defining a pre-execution state, a series of blocks as engine_newPayloadVX directives, and a post-execution state, verifying that, after all the blocks have been processed, appended if valid or rejected if invalid, the result is the expected post-execution state.

    A single JSON fixture file is composed of a JSON object where each key-value pair is a different HiveFixture test object, with the key string representing the test name.

    The JSON file path plus the test name are used as the unique test identifier.

    "},{"location":"consuming_tests/blockchain_test_engine/#consumption","title":"Consumption","text":"

    For each HiveFixture test object in the JSON fixture file, perform the following steps:

    1. Start a full node using:

      • network to configure the execution fork schedule according to the Fork type definition.
      • pre as the starting state allocation of the execution environment for the test and calculate the genesis state root.
      • genesisBlockHeader as the genesis block header.
    2. Verify the head of the chain is the genesis block, and the state root matches the one calculated on step 1, otherwise fail the test.

    3. For each FixtureEngineNewPayload in engineNewPayloads:

      1. Deliver the payload using the engine_newPayloadVX directive, using:
        • version as the version of the directive.
        • executionPayload as the payload.
        • blob_versioned_hashes, if present, as the list of hashes of the versioned blobs that are part of the execution payload.
        • parentBeaconBlockRoot, if present, as the hash of the parent beacon block root.
      2. If errorCode is present:
        • Verify the directive returns an error, and the error code matches the one in errorCode, otherwise fail the test.
        • Proceed to the next payload.
      3. If valid is false, verify that the directive returns status field of PayloadStatusV1 as INVALID, otherwise fail the test.
      4. If valid is true, verify that the directive returns status field of PayloadStatusV1 as VALID, otherwise fail the test.
    "},{"location":"consuming_tests/blockchain_test_engine/#structures","title":"Structures","text":""},{"location":"consuming_tests/blockchain_test_engine/#hivefixture","title":"HiveFixture","text":""},{"location":"consuming_tests/blockchain_test_engine/#-network-fork","title":"- network: Fork","text":"

    Fork configuration for the test.

    "},{"location":"consuming_tests/blockchain_test_engine/#-genesisblockheader-fixtureheader","title":"- genesisBlockHeader: FixtureHeader","text":"

    Genesis block header.

    "},{"location":"consuming_tests/blockchain_test_engine/#-enginenewpayloads-listfixtureenginenewpayload","title":"- engineNewPayloads: List[FixtureEngineNewPayload]","text":"

    List of engine_newPayloadVX directives to be processed after the genesis block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-enginefcuversion-number","title":"- engineFcuVersion: Number","text":"

    Version of the engine_forkchoiceUpdatedVX directive to use to set the head of the chain.

    "},{"location":"consuming_tests/blockchain_test_engine/#-pre-alloc","title":"- pre: Alloc","text":"

    Starting account allocation for the test. State root calculated from this allocation must match the one in the genesis block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-post-alloc","title":"- post: Alloc","text":"

    Account allocation for verification after all the blocks have been processed.

    "},{"location":"consuming_tests/blockchain_test_engine/#fixtureenginenewpayload","title":"FixtureEngineNewPayload","text":""},{"location":"consuming_tests/blockchain_test_engine/#-executionpayload-fixtureexecutionpayload","title":"- executionPayload: FixtureExecutionPayload","text":"

    Execution payload.

    "},{"location":"consuming_tests/blockchain_test_engine/#-blob_versioned_hashes-optionallisthash-fork-cancun","title":"- blob_versioned_hashes: Optional[List[Hash]] (fork: Cancun)","text":"

    List of hashes of the versioned blobs that are part of the execution payload. They can mismatch the hashes of the versioned blobs in the execution payload, for negative-testing reasons.

    "},{"location":"consuming_tests/blockchain_test_engine/#-parentbeaconblockroot-optionalhash-fork-cancun","title":"- parentBeaconBlockRoot: Optional[Hash] (fork: Cancun)","text":"

    Hash of the parent beacon block root.

    "},{"location":"consuming_tests/blockchain_test_engine/#-validationerror-transactionexceptionblockexception","title":"- validationError: TransactionException|BlockException","text":"

    Validation error expected when executing the payload.

    When the payload is valid, this field is not present, and a VALID status is expected in the status field of PayloadStatusV1.

    If this field is present, the status field of PayloadStatusV1 is expected to be INVALID.

    "},{"location":"consuming_tests/blockchain_test_engine/#-version-number","title":"- version: Number","text":"

    Version of the engine_newPayloadVX directive to use to deliver the payload.

    "},{"location":"consuming_tests/blockchain_test_engine/#-errorcode-optionalnumber","title":"- errorCode: Optional[Number]","text":"

    Error code to be returned by the engine_newPayloadVX directive.

    "},{"location":"consuming_tests/blockchain_test_engine/#fixtureexecutionpayload","title":"FixtureExecutionPayload","text":""},{"location":"consuming_tests/blockchain_test_engine/#-parenthash-hash","title":"- parentHash: Hash","text":"

    Hash of the parent block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-feerecipient-address","title":"- feeRecipient: Address","text":"

    Address of the account that will receive the rewards for building the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-stateroot-hash","title":"- stateRoot: Hash","text":"

    Root hash of the state trie.

    "},{"location":"consuming_tests/blockchain_test_engine/#-receiptsroot-hash","title":"- receiptsRoot: Hash","text":"

    Root hash of the receipts trie.

    "},{"location":"consuming_tests/blockchain_test_engine/#-logsbloom-bloom","title":"- logsBloom: Bloom","text":"

    Bloom filter composed of the logs of all the transactions in the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-blocknumber-hexnumber","title":"- blockNumber: HexNumber","text":"

    Number of the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-gaslimit-hexnumber","title":"- gasLimit: HexNumber","text":"

    Total gas limit of the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-gasused-hexnumber","title":"- gasUsed: HexNumber","text":"

    Total gas used by all the transactions in the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-timestamp-hexnumber","title":"- timestamp: HexNumber","text":"

    Timestamp of the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-extradata-bytes","title":"- extraData: Bytes","text":"

    Extra data of the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-prevrandao-hash","title":"- prevRandao: Hash","text":"

    PrevRandao of the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-blockhash-hash","title":"- blockHash: Hash","text":"

    Hash of the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-transactions-listbytes","title":"- transactions: List[Bytes]","text":"

    List of transactions in the block, in serialized format.

    "},{"location":"consuming_tests/blockchain_test_engine/#-withdrawals-listfixturewithdrawal","title":"- withdrawals: List[FixtureWithdrawal]","text":"

    List of withdrawals in the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-basefeepergas-hexnumber-fork-london","title":"- baseFeePerGas: HexNumber (fork: London)","text":"

    Base fee per gas of the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-blobgasused-hexnumber-fork-cancun","title":"- blobGasUsed: HexNumber (fork: Cancun)","text":"

    Total blob gas used by all the transactions in the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-excessblobgas-hexnumber-fork-cancun","title":"- excessBlobGas: HexNumber (fork: Cancun)","text":"

    Excess blob gas of the block used to calculate the blob fee per gas for this block.

    "},{"location":"consuming_tests/blockchain_test_engine/#fixturewithdrawal","title":"FixtureWithdrawal","text":""},{"location":"consuming_tests/blockchain_test_engine/#-index-hexnumber","title":"- index: HexNumber","text":"

    Index of the withdrawal

    "},{"location":"consuming_tests/blockchain_test_engine/#-validatorindex-hexnumber","title":"- validatorIndex: HexNumber","text":"

    Withdrawing validator index

    "},{"location":"consuming_tests/blockchain_test_engine/#-address-address","title":"- address: Address","text":"

    Address to withdraw to

    "},{"location":"consuming_tests/blockchain_test_engine/#-amount-hexnumber","title":"- amount: HexNumber","text":"

    Amount of the withdrawal

    "},{"location":"consuming_tests/common_types/","title":"Common Types","text":""},{"location":"consuming_tests/common_types/#basic-types","title":"Basic Types","text":""},{"location":"consuming_tests/common_types/#address","title":"Address","text":"

    Bytes of a 20-byte fixed length.

    "},{"location":"consuming_tests/common_types/#bloom","title":"Bloom","text":"

    Bytes of a 256-byte fixed length.

    "},{"location":"consuming_tests/common_types/#bytes","title":"Bytes","text":"

    Hexadecimal representation of binary data of any length encoded as a JSON string, with a \"0x\" prefix.

    "},{"location":"consuming_tests/common_types/#emptyaddress","title":"EmptyAddress","text":"

    An empty JSON string \"\", used to represent an empty address. E.g. in the to field of a transaction when it is a contract creation.

    "},{"location":"consuming_tests/common_types/#hash","title":"Hash","text":"

    Bytes of a 32-byte fixed length.

    "},{"location":"consuming_tests/common_types/#headernonce","title":"HeaderNonce","text":"

    Bytes of a 8-byte fixed length.

    "},{"location":"consuming_tests/common_types/#hexnumber","title":"HexNumber","text":"

    Hexadecimal number with \"0x\" prefix encoded as a JSON string.

    "},{"location":"consuming_tests/common_types/#list","title":"List","text":"

    A JSON array where each element is a specific type, also defined in this document. E.g. List[Address] is a JSON array where each element is an Ethereum address.

    "},{"location":"consuming_tests/common_types/#mapping","title":"Mapping","text":"

    A JSON object where the keys and values are specific types, also defined in this document. E.g. Mapping[Address, Account] is a JSON object where the keys are Ethereum addresses, and the values are Ethereum accounts.

    "},{"location":"consuming_tests/common_types/#number","title":"Number","text":"

    Decimal number encoded as a JSON string.

    "},{"location":"consuming_tests/common_types/#optional","title":"Optional","text":"

    Marks a field as optional, meaning that the field can be missing from the JSON object.

    "},{"location":"consuming_tests/common_types/#zeropaddedhexnumber","title":"ZeroPaddedHexNumber","text":"

    Hexadecimal number with \"0x\" prefix encoded as a JSON string, with a single zero used to pad odd number of digits, and zero represented as \"0x00\".

    "},{"location":"consuming_tests/common_types/#composite-types","title":"Composite Types","text":""},{"location":"consuming_tests/common_types/#storage-mappinghashhash","title":"Storage: Mapping[Hash,Hash]","text":"

    Storage represented as a JSON object, where the keys and values are represented with the Hash type.

    "},{"location":"consuming_tests/common_types/#account","title":"Account","text":"

    An Ethereum account represented as a JSON object with the following fields:

    "},{"location":"consuming_tests/common_types/#-balance-zeropaddedhexnumber","title":"- balance: ZeroPaddedHexNumber","text":"

    Balance of the account.

    "},{"location":"consuming_tests/common_types/#-nonce-zeropaddedhexnumber","title":"- nonce: ZeroPaddedHexNumber","text":"

    Nonce of the account.

    "},{"location":"consuming_tests/common_types/#-code-bytes","title":"- code: Bytes","text":"

    Code of the account.

    "},{"location":"consuming_tests/common_types/#-storage-storage","title":"- storage: Storage","text":"

    Storage of the account.

    "},{"location":"consuming_tests/common_types/#alloc-mappingaddressaccount","title":"Alloc: Mapping[Address,Account]","text":"

    State allocation represented as a JSON object, where the keys are the addresses of the accounts, and the values are the accounts.

    "},{"location":"consuming_tests/common_types/#fork","title":"Fork","text":"

    Fork type is represented as a JSON string that can be set to one of the following values:

    "},{"location":"consuming_tests/common_types/#frontier","title":"\"Frontier\"","text":"
    • Chain ID: 0x00
    "},{"location":"consuming_tests/common_types/#homestead","title":"\"Homestead\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    "},{"location":"consuming_tests/common_types/#byzantium","title":"\"Byzantium\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    "},{"location":"consuming_tests/common_types/#constantinople","title":"\"Constantinople\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    "},{"location":"consuming_tests/common_types/#constantinoplefix","title":"\"ConstantinopleFix\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    "},{"location":"consuming_tests/common_types/#istanbul","title":"\"Istanbul\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    "},{"location":"consuming_tests/common_types/#muirglacier","title":"\"MuirGlacier\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    "},{"location":"consuming_tests/common_types/#berlin","title":"\"Berlin\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    • Berlin Block: 0x00
    "},{"location":"consuming_tests/common_types/#berlintolondonat5","title":"\"BerlinToLondonAt5\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    • Berlin Block: 0x00
    • London Block: 0x05
    "},{"location":"consuming_tests/common_types/#london","title":"\"London\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    • Berlin Block: 0x00
    • London Block: 0x00
    "},{"location":"consuming_tests/common_types/#arrowglacier","title":"\"ArrowGlacier\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    • Berlin Block: 0x00
    • London Block: 0x00
    • Arrow Glacier Block: 0x00
    "},{"location":"consuming_tests/common_types/#grayglacier","title":"\"GrayGlacier\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    • Berlin Block: 0x00
    • London Block: 0x00
    • Arrow Glacier Block: 0x00
    • Gray Glacier Block: 0x00
    "},{"location":"consuming_tests/common_types/#merge","title":"\"Merge\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    • Berlin Block: 0x00
    • London Block: 0x00
    • Arrow Glacier Block: 0x00
    • Gray Glacier Block: 0x00
    • Terminal Total Difficulty: 0x00
    "},{"location":"consuming_tests/common_types/#mergetoshanghaiattime15k","title":"\"MergeToShanghaiAtTime15k\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    • Berlin Block: 0x00
    • London Block: 0x00
    • Arrow Glacier Block: 0x00
    • Gray Glacier Block: 0x00
    • Terminal Total Difficulty: 0x00
    • Shanghai Time: 0x3a98
    "},{"location":"consuming_tests/common_types/#shanghai","title":"\"Shanghai\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    • Berlin Block: 0x00
    • London Block: 0x00
    • Arrow Glacier Block: 0x00
    • Gray Glacier Block: 0x00
    • Terminal Total Difficulty: 0x00
    • Shanghai Time: 0x00
    "},{"location":"consuming_tests/common_types/#shanghaitocancunattime15k","title":"\"ShanghaiToCancunAtTime15k\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    • Berlin Block: 0x00
    • London Block: 0x00
    • Arrow Glacier Block: 0x00
    • Gray Glacier Block: 0x00
    • Terminal Total Difficulty: 0x00
    • Shanghai Time: 0x0
    • Cancun Time: 0x3a98
    "},{"location":"consuming_tests/common_types/#cancun","title":"\"Cancun\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    • Berlin Block: 0x00
    • London Block: 0x00
    • Arrow Glacier Block: 0x00
    • Gray Glacier Block: 0x00
    • Terminal Total Difficulty: 0x00
    • Shanghai Time: 0x00
    • Cancun Time: 0x00
    "},{"location":"consuming_tests/eof_test/","title":"EOF Tests","text":"

    The EOF Test fixture format tests are included in the fixtures subdirectory eof_tests.

    These are produced by the EOFTest test spec.

    "},{"location":"consuming_tests/eof_test/#description","title":"Description","text":"

    The EOF test fixture format is used to test the EOF container validation function of the Ethereum Virtual Machine (EVM).

    It simply defines a binary code in hexadecimal format and a boolean value that indicates whether the code is valid or not.

    "},{"location":"consuming_tests/eof_test/#consumption","title":"Consumption","text":"

    TODO: Update this section

    "},{"location":"consuming_tests/eof_test/#structures","title":"Structures","text":"

    TODO: Update this section

    "},{"location":"consuming_tests/exceptions/","title":"Exceptions","text":"

    Exception types are represented as a JSON string in the test fixtures.

    The exception converted into a string is composed of the exception type name, followed by a period, followed by the specific exception name.

    For example, the exception INSUFFICIENT_ACCOUNT_FUNDS of type TransactionException is represented as \"TransactionException.INSUFFICIENT_ACCOUNT_FUNDS\".

    The JSON string can contain multiple exception types, separated by the | character, denoting that the transaction or block can throw either one of the exceptions.

    "},{"location":"consuming_tests/exceptions/#transactionexception","title":"TransactionException","text":"

    Bases: ExceptionBase

    Exception raised when a transaction is invalid, and thus cannot be executed.

    If a transaction with any of these exceptions is included in a block, the block is invalid.

    Source code in src/ethereum_test_exceptions/exceptions.py
    @unique\nclass TransactionException(ExceptionBase):\n    \"\"\"\n    Exception raised when a transaction is invalid, and thus cannot be executed.\n\n    If a transaction with any of these exceptions is included in a block, the block is invalid.\n    \"\"\"\n\n    TYPE_NOT_SUPPORTED = auto()\n    \"\"\"\n    Transaction type is not supported on this chain configuration.\n    \"\"\"\n    SENDER_NOT_EOA = auto()\n    \"\"\"\n    Transaction is coming from address that is not exist anymore.\n    \"\"\"\n    ADDRESS_TOO_SHORT = auto()\n    \"\"\"\n    Transaction `to` is not allowed to be less than 20 bytes.\n    \"\"\"\n    ADDRESS_TOO_LONG = auto()\n    \"\"\"\n    Transaction `to` is not allowed to be more than 20 bytes.\n    \"\"\"\n    NONCE_MISMATCH_TOO_HIGH = auto()\n    \"\"\"\n    Transaction nonce > sender.nonce.\n    \"\"\"\n    NONCE_MISMATCH_TOO_LOW = auto()\n    \"\"\"\n    Transaction nonce < sender.nonce.\n    \"\"\"\n    NONCE_TOO_BIG = auto()\n    \"\"\"\n    Transaction `nonce` is not allowed to be max_uint64 - 1 (this is probably TransactionTest).\n    \"\"\"\n    NONCE_IS_MAX = auto()\n    \"\"\"\n    Transaction `nonce` is not allowed to be max_uint64 - 1 (this is StateTests).\n    \"\"\"\n    NONCE_OVERFLOW = auto()\n    \"\"\"\n    Transaction `nonce` is not allowed to be more than uint64.\n    \"\"\"\n    GASLIMIT_OVERFLOW = auto()\n    \"\"\"\n    Transaction gaslimit exceeds 2^64-1 maximum value.\n    \"\"\"\n    VALUE_OVERFLOW = auto()\n    \"\"\"\n    Transaction value exceeds 2^256-1 maximum value.\n    \"\"\"\n    GASPRICE_OVERFLOW = auto()\n    \"\"\"\n    Transaction gasPrice exceeds 2^256-1 maximum value.\n    \"\"\"\n    GASLIMIT_PRICE_PRODUCT_OVERFLOW = auto()\n    \"\"\"\n    Transaction gasPrice * gasLimit exceeds 2^256-1 maximum value.\n    \"\"\"\n    INVALID_SIGNATURE_VRS = auto()\n    \"\"\"\n    Invalid transaction v, r, s values.\n    \"\"\"\n    RLP_INVALID_SIGNATURE_R = auto()\n    \"\"\"\n    Error reading transaction signature R value.\n    \"\"\"\n    RLP_INVALID_SIGNATURE_S = auto()\n    \"\"\"\n    Error reading transaction signature S value.\n    \"\"\"\n    RLP_LEADING_ZEROS_GASLIMIT = auto()\n    \"\"\"\n    Error reading transaction gaslimit field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_GASPRICE = auto()\n    \"\"\"\n    Error reading transaction gasprice field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_VALUE = auto()\n    \"\"\"\n    Error reading transaction value field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_NONCE = auto()\n    \"\"\"\n    Error reading transaction nonce field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_R = auto()\n    \"\"\"\n    Error reading transaction signature R field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_S = auto()\n    \"\"\"\n    Error reading transaction signature S field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_V = auto()\n    \"\"\"\n    Error reading transaction signature V field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_BASEFEE = auto()\n    \"\"\"\n    Error reading transaction basefee field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_PRIORITY_FEE = auto()\n    \"\"\"\n    Error reading transaction priority fee field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_DATA_SIZE = auto()\n    \"\"\"\n    Error reading transaction data field RLP, (rlp field length has leading zeros).\n    \"\"\"\n    RLP_LEADING_ZEROS_NONCE_SIZE = auto()\n    \"\"\"\n    Error reading transaction nonce field RLP, (rlp field length has leading zeros).\n    \"\"\"\n    RLP_TOO_FEW_ELEMENTS = auto()\n    \"\"\"\n    Error reading transaction RLP, structure has too few elements than expected.\n    \"\"\"\n    RLP_TOO_MANY_ELEMENTS = auto()\n    \"\"\"\n    Error reading transaction RLP, structure has too many elements than expected.\n    \"\"\"\n    RLP_ERROR_EOF = auto()\n    \"\"\"\n    Error reading transaction RLP, rlp stream unexpectedly finished.\n    \"\"\"\n    RLP_ERROR_SIZE = auto()\n    \"\"\"\n    Error reading transaction RLP, rlp size is invalid.\n    \"\"\"\n    RLP_ERROR_SIZE_LEADING_ZEROS = auto()\n    \"\"\"\n    Error reading transaction RLP, field size has leading zeros.\n    \"\"\"\n    INVALID_CHAINID = auto()\n    \"\"\"\n    Transaction chain id encoding is incorrect.\n    \"\"\"\n    RLP_INVALID_DATA = auto()\n    \"\"\"\n    Transaction data field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_GASLIMIT = auto()\n    \"\"\"\n    Transaction gaslimit field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_NONCE = auto()\n    \"\"\"\n    Transaction nonce field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_TO = auto()\n    \"\"\"\n    Transaction to field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_LONG = auto()\n    \"\"\"\n    Transaction access list address is > 20 bytes.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_SHORT = auto()\n    \"\"\"\n    Transaction access list address is < 20 bytes.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_STORAGE_TOO_LONG = auto()\n    \"\"\"\n    Transaction access list storage hash > 32 bytes.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_STORAGE_TOO_SHORT = auto()\n    \"\"\"\n    Transaction access list storage hash < 32 bytes.\n    \"\"\"\n    RLP_INVALID_HEADER = auto()\n    \"\"\"\n    Transaction failed to read from RLP as rlp header is invalid.\n    \"\"\"\n    RLP_INVALID_VALUE = auto()\n    \"\"\"\n    Transaction value field is invalid rlp/structure.\n    \"\"\"\n    EC_RECOVERY_FAIL = auto()\n    \"\"\"\n    Transaction has correct signature, but ec recovery failed.\n    \"\"\"\n    INSUFFICIENT_ACCOUNT_FUNDS = auto()\n    \"\"\"\n    Transaction's sender does not have enough funds to pay for the transaction.\n    \"\"\"\n    INSUFFICIENT_MAX_FEE_PER_GAS = auto()\n    \"\"\"\n    Transaction's max-fee-per-gas is lower than the block base-fee.\n    \"\"\"\n    PRIORITY_OVERFLOW = auto()\n    \"\"\"\n    Transaction's max-priority-fee-per-gas is exceeds 2^256-1 maximum value.\n    \"\"\"\n    PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS = auto()\n    \"\"\"\n    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas.\n    \"\"\"\n    PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS_2 = auto()\n    \"\"\"\n    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas (TransactionTests).\n    \"\"\"\n    INSUFFICIENT_MAX_FEE_PER_BLOB_GAS = auto()\n    \"\"\"\n    Transaction's max-fee-per-blob-gas is lower than the block's blob-gas price.\n    \"\"\"\n    INTRINSIC_GAS_TOO_LOW = auto()\n    \"\"\"\n    Transaction's gas limit is too low.\n    \"\"\"\n    INITCODE_SIZE_EXCEEDED = auto()\n    \"\"\"\n    Transaction's initcode for a contract-creating transaction is too large.\n    \"\"\"\n    TYPE_3_TX_PRE_FORK = auto()\n    \"\"\"\n    Transaction type 3 included before activation fork.\n    \"\"\"\n    TYPE_3_TX_ZERO_BLOBS_PRE_FORK = auto()\n    \"\"\"\n    Transaction type 3, with zero blobs, included before activation fork.\n    \"\"\"\n    TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH = auto()\n    \"\"\"\n    Transaction contains a blob versioned hash with an invalid version.\n    \"\"\"\n    TYPE_3_TX_WITH_FULL_BLOBS = auto()\n    \"\"\"\n    Transaction contains full blobs (network-version of the transaction).\n    \"\"\"\n    TYPE_3_TX_BLOB_COUNT_EXCEEDED = auto()\n    \"\"\"\n    Transaction contains too many blob versioned hashes.\n    \"\"\"\n    TYPE_3_TX_CONTRACT_CREATION = auto()\n    \"\"\"\n    Transaction is a type 3 transaction and has an empty `to`.\n    \"\"\"\n    TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED = auto()\n    \"\"\"\n    Transaction causes block to go over blob gas limit.\n    \"\"\"\n    GAS_ALLOWANCE_EXCEEDED = auto()\n    \"\"\"\n    Transaction causes block to go over blob gas limit.\n    \"\"\"\n    TYPE_3_TX_ZERO_BLOBS = auto()\n    \"\"\"\n    Transaction is type 3, but has no blobs.\n    \"\"\"\n
    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.TYPE_NOT_SUPPORTED","title":"TYPE_NOT_SUPPORTED = auto() class-attribute instance-attribute","text":"

    Transaction type is not supported on this chain configuration.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.SENDER_NOT_EOA","title":"SENDER_NOT_EOA = auto() class-attribute instance-attribute","text":"

    Transaction is coming from address that is not exist anymore.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.ADDRESS_TOO_SHORT","title":"ADDRESS_TOO_SHORT = auto() class-attribute instance-attribute","text":"

    Transaction to is not allowed to be less than 20 bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.ADDRESS_TOO_LONG","title":"ADDRESS_TOO_LONG = auto() class-attribute instance-attribute","text":"

    Transaction to is not allowed to be more than 20 bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.NONCE_MISMATCH_TOO_HIGH","title":"NONCE_MISMATCH_TOO_HIGH = auto() class-attribute instance-attribute","text":"

    Transaction nonce > sender.nonce.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.NONCE_MISMATCH_TOO_LOW","title":"NONCE_MISMATCH_TOO_LOW = auto() class-attribute instance-attribute","text":"

    Transaction nonce < sender.nonce.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.NONCE_TOO_BIG","title":"NONCE_TOO_BIG = auto() class-attribute instance-attribute","text":"

    Transaction nonce is not allowed to be max_uint64 - 1 (this is probably TransactionTest).

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.NONCE_IS_MAX","title":"NONCE_IS_MAX = auto() class-attribute instance-attribute","text":"

    Transaction nonce is not allowed to be max_uint64 - 1 (this is StateTests).

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.NONCE_OVERFLOW","title":"NONCE_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction nonce is not allowed to be more than uint64.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.GASLIMIT_OVERFLOW","title":"GASLIMIT_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction gaslimit exceeds 2^64-1 maximum value.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.VALUE_OVERFLOW","title":"VALUE_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction value exceeds 2^256-1 maximum value.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.GASPRICE_OVERFLOW","title":"GASPRICE_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction gasPrice exceeds 2^256-1 maximum value.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.GASLIMIT_PRICE_PRODUCT_OVERFLOW","title":"GASLIMIT_PRICE_PRODUCT_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction gasPrice * gasLimit exceeds 2^256-1 maximum value.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.INVALID_SIGNATURE_VRS","title":"INVALID_SIGNATURE_VRS = auto() class-attribute instance-attribute","text":"

    Invalid transaction v, r, s values.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_SIGNATURE_R","title":"RLP_INVALID_SIGNATURE_R = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature R value.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_SIGNATURE_S","title":"RLP_INVALID_SIGNATURE_S = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature S value.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_GASLIMIT","title":"RLP_LEADING_ZEROS_GASLIMIT = auto() class-attribute instance-attribute","text":"

    Error reading transaction gaslimit field RLP.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_GASPRICE","title":"RLP_LEADING_ZEROS_GASPRICE = auto() class-attribute instance-attribute","text":"

    Error reading transaction gasprice field RLP.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_VALUE","title":"RLP_LEADING_ZEROS_VALUE = auto() class-attribute instance-attribute","text":"

    Error reading transaction value field RLP.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_NONCE","title":"RLP_LEADING_ZEROS_NONCE = auto() class-attribute instance-attribute","text":"

    Error reading transaction nonce field RLP.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_R","title":"RLP_LEADING_ZEROS_R = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature R field RLP.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_S","title":"RLP_LEADING_ZEROS_S = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature S field RLP.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_V","title":"RLP_LEADING_ZEROS_V = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature V field RLP.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_BASEFEE","title":"RLP_LEADING_ZEROS_BASEFEE = auto() class-attribute instance-attribute","text":"

    Error reading transaction basefee field RLP.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_PRIORITY_FEE","title":"RLP_LEADING_ZEROS_PRIORITY_FEE = auto() class-attribute instance-attribute","text":"

    Error reading transaction priority fee field RLP.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_DATA_SIZE","title":"RLP_LEADING_ZEROS_DATA_SIZE = auto() class-attribute instance-attribute","text":"

    Error reading transaction data field RLP, (rlp field length has leading zeros).

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_NONCE_SIZE","title":"RLP_LEADING_ZEROS_NONCE_SIZE = auto() class-attribute instance-attribute","text":"

    Error reading transaction nonce field RLP, (rlp field length has leading zeros).

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_TOO_FEW_ELEMENTS","title":"RLP_TOO_FEW_ELEMENTS = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, structure has too few elements than expected.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_TOO_MANY_ELEMENTS","title":"RLP_TOO_MANY_ELEMENTS = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, structure has too many elements than expected.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_ERROR_EOF","title":"RLP_ERROR_EOF = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, rlp stream unexpectedly finished.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_ERROR_SIZE","title":"RLP_ERROR_SIZE = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, rlp size is invalid.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_ERROR_SIZE_LEADING_ZEROS","title":"RLP_ERROR_SIZE_LEADING_ZEROS = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, field size has leading zeros.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.INVALID_CHAINID","title":"INVALID_CHAINID = auto() class-attribute instance-attribute","text":"

    Transaction chain id encoding is incorrect.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_DATA","title":"RLP_INVALID_DATA = auto() class-attribute instance-attribute","text":"

    Transaction data field is invalid rlp.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_GASLIMIT","title":"RLP_INVALID_GASLIMIT = auto() class-attribute instance-attribute","text":"

    Transaction gaslimit field is invalid rlp.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_NONCE","title":"RLP_INVALID_NONCE = auto() class-attribute instance-attribute","text":"

    Transaction nonce field is invalid rlp.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_TO","title":"RLP_INVALID_TO = auto() class-attribute instance-attribute","text":"

    Transaction to field is invalid rlp.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_LONG","title":"RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_LONG = auto() class-attribute instance-attribute","text":"

    Transaction access list address is > 20 bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_SHORT","title":"RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_SHORT = auto() class-attribute instance-attribute","text":"

    Transaction access list address is < 20 bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_ACCESS_LIST_STORAGE_TOO_LONG","title":"RLP_INVALID_ACCESS_LIST_STORAGE_TOO_LONG = auto() class-attribute instance-attribute","text":"

    Transaction access list storage hash > 32 bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_ACCESS_LIST_STORAGE_TOO_SHORT","title":"RLP_INVALID_ACCESS_LIST_STORAGE_TOO_SHORT = auto() class-attribute instance-attribute","text":"

    Transaction access list storage hash < 32 bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_HEADER","title":"RLP_INVALID_HEADER = auto() class-attribute instance-attribute","text":"

    Transaction failed to read from RLP as rlp header is invalid.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_VALUE","title":"RLP_INVALID_VALUE = auto() class-attribute instance-attribute","text":"

    Transaction value field is invalid rlp/structure.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.EC_RECOVERY_FAIL","title":"EC_RECOVERY_FAIL = auto() class-attribute instance-attribute","text":"

    Transaction has correct signature, but ec recovery failed.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.INSUFFICIENT_ACCOUNT_FUNDS","title":"INSUFFICIENT_ACCOUNT_FUNDS = auto() class-attribute instance-attribute","text":"

    Transaction's sender does not have enough funds to pay for the transaction.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS","title":"INSUFFICIENT_MAX_FEE_PER_GAS = auto() class-attribute instance-attribute","text":"

    Transaction's max-fee-per-gas is lower than the block base-fee.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.PRIORITY_OVERFLOW","title":"PRIORITY_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction's max-priority-fee-per-gas is exceeds 2^256-1 maximum value.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS","title":"PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS = auto() class-attribute instance-attribute","text":"

    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS_2","title":"PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS_2 = auto() class-attribute instance-attribute","text":"

    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas (TransactionTests).

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS","title":"INSUFFICIENT_MAX_FEE_PER_BLOB_GAS = auto() class-attribute instance-attribute","text":"

    Transaction's max-fee-per-blob-gas is lower than the block's blob-gas price.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.INTRINSIC_GAS_TOO_LOW","title":"INTRINSIC_GAS_TOO_LOW = auto() class-attribute instance-attribute","text":"

    Transaction's gas limit is too low.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.INITCODE_SIZE_EXCEEDED","title":"INITCODE_SIZE_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction's initcode for a contract-creating transaction is too large.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_PRE_FORK","title":"TYPE_3_TX_PRE_FORK = auto() class-attribute instance-attribute","text":"

    Transaction type 3 included before activation fork.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_ZERO_BLOBS_PRE_FORK","title":"TYPE_3_TX_ZERO_BLOBS_PRE_FORK = auto() class-attribute instance-attribute","text":"

    Transaction type 3, with zero blobs, included before activation fork.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH","title":"TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH = auto() class-attribute instance-attribute","text":"

    Transaction contains a blob versioned hash with an invalid version.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_WITH_FULL_BLOBS","title":"TYPE_3_TX_WITH_FULL_BLOBS = auto() class-attribute instance-attribute","text":"

    Transaction contains full blobs (network-version of the transaction).

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED","title":"TYPE_3_TX_BLOB_COUNT_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction contains too many blob versioned hashes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_CONTRACT_CREATION","title":"TYPE_3_TX_CONTRACT_CREATION = auto() class-attribute instance-attribute","text":"

    Transaction is a type 3 transaction and has an empty to.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED","title":"TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction causes block to go over blob gas limit.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.GAS_ALLOWANCE_EXCEEDED","title":"GAS_ALLOWANCE_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction causes block to go over blob gas limit.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_ZERO_BLOBS","title":"TYPE_3_TX_ZERO_BLOBS = auto() class-attribute instance-attribute","text":"

    Transaction is type 3, but has no blobs.

    "},{"location":"consuming_tests/exceptions/#blockexception","title":"BlockException","text":"

    Bases: ExceptionBase

    Exception raised when a block is invalid, but not due to a transaction.

    E.g. all transactions in the block are valid, and can be applied to the state, but the block header contains an invalid field.

    Source code in src/ethereum_test_exceptions/exceptions.py
    @unique\nclass BlockException(ExceptionBase):\n    \"\"\"\n    Exception raised when a block is invalid, but not due to a transaction.\n\n    E.g. all transactions in the block are valid, and can be applied to the state, but the\n    block header contains an invalid field.\n    \"\"\"\n\n    TOO_MANY_UNCLES = auto()\n    \"\"\"\n    Block declares too many uncles over the allowed limit.\n    \"\"\"\n    UNCLE_IN_CHAIN = auto()\n    \"\"\"\n    Block declares uncle header that is already imported into chain.\n    \"\"\"\n    UNCLE_IS_ANCESTOR = auto()\n    \"\"\"\n    Block declares uncle header that is directly a parent of this block.\n    \"\"\"\n    UNCLE_IS_BROTHER = auto()\n    \"\"\"\n    Block declares two similar uncle headers.\n    \"\"\"\n    UNCLE_PARENT_INCORRECT = auto()\n    \"\"\"\n    Block declares uncle header that is an outdated block to be an uncle.\n    \"\"\"\n    EXTRA_DATA_TOO_BIG = auto()\n    \"\"\"\n    Block header's extra data >32 bytes.\n    \"\"\"\n    EXTRA_DATA_INVALID_DAO = auto()\n    \"\"\"\n    Block header's extra data after dao fork must be a fixed pre defined hash.\n    \"\"\"\n    UNKNOWN_PARENT = auto()\n    \"\"\"\n    Block header's parent hash does not correspond to any of existing blocks on chain.\n    \"\"\"\n    UNCLE_UNKNOWN_PARENT = auto()\n    \"\"\"\n    Uncle header's parent hash does not correspond to any of existing blocks on chain.\n    \"\"\"\n    UNKNOWN_PARENT_ZERO = auto()\n    \"\"\"\n    Block header's parent hash is zero hash.\n    \"\"\"\n    GASLIMIT_TOO_BIG = auto()\n    \"\"\"\n    Block header's gas limit > 0x7fffffffffffffff.\n    \"\"\"\n    INVALID_BLOCK_NUMBER = auto()\n    \"\"\"\n    Block header's number != parent header's number + 1.\n    \"\"\"\n    INVALID_BLOCK_TIMESTAMP_OLDER_THAN_PARENT = auto()\n    \"\"\"\n    Block header's timestamp <= parent header's timestamp.\n    \"\"\"\n    INVALID_DIFFICULTY = auto()\n    \"\"\"\n    Block header's difficulty does not match the difficulty formula calculated from previous block.\n    \"\"\"\n    INVALID_LOG_BLOOM = auto()\n    \"\"\"\n    Block header's logs bloom hash does not match the actually computed log bloom.\n    \"\"\"\n    INVALID_STATE_ROOT = auto()\n    \"\"\"\n    Block header's state root hash does not match the actually computed hash of the state.\n    \"\"\"\n    INVALID_RECEIPTS_ROOT = auto()\n    \"\"\"\n    Block header's receipts root hash does not match the actually computed hash of receipts.\n    \"\"\"\n    INVALID_TRANSACTIONS_ROOT = auto()\n    \"\"\"\n    Block header's transactions root hash does not match the actually computed hash of tx tree.\n    \"\"\"\n    INVALID_UNCLES_HASH = auto()\n    \"\"\"\n    Block header's uncle hash does not match the actually computed hash of block's uncles.\n    \"\"\"\n    GAS_USED_OVERFLOW = auto()\n    \"\"\"\n    Block transactions consume more gas than block header allow.\n    \"\"\"\n    INVALID_GASLIMIT = auto()\n    \"\"\"\n    Block header's gas limit does not match the gas limit formula calculated from previous block.\n    \"\"\"\n    INVALID_BASEFEE_PER_GAS = auto()\n    \"\"\"\n    Block header's base_fee_per_gas field is calculated incorrect.\n    \"\"\"\n    INVALID_GAS_USED = auto()\n    \"\"\"\n    Block header's actual gas used does not match the provided header's value\n    \"\"\"\n    INVALID_WITHDRAWALS_ROOT = auto()\n    \"\"\"\n    Block header's withdrawals root does not match calculated withdrawals root.\n    \"\"\"\n    INCORRECT_BLOCK_FORMAT = auto()\n    \"\"\"\n    Block's format is incorrect, contains invalid fields, is missing fields, or contains fields of\n    a fork that is not active yet.\n    \"\"\"\n    BLOB_GAS_USED_ABOVE_LIMIT = auto()\n    \"\"\"\n    Block's blob gas used in header is above the limit.\n    \"\"\"\n    INCORRECT_BLOB_GAS_USED = auto()\n    \"\"\"\n    Block's blob gas used in header is incorrect.\n    \"\"\"\n    INCORRECT_EXCESS_BLOB_GAS = auto()\n    \"\"\"\n    Block's excess blob gas in header is incorrect.\n    \"\"\"\n    RLP_STRUCTURES_ENCODING = auto()\n    \"\"\"\n    Block's rlp encoding is valid but ethereum structures in it are invalid.\n    \"\"\"\n    RLP_WITHDRAWALS_NOT_READ = auto()\n    \"\"\"\n    Block's rlp encoding is missing withdrawals.\n    \"\"\"\n    RLP_INVALID_FIELD_OVERFLOW_64 = auto()\n    \"\"\"\n    One of block's fields rlp is overflow 2**64 value.\n    \"\"\"\n    RLP_INVALID_ADDRESS = auto()\n    \"\"\"\n    Block withdrawals address is rlp of invalid address != 20 bytes.\n    \"\"\"\n    INVALID_REQUESTS = auto()\n    \"\"\"\n    Block's requests are invalid.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LEGACY = auto()\n    \"\"\"\n    Legacy block import is impossible in this chain configuration.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LEGACY_WRONG_PARENT = auto()\n    \"\"\"\n    Legacy block import is impossible, trying to import on top of a block that is not legacy.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LONDON_WRONG_PARENT = auto()\n    \"\"\"\n    Trying to import london (basefee) block on top of block that is not 1559.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_PARIS_WRONG_POW = auto()\n    \"\"\"\n    Trying to import paris(merge) block with PoW enabled.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_PARIS_WRONG_POS = auto()\n    \"\"\"\n    Trying to import paris(merge) block with PoS enabled before TTD is reached.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LONDON_OVER_PARIS = auto()\n    \"\"\"\n    Trying to import london looking block over paris network (POS).\n    \"\"\"\n    IMPORT_IMPOSSIBLE_PARIS_OVER_SHANGHAI = auto()\n    \"\"\"\n    Trying to import paris block on top of shanghai block.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_SHANGHAI = auto()\n    \"\"\"\n    Shanghai block import is impossible in this chain configuration.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_UNCLES_OVER_PARIS = auto()\n    \"\"\"\n    Trying to import a block after paris fork that has not empty uncles hash.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_DIFFICULTY_OVER_PARIS = auto()\n    \"\"\"\n    Trying to import a block after paris fork that has difficulty != 0.\n    \"\"\"\n
    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.TOO_MANY_UNCLES","title":"TOO_MANY_UNCLES = auto() class-attribute instance-attribute","text":"

    Block declares too many uncles over the allowed limit.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.UNCLE_IN_CHAIN","title":"UNCLE_IN_CHAIN = auto() class-attribute instance-attribute","text":"

    Block declares uncle header that is already imported into chain.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.UNCLE_IS_ANCESTOR","title":"UNCLE_IS_ANCESTOR = auto() class-attribute instance-attribute","text":"

    Block declares uncle header that is directly a parent of this block.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.UNCLE_IS_BROTHER","title":"UNCLE_IS_BROTHER = auto() class-attribute instance-attribute","text":"

    Block declares two similar uncle headers.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.UNCLE_PARENT_INCORRECT","title":"UNCLE_PARENT_INCORRECT = auto() class-attribute instance-attribute","text":"

    Block declares uncle header that is an outdated block to be an uncle.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.EXTRA_DATA_TOO_BIG","title":"EXTRA_DATA_TOO_BIG = auto() class-attribute instance-attribute","text":"

    Block header's extra data >32 bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.EXTRA_DATA_INVALID_DAO","title":"EXTRA_DATA_INVALID_DAO = auto() class-attribute instance-attribute","text":"

    Block header's extra data after dao fork must be a fixed pre defined hash.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.UNKNOWN_PARENT","title":"UNKNOWN_PARENT = auto() class-attribute instance-attribute","text":"

    Block header's parent hash does not correspond to any of existing blocks on chain.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.UNCLE_UNKNOWN_PARENT","title":"UNCLE_UNKNOWN_PARENT = auto() class-attribute instance-attribute","text":"

    Uncle header's parent hash does not correspond to any of existing blocks on chain.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.UNKNOWN_PARENT_ZERO","title":"UNKNOWN_PARENT_ZERO = auto() class-attribute instance-attribute","text":"

    Block header's parent hash is zero hash.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.GASLIMIT_TOO_BIG","title":"GASLIMIT_TOO_BIG = auto() class-attribute instance-attribute","text":"

    Block header's gas limit > 0x7fffffffffffffff.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_BLOCK_NUMBER","title":"INVALID_BLOCK_NUMBER = auto() class-attribute instance-attribute","text":"

    Block header's number != parent header's number + 1.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_BLOCK_TIMESTAMP_OLDER_THAN_PARENT","title":"INVALID_BLOCK_TIMESTAMP_OLDER_THAN_PARENT = auto() class-attribute instance-attribute","text":"

    Block header's timestamp <= parent header's timestamp.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_DIFFICULTY","title":"INVALID_DIFFICULTY = auto() class-attribute instance-attribute","text":"

    Block header's difficulty does not match the difficulty formula calculated from previous block.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_LOG_BLOOM","title":"INVALID_LOG_BLOOM = auto() class-attribute instance-attribute","text":"

    Block header's logs bloom hash does not match the actually computed log bloom.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_STATE_ROOT","title":"INVALID_STATE_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's state root hash does not match the actually computed hash of the state.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_RECEIPTS_ROOT","title":"INVALID_RECEIPTS_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's receipts root hash does not match the actually computed hash of receipts.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_TRANSACTIONS_ROOT","title":"INVALID_TRANSACTIONS_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's transactions root hash does not match the actually computed hash of tx tree.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_UNCLES_HASH","title":"INVALID_UNCLES_HASH = auto() class-attribute instance-attribute","text":"

    Block header's uncle hash does not match the actually computed hash of block's uncles.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.GAS_USED_OVERFLOW","title":"GAS_USED_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Block transactions consume more gas than block header allow.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_GASLIMIT","title":"INVALID_GASLIMIT = auto() class-attribute instance-attribute","text":"

    Block header's gas limit does not match the gas limit formula calculated from previous block.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_BASEFEE_PER_GAS","title":"INVALID_BASEFEE_PER_GAS = auto() class-attribute instance-attribute","text":"

    Block header's base_fee_per_gas field is calculated incorrect.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_GAS_USED","title":"INVALID_GAS_USED = auto() class-attribute instance-attribute","text":"

    Block header's actual gas used does not match the provided header's value

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_WITHDRAWALS_ROOT","title":"INVALID_WITHDRAWALS_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's withdrawals root does not match calculated withdrawals root.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INCORRECT_BLOCK_FORMAT","title":"INCORRECT_BLOCK_FORMAT = auto() class-attribute instance-attribute","text":"

    Block's format is incorrect, contains invalid fields, is missing fields, or contains fields of a fork that is not active yet.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.BLOB_GAS_USED_ABOVE_LIMIT","title":"BLOB_GAS_USED_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    Block's blob gas used in header is above the limit.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INCORRECT_BLOB_GAS_USED","title":"INCORRECT_BLOB_GAS_USED = auto() class-attribute instance-attribute","text":"

    Block's blob gas used in header is incorrect.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INCORRECT_EXCESS_BLOB_GAS","title":"INCORRECT_EXCESS_BLOB_GAS = auto() class-attribute instance-attribute","text":"

    Block's excess blob gas in header is incorrect.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.RLP_STRUCTURES_ENCODING","title":"RLP_STRUCTURES_ENCODING = auto() class-attribute instance-attribute","text":"

    Block's rlp encoding is valid but ethereum structures in it are invalid.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.RLP_WITHDRAWALS_NOT_READ","title":"RLP_WITHDRAWALS_NOT_READ = auto() class-attribute instance-attribute","text":"

    Block's rlp encoding is missing withdrawals.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.RLP_INVALID_FIELD_OVERFLOW_64","title":"RLP_INVALID_FIELD_OVERFLOW_64 = auto() class-attribute instance-attribute","text":"

    One of block's fields rlp is overflow 2**64 value.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.RLP_INVALID_ADDRESS","title":"RLP_INVALID_ADDRESS = auto() class-attribute instance-attribute","text":"

    Block withdrawals address is rlp of invalid address != 20 bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_REQUESTS","title":"INVALID_REQUESTS = auto() class-attribute instance-attribute","text":"

    Block's requests are invalid.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_LEGACY","title":"IMPORT_IMPOSSIBLE_LEGACY = auto() class-attribute instance-attribute","text":"

    Legacy block import is impossible in this chain configuration.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_LEGACY_WRONG_PARENT","title":"IMPORT_IMPOSSIBLE_LEGACY_WRONG_PARENT = auto() class-attribute instance-attribute","text":"

    Legacy block import is impossible, trying to import on top of a block that is not legacy.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_LONDON_WRONG_PARENT","title":"IMPORT_IMPOSSIBLE_LONDON_WRONG_PARENT = auto() class-attribute instance-attribute","text":"

    Trying to import london (basefee) block on top of block that is not 1559.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_PARIS_WRONG_POW","title":"IMPORT_IMPOSSIBLE_PARIS_WRONG_POW = auto() class-attribute instance-attribute","text":"

    Trying to import paris(merge) block with PoW enabled.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_PARIS_WRONG_POS","title":"IMPORT_IMPOSSIBLE_PARIS_WRONG_POS = auto() class-attribute instance-attribute","text":"

    Trying to import paris(merge) block with PoS enabled before TTD is reached.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_LONDON_OVER_PARIS","title":"IMPORT_IMPOSSIBLE_LONDON_OVER_PARIS = auto() class-attribute instance-attribute","text":"

    Trying to import london looking block over paris network (POS).

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_PARIS_OVER_SHANGHAI","title":"IMPORT_IMPOSSIBLE_PARIS_OVER_SHANGHAI = auto() class-attribute instance-attribute","text":"

    Trying to import paris block on top of shanghai block.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_SHANGHAI","title":"IMPORT_IMPOSSIBLE_SHANGHAI = auto() class-attribute instance-attribute","text":"

    Shanghai block import is impossible in this chain configuration.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_UNCLES_OVER_PARIS","title":"IMPORT_IMPOSSIBLE_UNCLES_OVER_PARIS = auto() class-attribute instance-attribute","text":"

    Trying to import a block after paris fork that has not empty uncles hash.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_DIFFICULTY_OVER_PARIS","title":"IMPORT_IMPOSSIBLE_DIFFICULTY_OVER_PARIS = auto() class-attribute instance-attribute","text":"

    Trying to import a block after paris fork that has difficulty != 0.

    "},{"location":"consuming_tests/exceptions/#eofexception","title":"EOFException","text":"

    Bases: ExceptionBase

    Exception raised when an EOF container is invalid.

    Source code in src/ethereum_test_exceptions/exceptions.py
    @unique\nclass EOFException(ExceptionBase):\n    \"\"\"\n    Exception raised when an EOF container is invalid.\n    \"\"\"\n\n    DEFAULT_EXCEPTION = auto()\n    \"\"\"\n    Expect some exception, not yet known.\n    \"\"\"\n\n    UNDEFINED_EXCEPTION = auto()\n    \"\"\"\n    Indicates that exception string is not mapped to an exception enum.\n    \"\"\"\n\n    UNDEFINED_INSTRUCTION = auto()\n    \"\"\"\n    EOF container has undefined instruction in it's body code.\n    \"\"\"\n\n    UNKNOWN_VERSION = auto()\n    \"\"\"\n    EOF container has an unknown version.\n    \"\"\"\n    INCOMPLETE_MAGIC = auto()\n    \"\"\"\n    EOF container has not enough bytes to read magic.\n    \"\"\"\n    INVALID_MAGIC = auto()\n    \"\"\"\n    EOF container has not allowed magic version byte.\n    \"\"\"\n    INVALID_VERSION = auto()\n    \"\"\"\n    EOF container version bytes mismatch.\n    \"\"\"\n    INVALID_NON_RETURNING_FLAG = auto()\n    \"\"\"\n    EOF container's section has non-returning flag set incorrectly.\n    \"\"\"\n    INVALID_RJUMP_DESTINATION = auto()\n    \"\"\"\n    Code has RJUMP instruction with invalid parameters.\n    \"\"\"\n    MISSING_TYPE_HEADER = auto()\n    \"\"\"\n    EOF container missing types section.\n    \"\"\"\n    INVALID_TYPE_SECTION_SIZE = auto()\n    \"\"\"\n    EOF container types section has wrong size.\n    \"\"\"\n    INVALID_TYPE_BODY = auto()\n    \"\"\"\n    EOF container types body section bytes are wrong.\n    \"\"\"\n    MISSING_CODE_HEADER = auto()\n    \"\"\"\n    EOF container missing code section.\n    \"\"\"\n    INVALID_CODE_SECTION = auto()\n    \"\"\"\n    EOF container code section bytes are incorrect.\n    \"\"\"\n    INCOMPLETE_CODE_HEADER = auto()\n    \"\"\"\n    EOF container code header missing bytes.\n    \"\"\"\n    INCOMPLETE_DATA_HEADER = auto()\n    \"\"\"\n    EOF container data header missing bytes.\n    \"\"\"\n    ZERO_SECTION_SIZE = auto()\n    \"\"\"\n    EOF container data header construction is wrong.\n    \"\"\"\n    MISSING_DATA_SECTION = auto()\n    \"\"\"\n    EOF container missing data section\n    \"\"\"\n    INCOMPLETE_CONTAINER = auto()\n    \"\"\"\n    EOF container bytes are incomplete.\n    \"\"\"\n    INVALID_SECTION_BODIES_SIZE = auto()\n    \"\"\"\n    Sections bodies does not match sections headers.\n    \"\"\"\n    TRAILING_BYTES = auto()\n    \"\"\"\n    EOF container has bytes beyond data section.\n    \"\"\"\n    MISSING_TERMINATOR = auto()\n    \"\"\"\n    EOF container missing terminator bytes between header and body.\n    \"\"\"\n    MISSING_HEADERS_TERMINATOR = auto()\n    \"\"\"\n    Some type of another exception about missing headers terminator.\n    \"\"\"\n    INVALID_FIRST_SECTION_TYPE = auto()\n    \"\"\"\n    EOF container header does not have types section first.\n    \"\"\"\n    INCOMPLETE_SECTION_NUMBER = auto()\n    \"\"\"\n    EOF container header has section that is missing declaration bytes.\n    \"\"\"\n    INCOMPLETE_SECTION_SIZE = auto()\n    \"\"\"\n    EOF container header has section that is defined incorrectly.\n    \"\"\"\n    TOO_MANY_CODE_SECTIONS = auto()\n    \"\"\"\n    EOF container header has too many code sections.\n    \"\"\"\n    MISSING_STOP_OPCODE = auto()\n    \"\"\"\n    EOF container's code missing STOP bytecode at it's end.\n    \"\"\"\n    INPUTS_OUTPUTS_NUM_ABOVE_LIMIT = auto()\n    \"\"\"\n    EOF container code section inputs/outputs number is above the limit\n    \"\"\"\n    UNREACHABLE_INSTRUCTIONS = auto()\n    \"\"\"\n    EOF container's code have instructions that are unreachable.\n    \"\"\"\n    UNREACHABLE_CODE_SECTIONS = auto()\n    \"\"\"\n    EOF container's body have code sections that are unreachable.\n    \"\"\"\n    STACK_UNDERFLOW = auto()\n    \"\"\"\n    EOF container's code produces an stack underflow.\n    \"\"\"\n    STACK_HEIGHT_MISMATCH = auto()\n    \"\"\"\n    EOF container section stack height mismatch.\n    \"\"\"\n    MAX_STACK_HEIGHT_ABOVE_LIMIT = auto()\n    \"\"\"\n    EOF container's specified max stack height is above the limit.\n    \"\"\"\n    STACK_HIGHER_THAN_OUTPUTS = auto()\n    \"\"\"\n    EOF container section stack height is higher than the outputs.\n    when returning\n    \"\"\"\n    JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS = auto()\n    \"\"\"\n    EOF container section JUMPF's to a destination section with incompatible outputs.\n    \"\"\"\n    INVALID_MAX_STACK_HEIGHT = auto()\n    \"\"\"\n    EOF container section's specified max stack height does not match the actual stack height.\n    \"\"\"\n    INVALID_DATALOADN_INDEX = auto()\n    \"\"\"\n    A DATALOADN instruction has out-of-bounds index for the data section.\n    \"\"\"\n    TRUNCATED_INSTRUCTION = auto()\n    \"\"\"\n    EOF container's code section has truncated instruction.\n    \"\"\"\n    TOPLEVEL_CONTAINER_TRUNCATED = auto()\n    \"\"\"\n    Top-level EOF container has data section truncated\n    \"\"\"\n    ORPHAN_SUBCONTAINER = auto()\n    \"\"\"\n    EOF container has an unreferenced subcontainer.\n    '\"\"\"\n    CONTAINER_SIZE_ABOVE_LIMIT = auto()\n    \"\"\"\n    EOF container is above size limit\n    \"\"\"\n    INVALID_CONTAINER_SECTION_INDEX = auto()\n    \"\"\"\n    Instruction references container section that does not exist.\n    \"\"\"\n    INCOMPATIBLE_CONTAINER_KIND = auto()\n    \"\"\"\n    Incompatible instruction found in a container of a specific kind.\n    \"\"\"\n    TOO_MANY_CONTAINERS = auto()\n    \"\"\"\n    EOF container header has too many sub-containers.\n    \"\"\"\n    INVALID_CODE_SECTION_INDEX = auto()\n    \"\"\"\n    CALLF Operation referes to a non-existent code section\n    \"\"\"\n    UNEXPECTED_HEADER_KIND = auto()\n    \"\"\"\n    Header parsing encounterd a section kind it wasn't expecting\n    \"\"\"\n
    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.DEFAULT_EXCEPTION","title":"DEFAULT_EXCEPTION = auto() class-attribute instance-attribute","text":"

    Expect some exception, not yet known.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.UNDEFINED_EXCEPTION","title":"UNDEFINED_EXCEPTION = auto() class-attribute instance-attribute","text":"

    Indicates that exception string is not mapped to an exception enum.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.UNDEFINED_INSTRUCTION","title":"UNDEFINED_INSTRUCTION = auto() class-attribute instance-attribute","text":"

    EOF container has undefined instruction in it's body code.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.UNKNOWN_VERSION","title":"UNKNOWN_VERSION = auto() class-attribute instance-attribute","text":"

    EOF container has an unknown version.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_MAGIC","title":"INCOMPLETE_MAGIC = auto() class-attribute instance-attribute","text":"

    EOF container has not enough bytes to read magic.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_MAGIC","title":"INVALID_MAGIC = auto() class-attribute instance-attribute","text":"

    EOF container has not allowed magic version byte.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_VERSION","title":"INVALID_VERSION = auto() class-attribute instance-attribute","text":"

    EOF container version bytes mismatch.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_NON_RETURNING_FLAG","title":"INVALID_NON_RETURNING_FLAG = auto() class-attribute instance-attribute","text":"

    EOF container's section has non-returning flag set incorrectly.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_RJUMP_DESTINATION","title":"INVALID_RJUMP_DESTINATION = auto() class-attribute instance-attribute","text":"

    Code has RJUMP instruction with invalid parameters.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.MISSING_TYPE_HEADER","title":"MISSING_TYPE_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container missing types section.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_TYPE_SECTION_SIZE","title":"INVALID_TYPE_SECTION_SIZE = auto() class-attribute instance-attribute","text":"

    EOF container types section has wrong size.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_TYPE_BODY","title":"INVALID_TYPE_BODY = auto() class-attribute instance-attribute","text":"

    EOF container types body section bytes are wrong.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.MISSING_CODE_HEADER","title":"MISSING_CODE_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container missing code section.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_CODE_SECTION","title":"INVALID_CODE_SECTION = auto() class-attribute instance-attribute","text":"

    EOF container code section bytes are incorrect.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_CODE_HEADER","title":"INCOMPLETE_CODE_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container code header missing bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_DATA_HEADER","title":"INCOMPLETE_DATA_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container data header missing bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.ZERO_SECTION_SIZE","title":"ZERO_SECTION_SIZE = auto() class-attribute instance-attribute","text":"

    EOF container data header construction is wrong.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.MISSING_DATA_SECTION","title":"MISSING_DATA_SECTION = auto() class-attribute instance-attribute","text":"

    EOF container missing data section

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_CONTAINER","title":"INCOMPLETE_CONTAINER = auto() class-attribute instance-attribute","text":"

    EOF container bytes are incomplete.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_SECTION_BODIES_SIZE","title":"INVALID_SECTION_BODIES_SIZE = auto() class-attribute instance-attribute","text":"

    Sections bodies does not match sections headers.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.TRAILING_BYTES","title":"TRAILING_BYTES = auto() class-attribute instance-attribute","text":"

    EOF container has bytes beyond data section.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.MISSING_TERMINATOR","title":"MISSING_TERMINATOR = auto() class-attribute instance-attribute","text":"

    EOF container missing terminator bytes between header and body.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.MISSING_HEADERS_TERMINATOR","title":"MISSING_HEADERS_TERMINATOR = auto() class-attribute instance-attribute","text":"

    Some type of another exception about missing headers terminator.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_FIRST_SECTION_TYPE","title":"INVALID_FIRST_SECTION_TYPE = auto() class-attribute instance-attribute","text":"

    EOF container header does not have types section first.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_SECTION_NUMBER","title":"INCOMPLETE_SECTION_NUMBER = auto() class-attribute instance-attribute","text":"

    EOF container header has section that is missing declaration bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_SECTION_SIZE","title":"INCOMPLETE_SECTION_SIZE = auto() class-attribute instance-attribute","text":"

    EOF container header has section that is defined incorrectly.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.TOO_MANY_CODE_SECTIONS","title":"TOO_MANY_CODE_SECTIONS = auto() class-attribute instance-attribute","text":"

    EOF container header has too many code sections.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.MISSING_STOP_OPCODE","title":"MISSING_STOP_OPCODE = auto() class-attribute instance-attribute","text":"

    EOF container's code missing STOP bytecode at it's end.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INPUTS_OUTPUTS_NUM_ABOVE_LIMIT","title":"INPUTS_OUTPUTS_NUM_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    EOF container code section inputs/outputs number is above the limit

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.UNREACHABLE_INSTRUCTIONS","title":"UNREACHABLE_INSTRUCTIONS = auto() class-attribute instance-attribute","text":"

    EOF container's code have instructions that are unreachable.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.UNREACHABLE_CODE_SECTIONS","title":"UNREACHABLE_CODE_SECTIONS = auto() class-attribute instance-attribute","text":"

    EOF container's body have code sections that are unreachable.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.STACK_UNDERFLOW","title":"STACK_UNDERFLOW = auto() class-attribute instance-attribute","text":"

    EOF container's code produces an stack underflow.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.STACK_HEIGHT_MISMATCH","title":"STACK_HEIGHT_MISMATCH = auto() class-attribute instance-attribute","text":"

    EOF container section stack height mismatch.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT","title":"MAX_STACK_HEIGHT_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    EOF container's specified max stack height is above the limit.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.STACK_HIGHER_THAN_OUTPUTS","title":"STACK_HIGHER_THAN_OUTPUTS = auto() class-attribute instance-attribute","text":"

    EOF container section stack height is higher than the outputs. when returning

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS","title":"JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS = auto() class-attribute instance-attribute","text":"

    EOF container section JUMPF's to a destination section with incompatible outputs.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_MAX_STACK_HEIGHT","title":"INVALID_MAX_STACK_HEIGHT = auto() class-attribute instance-attribute","text":"

    EOF container section's specified max stack height does not match the actual stack height.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_DATALOADN_INDEX","title":"INVALID_DATALOADN_INDEX = auto() class-attribute instance-attribute","text":"

    A DATALOADN instruction has out-of-bounds index for the data section.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.TRUNCATED_INSTRUCTION","title":"TRUNCATED_INSTRUCTION = auto() class-attribute instance-attribute","text":"

    EOF container's code section has truncated instruction.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.TOPLEVEL_CONTAINER_TRUNCATED","title":"TOPLEVEL_CONTAINER_TRUNCATED = auto() class-attribute instance-attribute","text":"

    Top-level EOF container has data section truncated

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.ORPHAN_SUBCONTAINER","title":"ORPHAN_SUBCONTAINER = auto() class-attribute instance-attribute","text":"

    EOF container has an unreferenced subcontainer. '

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.CONTAINER_SIZE_ABOVE_LIMIT","title":"CONTAINER_SIZE_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    EOF container is above size limit

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_CONTAINER_SECTION_INDEX","title":"INVALID_CONTAINER_SECTION_INDEX = auto() class-attribute instance-attribute","text":"

    Instruction references container section that does not exist.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INCOMPATIBLE_CONTAINER_KIND","title":"INCOMPATIBLE_CONTAINER_KIND = auto() class-attribute instance-attribute","text":"

    Incompatible instruction found in a container of a specific kind.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.TOO_MANY_CONTAINERS","title":"TOO_MANY_CONTAINERS = auto() class-attribute instance-attribute","text":"

    EOF container header has too many sub-containers.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_CODE_SECTION_INDEX","title":"INVALID_CODE_SECTION_INDEX = auto() class-attribute instance-attribute","text":"

    CALLF Operation referes to a non-existent code section

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.UNEXPECTED_HEADER_KIND","title":"UNEXPECTED_HEADER_KIND = auto() class-attribute instance-attribute","text":"

    Header parsing encounterd a section kind it wasn't expecting

    "},{"location":"consuming_tests/state_test/","title":"State Tests","text":"

    The State Test fixture format tests are included in the fixtures subdirectory state_tests.

    These are produced by the StateTest and StateTestOnly test specs.

    "},{"location":"consuming_tests/state_test/#description","title":"Description","text":"

    The state test fixture format is used to test the state transition function of the Ethereum Virtual Machine (EVM).

    It does so by defining a transaction, a pre-execution state, and a post-execution state, and verifying that the transaction execution results in the expected post-execution state.

    A single JSON fixture file is composed of a JSON object where each key-value pair is a different Fixture test object, with the key string representing the test name.

    The JSON file path plus the test name are used as the unique test identifier.

    As opposed to other fixture formats, the state test fixture format could contain multiple test vectors per test object, each represented by an element in the mapping of lists of the post field.

    However tests generated by the execution-spec-tests repository do not use this feature, as every single test object contains only a single test vector.

    "},{"location":"consuming_tests/state_test/#consumption","title":"Consumption","text":"

    For each Fixture test object in the JSON fixture file, perform the following steps:

    1. Use pre as the starting state allocation of the execution environment for the test.
    2. Use env to configure the current execution environment.
    3. For each Fork key of post in the test, and for each of the elements of the list of FixtureForkPost values:

      1. Configure the execution fork schedule according to the current Fork key.
      2. Using the indexes values, and the transaction object, decode the transaction to be executed.
      3. If the serialized version of the decoded transaction does not match txbytes, fail the test.
      4. Attempt to apply the transaction using the current execution environment:

        1. If the transaction could not be applied to the current execution context:
          • If expectException is empty, fail the test.
          • If expectException is not empty, revert the state to the pre-state.
        2. If the transaction could be applied to the current execution context:
          • If expectException is not empty, fail the test.
      5. Compare the resulting post-state root with the expected post-state root contained in the hash field of the current FixtureForkPost, and fail the test if they do not match.

      6. Compare the resulting logs hash with the expected logs contained in the logs field of the current FixtureForkPost, and fail the test if they do not match.
    "},{"location":"consuming_tests/state_test/#structures","title":"Structures","text":""},{"location":"consuming_tests/state_test/#fixture","title":"Fixture","text":""},{"location":"consuming_tests/state_test/#-env-fixtureenvironment","title":"- env: FixtureEnvironment","text":"

    Execution environment description for the test.

    "},{"location":"consuming_tests/state_test/#-pre-alloc","title":"- pre: Alloc","text":"

    Starting account allocation for the test.

    "},{"location":"consuming_tests/state_test/#-transaction-fixturetransaction","title":"- transaction: FixtureTransaction","text":"

    Transaction to be executed.

    "},{"location":"consuming_tests/state_test/#-post-mappingforklist-fixtureforkpost","title":"- post: Mapping(Fork,List[ FixtureForkPost ])","text":"

    Mapping of lists of post for verification per fork, where each element represents a single possible outcome of the transaction execution after being applied to the pre.

    "},{"location":"consuming_tests/state_test/#fixtureenvironment","title":"FixtureEnvironment","text":""},{"location":"consuming_tests/state_test/#-currentcoinbase-address","title":"- currentCoinbase: Address","text":"

    The address of the account that will receive the rewards for building the block.

    "},{"location":"consuming_tests/state_test/#-currentgaslimit-zeropaddedhexnumber","title":"- currentGasLimit: ZeroPaddedHexNumber","text":"

    Total gas limit of the block where the transaction is executed.

    "},{"location":"consuming_tests/state_test/#-currentnumber-zeropaddedhexnumber","title":"- currentNumber: ZeroPaddedHexNumber","text":"

    Number of the block where the transaction is executed.

    "},{"location":"consuming_tests/state_test/#-currentdifficulty-zeropaddedhexnumber","title":"- currentDifficulty: ZeroPaddedHexNumber","text":"

    Difficulty of the block where the transaction is executed.

    "},{"location":"consuming_tests/state_test/#-currenttimestamp-zeropaddedhexnumber","title":"- currentTimestamp: ZeroPaddedHexNumber","text":"

    Timestamp of the block where the transaction is executed.

    "},{"location":"consuming_tests/state_test/#-currentbasefee-zeropaddedhexnumber-fork-london","title":"- currentBaseFee: ZeroPaddedHexNumber (fork: London)","text":"

    Base fee of the block where the transaction is executed.

    "},{"location":"consuming_tests/state_test/#-currentrandom-hash-fork-paris","title":"- currentRandom: Hash (fork: Paris)","text":"

    Randao value of the block where the transaction is executed.

    "},{"location":"consuming_tests/state_test/#-currentexcessblobgas-zeropaddedhexnumber-fork-cancun","title":"- currentExcessBlobGas: ZeroPaddedHexNumber (fork: Cancun)","text":"

    Excess blob gas of the block where the transaction is executed.

    "},{"location":"consuming_tests/state_test/#fixturetransaction","title":"FixtureTransaction","text":""},{"location":"consuming_tests/state_test/#-nonce-zeropaddedhexnumber","title":"- nonce: ZeroPaddedHexNumber","text":"

    Nonce of the account that sends the transaction

    "},{"location":"consuming_tests/state_test/#-gasprice-zeropaddedhexnumber","title":"- gasPrice: ZeroPaddedHexNumber","text":"

    Gas price for the transaction (Transaction types 0 & 1)

    "},{"location":"consuming_tests/state_test/#-maxpriorityfeepergas-hexnumber","title":"- maxPriorityFeePerGas: HexNumber","text":"

    Max priority fee per gas to pay (Transaction types 2 & 3)

    "},{"location":"consuming_tests/state_test/#-maxfeepergas-hexnumber","title":"- maxFeePerGas: HexNumber","text":"

    Max base fee per gas to pay (Transaction types 2 & 3)

    "},{"location":"consuming_tests/state_test/#-gaslimit-listzeropaddedhexnumber","title":"- gasLimit: List[ZeroPaddedHexNumber]","text":"

    List of gas limits used on each indexed test combination

    "},{"location":"consuming_tests/state_test/#-to-addressemptyaddress","title":"- to: Address|EmptyAddress","text":"

    Destination address of the transaction, or an empty string to create a contract

    "},{"location":"consuming_tests/state_test/#-value-listzeropaddedhexnumber","title":"- value: List[ZeroPaddedHexNumber]","text":"

    List of values used on each indexed test combination

    "},{"location":"consuming_tests/state_test/#-data-listbytes","title":"- data: List[Bytes]","text":"

    List of data bytes used on each indexed test combination

    "},{"location":"consuming_tests/state_test/#-accesslists-listlistmappingaddresslisthash-fork-berlin","title":"- accessLists: List[List[Mapping[Address,List[Hash]]]] (fork: Berlin)","text":"

    List of account access lists used on each indexed test combination (Transaction types 1, 2 & 3)

    "},{"location":"consuming_tests/state_test/#-maxfeeperblobgas-hexnumber-fork-cancun","title":"- maxFeePerBlobGas: HexNumber (fork: Cancun)","text":"

    Max fee per blob gas to pay (Transaction type 3)

    "},{"location":"consuming_tests/state_test/#-blobversionedhashes-listhash-fork-cancun","title":"- blobVersionedHashes: List[Hash] (fork: Cancun)","text":"

    List of blob versioned hashes the transaction includes (Transaction type 3)

    "},{"location":"consuming_tests/state_test/#-sender-address","title":"- sender: Address","text":"

    Sender address of the transaction

    "},{"location":"consuming_tests/state_test/#-secretkey-hash","title":"- secretKey: Hash","text":"

    Private key that must be used to sign the transaction

    "},{"location":"consuming_tests/state_test/#fixtureforkpost","title":"FixtureForkPost","text":""},{"location":"consuming_tests/state_test/#-indexes-fixtureforkpostindexes","title":"- indexes: FixtureForkPostIndexes","text":"

    Transaction field indexes that must be used to obtain the transaction to be executed

    "},{"location":"consuming_tests/state_test/#-txbytes-bytes","title":"- txbytes: Bytes","text":"

    Serialized bytes version of the FixtureTransaction that was executed to produce this post-state

    "},{"location":"consuming_tests/state_test/#-hash-hash","title":"- hash: Hash","text":"

    Expected state root value that results of applying the transaction to the pre-state

    "},{"location":"consuming_tests/state_test/#-logs-hash","title":"- logs: Hash","text":"

    Hash of the RLP representation of the state logs result of applying the transaction to the pre-state (TODO: double-check this.)

    "},{"location":"consuming_tests/state_test/#-expectexception-transactionexception","title":"- expectException: TransactionException","text":"

    Exception that is expected to be thrown by the transaction execution (Field is missing if the transaction is expected to succeed)

    "},{"location":"consuming_tests/state_test/#fixtureforkpostindexes","title":"FixtureForkPostIndexes","text":""},{"location":"consuming_tests/state_test/#-data-int","title":"- data: int","text":"

    Index of the data field in the transaction

    "},{"location":"consuming_tests/state_test/#-gas-int","title":"- gas: int","text":"

    Index of the gas limit field in the transaction

    "},{"location":"consuming_tests/state_test/#-value-int","title":"- value: int","text":"

    Index of the value field in the transaction

    "},{"location":"dev/","title":"Developer Documentation","text":"

    This documentation is aimed at maintainers of execution-spec-tests but may be helpful during test case development:

    • generating documentation.
    • coding style.
    • enabling pre-commit checks.
    • running github actions locally.
    "},{"location":"dev/coding_style/","title":"Coding Style","text":""},{"location":"dev/coding_style/#formatting-and-line-length","title":"Formatting and Line Length","text":"

    The Python code in execution-spec-tests is black formatted with a maximum line length of 100. Using VS Code with editor.formatOnSave is a big help to ensure files conform to the repo's coding style, see VS Code Setup to configure this and other useful settings.

    "},{"location":"dev/coding_style/#ignoring-bulk-change-commits","title":"Ignoring Bulk Change Commits","text":"

    The max line length was changed from 80 to 100 in Q2 2023. To ignore this bulk change commit in git blame output, use the .git-blame-ignore-revs file, for example:

    git blame --ignore-revs-file .git-blame-ignore-revs docs/gen_test_case_reference.py\n

    To use the revs file persistently with git blame, run

    git config blame.ignoreRevsFile .git-blame-ignore-revs\n
    "},{"location":"dev/docs/","title":"Documentation","text":"

    The execution-spec-tests documentation is generated via mkdocs and hosted remotely on Github Pages at ethereum.github.io/execution-spec-tests.

    "},{"location":"dev/docs/#prerequisites","title":"Prerequisites","text":"
    pip install -e .[docs]\n
    "},{"location":"dev/docs/#build-the-documentation","title":"Build the Documentation","text":"

    One time build:

    mkdocs build\n

    Pre-commit check: One time build and lint/type checking:

    tox -e docs\n
    "},{"location":"dev/docs/#local-deployment-and-test","title":"Local Deployment and Test","text":"

    This runs continually: Deploys the site locally and re-generates the site upon modifications to docs/**/*.md or tests/**/*.py:

    mkdocs serve\n
    "},{"location":"dev/docs/#remote-deployment-and-versioning","title":"Remote Deployment and Versioning","text":"

    The execution-specs-test docs are hosted on Github pages at the repo's Github pages. Versions are updated/deployed automatically as part of Github Actions, but this can also be performed on the command-line.

    Our mkdocs configuration uses mike as a version provider. All deployments should be made via mike (whether as part of CI/CD or executed locally).

    The deployed versions of the docs managed via mike are kept in the gh-pages branch. When you run mike it commits to this branch and optionally pushes the changes directly to remote.

    "},{"location":"dev/docs/#aliases","title":"Aliases","text":"

    We currently use two aliases:

    • latest: the latest stable release.
    • development: the current state of the main branch.

    These aliases point to specific versions, as configured below. It's possible to share links containing either of these aliases or to specific versions, i.e, the following are all valid links:

    • https://ethereum.github.io/execution-spec-tests/ (redirects to latest/main)
    • https://ethereum.github.io/execution-spec-tests/latest (redirects to main)
    • https://ethereum.github.io/execution-spec-tests/development (redirects to tagged version)
    • https://ethereum.github.io/execution-spec-tests/main
    • https://ethereum.github.io/execution-spec-tests/v1.0.0
    "},{"location":"dev/docs/#cicd-doc-deployment-via-github-actions","title":"CI/CD: Doc Deployment via Github Actions","text":"

    There are two workflows that automatically deploy updated/new versions of the docs:

    | Workflow yaml File | What | When | |-----------------_____|------|------| | docs_main.yaml | Update \"main\" version of docs | Push to 'main' branch, (e.g., on PR merge) | | docs_tags.yaml | Deploy new version of docs; tag is used as version name | Upon creating a tag matching v* |

    "},{"location":"dev/docs/#build-and-deployment-without-alias-update","title":"Build and Deployment (without alias update)","text":"

    Build a new version and deploy it to remote (this version will then show up in the version selector list):

    mike deploy --push v1.2.3\n

    Local deployment

    If you deploy locally, the documentation will be built with any changes made in your local repository. Check out the tag to deploy tagged versions.

    "},{"location":"dev/docs/#build-deploy-and-update-the-alias","title":"Build, Deploy and Update the Alias","text":"

    Build, deploy and update the version an alias points to with:

    mike deploy --push --update-aliases v1.2.3 latest\n

    where v1.2.3 indicates the version's name and development is the alias. This will overwrite the version if it already exists.

    Updating the 'main' version locally

    \"main\" is just a version name (intended to reflect that it is build from the main branch). However, mike will build the docs site from the current local repository state (including local modifications). Therefore, make sure you're on the HEAD of the main branch before executing (unless you know what you're doing )!

    mike deploy --push main\n

    If the alias accidentally go change:

    mike deploy --push --update-aliases main development\n
    "},{"location":"dev/docs/#viewing-and-deleting-versions","title":"Viewing and Deleting Versions","text":"

    List versions:

    mike list\n

    Delete a version:

    mike delete v1.2.3a1-eof\n
    "},{"location":"dev/docs/#set-default-version","title":"Set Default Version","text":"

    Set the default version of the docs to open upon loading the page:

    mike set-default --push latest\n

    Typically, this must only be executed once for a repo.

    "},{"location":"dev/docs/#implementation","title":"Implementation","text":""},{"location":"dev/docs/#plugins","title":"Plugins","text":"

    The documentation flow uses mkdocs and the following additional plugins:

    • mkdocs: The main doc generation tool.
    • mkdocs-material: Provides many additional features and styling for mkdocs.
    • mkdocstrings and mkdocstrings-python: To generate documentation from Python docstrings.
    • mkdocs-gen-files: To generate markdown files automatically for each test case Python module. See this page for example usage. This plugin is used to programmatically generate the nav section for the generated test case reference documentation.
    • mkdocs-literate-nav: Is used to define the navigation layout for non-generated content and was created to work well with mkdocs-gen-files to add nav content for generated content.
    • blueswen/mkdocs-glightbox - for improved image and inline content display.
    "},{"location":"dev/docs/#the-test-case-reference-section","title":"The \"Test Case Reference\" Section","text":"

    This section is auto-generated via a combination of:

    1. mkdocstrings and mkdocstrings-python,
    2. mkdocs-gen-files,
    3. mkdocs-literate-nav.

    It auto-generates a sequence of nested pages (with nav entries) of all python modules detected under ./tests. Each page contains a stub to the doc generated by mkdocstrings from the module's docstrings and source code. The mkdocs-gen-files and mkdocs-literate-nav plugins were created exactly for this purpose.

    No action is necessary if a new test directory or module is added to ./tests, it will be picked up automatically.

    Working with generated content

    The files in the ./tests directory are watched by mkdocs serve. Run mkdocs serve and edit the source docstrings: The browser will reload with the new content automatically.

    "},{"location":"dev/docs/#navigation","title":"Navigation","text":"

    All pages that are to be included in the documentation and the navigation bar must be included in navigation.md, except \"Test Case Reference\" entries. This is enabled by mkdocs-literate-nav. The nav entries for the automatically generated \"Test Case Reference\" section are generated in mkdocs-gen-files and appended to navigation.md.

    Current nav ordering limitations

    The \"Test Case Reference\" section must currently be the last section in the nav. This is because our mkdocs flow:

    1. Reads navigation.md.
    2. Generates the Test Case Reference documentation and appends the Test Case Reference entries to navigation.md
    3. Generates the nav.

    If necessary, we could probably split navigation.md into two files

    • navigation-pre-test-case-reference.md,
    • navigation-post-test-case-reference.md,

    and create an arbitrary ordering in the Test Case Reference doc gen script. But this is untested.

    "},{"location":"dev/docs/#read-the-docs","title":"Read the Docs","text":"

    Originally, documentation was hosted at readthedocs.io. Currently, this now defunct page (execution-spec-tests.readthedocs.io) is configured to redirect to the Github Pages site. This is achieved by following the steps listed in the second half of this answer on stackoverflow. A public repo with a dummy Sphinx project is required to achieve this: danceratopz/est-docs-redirect.

    "},{"location":"dev/precommit/","title":"Enabling Pre-Commit Checks","text":"

    There's a pre-commit config file available in the repository root (.pre-commit-config.yaml) that can be used to enable automatic checks upon commit - the commit will not go through if the checks don't pass.

    To enable pre-commit, the following must be ran once:

    pip install pre-commit\npre-commit install\n

    Bypassing pre-commit checks

    Enabling of pre-commit checks is not mandatory (it cannot be enforced) and even if it is enabled, it can always be bypassed with:

    git commit --no-verify\n
    "},{"location":"dev/test_actions_locally/","title":"Testing Github Actions Locally","text":"

    The Github Actions workflows can be tested locally using nektos/act which allows you to test Github Actions locally, without pushing changes to the remote.

    "},{"location":"dev/test_actions_locally/#prerequisites","title":"Prerequisites","text":"
    1. Install the act tool, docs.
    2. Install the Github CLI (gh) for authentication: linux, macos.
    3. Authenticate with the Github CLI:

      gh auth login\n
    "},{"location":"dev/test_actions_locally/#testing-workflows","title":"Testing Workflows","text":""},{"location":"dev/test_actions_locally/#testing-a-workflow-that-uses-a-matrix-strategy","title":"Testing a Workflow that uses a Matrix Strategy","text":"

    bash act -j build --workflows .github/workflows/tox_verify.yaml -s GITHUB_TOKEN=$(gh auth token) --matrix python:3.10

    "},{"location":"dev/test_actions_locally/#testing-release-builds","title":"Testing Release Builds","text":"

    Release builds require the ref input to be specified. To test a release build locally:

    1. Create a JSON file specifying the input data required for a release build (the release tag), e.g, event.json:

      json { \"ref\": \"refs/tags/stable@v4.2.0\" }

    2. Run act and specify the workflow file, the Github token, and the event file:

      bash act -j build --workflows .github/workflows/fixtures_feature.yaml -s GITHUB_TOKEN=$(gh auth token) -e event.json

    "},{"location":"getting_help/","title":"Getting Help","text":"

    The tests in this repository are a community effort to help improve the development cycle of all Ethereum execution clients.

    We encourage contributions and recognize that Python is not everyone's primary language - if you stumble over issues or need help, please reach out to one of the execution-spec-tests maintainers either directly or in the #testing channel in the Ethereum R&D Discord Server.

    "},{"location":"getting_help/#contact-the-maintainers","title":"Contact the Maintainers","text":"

    Write to:

    • Dan on Discord or Telegram (danceratopz).
    • Spencer on Discord or Telegram (spencertaylorbrown/@techbro_ccoli).
    • Mario on Discord or Telegram (marioevz/@marioevz).

    "},{"location":"getting_started/debugging_t8n_tools/","title":"Debugging Transition Tools","text":"

    There are two flags that can help debugging t8n tools or the execution-spec-tests framework:

    1. --evm-dump-dir: Write debug information from t8n tool calls to the specified directory.
    2. --traces: Collect traces of the execution from the transition tool.
    3. --verify-fixtures: Run go-ethereum's evm blocktest command to verify the generated test fixtures.
    "},{"location":"getting_started/debugging_t8n_tools/#evm-dump-directory","title":"EVM Dump Directory","text":"

    The --evm-dump-dir flag tells the framework to write the inputs and outputs of every call made to the t8n command to the specified output directory. The aim is to help debugging or simply understand how a test is interacting with the EVM.

    Each test case receives its own sub-directory under the --evm-dump-dir that contains these files which can be easily accessed from the HTML test report generated by fill (located by default in the root of the --output directory).

    In particular, a script t8n.sh is generated for each call to the t8n command which can be used to reproduce the call to trigger errors or attach a debugger without the need to execute Python.

    For example, running:

    fill tests/berlin/eip2930_access_list/ --fork Berlin -m blockchain_test \\\n    --evm-dump-dir=/tmp/evm-dump --traces\n

    will produce the directory structure:

    \ud83d\udcc2 /tmp/evm-dump\n\u2514\u2500\u2500 \ud83d\udcc2 berlin__eip2930_access_list__test_acl__test_access_list\n    \u2514\u2500\u2500 \ud83d\udcc2 fork_Berlin_blockchain_test\n        \u2514\u2500\u2500 \ud83d\udcc2 0\n         \u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 args.py\n         \u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc2 input\n         \u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 alloc.json\n         \u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 env.json\n         \u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 \ud83d\udcc4 txs.json\n         \u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc2 output\n         \u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 alloc.json\n         \u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 result.json\n         \u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 \ud83d\udcc4 txs.rlp\n         \u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 returncode.txt\n         \u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 stderr.txt\n         \u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 stdin.txt\n         \u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 stdout.txt\n         \u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 t8n.sh\n            \u2514\u2500\u2500 \ud83d\udcc4 trace-0-0x5c4f07ce52f0a276a06aabdfff16cc693b5e007c018f9a42431e68200e2da515.jsonl\n

    where the directory 0 is the starting index of the different calls made to the t8n tool executed during the test, and since the test only contains one block, there is only one directory present.

    Note, there may be more directories present 1, 2, 3,... if the test executes more blocks.

    Each directory contains files containing information corresponding to the call, for example, the args.py file contains the arguments passed to the t8n command and the output/alloc.json file contains the output of the t8n command's --output-alloc flag.

    "},{"location":"getting_started/debugging_t8n_tools/#the-t8nsh-script","title":"The t8n.sh Script","text":"

    The t8n.sh script written to the debug directory can be used to reproduce a specific call made to the t8n command during the test session. For example, if a Besu t8n-server has been started on port 3001, the request made by the test for first block can be reproduced as:

    /tmp/besu/test_access_list_fork_Berlin/0/t8n.sh 3001\n

    which writes the response the from the t8n-server to the console output:

    {\n  \"alloc\" : {\n    \"0x000000000000000000000000000000000000aaaa\" : {\n      \"code\" : \"0x5854505854\",\n      \"balance\" : \"0x4\",\n      \"nonce\" : \"0x1\"\n    },\n    \"0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba\" : {\n      \"balance\" : \"0x1bc16d674ecb26ce\"\n    },\n    \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\" : {\n      \"balance\" : \"0x2cd931\",\n      \"nonce\" : \"0x1\"\n    }\n  },\n  \"body\" : \"0xf8a0b89e01f89b0180078304ef0094000000000000000000000000000000000000aaaa0180f838f7940000000000000000000000000000000000000000e1a0000000000000000000000000000000000000000000000000000000000000000001a02e16eb72206c93c471b5894800495ee9c64ae2d9823bcc4d6adeb5d9d9af0dd4a03be6691e933a0816c59d059a556c27c6753e6ce76d1e357b9201865c80b28df3\",\n  \"result\" : {\n    \"stateRoot\" : \"0x51799508f764047aee6606bc6a00863856f83ee5b91555f00c8a3cbdfbec5acb\",\n    ...\n    ...\n  }\n}\n

    The t8n.sh is written to the debug directory for all supported t8n tools.

    "},{"location":"getting_started/debugging_t8n_tools/#verifying-test-fixtures-via-evm-blocktest","title":"Verifying Test Fixtures via evm blocktest","text":"

    The --verify-fixtures flag can be used to run go-ethereum's evm blocktest command in order to verify the generated JSON test fixtures.

    For example, running:

    fill tests/berlin/eip2930_access_list/ --fork Berlin -m blockchain_test \\\n    --evm-dump-dir==/tmp/evm-dump \\\n    --evm-bin=../evmone/build/bin/evmone-t8n \\\n    --verify-fixtures-bin=../go-ethereum/build/bin/evm \\\n    --verify-fixtures\n

    will additionally run the evm blocktest command on every JSON fixture file and write its output to the EVM dump directory:

    \ud83d\udcc2 /tmp/evm-dump\n\u2514\u2500\u2500 \ud83d\udcc2 berlin__eip2930_access_list__test_acl__test_access_list\n    \u251c\u2500\u2500 \ud83d\udcc4 fixtures.json\n    \u251c\u2500\u2500 \ud83d\udcc2 fork_Berlin_blockchain_test\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc2 0\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 args.py\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc2 input\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 alloc.json\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 env.json\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 \ud83d\udcc4 txs.json\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc2 output\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 alloc.json\n    \u2502   ... ... ...\n    \u2502\n    \u251c\u2500\u2500 \ud83d\udcc4 verify_fixtures_args.py\n    \u251c\u2500\u2500 \ud83d\udcc4 verify_fixtures_returncode.txt\n    \u251c\u2500\u2500 \ud83d\udcc4 verify_fixtures.sh\n    \u251c\u2500\u2500 \ud83d\udcc4 verify_fixtures_stderr.txt\n    \u2514\u2500\u2500 \ud83d\udcc4 verify_fixtures_stdout.txt\n

    where the verify_fixtures.sh script can be used to reproduce the evm blocktest command.

    "},{"location":"getting_started/debugging_t8n_tools/#further-verify-fixtures-examples","title":"Further --verify-fixtures Examples","text":"
    1. No fixture verification performed:

      fill\n
    2. Verify fixtures: Use the first evm binary in the PATH to execute both the t8n and blocktest commands (i.e., same binary used; this must be a geth binary):

      fill --verify-fixtures\n
    3. Explicitly specify the evm binary to execute the blocktest command (the first evm binary in the PATH is used for t8n commands; --verify-fixtures is not necessary):

      fill --verify-fixtures-bin=../go-ethereum/build/bin/evm\n
    4. Explicitly set two different evm binaries to execute the t8n and blocktest commands; write debug data to the specified --evm-dump-dir:

      fill --evm-bin=../evmone/build/bin/evmone-t8n \\\n  --verify-fixtures-bin=../go-ethereum/build/bin/evm \\\n  --evm-dump-dir=/tmp/evm-dump\n
    5. Additionally use --single-fixture-per-file to improve the granularity of the reporting of the evm blocktest command by writing the fixture generated by each parametrized test case to its own file.

      fill --evm-bin=../evmone/build/bin/evmone-t8n \\\n  --verify-fixtures-bin=../go-ethereum/build/bin/evm \\\n  --evm-dump-dir=/tmp/evm-dump \\\n  --single-fixture-per-file\n

    Execution scope of evm blocktest

    Note, by default, that evm blocktest is not executed per parametrized test case, but rather per test function. This is because each fixture JSON file contains fixtures for all the parametrized test cases for one test function. This means only one error will be reported, even if multiple fixtures fail within one fixture file.

    Additionally, it is only executed after all the test cases in the module have been executed1 and will only report the first failing test fixture in all files, even if there are multiple failing fixture files.

    This means, by default, that the feedback is not as granular as for test case execution. To improve granularity, and get feedback per parametrized test case use --single-fixture-per-file.

    1. This limitation is required to enable support of the pytest-xdist plugin for concurrent test execution across multiple CPUs. To achieve this we use the we apply the --dist loadscope xdist flag in our pytest.ini.\u00a0\u21a9

    "},{"location":"getting_started/executing_tests_command_line/","title":"Executing Tests at a Prompt","text":"

    The execution-spec-tests test framework uses the pytest framework for test case collection and execution. The fill command is essentially an alias for pytest, which uses several custom pytest plugins to run transition tools against test cases and generate JSON fixtures.

    Options specific to execution-spec-tests

    The command-line options specific to filling tests can be listed via:

    fill --help\n

    See Custom fill Command-Line Options for all options.

    "},{"location":"getting_started/executing_tests_command_line/#collection-test-exploration","title":"Collection - Test Exploration","text":"

    The test cases implemented in the ./tests sub-directory can be listed in the console using:

    fill --collect-only\n

    and can be filtered (by test path, function and parameter substring):

    fill --collect-only -k warm_coinbase\n

    Docstrings are additionally displayed when ran verbosely:

    fill --collect-only -k warm_coinbase -vv\n
    "},{"location":"getting_started/executing_tests_command_line/#execution","title":"Execution","text":"

    By default, test cases are executed for all forks already deployed to mainnet, but not for forks still under active development, i.e., as of time of writing, Q2 2023:

    fill\n

    will generate fixtures for test cases from Frontier to Shanghai.

    To generate all the test fixtures defined in the ./tests/shanghai sub-directory and write them to the ./fixtures-shanghai directory, run fill in the top-level directory as:

    fill ./tests/shanghai --output=\"fixtures-shanghai\"\n

    Test case verification

    Note, that the (limited set of) test post conditions are tested against the output of the evm t8n command during test generation.

    To generate all the test fixtures in the tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py module, for example, run:

    fill tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py\n

    To generate specific test fixtures from a specific test function or even test function and parameter set, obtain the corresponding test ID using:

    fill --collect-only -q -k test_warm_coinbase\n

    This filters the tests by test_warm_coinbase. Then find the relevant test ID in the console output and provide it to fill, for example, for a test function:

    fill tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage\n

    or, for a test function and specific parameter combination:

    fill tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Paris-DELEGATECALL]\n
    "},{"location":"getting_started/executing_tests_command_line/#execution-for-development-forks","title":"Execution for Development Forks","text":"

    By default, test cases are not executed with upcoming Ethereum forks so that they can be readily executed against the evm tool from the latest geth release.

    In order to execute test cases for an upcoming fork, ensure that the evm tool used supports that fork and features under test and use the --until or --fork flag.

    For example, as of Q2 2023, the current fork under active development is Cancun:

    fill --until Cancun\n

    See: Executing Tests for Features under Development.

    "},{"location":"getting_started/executing_tests_command_line/#debugging-the-t8n-command","title":"Debugging the t8n Command","text":"

    The --evm-dump-dir flag can be used to dump the inputs and outputs of every call made to the t8n command for debugging purposes, see Debugging Transition Tools.

    "},{"location":"getting_started/executing_tests_command_line/#other-useful-pytest-command-line-options","title":"Other Useful Pytest Command-Line Options","text":"
    fill -vv            # More verbose output\nfill -x             # Exit instantly on first error or failed test case\nfill --pdb -nauto   # Drop into the debugger upon error in a test case\nfill -s             # Print stdout from tests to the console during execution\n
    "},{"location":"getting_started/executing_tests_command_line/#custom-fill-command-line-options","title":"Custom fill Command-Line Options","text":"

    To see all the options available to fill, including pytest and pytest plugin options, use --pytest-help.

    To list the options that only specific to fill, use:

    fill --help\n

    Output:

    usage: fill [-h] [--strict-alloc] [--ca-start CA_START] [--ca-incr CA_INCR]\n            [--evm-code-type EVM_CODE_TYPE] [--solc-bin SOLC_BIN]\n            [--solc-version SOLC_VERSION] [--evm-bin EVM_BIN] [--traces]\n            [--verify-fixtures] [--verify-fixtures-bin VERIFY_FIXTURES_BIN]\n            [--filler-path FILLER_PATH] [--output OUTPUT] [--flat-output]\n            [--single-fixture-per-file] [--no-html] [--build-name BUILD_NAME]\n            [--index] [--evm-dump-dir EVM_DUMP_DIR] [--forks] [--fork FORK]\n            [--from FROM] [--until UNTIL] [--test-help]\n\noptions:\n  -h, --help            show this help message and exit\n\nArguments defining pre-allocation behavior.:\n  --strict-alloc        [DEBUG ONLY] Disallows deploying a contract in a\n                        predefined address.\n  --ca-start CA_START, --contract-address-start CA_START\n                        The starting address from which tests will deploy\n                        contracts.\n  --ca-incr CA_INCR, --contract-address-increment CA_INCR\n                        The address increment value to each deployed contract by\n                        a test.\n  --evm-code-type EVM_CODE_TYPE\n                        Type of EVM code to deploy in each test by default.\n\nArguments defining the solc executable:\n  --solc-bin SOLC_BIN   Path to a solc executable (for Yul source compilation).\n                        No default; if unspecified `--solc-version` is used.\n  --solc-version SOLC_VERSION\n                        Version of the solc compiler to use. Default: 0.8.24.\n\nArguments defining evm executable behavior:\n  --evm-bin EVM_BIN     Path to an evm executable that provides `t8n`. Default:\n                        First 'evm' entry in PATH.\n  --traces              Collect traces of the execution information from the\n                        transition tool.\n  --verify-fixtures     Verify generated fixture JSON files using geth's evm\n                        blocktest command. By default, the same evm binary as for\n                        the t8n tool is used. A different (geth) evm binary may\n                        be specified via --verify-fixtures-bin, this must be\n                        specified if filling with a non-geth t8n tool that does\n                        not support blocktest.\n  --verify-fixtures-bin VERIFY_FIXTURES_BIN\n                        Path to an evm executable that provides the `blocktest`\n                        command. Default: The first (geth) 'evm' entry in PATH.\n\nArguments defining filler location and output:\n  --filler-path FILLER_PATH\n                        Path to filler directives\n  --output OUTPUT       Directory path to store the generated test fixtures. If\n                        the specified path ends in '.tar.gz', then the specified\n                        tarball is additionally created (the fixtures are still\n                        written to the specified path without the '.tar.gz'\n                        suffix). Can be deleted. Default: './fixtures'.\n  --flat-output         Output each test case in the directory without the folder\n                        structure.\n  --single-fixture-per-file\n                        Don't group fixtures in JSON files by test function;\n                        write each fixture to its own file. This can be used to\n                        increase the granularity of --verify-fixtures.\n  --no-html             Don't generate an HTML test report (in the output\n                        directory). The --html flag can be used to specify a\n                        different path.\n  --build-name BUILD_NAME\n                        Specify a build name for the fixtures.ini file, e.g.,\n                        'stable'.\n  --index               Generate an index file for all produced fixtures.\n\nArguments defining debug behavior:\n  --evm-dump-dir EVM_DUMP_DIR, --t8n-dump-dir EVM_DUMP_DIR\n                        Path to dump the transition tool debug output.\n\nSpecify the fork range to generate fixtures for:\n  --forks               Display forks supported by the test framework and exit.\n  --fork FORK           Only fill tests for the specified fork.\n  --from FROM           Fill tests from and including the specified fork.\n  --until UNTIL         Fill tests until and including the specified fork.\n\nArguments related to running execution-spec-tests:\n  --test-help           Only show help options specific to a specific execution-\n                        spec-tests command and exit.\n\nExit: After displaying help.\n
    "},{"location":"getting_started/executing_tests_dev_fork/","title":"Executing Tests for Features under Development","text":""},{"location":"getting_started/executing_tests_dev_fork/#requirements","title":"Requirements","text":"

    By default, execution-spec-tests only generates fixtures for forks that have been deployed to mainnet. In order to generate fixtures for evm features that are actively under development:

    1. A version of the evm and solc tools that implement the feature must be available (although, typically only a developer version of the evm tool is required, usually the latest stable release of solc is adequate), and,
    2. The development fork to test must be explicitly specified on the command-line:

      via the --fork flagvia the --from flagvia the --until flag
      fill -k 4844 --fork=Cancun -v\n
      fill -k 4844 --from=Cancun -v\n
      fill -k 4844 --until=Cancun -v\n

    Specifying the evm binary via evm-bin

    It is possible to explicitly specify the evm binary used to generate fixtures via the --evm-bin flag, for example,

    fill --fork=Cancun --evm-bin=/opt/bin/evm -v\n
    "},{"location":"getting_started/executing_tests_dev_fork/#further-help","title":"Further Help","text":"
    1. geth/evm build documentation.
    2. solc build documentation.

    Verifying evm and solc versions used

    The versions used to generate fixtures are displayed in the console output:

    "},{"location":"getting_started/executing_tests_dev_fork/#vs-code-setup","title":"VS Code Setup","text":"

    By default, VS Code's Testing View will only show tests for stable forks. To show tests for development forks, uncomment the relevant line in the python.testing.pytestArgs configuration section of included settings file (.vscode/settings.json) to enable the --until=FORK flag. See VS Code Setup for help finding the settings files.

    "},{"location":"getting_started/executing_tests_vs_code/","title":"Executing Tests in VS Code","text":"

    Prerequisite: VS Code Setup.

    "},{"location":"getting_started/executing_tests_vs_code/#exploring-test-cases","title":"Exploring Test Cases","text":"

    Implemented test cases can be explored in VS Code's \"Testing\" View; click on the conical flask highlighted in the screenshot below.

    Testing EVM Features Under Active Development

    See the VS Code section in Executing Tests for Features under Development to explore tests targeting EVM features under development.

    "},{"location":"getting_started/executing_tests_vs_code/#executing-and-debugging-test-cases","title":"Executing and Debugging Test Cases","text":""},{"location":"getting_started/installation_troubleshooting/","title":"Installation Troubleshooting","text":"

    This page provides guidance on how to troubleshoot common issues that may arise when installing the Execution Spec Tests repository.

    "},{"location":"getting_started/installation_troubleshooting/#pip-installation-issues","title":"Pip Installation Issues","text":""},{"location":"getting_started/installation_troubleshooting/#coincurve-installation","title":"Coincurve Installation","text":"

    If you encounter an error when installing the coincurve package like the following:

    Stored in directory: /tmp/...\n  Building wheel for coincurve (pyproject.toml) ... error\n  error: subprocess-exited-with-error\n\n  \u00d7 Building wheel for coincurve (pyproject.toml) did not run successfully.\n  \u2502 exit code: 1\n  \u2570\u2500> [27 lines of output]\n      ...\n        571 | #include <secp256k1_extrakeys.h>\n            |          ^~~~~~~~~~~~~~~~~~~~~~~\n      compilation terminated.\n      error: command '/usr/bin/gcc' failed with exit code 1\n      [end of output]\n\n  note: This error originates from a subprocess, and is likely not a problem with pip.\n  ERROR: Failed building wheel for coincurve\n

    You may need to install the libsecp256k1 library. On Ubuntu, you can install this library by running the following command:

    sudo apt update\nsudo apt-get install libsecp256k1-dev\n
    "},{"location":"getting_started/quick_start/","title":"Quick Start","text":"

    Testing features under active development

    The EVM features under test must be implemented in the evm tool and solc executables that are used by the execution-spec-tests framework. The following guide installs the stable version of the geth evm; solc will be installed by the fill command.

    To test features under active development, start with this base configuration and then follow the steps in executing tests for features under development.

    The following requires a Python 3.10, 3.11 or 3.12 installation.

    1. Ensure go-ethereum's evm tool is in your path. Either build the required version, or alternatively:

      UbuntumacOSWindows

      sudo add-apt-repository -y ppa:ethereum/ethereum\nsudo apt-get update\nsudo apt-get install ethereum\n
      More help:

      • geth installation doc.

      brew update\nbrew upgrade\nbrew tap ethereum/ethereum\nbrew install ethereum solidity\n
      More help:

      • geth installation doc.

      Binaries available here:

      • geth (binary or installer).
      • solc.

      More help:

      • geth installation doc.
    2. Clone the execution-spec-tests repo and install its dependencies (it's recommended to use a virtual environment for the installation):

      git clone https://github.com/ethereum/execution-spec-tests\ncd execution-spec-tests\npython3 -m venv ./venv/\nsource ./venv/bin/activate\npip install -e '.[docs,lint,test]'\n
    3. Verify installation:

      1. Explore test cases:

        fill --collect-only\n

        Expected console output:

      2. Execute the test cases (verbosely) in the ./tests/berlin/eip2930_access_list/test_acl.py module:

        fill -v tests/berlin/eip2930_access_list/test_acl.py\n

        Expected console output: Check:

        1. The versions of the evm tool is as expected (your versions may differ from those in the highlighted box).
        2. The generated HTML test report by clicking the link at the bottom of the console output.
        3. The corresponding fixture file has been generated:

          head fixtures/blockchain_tests/berlin/eip2930_access_list/acl/access_list.json\n
    "},{"location":"getting_started/quick_start/#installation-troubleshooting","title":"Installation Troubleshooting","text":"

    If you encounter issues during installation, see the Installation Troubleshooting guide.

    "},{"location":"getting_started/quick_start/#next-steps","title":"Next Steps","text":"
    1. Learn useful command-line flags.
    2. Execute tests for features under development via the --fork flag.
    3. Optional: Configure VS Code to auto-format Python code and execute tests within VS Code.
    4. Implement a new test case, see Writing Tests.
    "},{"location":"getting_started/repository_overview/","title":"Repository Overview","text":""},{"location":"getting_started/repository_overview/#repository-overview","title":"Repository Overview","text":"

    The most relevant folders and files in the repo are:

    \ud83d\udcc1 execution-test-specs/\n\u251c\u2500\u2574\ud83d\udcc1 tests/                     # test cases\n\u2502   \u251c\u2500\u2500 \ud83d\udcc1 eips/\n\u2502   \u251c\u2500\u2500 \ud83d\udcc1 vm/\n\u2502   \u2514\u2500\u2500 \ud83d\udcc1 ...\n\u251c\u2500\u2574\ud83d\udcc1 fixtures/                  # default fixture output dir\n\u2502   \u251c\u2500\u2500 \ud83d\udcc1 blockchain_tests/\n\u2502   \u251c\u2500\u2500 \ud83d\udcc1 blockchain_tests_engine/\n\u2502   \u251c\u2500\u2500 \ud83d\udcc1 state_tests/\n\u2502   \u2514\u2500\u2500 \ud83d\udcc1 ...\n\u251c\u2500\u2574\ud83d\udcc1 src/                       # library & framework packages\n\u2502   \u251c\u2500\u2500 \ud83d\udcc1 ethereum_test_fork/\n\u2502   \u251c\u2500\u2500 \ud83d\udcc1 ethereum_test_tools/\n\u2502   \u2514\u2500\u2500 \ud83d\udcc1 ...\n\u251c\u2500\u2574\ud83d\udcc1 docs/                      # markdown documentation\n\u2502   \u251c\u2500\u2500 \ud83d\udcc1 getting_started\n\u2502   \u251c\u2500\u2500 \ud83d\udcc1 dev\n\u2502   \u2514\u2500\u2500 \ud83d\udcc1 ...\n\u251c\u2500\u2574\ud83d\udcc1 .vscode/                   # visual studio code config\n\u2502   \u251c\u2500\u2500 \ud83d\udcc4 settings.recommended.json # copy to settings.json\n\u2502   \u251c\u2500\u2500 \ud83d\udcc4 launch.recommended.json\n\u2502   \u2514\u2500\u2500 \ud83d\udcc4 extensions.json\n\u2514\u2500\u2500 \ud83d\udcc4 whitelist.txt             # spellcheck dictionary\n
    "},{"location":"getting_started/repository_overview/#tests","title":"tests/","text":"

    Contains the implementation of the Ethereum consensus tests available in this repository.

    "},{"location":"getting_started/repository_overview/#src","title":"src/","text":"

    Contains various packages that help to define test cases and to interface with the evm t8n command. Additionally, it contains some packages that enable test case execution by customizing pytest which acts as the test framework.

    "},{"location":"getting_started/repository_overview/#docs","title":"docs/","text":"

    Contains documentation configuration and source files.

    "},{"location":"getting_started/repository_overview/#vscode","title":".vscode/","text":"

    See VS Code Setup.

    "},{"location":"getting_started/setup_vs_code/","title":"VS Code Setup","text":"

    VS Code setup is optional, but does offer the following advantages:

    • Auto-format your Python code to conform to the repository's code standards (black).
    • Inline linting and auto-completion (thanks to Python type hints).
    • Spell-check your code and docs.
    • Graphical exploration of test cases and easy test execution/debug.
    "},{"location":"getting_started/setup_vs_code/#installation","title":"Installation","text":"

    Please refer to the Visual Studio Code docs for help with installation.

    "},{"location":"getting_started/setup_vs_code/#vs-code-settings-file","title":"VS Code Settings file","text":"

    The ethereum/execution-spec-tests repo includes configuration files for VS Code in the .vscode/ sub-directory:

    \ud83d\udcc1 execution-test-specs/\n\u2514\u2500\u2500\ud83d\udcc1 .vscode/\n    \u251c\u2500\u2500 \ud83d\udcc4 settings.recommended.json\n    \u251c\u2500\u2500 \ud83d\udcc4 extensions.json\n    \u2514\u2500\u2500 \ud83d\udcc4 launch.recommended.json\n

    To enable the recommended settings, copy the settings file to the expected location:

    cp .vscode/settings.recommended.json .vscode/settings.json\n

    To additionally enable the recommended launch configurations:

    cp .vscode/launch.recommended.json .vscode/launch.json\n
    "},{"location":"getting_started/setup_vs_code/#additional-vs-code-extensions","title":"Additional VS Code Extensions","text":"

    Open the folder in VS Code where execution-spec-tests is cloned: VS Code should prompt to install the repository's required extensions from .vscode/extensions.json:

    • ms-python.python
    • ms-python.isort
    • ms-python.flake8
    • ms-python.black-formatter
    • esbenp.prettier-vscode
    • streetsidesoftware.code-spell-checker
    • tamasfe.even-better-toml

    Workspace Trust

    Trust the execution-specs-test repository when opening in VS Code to be prompted to install the plugins recommended via the extensions.json file.

    "},{"location":"getting_started/setup_vs_code/#configuration-for-testing-evm-features-under-active-development","title":"Configuration for Testing EVM Features Under Active Development","text":"

    An additional step is required to enable fixture generations for features from forks that are under active development and have not been deployed to mainnet, see Executing Tests for Features under Development.

    "},{"location":"library/","title":"Library (Tools) Reference Documentation","text":"

    Execution spec tests consists of several packages that implement helper classes and tools that enable and simplify test case implementation. This section contains their reference documentation:

    • ethereum_test_base_types - provides the basic types on top of which other testing libraries are built.
    • ethereum_test_exceptions - provides definitions for exceptions used in all tests.
    • ethereum_test_fixtures - provides definitions of all test fixture types that are produced in this repository and can be consumed by clients.
    • ethereum_test_forks - provides definitions for supported forks used in tests.
    • ethereum_test_specs - provides definitions for all spec types used to define test cases, and generate different kinds of test fixtures.
    • ethereum_test_tools - provides primitives and helpers to test Ethereum execution clients.
    • ethereum_test_types - provides Ethereum types built on top of the base types which are used to define test cases and interact with other libraries.
    • ethereum_test_vm - provides definitions for the Ethereum Virtual Machine (EVM) as used to define bytecode in test cases.
    • evm_transition_tool - a wrapper for the transition (t8n) tool.
    • pytest_plugins - contains pytest customizations that provide additional functionality for generating test fixtures.
    "},{"location":"library/ethereum_test_base_types/","title":"Ethereum Test Base Types package","text":"

    Common definitions and types.

    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Address","title":"Address","text":"

    Bases: FixedSizeBytes[20]

    Class that helps represent Ethereum addresses in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class Address(FixedSizeBytes[20]):  # type: ignore\n    \"\"\"\n    Class that helps represent Ethereum addresses in tests.\n    \"\"\"\n\n    label: str | None = None\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Bloom","title":"Bloom","text":"

    Bases: FixedSizeBytes[256]

    Class that helps represent blooms in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class Bloom(FixedSizeBytes[256]):  # type: ignore\n    \"\"\"\n    Class that helps represent blooms in tests.\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.BLSPublicKey","title":"BLSPublicKey","text":"

    Bases: FixedSizeBytes[48]

    Class that helps represent BLS public keys in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class BLSPublicKey(FixedSizeBytes[48]):  # type: ignore\n    \"\"\"\n    Class that helps represent BLS public keys in tests.\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.BLSSignature","title":"BLSSignature","text":"

    Bases: FixedSizeBytes[96]

    Class that helps represent BLS signatures in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class BLSSignature(FixedSizeBytes[96]):  # type: ignore\n    \"\"\"\n    Class that helps represent BLS signatures in tests.\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Bytes","title":"Bytes","text":"

    Bases: bytes, ToStringSchema

    Class that helps represent bytes of variable length in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class Bytes(bytes, ToStringSchema):\n    \"\"\"\n    Class that helps represent bytes of variable length in tests.\n    \"\"\"\n\n    def __new__(cls, input: BytesConvertible):\n        \"\"\"\n        Creates a new Bytes object.\n        \"\"\"\n        if type(input) is cls:\n            return input\n        return super(Bytes, cls).__new__(cls, to_bytes(input))\n\n    def __hash__(self) -> int:\n        \"\"\"\n        Returns the hash of the bytes.\n        \"\"\"\n        return super(Bytes, self).__hash__()\n\n    def __str__(self) -> str:\n        \"\"\"\n        Returns the hexadecimal representation of the bytes.\n        \"\"\"\n        return self.hex()\n\n    def hex(self, *args, **kwargs) -> str:\n        \"\"\"\n        Returns the hexadecimal representation of the bytes.\n        \"\"\"\n        return \"0x\" + super().hex(*args, **kwargs)\n\n    @classmethod\n    def or_none(cls, input: \"Bytes | BytesConvertible | None\") -> \"Bytes | None\":\n        \"\"\"\n        Converts the input to a Bytes while accepting None.\n        \"\"\"\n        if input is None:\n            return input\n        return cls(input)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Bytes.__new__","title":"__new__(input)","text":"

    Creates a new Bytes object.

    Source code in src/ethereum_test_base_types/base_types.py
    def __new__(cls, input: BytesConvertible):\n    \"\"\"\n    Creates a new Bytes object.\n    \"\"\"\n    if type(input) is cls:\n        return input\n    return super(Bytes, cls).__new__(cls, to_bytes(input))\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Bytes.__hash__","title":"__hash__()","text":"

    Returns the hash of the bytes.

    Source code in src/ethereum_test_base_types/base_types.py
    def __hash__(self) -> int:\n    \"\"\"\n    Returns the hash of the bytes.\n    \"\"\"\n    return super(Bytes, self).__hash__()\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Bytes.__str__","title":"__str__()","text":"

    Returns the hexadecimal representation of the bytes.

    Source code in src/ethereum_test_base_types/base_types.py
    def __str__(self) -> str:\n    \"\"\"\n    Returns the hexadecimal representation of the bytes.\n    \"\"\"\n    return self.hex()\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Bytes.hex","title":"hex(*args, **kwargs)","text":"

    Returns the hexadecimal representation of the bytes.

    Source code in src/ethereum_test_base_types/base_types.py
    def hex(self, *args, **kwargs) -> str:\n    \"\"\"\n    Returns the hexadecimal representation of the bytes.\n    \"\"\"\n    return \"0x\" + super().hex(*args, **kwargs)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Bytes.or_none","title":"or_none(input) classmethod","text":"

    Converts the input to a Bytes while accepting None.

    Source code in src/ethereum_test_base_types/base_types.py
    @classmethod\ndef or_none(cls, input: \"Bytes | BytesConvertible | None\") -> \"Bytes | None\":\n    \"\"\"\n    Converts the input to a Bytes while accepting None.\n    \"\"\"\n    if input is None:\n        return input\n    return cls(input)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.FixedSizeBytes","title":"FixedSizeBytes","text":"

    Bases: Bytes

    Class that helps represent bytes of fixed length in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class FixedSizeBytes(Bytes):\n    \"\"\"\n    Class that helps represent bytes of fixed length in tests.\n    \"\"\"\n\n    byte_length: ClassVar[int]\n\n    def __class_getitem__(cls, length: int) -> Type[\"FixedSizeBytes\"]:\n        \"\"\"\n        Creates a new FixedSizeBytes class with the given length.\n        \"\"\"\n\n        class Sized(cls):  # type: ignore\n            byte_length = length\n\n        return Sized\n\n    def __new__(cls, input: FixedSizeBytesConvertible | T):\n        \"\"\"\n        Creates a new FixedSizeBytes object.\n        \"\"\"\n        if type(input) is cls:\n            return input\n        return super(FixedSizeBytes, cls).__new__(cls, to_fixed_size_bytes(input, cls.byte_length))\n\n    def __hash__(self) -> int:\n        \"\"\"\n        Returns the hash of the bytes.\n        \"\"\"\n        return super(FixedSizeBytes, self).__hash__()\n\n    @classmethod\n    def or_none(cls: Type[T], input: T | FixedSizeBytesConvertible | None) -> T | None:\n        \"\"\"\n        Converts the input to a Fixed Size Bytes while accepting None.\n        \"\"\"\n        if input is None:\n            return input\n        return cls(input)\n\n    def __eq__(self, other: object) -> bool:\n        \"\"\"\n        Compares two FixedSizeBytes objects to be equal.\n        \"\"\"\n        if not isinstance(other, FixedSizeBytes):\n            assert (\n                isinstance(other, str)\n                or isinstance(other, int)\n                or isinstance(other, bytes)\n                or isinstance(other, SupportsBytes)\n            )\n            other = self.__class__(other)\n        return super().__eq__(other)\n\n    def __ne__(self, other: object) -> bool:\n        \"\"\"\n        Compares two FixedSizeBytes objects to be not equal.\n        \"\"\"\n        return not self.__eq__(other)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.FixedSizeBytes.__class_getitem__","title":"__class_getitem__(length)","text":"

    Creates a new FixedSizeBytes class with the given length.

    Source code in src/ethereum_test_base_types/base_types.py
    def __class_getitem__(cls, length: int) -> Type[\"FixedSizeBytes\"]:\n    \"\"\"\n    Creates a new FixedSizeBytes class with the given length.\n    \"\"\"\n\n    class Sized(cls):  # type: ignore\n        byte_length = length\n\n    return Sized\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.FixedSizeBytes.__new__","title":"__new__(input)","text":"

    Creates a new FixedSizeBytes object.

    Source code in src/ethereum_test_base_types/base_types.py
    def __new__(cls, input: FixedSizeBytesConvertible | T):\n    \"\"\"\n    Creates a new FixedSizeBytes object.\n    \"\"\"\n    if type(input) is cls:\n        return input\n    return super(FixedSizeBytes, cls).__new__(cls, to_fixed_size_bytes(input, cls.byte_length))\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.FixedSizeBytes.__hash__","title":"__hash__()","text":"

    Returns the hash of the bytes.

    Source code in src/ethereum_test_base_types/base_types.py
    def __hash__(self) -> int:\n    \"\"\"\n    Returns the hash of the bytes.\n    \"\"\"\n    return super(FixedSizeBytes, self).__hash__()\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.FixedSizeBytes.or_none","title":"or_none(input) classmethod","text":"

    Converts the input to a Fixed Size Bytes while accepting None.

    Source code in src/ethereum_test_base_types/base_types.py
    @classmethod\ndef or_none(cls: Type[T], input: T | FixedSizeBytesConvertible | None) -> T | None:\n    \"\"\"\n    Converts the input to a Fixed Size Bytes while accepting None.\n    \"\"\"\n    if input is None:\n        return input\n    return cls(input)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.FixedSizeBytes.__eq__","title":"__eq__(other)","text":"

    Compares two FixedSizeBytes objects to be equal.

    Source code in src/ethereum_test_base_types/base_types.py
    def __eq__(self, other: object) -> bool:\n    \"\"\"\n    Compares two FixedSizeBytes objects to be equal.\n    \"\"\"\n    if not isinstance(other, FixedSizeBytes):\n        assert (\n            isinstance(other, str)\n            or isinstance(other, int)\n            or isinstance(other, bytes)\n            or isinstance(other, SupportsBytes)\n        )\n        other = self.__class__(other)\n    return super().__eq__(other)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.FixedSizeBytes.__ne__","title":"__ne__(other)","text":"

    Compares two FixedSizeBytes objects to be not equal.

    Source code in src/ethereum_test_base_types/base_types.py
    def __ne__(self, other: object) -> bool:\n    \"\"\"\n    Compares two FixedSizeBytes objects to be not equal.\n    \"\"\"\n    return not self.__eq__(other)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Hash","title":"Hash","text":"

    Bases: FixedSizeBytes[32]

    Class that helps represent hashes in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class Hash(FixedSizeBytes[32]):  # type: ignore\n    \"\"\"\n    Class that helps represent hashes in tests.\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.HashInt","title":"HashInt","text":"

    Bases: FixedSizeHexNumber[32]

    Class that helps represent hashes in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class HashInt(FixedSizeHexNumber[32]):  # type: ignore\n    \"\"\"\n    Class that helps represent hashes in tests.\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.HeaderNonce","title":"HeaderNonce","text":"

    Bases: FixedSizeBytes[8]

    Class that helps represent the header nonce in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class HeaderNonce(FixedSizeBytes[8]):  # type: ignore\n    \"\"\"\n    Class that helps represent the header nonce in tests.\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.HexNumber","title":"HexNumber","text":"

    Bases: Number

    Class that helps represent an hexadecimal numbers in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class HexNumber(Number):\n    \"\"\"\n    Class that helps represent an hexadecimal numbers in tests.\n    \"\"\"\n\n    def __str__(self) -> str:\n        \"\"\"\n        Returns the string representation of the number.\n        \"\"\"\n        return self.hex()\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.HexNumber.__str__","title":"__str__()","text":"

    Returns the string representation of the number.

    Source code in src/ethereum_test_base_types/base_types.py
    def __str__(self) -> str:\n    \"\"\"\n    Returns the string representation of the number.\n    \"\"\"\n    return self.hex()\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Number","title":"Number","text":"

    Bases: int, ToStringSchema

    Class that helps represent numbers in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class Number(int, ToStringSchema):\n    \"\"\"\n    Class that helps represent numbers in tests.\n    \"\"\"\n\n    def __new__(cls, input: NumberConvertible | N):\n        \"\"\"\n        Creates a new Number object.\n        \"\"\"\n        return super(Number, cls).__new__(cls, to_number(input))\n\n    def __str__(self) -> str:\n        \"\"\"\n        Returns the string representation of the number.\n        \"\"\"\n        return str(int(self))\n\n    def hex(self) -> str:\n        \"\"\"\n        Returns the hexadecimal representation of the number.\n        \"\"\"\n        return hex(self)\n\n    @classmethod\n    def or_none(cls: Type[N], input: N | NumberConvertible | None) -> N | None:\n        \"\"\"\n        Converts the input to a Number while accepting None.\n        \"\"\"\n        if input is None:\n            return input\n        return cls(input)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Number.__new__","title":"__new__(input)","text":"

    Creates a new Number object.

    Source code in src/ethereum_test_base_types/base_types.py
    def __new__(cls, input: NumberConvertible | N):\n    \"\"\"\n    Creates a new Number object.\n    \"\"\"\n    return super(Number, cls).__new__(cls, to_number(input))\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Number.__str__","title":"__str__()","text":"

    Returns the string representation of the number.

    Source code in src/ethereum_test_base_types/base_types.py
    def __str__(self) -> str:\n    \"\"\"\n    Returns the string representation of the number.\n    \"\"\"\n    return str(int(self))\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Number.hex","title":"hex()","text":"

    Returns the hexadecimal representation of the number.

    Source code in src/ethereum_test_base_types/base_types.py
    def hex(self) -> str:\n    \"\"\"\n    Returns the hexadecimal representation of the number.\n    \"\"\"\n    return hex(self)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Number.or_none","title":"or_none(input) classmethod","text":"

    Converts the input to a Number while accepting None.

    Source code in src/ethereum_test_base_types/base_types.py
    @classmethod\ndef or_none(cls: Type[N], input: N | NumberConvertible | None) -> N | None:\n    \"\"\"\n    Converts the input to a Number while accepting None.\n    \"\"\"\n    if input is None:\n        return input\n    return cls(input)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ZeroPaddedHexNumber","title":"ZeroPaddedHexNumber","text":"

    Bases: HexNumber

    Class that helps represent zero padded hexadecimal numbers in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class ZeroPaddedHexNumber(HexNumber):\n    \"\"\"\n    Class that helps represent zero padded hexadecimal numbers in tests.\n    \"\"\"\n\n    def hex(self) -> str:\n        \"\"\"\n        Returns the hexadecimal representation of the number.\n        \"\"\"\n        if self == 0:\n            return \"0x00\"\n        hex_str = hex(self)[2:]\n        if len(hex_str) % 2 == 1:\n            return \"0x0\" + hex_str\n        return \"0x\" + hex_str\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ZeroPaddedHexNumber.hex","title":"hex()","text":"

    Returns the hexadecimal representation of the number.

    Source code in src/ethereum_test_base_types/base_types.py
    def hex(self) -> str:\n    \"\"\"\n    Returns the hexadecimal representation of the number.\n    \"\"\"\n    if self == 0:\n        return \"0x00\"\n    hex_str = hex(self)[2:]\n    if len(hex_str) % 2 == 1:\n        return \"0x0\" + hex_str\n    return \"0x\" + hex_str\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account","title":"Account","text":"

    Bases: CamelModel

    State associated with an address.

    Source code in src/ethereum_test_base_types/composite_types.py
    class Account(CamelModel):\n    \"\"\"\n    State associated with an address.\n    \"\"\"\n\n    nonce: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0)\n    \"\"\"\n    The scalar value equal to a) the number of transactions sent by\n    an Externally Owned Account, b) the amount of contracts created by a\n    contract.\n    \"\"\"\n    balance: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0)\n    \"\"\"\n    The amount of Wei (10<sup>-18</sup> Eth) the account has.\n    \"\"\"\n    code: Bytes = Bytes(b\"\")\n    \"\"\"\n    Bytecode contained by the account.\n    \"\"\"\n    storage: Storage = Field(default_factory=Storage)\n    \"\"\"\n    Storage within a contract.\n    \"\"\"\n\n    NONEXISTENT: ClassVar[None] = None\n    \"\"\"\n    Sentinel object used to specify when an account should not exist in the\n    state.\n    \"\"\"\n\n    @dataclass(kw_only=True)\n    class NonceMismatch(Exception):\n        \"\"\"\n        Test expected a certain nonce value for an account but a different\n        value was found.\n        \"\"\"\n\n        address: Address\n        want: int | None\n        got: int | None\n\n        def __init__(self, address: Address, want: int | None, got: int | None, *args):\n            super().__init__(args)\n            self.address = address\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"unexpected nonce for account {self.address}{label_str}: \"\n                + f\"want {self.want}, got {self.got}\"\n            )\n\n    @dataclass(kw_only=True)\n    class BalanceMismatch(Exception):\n        \"\"\"\n        Test expected a certain balance for an account but a different\n        value was found.\n        \"\"\"\n\n        address: Address\n        want: int | None\n        got: int | None\n\n        def __init__(self, address: Address, want: int | None, got: int | None, *args):\n            super().__init__(args)\n            self.address = address\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"unexpected balance for account {self.address}{label_str}: \"\n                + f\"want {self.want}, got {self.got}\"\n            )\n\n    @dataclass(kw_only=True)\n    class CodeMismatch(Exception):\n        \"\"\"\n        Test expected a certain bytecode for an account but a different\n        one was found.\n        \"\"\"\n\n        address: Address\n        want: bytes | None\n        got: bytes | None\n\n        def __init__(self, address: Address, want: bytes | None, got: bytes | None, *args):\n            super().__init__(args)\n            self.address = address\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"unexpected code for account {self.address}{label_str}: \"\n                + f\"want {self.want}, got {self.got}\"\n            )\n\n    def check_alloc(self: \"Account\", address: Address, account: \"Account\"):\n        \"\"\"\n        Checks the returned alloc against an expected account in post state.\n        Raises exception on failure.\n        \"\"\"\n        if \"nonce\" in self.model_fields_set:\n            if self.nonce != account.nonce:\n                raise Account.NonceMismatch(\n                    address=address,\n                    want=self.nonce,\n                    got=account.nonce,\n                )\n\n        if \"balance\" in self.model_fields_set:\n            if self.balance != account.balance:\n                raise Account.BalanceMismatch(\n                    address=address,\n                    want=self.balance,\n                    got=account.balance,\n                )\n\n        if \"code\" in self.model_fields_set:\n            if self.code != account.code:\n                raise Account.CodeMismatch(\n                    address=address,\n                    want=self.code,\n                    got=account.code,\n                )\n\n        if \"storage\" in self.model_fields_set:\n            self.storage.must_be_equal(address=address, other=account.storage)\n\n    def __bool__(self: \"Account\") -> bool:\n        \"\"\"\n        Returns True on a non-empty account.\n        \"\"\"\n        return any((self.nonce, self.balance, self.code, self.storage))\n\n    @classmethod\n    def with_code(cls: Type, code: BytesConvertible) -> \"Account\":\n        \"\"\"\n        Create account with provided `code` and nonce of `1`.\n        \"\"\"\n        return Account(nonce=HexNumber(1), code=Bytes(code))\n\n    @classmethod\n    def merge(\n        cls: Type, account_1: \"Dict | Account | None\", account_2: \"Dict | Account | None\"\n    ) -> \"Account\":\n        \"\"\"\n        Create a merged account from two sources.\n        \"\"\"\n\n        def to_kwargs_dict(account: \"Dict | Account | None\") -> Dict:\n            if account is None:\n                return {}\n            if isinstance(account, dict):\n                return account\n            elif isinstance(account, cls):\n                return account.model_dump(exclude_unset=True)\n            raise TypeError(f\"Unexpected type for account merge: {type(account)}\")\n\n        kwargs = to_kwargs_dict(account_1)\n        kwargs.update(to_kwargs_dict(account_2))\n\n        return cls(**kwargs)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.nonce","title":"nonce: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0) class-attribute instance-attribute","text":"

    The scalar value equal to a) the number of transactions sent by an Externally Owned Account, b) the amount of contracts created by a contract.

    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.balance","title":"balance: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0) class-attribute instance-attribute","text":"

    The amount of Wei (10-18 Eth) the account has.

    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.code","title":"code: Bytes = Bytes(b'') class-attribute instance-attribute","text":"

    Bytecode contained by the account.

    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.storage","title":"storage: Storage = Field(default_factory=Storage) class-attribute instance-attribute","text":"

    Storage within a contract.

    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.NONEXISTENT","title":"NONEXISTENT: None = None class-attribute","text":"

    Sentinel object used to specify when an account should not exist in the state.

    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.NonceMismatch","title":"NonceMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain nonce value for an account but a different value was found.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass NonceMismatch(Exception):\n    \"\"\"\n    Test expected a certain nonce value for an account but a different\n    value was found.\n    \"\"\"\n\n    address: Address\n    want: int | None\n    got: int | None\n\n    def __init__(self, address: Address, want: int | None, got: int | None, *args):\n        super().__init__(args)\n        self.address = address\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"unexpected nonce for account {self.address}{label_str}: \"\n            + f\"want {self.want}, got {self.got}\"\n        )\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.NonceMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"unexpected nonce for account {self.address}{label_str}: \"\n        + f\"want {self.want}, got {self.got}\"\n    )\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.BalanceMismatch","title":"BalanceMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain balance for an account but a different value was found.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass BalanceMismatch(Exception):\n    \"\"\"\n    Test expected a certain balance for an account but a different\n    value was found.\n    \"\"\"\n\n    address: Address\n    want: int | None\n    got: int | None\n\n    def __init__(self, address: Address, want: int | None, got: int | None, *args):\n        super().__init__(args)\n        self.address = address\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"unexpected balance for account {self.address}{label_str}: \"\n            + f\"want {self.want}, got {self.got}\"\n        )\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.BalanceMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"unexpected balance for account {self.address}{label_str}: \"\n        + f\"want {self.want}, got {self.got}\"\n    )\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.CodeMismatch","title":"CodeMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain bytecode for an account but a different one was found.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass CodeMismatch(Exception):\n    \"\"\"\n    Test expected a certain bytecode for an account but a different\n    one was found.\n    \"\"\"\n\n    address: Address\n    want: bytes | None\n    got: bytes | None\n\n    def __init__(self, address: Address, want: bytes | None, got: bytes | None, *args):\n        super().__init__(args)\n        self.address = address\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"unexpected code for account {self.address}{label_str}: \"\n            + f\"want {self.want}, got {self.got}\"\n        )\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.CodeMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"unexpected code for account {self.address}{label_str}: \"\n        + f\"want {self.want}, got {self.got}\"\n    )\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.check_alloc","title":"check_alloc(address, account)","text":"

    Checks the returned alloc against an expected account in post state. Raises exception on failure.

    Source code in src/ethereum_test_base_types/composite_types.py
    def check_alloc(self: \"Account\", address: Address, account: \"Account\"):\n    \"\"\"\n    Checks the returned alloc against an expected account in post state.\n    Raises exception on failure.\n    \"\"\"\n    if \"nonce\" in self.model_fields_set:\n        if self.nonce != account.nonce:\n            raise Account.NonceMismatch(\n                address=address,\n                want=self.nonce,\n                got=account.nonce,\n            )\n\n    if \"balance\" in self.model_fields_set:\n        if self.balance != account.balance:\n            raise Account.BalanceMismatch(\n                address=address,\n                want=self.balance,\n                got=account.balance,\n            )\n\n    if \"code\" in self.model_fields_set:\n        if self.code != account.code:\n            raise Account.CodeMismatch(\n                address=address,\n                want=self.code,\n                got=account.code,\n            )\n\n    if \"storage\" in self.model_fields_set:\n        self.storage.must_be_equal(address=address, other=account.storage)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.__bool__","title":"__bool__()","text":"

    Returns True on a non-empty account.

    Source code in src/ethereum_test_base_types/composite_types.py
    def __bool__(self: \"Account\") -> bool:\n    \"\"\"\n    Returns True on a non-empty account.\n    \"\"\"\n    return any((self.nonce, self.balance, self.code, self.storage))\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.with_code","title":"with_code(code) classmethod","text":"

    Create account with provided code and nonce of 1.

    Source code in src/ethereum_test_base_types/composite_types.py
    @classmethod\ndef with_code(cls: Type, code: BytesConvertible) -> \"Account\":\n    \"\"\"\n    Create account with provided `code` and nonce of `1`.\n    \"\"\"\n    return Account(nonce=HexNumber(1), code=Bytes(code))\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.merge","title":"merge(account_1, account_2) classmethod","text":"

    Create a merged account from two sources.

    Source code in src/ethereum_test_base_types/composite_types.py
    @classmethod\ndef merge(\n    cls: Type, account_1: \"Dict | Account | None\", account_2: \"Dict | Account | None\"\n) -> \"Account\":\n    \"\"\"\n    Create a merged account from two sources.\n    \"\"\"\n\n    def to_kwargs_dict(account: \"Dict | Account | None\") -> Dict:\n        if account is None:\n            return {}\n        if isinstance(account, dict):\n            return account\n        elif isinstance(account, cls):\n            return account.model_dump(exclude_unset=True)\n        raise TypeError(f\"Unexpected type for account merge: {type(account)}\")\n\n    kwargs = to_kwargs_dict(account_1)\n    kwargs.update(to_kwargs_dict(account_2))\n\n    return cls(**kwargs)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Alloc","title":"Alloc","text":"

    Bases: RootModel[Dict[Address, Account | None]]

    Allocation of accounts in the state, pre and post test execution.

    Source code in src/ethereum_test_base_types/composite_types.py
    class Alloc(RootModel[Dict[Address, Account | None]]):\n    \"\"\"\n    Allocation of accounts in the state, pre and post test execution.\n    \"\"\"\n\n    root: Dict[Address, Account | None] = Field(default_factory=dict, validate_default=True)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage","title":"Storage","text":"

    Bases: RootModel[Dict[StorageKeyValueType, StorageKeyValueType]]

    Definition of a storage in pre or post state of a test

    Source code in src/ethereum_test_base_types/composite_types.py
    class Storage(RootModel[Dict[StorageKeyValueType, StorageKeyValueType]]):\n    \"\"\"\n    Definition of a storage in pre or post state of a test\n    \"\"\"\n\n    root: Dict[StorageKeyValueType, StorageKeyValueType] = Field(default_factory=dict)\n\n    _current_slot: int = PrivateAttr(0)\n\n    StorageDictType: ClassVar[TypeAlias] = Dict[\n        str | int | bytes | SupportsBytes, str | int | bytes | SupportsBytes\n    ]\n    \"\"\"\n    Dictionary type to be used when defining an input to initialize a storage.\n    \"\"\"\n\n    @dataclass(kw_only=True)\n    class InvalidType(Exception):\n        \"\"\"\n        Invalid type used when describing test's expected storage key or value.\n        \"\"\"\n\n        key_or_value: Any\n\n        def __init__(self, key_or_value: Any, *args):\n            super().__init__(args)\n            self.key_or_value = key_or_value\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            return f\"invalid type for key/value: {self.key_or_value}\"\n\n    @dataclass(kw_only=True)\n    class InvalidValue(Exception):\n        \"\"\"\n        Invalid value used when describing test's expected storage key or\n        value.\n        \"\"\"\n\n        key_or_value: Any\n\n        def __init__(self, key_or_value: Any, *args):\n            super().__init__(args)\n            self.key_or_value = key_or_value\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            return f\"invalid value for key/value: {self.key_or_value}\"\n\n    @dataclass(kw_only=True)\n    class MissingKey(Exception):\n        \"\"\"\n        Test expected to find a storage key set but key was missing.\n        \"\"\"\n\n        key: int\n\n        def __init__(self, key: int, *args):\n            super().__init__(args)\n            self.key = key\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            return \"key {0} not found in storage\".format(Hash(self.key))\n\n    @dataclass(kw_only=True)\n    class KeyValueMismatch(Exception):\n        \"\"\"\n        Test expected a certain value in a storage key but value found\n        was different.\n        \"\"\"\n\n        address: Address\n        key: int\n        want: int\n        got: int\n\n        def __init__(self, address: Address, key: int, want: int, got: int, *args):\n            super().__init__(args)\n            self.address = address\n            self.key = key\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"incorrect value in address {self.address}{label_str} for \"\n                + f\"key {Hash(self.key)}:\"\n                + f\" want {HexNumber(self.want)} (dec:{int(self.want)}),\"\n                + f\" got {HexNumber(self.got)} (dec:{int(self.got)})\"\n            )\n\n    def __contains__(self, key: StorageKeyValueTypeConvertible | StorageKeyValueType) -> bool:\n        \"\"\"Checks for an item in the storage\"\"\"\n        return StorageKeyValueTypeAdapter.validate_python(key) in self.root\n\n    def __getitem__(\n        self, key: StorageKeyValueTypeConvertible | StorageKeyValueType\n    ) -> StorageKeyValueType:\n        \"\"\"Returns an item from the storage\"\"\"\n        return self.root[StorageKeyValueTypeAdapter.validate_python(key)]\n\n    def __setitem__(\n        self,\n        key: StorageKeyValueTypeConvertible | StorageKeyValueType,\n        value: StorageKeyValueTypeConvertible | StorageKeyValueType,\n    ):  # noqa: SC200\n        \"\"\"Sets an item in the storage\"\"\"\n        self.root[\n            StorageKeyValueTypeAdapter.validate_python(key)\n        ] = StorageKeyValueTypeAdapter.validate_python(value)\n\n    def __delitem__(self, key: StorageKeyValueTypeConvertible | StorageKeyValueType):\n        \"\"\"Deletes an item from the storage\"\"\"\n        del self.root[StorageKeyValueTypeAdapter.validate_python(key)]\n\n    def __iter__(self):\n        \"\"\"Returns an iterator over the storage\"\"\"\n        return iter(self.root)\n\n    def __eq__(self, other) -> bool:\n        \"\"\"\n        Returns True if both storages are equal.\n        \"\"\"\n        if not isinstance(other, Storage):\n            return False\n        return self.root == other.root\n\n    def __ne__(self, other) -> bool:\n        \"\"\"\n        Returns True if both storages are not equal.\n        \"\"\"\n        if not isinstance(other, Storage):\n            return False\n        return self.root != other.root\n\n    def __bool__(self) -> bool:\n        \"\"\"Returns True if the storage is not empty\"\"\"\n        return any(v for v in self.root.values())\n\n    def __add__(self, other: \"Storage\") -> \"Storage\":\n        \"\"\"\n        Returns a new storage that is the sum of two storages.\n        \"\"\"\n        return Storage({**self.root, **other.root})\n\n    def keys(self) -> set[StorageKeyValueType]:\n        \"\"\"Returns the keys of the storage\"\"\"\n        return set(self.root.keys())\n\n    def set_next_slot(self, slot: int) -> \"Storage\":\n        \"\"\"\n        Sets the next slot to be used by `store_next`.\n        \"\"\"\n        self._current_slot = slot\n        return self\n\n    def store_next(\n        self, value: StorageKeyValueTypeConvertible | StorageKeyValueType | bool\n    ) -> StorageKeyValueType:\n        \"\"\"\n        Stores a value in the storage and returns the key where the value is stored.\n\n        Increments the key counter so the next time this function is called,\n        the next key is used.\n        \"\"\"\n        slot = StorageKeyValueTypeAdapter.validate_python(self._current_slot)\n        self._current_slot += 1\n        self[slot] = StorageKeyValueTypeAdapter.validate_python(value)\n        return slot\n\n    def peek_slot(self) -> int:\n        \"\"\"\n        Peeks the next slot that will be used by `store_next`.\n        \"\"\"\n        return self._current_slot\n\n    def contains(self, other: \"Storage\") -> bool:\n        \"\"\"\n        Returns True if self contains all keys with equal value as\n        contained by second storage.\n        Used for comparison with test expected post state and alloc returned\n        by the transition tool.\n        \"\"\"\n        for key in other.keys():\n            if key not in self:\n                return False\n            if self[key] != other[key]:\n                return False\n        return True\n\n    def must_contain(self, address: Address, other: \"Storage\"):\n        \"\"\"\n        Succeeds only if self contains all keys with equal value as\n        contained by second storage.\n        Used for comparison with test expected post state and alloc returned\n        by the transition tool.\n        Raises detailed exception when a difference is found.\n        \"\"\"\n        for key in other.keys():\n            if key not in self:\n                # storage[key]==0 is equal to missing storage\n                if other[key] != 0:\n                    raise Storage.MissingKey(key=key)\n            elif self[key] != other[key]:\n                raise Storage.KeyValueMismatch(\n                    address=address, key=key, want=self[key], got=other[key]\n                )\n\n    def must_be_equal(self, address: Address, other: \"Storage | None\"):\n        \"\"\"\n        Succeeds only if \"self\" is equal to \"other\" storage.\n        \"\"\"\n        # Test keys contained in both storage objects\n        if other is None:\n            other = Storage({})\n        for key in self.keys() & other.keys():\n            if self[key] != other[key]:\n                raise Storage.KeyValueMismatch(\n                    address=address, key=key, want=self[key], got=other[key]\n                )\n\n        # Test keys contained in either one of the storage objects\n        for key in self.keys() ^ other.keys():\n            if key in self:\n                if self[key] != 0:\n                    raise Storage.KeyValueMismatch(address=address, key=key, want=self[key], got=0)\n\n            elif other[key] != 0:\n                raise Storage.KeyValueMismatch(address=address, key=key, want=0, got=other[key])\n\n    def canary(self) -> \"Storage\":\n        \"\"\"\n        Returns a canary storage filled with non-zero values where the current storage expects\n        zero values, to guarantee that the test overwrites the storage.\n        \"\"\"\n        return Storage({key: HashInt(0xBA5E) for key in self.keys() if self[key] == 0})\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.StorageDictType","title":"StorageDictType: TypeAlias = Dict[str | int | bytes | SupportsBytes, str | int | bytes | SupportsBytes] class-attribute","text":"

    Dictionary type to be used when defining an input to initialize a storage.

    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.InvalidType","title":"InvalidType dataclass","text":"

    Bases: Exception

    Invalid type used when describing test's expected storage key or value.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass InvalidType(Exception):\n    \"\"\"\n    Invalid type used when describing test's expected storage key or value.\n    \"\"\"\n\n    key_or_value: Any\n\n    def __init__(self, key_or_value: Any, *args):\n        super().__init__(args)\n        self.key_or_value = key_or_value\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        return f\"invalid type for key/value: {self.key_or_value}\"\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.InvalidType.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    return f\"invalid type for key/value: {self.key_or_value}\"\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.InvalidValue","title":"InvalidValue dataclass","text":"

    Bases: Exception

    Invalid value used when describing test's expected storage key or value.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass InvalidValue(Exception):\n    \"\"\"\n    Invalid value used when describing test's expected storage key or\n    value.\n    \"\"\"\n\n    key_or_value: Any\n\n    def __init__(self, key_or_value: Any, *args):\n        super().__init__(args)\n        self.key_or_value = key_or_value\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        return f\"invalid value for key/value: {self.key_or_value}\"\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.InvalidValue.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    return f\"invalid value for key/value: {self.key_or_value}\"\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.MissingKey","title":"MissingKey dataclass","text":"

    Bases: Exception

    Test expected to find a storage key set but key was missing.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass MissingKey(Exception):\n    \"\"\"\n    Test expected to find a storage key set but key was missing.\n    \"\"\"\n\n    key: int\n\n    def __init__(self, key: int, *args):\n        super().__init__(args)\n        self.key = key\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        return \"key {0} not found in storage\".format(Hash(self.key))\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.MissingKey.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    return \"key {0} not found in storage\".format(Hash(self.key))\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.KeyValueMismatch","title":"KeyValueMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain value in a storage key but value found was different.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass KeyValueMismatch(Exception):\n    \"\"\"\n    Test expected a certain value in a storage key but value found\n    was different.\n    \"\"\"\n\n    address: Address\n    key: int\n    want: int\n    got: int\n\n    def __init__(self, address: Address, key: int, want: int, got: int, *args):\n        super().__init__(args)\n        self.address = address\n        self.key = key\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"incorrect value in address {self.address}{label_str} for \"\n            + f\"key {Hash(self.key)}:\"\n            + f\" want {HexNumber(self.want)} (dec:{int(self.want)}),\"\n            + f\" got {HexNumber(self.got)} (dec:{int(self.got)})\"\n        )\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.KeyValueMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"incorrect value in address {self.address}{label_str} for \"\n        + f\"key {Hash(self.key)}:\"\n        + f\" want {HexNumber(self.want)} (dec:{int(self.want)}),\"\n        + f\" got {HexNumber(self.got)} (dec:{int(self.got)})\"\n    )\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.__contains__","title":"__contains__(key)","text":"

    Checks for an item in the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def __contains__(self, key: StorageKeyValueTypeConvertible | StorageKeyValueType) -> bool:\n    \"\"\"Checks for an item in the storage\"\"\"\n    return StorageKeyValueTypeAdapter.validate_python(key) in self.root\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.__getitem__","title":"__getitem__(key)","text":"

    Returns an item from the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def __getitem__(\n    self, key: StorageKeyValueTypeConvertible | StorageKeyValueType\n) -> StorageKeyValueType:\n    \"\"\"Returns an item from the storage\"\"\"\n    return self.root[StorageKeyValueTypeAdapter.validate_python(key)]\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.__setitem__","title":"__setitem__(key, value)","text":"

    Sets an item in the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def __setitem__(\n    self,\n    key: StorageKeyValueTypeConvertible | StorageKeyValueType,\n    value: StorageKeyValueTypeConvertible | StorageKeyValueType,\n):  # noqa: SC200\n    \"\"\"Sets an item in the storage\"\"\"\n    self.root[\n        StorageKeyValueTypeAdapter.validate_python(key)\n    ] = StorageKeyValueTypeAdapter.validate_python(value)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.__delitem__","title":"__delitem__(key)","text":"

    Deletes an item from the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def __delitem__(self, key: StorageKeyValueTypeConvertible | StorageKeyValueType):\n    \"\"\"Deletes an item from the storage\"\"\"\n    del self.root[StorageKeyValueTypeAdapter.validate_python(key)]\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.__iter__","title":"__iter__()","text":"

    Returns an iterator over the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def __iter__(self):\n    \"\"\"Returns an iterator over the storage\"\"\"\n    return iter(self.root)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.__eq__","title":"__eq__(other)","text":"

    Returns True if both storages are equal.

    Source code in src/ethereum_test_base_types/composite_types.py
    def __eq__(self, other) -> bool:\n    \"\"\"\n    Returns True if both storages are equal.\n    \"\"\"\n    if not isinstance(other, Storage):\n        return False\n    return self.root == other.root\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.__ne__","title":"__ne__(other)","text":"

    Returns True if both storages are not equal.

    Source code in src/ethereum_test_base_types/composite_types.py
    def __ne__(self, other) -> bool:\n    \"\"\"\n    Returns True if both storages are not equal.\n    \"\"\"\n    if not isinstance(other, Storage):\n        return False\n    return self.root != other.root\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.__bool__","title":"__bool__()","text":"

    Returns True if the storage is not empty

    Source code in src/ethereum_test_base_types/composite_types.py
    def __bool__(self) -> bool:\n    \"\"\"Returns True if the storage is not empty\"\"\"\n    return any(v for v in self.root.values())\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.__add__","title":"__add__(other)","text":"

    Returns a new storage that is the sum of two storages.

    Source code in src/ethereum_test_base_types/composite_types.py
    def __add__(self, other: \"Storage\") -> \"Storage\":\n    \"\"\"\n    Returns a new storage that is the sum of two storages.\n    \"\"\"\n    return Storage({**self.root, **other.root})\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.keys","title":"keys()","text":"

    Returns the keys of the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def keys(self) -> set[StorageKeyValueType]:\n    \"\"\"Returns the keys of the storage\"\"\"\n    return set(self.root.keys())\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.set_next_slot","title":"set_next_slot(slot)","text":"

    Sets the next slot to be used by store_next.

    Source code in src/ethereum_test_base_types/composite_types.py
    def set_next_slot(self, slot: int) -> \"Storage\":\n    \"\"\"\n    Sets the next slot to be used by `store_next`.\n    \"\"\"\n    self._current_slot = slot\n    return self\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.store_next","title":"store_next(value)","text":"

    Stores a value in the storage and returns the key where the value is stored.

    Increments the key counter so the next time this function is called, the next key is used.

    Source code in src/ethereum_test_base_types/composite_types.py
    def store_next(\n    self, value: StorageKeyValueTypeConvertible | StorageKeyValueType | bool\n) -> StorageKeyValueType:\n    \"\"\"\n    Stores a value in the storage and returns the key where the value is stored.\n\n    Increments the key counter so the next time this function is called,\n    the next key is used.\n    \"\"\"\n    slot = StorageKeyValueTypeAdapter.validate_python(self._current_slot)\n    self._current_slot += 1\n    self[slot] = StorageKeyValueTypeAdapter.validate_python(value)\n    return slot\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.peek_slot","title":"peek_slot()","text":"

    Peeks the next slot that will be used by store_next.

    Source code in src/ethereum_test_base_types/composite_types.py
    def peek_slot(self) -> int:\n    \"\"\"\n    Peeks the next slot that will be used by `store_next`.\n    \"\"\"\n    return self._current_slot\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.contains","title":"contains(other)","text":"

    Returns True if self contains all keys with equal value as contained by second storage. Used for comparison with test expected post state and alloc returned by the transition tool.

    Source code in src/ethereum_test_base_types/composite_types.py
    def contains(self, other: \"Storage\") -> bool:\n    \"\"\"\n    Returns True if self contains all keys with equal value as\n    contained by second storage.\n    Used for comparison with test expected post state and alloc returned\n    by the transition tool.\n    \"\"\"\n    for key in other.keys():\n        if key not in self:\n            return False\n        if self[key] != other[key]:\n            return False\n    return True\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.must_contain","title":"must_contain(address, other)","text":"

    Succeeds only if self contains all keys with equal value as contained by second storage. Used for comparison with test expected post state and alloc returned by the transition tool. Raises detailed exception when a difference is found.

    Source code in src/ethereum_test_base_types/composite_types.py
    def must_contain(self, address: Address, other: \"Storage\"):\n    \"\"\"\n    Succeeds only if self contains all keys with equal value as\n    contained by second storage.\n    Used for comparison with test expected post state and alloc returned\n    by the transition tool.\n    Raises detailed exception when a difference is found.\n    \"\"\"\n    for key in other.keys():\n        if key not in self:\n            # storage[key]==0 is equal to missing storage\n            if other[key] != 0:\n                raise Storage.MissingKey(key=key)\n        elif self[key] != other[key]:\n            raise Storage.KeyValueMismatch(\n                address=address, key=key, want=self[key], got=other[key]\n            )\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.must_be_equal","title":"must_be_equal(address, other)","text":"

    Succeeds only if \"self\" is equal to \"other\" storage.

    Source code in src/ethereum_test_base_types/composite_types.py
    def must_be_equal(self, address: Address, other: \"Storage | None\"):\n    \"\"\"\n    Succeeds only if \"self\" is equal to \"other\" storage.\n    \"\"\"\n    # Test keys contained in both storage objects\n    if other is None:\n        other = Storage({})\n    for key in self.keys() & other.keys():\n        if self[key] != other[key]:\n            raise Storage.KeyValueMismatch(\n                address=address, key=key, want=self[key], got=other[key]\n            )\n\n    # Test keys contained in either one of the storage objects\n    for key in self.keys() ^ other.keys():\n        if key in self:\n            if self[key] != 0:\n                raise Storage.KeyValueMismatch(address=address, key=key, want=self[key], got=0)\n\n        elif other[key] != 0:\n            raise Storage.KeyValueMismatch(address=address, key=key, want=0, got=other[key])\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.canary","title":"canary()","text":"

    Returns a canary storage filled with non-zero values where the current storage expects zero values, to guarantee that the test overwrites the storage.

    Source code in src/ethereum_test_base_types/composite_types.py
    def canary(self) -> \"Storage\":\n    \"\"\"\n    Returns a canary storage filled with non-zero values where the current storage expects\n    zero values, to guarantee that the test overwrites the storage.\n    \"\"\"\n    return Storage({key: HashInt(0xBA5E) for key in self.keys() if self[key] == 0})\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.to_bytes","title":"to_bytes(input)","text":"

    Converts multiple types into bytes.

    Source code in src/ethereum_test_base_types/conversions.py
    def to_bytes(input: BytesConvertible) -> bytes:\n    \"\"\"\n    Converts multiple types into bytes.\n    \"\"\"\n    if input is None:\n        raise Exception(\"Cannot convert `None` input to bytes\")\n\n    if isinstance(input, SupportsBytes) or isinstance(input, bytes) or isinstance(input, list):\n        return bytes(input)\n\n    if isinstance(input, str):\n        # We can have a hex representation of bytes with spaces for\n        # readability\n        input = sub(r\"\\s+\", \"\", input)\n        if input.startswith(\"0x\"):\n            input = input[2:]\n        if len(input) % 2 == 1:\n            input = \"0\" + input\n        return bytes.fromhex(input)\n\n    raise Exception(\"invalid type for `bytes`\")\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.to_hex","title":"to_hex(input)","text":"

    Converts multiple types into a bytes hex string.

    Source code in src/ethereum_test_base_types/conversions.py
    def to_hex(input: BytesConvertible) -> str:\n    \"\"\"\n    Converts multiple types into a bytes hex string.\n    \"\"\"\n    return \"0x\" + to_bytes(input).hex()\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.to_json","title":"to_json(input)","text":"

    Converts a model to its json data representation.

    Source code in src/ethereum_test_base_types/json.py
    def to_json(\n    input: BaseModel | RootModel | AnyStr | List[BaseModel | RootModel | AnyStr],\n) -> Any:\n    \"\"\"\n    Converts a model to its json data representation.\n    \"\"\"\n    if isinstance(input, list):\n        return [to_json(item) for item in input]\n    elif isinstance(input, (BaseModel, RootModel)):\n        return input.model_dump(mode=\"json\", by_alias=True, exclude_none=True)\n    else:\n        return str(input)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.CamelModel","title":"CamelModel","text":"

    Bases: CopyValidateModel

    A base model that converts field names to camel case when serializing.

    For example, the field name current_timestamp in a Python model will be represented as currentTimestamp when it is serialized to json.

    Source code in src/ethereum_test_base_types/pydantic.py
    class CamelModel(CopyValidateModel):\n    \"\"\"\n    A base model that converts field names to camel case when serializing.\n\n    For example, the field name `current_timestamp` in a Python model will be represented\n    as `currentTimestamp` when it is serialized to json.\n    \"\"\"\n\n    model_config = ConfigDict(\n        alias_generator=to_camel,\n        populate_by_name=True,\n        validate_default=True,\n    )\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ReferenceSpec","title":"ReferenceSpec","text":"

    Reference Specification Description Abstract Class.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    class ReferenceSpec:\n    \"\"\"\n    Reference Specification Description Abstract Class.\n    \"\"\"\n\n    @abstractmethod\n    def name(self) -> str:\n        \"\"\"\n        Returns the name of the spec.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def has_known_version(self) -> bool:\n        \"\"\"\n        Returns true if the reference spec object is hard-coded with a latest\n        known version.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def known_version(self) -> str:\n        \"\"\"\n        Returns the latest known version in the reference.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def api_url(self) -> str:\n        \"\"\"\n        Returns the URL required to poll the version from an API, if needed.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def latest_version(self) -> str:\n        \"\"\"\n        Returns a digest that points to the latest version of the spec.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def is_outdated(self) -> bool:\n        \"\"\"\n        Checks whether the reference specification has been updated since the\n        test was last updated.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def write_info(self, info: Dict[str, str]):\n        \"\"\"\n        Writes info about the reference specification used into the output\n        fixture.\n        \"\"\"\n        pass\n\n    @staticmethod\n    @abstractmethod\n    def parseable_from_module(module_dict: Dict[str, Any]) -> bool:\n        \"\"\"\n        Checks whether the module's dict contains required reference spec\n        information.\n        \"\"\"\n        pass\n\n    @staticmethod\n    @abstractmethod\n    def parse_from_module(module_dict: Dict[str, Any]) -> \"ReferenceSpec\":\n        \"\"\"\n        Parses the module's dict into a reference spec.\n        \"\"\"\n        pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ReferenceSpec.name","title":"name() abstractmethod","text":"

    Returns the name of the spec.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef name(self) -> str:\n    \"\"\"\n    Returns the name of the spec.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ReferenceSpec.has_known_version","title":"has_known_version() abstractmethod","text":"

    Returns true if the reference spec object is hard-coded with a latest known version.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef has_known_version(self) -> bool:\n    \"\"\"\n    Returns true if the reference spec object is hard-coded with a latest\n    known version.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ReferenceSpec.known_version","title":"known_version() abstractmethod","text":"

    Returns the latest known version in the reference.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef known_version(self) -> str:\n    \"\"\"\n    Returns the latest known version in the reference.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ReferenceSpec.api_url","title":"api_url() abstractmethod","text":"

    Returns the URL required to poll the version from an API, if needed.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef api_url(self) -> str:\n    \"\"\"\n    Returns the URL required to poll the version from an API, if needed.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ReferenceSpec.latest_version","title":"latest_version() abstractmethod","text":"

    Returns a digest that points to the latest version of the spec.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef latest_version(self) -> str:\n    \"\"\"\n    Returns a digest that points to the latest version of the spec.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ReferenceSpec.is_outdated","title":"is_outdated() abstractmethod","text":"

    Checks whether the reference specification has been updated since the test was last updated.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef is_outdated(self) -> bool:\n    \"\"\"\n    Checks whether the reference specification has been updated since the\n    test was last updated.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ReferenceSpec.write_info","title":"write_info(info) abstractmethod","text":"

    Writes info about the reference specification used into the output fixture.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef write_info(self, info: Dict[str, str]):\n    \"\"\"\n    Writes info about the reference specification used into the output\n    fixture.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ReferenceSpec.parseable_from_module","title":"parseable_from_module(module_dict) abstractmethod staticmethod","text":"

    Checks whether the module's dict contains required reference spec information.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @staticmethod\n@abstractmethod\ndef parseable_from_module(module_dict: Dict[str, Any]) -> bool:\n    \"\"\"\n    Checks whether the module's dict contains required reference spec\n    information.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ReferenceSpec.parse_from_module","title":"parse_from_module(module_dict) abstractmethod staticmethod","text":"

    Parses the module's dict into a reference spec.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @staticmethod\n@abstractmethod\ndef parse_from_module(module_dict: Dict[str, Any]) -> \"ReferenceSpec\":\n    \"\"\"\n    Parses the module's dict into a reference spec.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_exceptions/","title":"Ethereum Test Exceptions package","text":"

    Exceptions for invalid execution.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EngineAPIError","title":"EngineAPIError","text":"

    Bases: IntEnum

    List of Engine API errors

    Source code in src/ethereum_test_exceptions/engine_api.py
    class EngineAPIError(IntEnum):\n    \"\"\"\n    List of Engine API errors\n    \"\"\"\n\n    ParseError = -32700\n    InvalidRequest = -32600\n    MethodNotFound = -32601\n    InvalidParams = -32602\n    InternalError = -32603\n    ServerError = -32000\n    UnknownPayload = -38001\n    InvalidForkchoiceState = -38002\n    InvalidPayloadAttributes = -38003\n    TooLargeRequest = -38004\n    UnsupportedFork = -38005\n
    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EvmoneExceptionMapper","title":"EvmoneExceptionMapper","text":"

    Translate between EEST exceptions and error strings returned by evmone.

    Source code in src/ethereum_test_exceptions/evmone_exceptions.py
    class EvmoneExceptionMapper:\n    \"\"\"\n    Translate between EEST exceptions and error strings returned by evmone.\n    \"\"\"\n\n    _mapping_data = (\n        # TODO EVMONE needs to differentiate when the section is missing in the header or body\n        ExceptionMessage(EOFException.MISSING_STOP_OPCODE, \"err: no_terminating_instruction\"),\n        ExceptionMessage(EOFException.MISSING_CODE_HEADER, \"err: code_section_missing\"),\n        ExceptionMessage(EOFException.MISSING_TYPE_HEADER, \"err: type_section_missing\"),\n        # TODO EVMONE these exceptions are too similar, this leeds to ambiguity\n        ExceptionMessage(EOFException.MISSING_TERMINATOR, \"err: header_terminator_missing\"),\n        ExceptionMessage(\n            EOFException.MISSING_HEADERS_TERMINATOR, \"err: section_headers_not_terminated\"\n        ),\n        ExceptionMessage(EOFException.INVALID_VERSION, \"err: eof_version_unknown\"),\n        ExceptionMessage(\n            EOFException.INVALID_NON_RETURNING_FLAG, \"err: invalid_non_returning_flag\"\n        ),\n        ExceptionMessage(EOFException.INVALID_MAGIC, \"err: invalid_prefix\"),\n        ExceptionMessage(\n            EOFException.INVALID_FIRST_SECTION_TYPE, \"err: invalid_first_section_type\"\n        ),\n        ExceptionMessage(\n            EOFException.INVALID_SECTION_BODIES_SIZE, \"err: invalid_section_bodies_size\"\n        ),\n        ExceptionMessage(EOFException.INVALID_TYPE_SECTION_SIZE, \"err: invalid_type_section_size\"),\n        ExceptionMessage(EOFException.INCOMPLETE_SECTION_SIZE, \"err: incomplete_section_size\"),\n        ExceptionMessage(EOFException.INCOMPLETE_SECTION_NUMBER, \"err: incomplete_section_number\"),\n        ExceptionMessage(EOFException.TOO_MANY_CODE_SECTIONS, \"err: too_many_code_sections\"),\n        ExceptionMessage(EOFException.ZERO_SECTION_SIZE, \"err: zero_section_size\"),\n        ExceptionMessage(EOFException.MISSING_DATA_SECTION, \"err: data_section_missing\"),\n        ExceptionMessage(EOFException.UNDEFINED_INSTRUCTION, \"err: undefined_instruction\"),\n        ExceptionMessage(\n            EOFException.INPUTS_OUTPUTS_NUM_ABOVE_LIMIT, \"err: inputs_outputs_num_above_limit\"\n        ),\n        ExceptionMessage(EOFException.UNREACHABLE_INSTRUCTIONS, \"err: unreachable_instructions\"),\n        ExceptionMessage(EOFException.INVALID_RJUMP_DESTINATION, \"err: invalid_rjump_destination\"),\n        ExceptionMessage(EOFException.UNREACHABLE_CODE_SECTIONS, \"err: unreachable_code_sections\"),\n        ExceptionMessage(EOFException.STACK_UNDERFLOW, \"err: stack_underflow\"),\n        ExceptionMessage(\n            EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT, \"err: max_stack_height_above_limit\"\n        ),\n        ExceptionMessage(\n            EOFException.STACK_HIGHER_THAN_OUTPUTS, \"err: stack_higher_than_outputs_required\"\n        ),\n        ExceptionMessage(\n            EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS,\n            \"err: jumpf_destination_incompatible_outputs\",\n        ),\n        ExceptionMessage(EOFException.INVALID_MAX_STACK_HEIGHT, \"err: invalid_max_stack_height\"),\n        ExceptionMessage(EOFException.INVALID_DATALOADN_INDEX, \"err: invalid_dataloadn_index\"),\n        ExceptionMessage(EOFException.TRUNCATED_INSTRUCTION, \"err: truncated_instruction\"),\n        ExceptionMessage(\n            EOFException.TOPLEVEL_CONTAINER_TRUNCATED, \"err: toplevel_container_truncated\"\n        ),\n        ExceptionMessage(EOFException.ORPHAN_SUBCONTAINER, \"err: unreferenced_subcontainer\"),\n        ExceptionMessage(\n            EOFException.CONTAINER_SIZE_ABOVE_LIMIT, \"err: container_size_above_limit\"\n        ),\n        ExceptionMessage(\n            EOFException.INVALID_CONTAINER_SECTION_INDEX, \"err: invalid_container_section_index\"\n        ),\n        ExceptionMessage(\n            EOFException.INCOMPATIBLE_CONTAINER_KIND, \"err: incompatible_container_kind\"\n        ),\n        ExceptionMessage(EOFException.STACK_HEIGHT_MISMATCH, \"err: stack_height_mismatch\"),\n        ExceptionMessage(EOFException.TOO_MANY_CONTAINERS, \"err: too_many_container_sections\"),\n        ExceptionMessage(\n            EOFException.INVALID_CODE_SECTION_INDEX, \"err: invalid_code_section_index\"\n        ),\n    )\n\n    def __init__(self) -> None:\n        assert len(set(entry.exception for entry in self._mapping_data)) == len(\n            self._mapping_data\n        ), \"Duplicate exception in _mapping_data\"\n        assert len(set(entry.message for entry in self._mapping_data)) == len(\n            self._mapping_data\n        ), \"Duplicate message in _mapping_data\"\n        self.exception_to_message_map: frozenbidict = frozenbidict(\n            {entry.exception: entry.message for entry in self._mapping_data}\n        )\n\n    def exception_to_message(self, exception: EOFException) -> str:\n        \"\"\"Takes an EOFException and returns a formatted string.\"\"\"\n        message = self.exception_to_message_map.get(\n            exception,\n            f\"No message defined for {exception}; please add it to {self.__class__.__name__}\",\n        )\n        return message\n\n    def message_to_exception(self, exception_string: str) -> EOFException:\n        \"\"\"Takes a string and tries to find matching exception\"\"\"\n        # TODO inform tester where to add the missing exception if get uses default\n        exception = self.exception_to_message_map.inverse.get(\n            exception_string, EOFException.UNDEFINED_EXCEPTION\n        )\n        return exception\n
    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EvmoneExceptionMapper.exception_to_message","title":"exception_to_message(exception)","text":"

    Takes an EOFException and returns a formatted string.

    Source code in src/ethereum_test_exceptions/evmone_exceptions.py
    def exception_to_message(self, exception: EOFException) -> str:\n    \"\"\"Takes an EOFException and returns a formatted string.\"\"\"\n    message = self.exception_to_message_map.get(\n        exception,\n        f\"No message defined for {exception}; please add it to {self.__class__.__name__}\",\n    )\n    return message\n
    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EvmoneExceptionMapper.message_to_exception","title":"message_to_exception(exception_string)","text":"

    Takes a string and tries to find matching exception

    Source code in src/ethereum_test_exceptions/evmone_exceptions.py
    def message_to_exception(self, exception_string: str) -> EOFException:\n    \"\"\"Takes a string and tries to find matching exception\"\"\"\n    # TODO inform tester where to add the missing exception if get uses default\n    exception = self.exception_to_message_map.inverse.get(\n        exception_string, EOFException.UNDEFINED_EXCEPTION\n    )\n    return exception\n
    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException","title":"BlockException","text":"

    Bases: ExceptionBase

    Exception raised when a block is invalid, but not due to a transaction.

    E.g. all transactions in the block are valid, and can be applied to the state, but the block header contains an invalid field.

    Source code in src/ethereum_test_exceptions/exceptions.py
    @unique\nclass BlockException(ExceptionBase):\n    \"\"\"\n    Exception raised when a block is invalid, but not due to a transaction.\n\n    E.g. all transactions in the block are valid, and can be applied to the state, but the\n    block header contains an invalid field.\n    \"\"\"\n\n    TOO_MANY_UNCLES = auto()\n    \"\"\"\n    Block declares too many uncles over the allowed limit.\n    \"\"\"\n    UNCLE_IN_CHAIN = auto()\n    \"\"\"\n    Block declares uncle header that is already imported into chain.\n    \"\"\"\n    UNCLE_IS_ANCESTOR = auto()\n    \"\"\"\n    Block declares uncle header that is directly a parent of this block.\n    \"\"\"\n    UNCLE_IS_BROTHER = auto()\n    \"\"\"\n    Block declares two similar uncle headers.\n    \"\"\"\n    UNCLE_PARENT_INCORRECT = auto()\n    \"\"\"\n    Block declares uncle header that is an outdated block to be an uncle.\n    \"\"\"\n    EXTRA_DATA_TOO_BIG = auto()\n    \"\"\"\n    Block header's extra data >32 bytes.\n    \"\"\"\n    EXTRA_DATA_INVALID_DAO = auto()\n    \"\"\"\n    Block header's extra data after dao fork must be a fixed pre defined hash.\n    \"\"\"\n    UNKNOWN_PARENT = auto()\n    \"\"\"\n    Block header's parent hash does not correspond to any of existing blocks on chain.\n    \"\"\"\n    UNCLE_UNKNOWN_PARENT = auto()\n    \"\"\"\n    Uncle header's parent hash does not correspond to any of existing blocks on chain.\n    \"\"\"\n    UNKNOWN_PARENT_ZERO = auto()\n    \"\"\"\n    Block header's parent hash is zero hash.\n    \"\"\"\n    GASLIMIT_TOO_BIG = auto()\n    \"\"\"\n    Block header's gas limit > 0x7fffffffffffffff.\n    \"\"\"\n    INVALID_BLOCK_NUMBER = auto()\n    \"\"\"\n    Block header's number != parent header's number + 1.\n    \"\"\"\n    INVALID_BLOCK_TIMESTAMP_OLDER_THAN_PARENT = auto()\n    \"\"\"\n    Block header's timestamp <= parent header's timestamp.\n    \"\"\"\n    INVALID_DIFFICULTY = auto()\n    \"\"\"\n    Block header's difficulty does not match the difficulty formula calculated from previous block.\n    \"\"\"\n    INVALID_LOG_BLOOM = auto()\n    \"\"\"\n    Block header's logs bloom hash does not match the actually computed log bloom.\n    \"\"\"\n    INVALID_STATE_ROOT = auto()\n    \"\"\"\n    Block header's state root hash does not match the actually computed hash of the state.\n    \"\"\"\n    INVALID_RECEIPTS_ROOT = auto()\n    \"\"\"\n    Block header's receipts root hash does not match the actually computed hash of receipts.\n    \"\"\"\n    INVALID_TRANSACTIONS_ROOT = auto()\n    \"\"\"\n    Block header's transactions root hash does not match the actually computed hash of tx tree.\n    \"\"\"\n    INVALID_UNCLES_HASH = auto()\n    \"\"\"\n    Block header's uncle hash does not match the actually computed hash of block's uncles.\n    \"\"\"\n    GAS_USED_OVERFLOW = auto()\n    \"\"\"\n    Block transactions consume more gas than block header allow.\n    \"\"\"\n    INVALID_GASLIMIT = auto()\n    \"\"\"\n    Block header's gas limit does not match the gas limit formula calculated from previous block.\n    \"\"\"\n    INVALID_BASEFEE_PER_GAS = auto()\n    \"\"\"\n    Block header's base_fee_per_gas field is calculated incorrect.\n    \"\"\"\n    INVALID_GAS_USED = auto()\n    \"\"\"\n    Block header's actual gas used does not match the provided header's value\n    \"\"\"\n    INVALID_WITHDRAWALS_ROOT = auto()\n    \"\"\"\n    Block header's withdrawals root does not match calculated withdrawals root.\n    \"\"\"\n    INCORRECT_BLOCK_FORMAT = auto()\n    \"\"\"\n    Block's format is incorrect, contains invalid fields, is missing fields, or contains fields of\n    a fork that is not active yet.\n    \"\"\"\n    BLOB_GAS_USED_ABOVE_LIMIT = auto()\n    \"\"\"\n    Block's blob gas used in header is above the limit.\n    \"\"\"\n    INCORRECT_BLOB_GAS_USED = auto()\n    \"\"\"\n    Block's blob gas used in header is incorrect.\n    \"\"\"\n    INCORRECT_EXCESS_BLOB_GAS = auto()\n    \"\"\"\n    Block's excess blob gas in header is incorrect.\n    \"\"\"\n    RLP_STRUCTURES_ENCODING = auto()\n    \"\"\"\n    Block's rlp encoding is valid but ethereum structures in it are invalid.\n    \"\"\"\n    RLP_WITHDRAWALS_NOT_READ = auto()\n    \"\"\"\n    Block's rlp encoding is missing withdrawals.\n    \"\"\"\n    RLP_INVALID_FIELD_OVERFLOW_64 = auto()\n    \"\"\"\n    One of block's fields rlp is overflow 2**64 value.\n    \"\"\"\n    RLP_INVALID_ADDRESS = auto()\n    \"\"\"\n    Block withdrawals address is rlp of invalid address != 20 bytes.\n    \"\"\"\n    INVALID_REQUESTS = auto()\n    \"\"\"\n    Block's requests are invalid.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LEGACY = auto()\n    \"\"\"\n    Legacy block import is impossible in this chain configuration.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LEGACY_WRONG_PARENT = auto()\n    \"\"\"\n    Legacy block import is impossible, trying to import on top of a block that is not legacy.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LONDON_WRONG_PARENT = auto()\n    \"\"\"\n    Trying to import london (basefee) block on top of block that is not 1559.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_PARIS_WRONG_POW = auto()\n    \"\"\"\n    Trying to import paris(merge) block with PoW enabled.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_PARIS_WRONG_POS = auto()\n    \"\"\"\n    Trying to import paris(merge) block with PoS enabled before TTD is reached.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LONDON_OVER_PARIS = auto()\n    \"\"\"\n    Trying to import london looking block over paris network (POS).\n    \"\"\"\n    IMPORT_IMPOSSIBLE_PARIS_OVER_SHANGHAI = auto()\n    \"\"\"\n    Trying to import paris block on top of shanghai block.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_SHANGHAI = auto()\n    \"\"\"\n    Shanghai block import is impossible in this chain configuration.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_UNCLES_OVER_PARIS = auto()\n    \"\"\"\n    Trying to import a block after paris fork that has not empty uncles hash.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_DIFFICULTY_OVER_PARIS = auto()\n    \"\"\"\n    Trying to import a block after paris fork that has difficulty != 0.\n    \"\"\"\n
    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.TOO_MANY_UNCLES","title":"TOO_MANY_UNCLES = auto() class-attribute instance-attribute","text":"

    Block declares too many uncles over the allowed limit.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.UNCLE_IN_CHAIN","title":"UNCLE_IN_CHAIN = auto() class-attribute instance-attribute","text":"

    Block declares uncle header that is already imported into chain.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.UNCLE_IS_ANCESTOR","title":"UNCLE_IS_ANCESTOR = auto() class-attribute instance-attribute","text":"

    Block declares uncle header that is directly a parent of this block.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.UNCLE_IS_BROTHER","title":"UNCLE_IS_BROTHER = auto() class-attribute instance-attribute","text":"

    Block declares two similar uncle headers.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.UNCLE_PARENT_INCORRECT","title":"UNCLE_PARENT_INCORRECT = auto() class-attribute instance-attribute","text":"

    Block declares uncle header that is an outdated block to be an uncle.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.EXTRA_DATA_TOO_BIG","title":"EXTRA_DATA_TOO_BIG = auto() class-attribute instance-attribute","text":"

    Block header's extra data >32 bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.EXTRA_DATA_INVALID_DAO","title":"EXTRA_DATA_INVALID_DAO = auto() class-attribute instance-attribute","text":"

    Block header's extra data after dao fork must be a fixed pre defined hash.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.UNKNOWN_PARENT","title":"UNKNOWN_PARENT = auto() class-attribute instance-attribute","text":"

    Block header's parent hash does not correspond to any of existing blocks on chain.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.UNCLE_UNKNOWN_PARENT","title":"UNCLE_UNKNOWN_PARENT = auto() class-attribute instance-attribute","text":"

    Uncle header's parent hash does not correspond to any of existing blocks on chain.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.UNKNOWN_PARENT_ZERO","title":"UNKNOWN_PARENT_ZERO = auto() class-attribute instance-attribute","text":"

    Block header's parent hash is zero hash.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.GASLIMIT_TOO_BIG","title":"GASLIMIT_TOO_BIG = auto() class-attribute instance-attribute","text":"

    Block header's gas limit > 0x7fffffffffffffff.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_BLOCK_NUMBER","title":"INVALID_BLOCK_NUMBER = auto() class-attribute instance-attribute","text":"

    Block header's number != parent header's number + 1.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_BLOCK_TIMESTAMP_OLDER_THAN_PARENT","title":"INVALID_BLOCK_TIMESTAMP_OLDER_THAN_PARENT = auto() class-attribute instance-attribute","text":"

    Block header's timestamp <= parent header's timestamp.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_DIFFICULTY","title":"INVALID_DIFFICULTY = auto() class-attribute instance-attribute","text":"

    Block header's difficulty does not match the difficulty formula calculated from previous block.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_LOG_BLOOM","title":"INVALID_LOG_BLOOM = auto() class-attribute instance-attribute","text":"

    Block header's logs bloom hash does not match the actually computed log bloom.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_STATE_ROOT","title":"INVALID_STATE_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's state root hash does not match the actually computed hash of the state.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_RECEIPTS_ROOT","title":"INVALID_RECEIPTS_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's receipts root hash does not match the actually computed hash of receipts.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_TRANSACTIONS_ROOT","title":"INVALID_TRANSACTIONS_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's transactions root hash does not match the actually computed hash of tx tree.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_UNCLES_HASH","title":"INVALID_UNCLES_HASH = auto() class-attribute instance-attribute","text":"

    Block header's uncle hash does not match the actually computed hash of block's uncles.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.GAS_USED_OVERFLOW","title":"GAS_USED_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Block transactions consume more gas than block header allow.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_GASLIMIT","title":"INVALID_GASLIMIT = auto() class-attribute instance-attribute","text":"

    Block header's gas limit does not match the gas limit formula calculated from previous block.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_BASEFEE_PER_GAS","title":"INVALID_BASEFEE_PER_GAS = auto() class-attribute instance-attribute","text":"

    Block header's base_fee_per_gas field is calculated incorrect.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_GAS_USED","title":"INVALID_GAS_USED = auto() class-attribute instance-attribute","text":"

    Block header's actual gas used does not match the provided header's value

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_WITHDRAWALS_ROOT","title":"INVALID_WITHDRAWALS_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's withdrawals root does not match calculated withdrawals root.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INCORRECT_BLOCK_FORMAT","title":"INCORRECT_BLOCK_FORMAT = auto() class-attribute instance-attribute","text":"

    Block's format is incorrect, contains invalid fields, is missing fields, or contains fields of a fork that is not active yet.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.BLOB_GAS_USED_ABOVE_LIMIT","title":"BLOB_GAS_USED_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    Block's blob gas used in header is above the limit.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INCORRECT_BLOB_GAS_USED","title":"INCORRECT_BLOB_GAS_USED = auto() class-attribute instance-attribute","text":"

    Block's blob gas used in header is incorrect.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INCORRECT_EXCESS_BLOB_GAS","title":"INCORRECT_EXCESS_BLOB_GAS = auto() class-attribute instance-attribute","text":"

    Block's excess blob gas in header is incorrect.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.RLP_STRUCTURES_ENCODING","title":"RLP_STRUCTURES_ENCODING = auto() class-attribute instance-attribute","text":"

    Block's rlp encoding is valid but ethereum structures in it are invalid.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.RLP_WITHDRAWALS_NOT_READ","title":"RLP_WITHDRAWALS_NOT_READ = auto() class-attribute instance-attribute","text":"

    Block's rlp encoding is missing withdrawals.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.RLP_INVALID_FIELD_OVERFLOW_64","title":"RLP_INVALID_FIELD_OVERFLOW_64 = auto() class-attribute instance-attribute","text":"

    One of block's fields rlp is overflow 2**64 value.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.RLP_INVALID_ADDRESS","title":"RLP_INVALID_ADDRESS = auto() class-attribute instance-attribute","text":"

    Block withdrawals address is rlp of invalid address != 20 bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_REQUESTS","title":"INVALID_REQUESTS = auto() class-attribute instance-attribute","text":"

    Block's requests are invalid.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_LEGACY","title":"IMPORT_IMPOSSIBLE_LEGACY = auto() class-attribute instance-attribute","text":"

    Legacy block import is impossible in this chain configuration.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_LEGACY_WRONG_PARENT","title":"IMPORT_IMPOSSIBLE_LEGACY_WRONG_PARENT = auto() class-attribute instance-attribute","text":"

    Legacy block import is impossible, trying to import on top of a block that is not legacy.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_LONDON_WRONG_PARENT","title":"IMPORT_IMPOSSIBLE_LONDON_WRONG_PARENT = auto() class-attribute instance-attribute","text":"

    Trying to import london (basefee) block on top of block that is not 1559.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_PARIS_WRONG_POW","title":"IMPORT_IMPOSSIBLE_PARIS_WRONG_POW = auto() class-attribute instance-attribute","text":"

    Trying to import paris(merge) block with PoW enabled.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_PARIS_WRONG_POS","title":"IMPORT_IMPOSSIBLE_PARIS_WRONG_POS = auto() class-attribute instance-attribute","text":"

    Trying to import paris(merge) block with PoS enabled before TTD is reached.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_LONDON_OVER_PARIS","title":"IMPORT_IMPOSSIBLE_LONDON_OVER_PARIS = auto() class-attribute instance-attribute","text":"

    Trying to import london looking block over paris network (POS).

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_PARIS_OVER_SHANGHAI","title":"IMPORT_IMPOSSIBLE_PARIS_OVER_SHANGHAI = auto() class-attribute instance-attribute","text":"

    Trying to import paris block on top of shanghai block.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_SHANGHAI","title":"IMPORT_IMPOSSIBLE_SHANGHAI = auto() class-attribute instance-attribute","text":"

    Shanghai block import is impossible in this chain configuration.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_UNCLES_OVER_PARIS","title":"IMPORT_IMPOSSIBLE_UNCLES_OVER_PARIS = auto() class-attribute instance-attribute","text":"

    Trying to import a block after paris fork that has not empty uncles hash.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_DIFFICULTY_OVER_PARIS","title":"IMPORT_IMPOSSIBLE_DIFFICULTY_OVER_PARIS = auto() class-attribute instance-attribute","text":"

    Trying to import a block after paris fork that has difficulty != 0.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException","title":"EOFException","text":"

    Bases: ExceptionBase

    Exception raised when an EOF container is invalid.

    Source code in src/ethereum_test_exceptions/exceptions.py
    @unique\nclass EOFException(ExceptionBase):\n    \"\"\"\n    Exception raised when an EOF container is invalid.\n    \"\"\"\n\n    DEFAULT_EXCEPTION = auto()\n    \"\"\"\n    Expect some exception, not yet known.\n    \"\"\"\n\n    UNDEFINED_EXCEPTION = auto()\n    \"\"\"\n    Indicates that exception string is not mapped to an exception enum.\n    \"\"\"\n\n    UNDEFINED_INSTRUCTION = auto()\n    \"\"\"\n    EOF container has undefined instruction in it's body code.\n    \"\"\"\n\n    UNKNOWN_VERSION = auto()\n    \"\"\"\n    EOF container has an unknown version.\n    \"\"\"\n    INCOMPLETE_MAGIC = auto()\n    \"\"\"\n    EOF container has not enough bytes to read magic.\n    \"\"\"\n    INVALID_MAGIC = auto()\n    \"\"\"\n    EOF container has not allowed magic version byte.\n    \"\"\"\n    INVALID_VERSION = auto()\n    \"\"\"\n    EOF container version bytes mismatch.\n    \"\"\"\n    INVALID_NON_RETURNING_FLAG = auto()\n    \"\"\"\n    EOF container's section has non-returning flag set incorrectly.\n    \"\"\"\n    INVALID_RJUMP_DESTINATION = auto()\n    \"\"\"\n    Code has RJUMP instruction with invalid parameters.\n    \"\"\"\n    MISSING_TYPE_HEADER = auto()\n    \"\"\"\n    EOF container missing types section.\n    \"\"\"\n    INVALID_TYPE_SECTION_SIZE = auto()\n    \"\"\"\n    EOF container types section has wrong size.\n    \"\"\"\n    INVALID_TYPE_BODY = auto()\n    \"\"\"\n    EOF container types body section bytes are wrong.\n    \"\"\"\n    MISSING_CODE_HEADER = auto()\n    \"\"\"\n    EOF container missing code section.\n    \"\"\"\n    INVALID_CODE_SECTION = auto()\n    \"\"\"\n    EOF container code section bytes are incorrect.\n    \"\"\"\n    INCOMPLETE_CODE_HEADER = auto()\n    \"\"\"\n    EOF container code header missing bytes.\n    \"\"\"\n    INCOMPLETE_DATA_HEADER = auto()\n    \"\"\"\n    EOF container data header missing bytes.\n    \"\"\"\n    ZERO_SECTION_SIZE = auto()\n    \"\"\"\n    EOF container data header construction is wrong.\n    \"\"\"\n    MISSING_DATA_SECTION = auto()\n    \"\"\"\n    EOF container missing data section\n    \"\"\"\n    INCOMPLETE_CONTAINER = auto()\n    \"\"\"\n    EOF container bytes are incomplete.\n    \"\"\"\n    INVALID_SECTION_BODIES_SIZE = auto()\n    \"\"\"\n    Sections bodies does not match sections headers.\n    \"\"\"\n    TRAILING_BYTES = auto()\n    \"\"\"\n    EOF container has bytes beyond data section.\n    \"\"\"\n    MISSING_TERMINATOR = auto()\n    \"\"\"\n    EOF container missing terminator bytes between header and body.\n    \"\"\"\n    MISSING_HEADERS_TERMINATOR = auto()\n    \"\"\"\n    Some type of another exception about missing headers terminator.\n    \"\"\"\n    INVALID_FIRST_SECTION_TYPE = auto()\n    \"\"\"\n    EOF container header does not have types section first.\n    \"\"\"\n    INCOMPLETE_SECTION_NUMBER = auto()\n    \"\"\"\n    EOF container header has section that is missing declaration bytes.\n    \"\"\"\n    INCOMPLETE_SECTION_SIZE = auto()\n    \"\"\"\n    EOF container header has section that is defined incorrectly.\n    \"\"\"\n    TOO_MANY_CODE_SECTIONS = auto()\n    \"\"\"\n    EOF container header has too many code sections.\n    \"\"\"\n    MISSING_STOP_OPCODE = auto()\n    \"\"\"\n    EOF container's code missing STOP bytecode at it's end.\n    \"\"\"\n    INPUTS_OUTPUTS_NUM_ABOVE_LIMIT = auto()\n    \"\"\"\n    EOF container code section inputs/outputs number is above the limit\n    \"\"\"\n    UNREACHABLE_INSTRUCTIONS = auto()\n    \"\"\"\n    EOF container's code have instructions that are unreachable.\n    \"\"\"\n    UNREACHABLE_CODE_SECTIONS = auto()\n    \"\"\"\n    EOF container's body have code sections that are unreachable.\n    \"\"\"\n    STACK_UNDERFLOW = auto()\n    \"\"\"\n    EOF container's code produces an stack underflow.\n    \"\"\"\n    STACK_HEIGHT_MISMATCH = auto()\n    \"\"\"\n    EOF container section stack height mismatch.\n    \"\"\"\n    MAX_STACK_HEIGHT_ABOVE_LIMIT = auto()\n    \"\"\"\n    EOF container's specified max stack height is above the limit.\n    \"\"\"\n    STACK_HIGHER_THAN_OUTPUTS = auto()\n    \"\"\"\n    EOF container section stack height is higher than the outputs.\n    when returning\n    \"\"\"\n    JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS = auto()\n    \"\"\"\n    EOF container section JUMPF's to a destination section with incompatible outputs.\n    \"\"\"\n    INVALID_MAX_STACK_HEIGHT = auto()\n    \"\"\"\n    EOF container section's specified max stack height does not match the actual stack height.\n    \"\"\"\n    INVALID_DATALOADN_INDEX = auto()\n    \"\"\"\n    A DATALOADN instruction has out-of-bounds index for the data section.\n    \"\"\"\n    TRUNCATED_INSTRUCTION = auto()\n    \"\"\"\n    EOF container's code section has truncated instruction.\n    \"\"\"\n    TOPLEVEL_CONTAINER_TRUNCATED = auto()\n    \"\"\"\n    Top-level EOF container has data section truncated\n    \"\"\"\n    ORPHAN_SUBCONTAINER = auto()\n    \"\"\"\n    EOF container has an unreferenced subcontainer.\n    '\"\"\"\n    CONTAINER_SIZE_ABOVE_LIMIT = auto()\n    \"\"\"\n    EOF container is above size limit\n    \"\"\"\n    INVALID_CONTAINER_SECTION_INDEX = auto()\n    \"\"\"\n    Instruction references container section that does not exist.\n    \"\"\"\n    INCOMPATIBLE_CONTAINER_KIND = auto()\n    \"\"\"\n    Incompatible instruction found in a container of a specific kind.\n    \"\"\"\n    TOO_MANY_CONTAINERS = auto()\n    \"\"\"\n    EOF container header has too many sub-containers.\n    \"\"\"\n    INVALID_CODE_SECTION_INDEX = auto()\n    \"\"\"\n    CALLF Operation referes to a non-existent code section\n    \"\"\"\n    UNEXPECTED_HEADER_KIND = auto()\n    \"\"\"\n    Header parsing encounterd a section kind it wasn't expecting\n    \"\"\"\n
    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.DEFAULT_EXCEPTION","title":"DEFAULT_EXCEPTION = auto() class-attribute instance-attribute","text":"

    Expect some exception, not yet known.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.UNDEFINED_EXCEPTION","title":"UNDEFINED_EXCEPTION = auto() class-attribute instance-attribute","text":"

    Indicates that exception string is not mapped to an exception enum.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.UNDEFINED_INSTRUCTION","title":"UNDEFINED_INSTRUCTION = auto() class-attribute instance-attribute","text":"

    EOF container has undefined instruction in it's body code.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.UNKNOWN_VERSION","title":"UNKNOWN_VERSION = auto() class-attribute instance-attribute","text":"

    EOF container has an unknown version.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_MAGIC","title":"INCOMPLETE_MAGIC = auto() class-attribute instance-attribute","text":"

    EOF container has not enough bytes to read magic.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_MAGIC","title":"INVALID_MAGIC = auto() class-attribute instance-attribute","text":"

    EOF container has not allowed magic version byte.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_VERSION","title":"INVALID_VERSION = auto() class-attribute instance-attribute","text":"

    EOF container version bytes mismatch.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_NON_RETURNING_FLAG","title":"INVALID_NON_RETURNING_FLAG = auto() class-attribute instance-attribute","text":"

    EOF container's section has non-returning flag set incorrectly.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_RJUMP_DESTINATION","title":"INVALID_RJUMP_DESTINATION = auto() class-attribute instance-attribute","text":"

    Code has RJUMP instruction with invalid parameters.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.MISSING_TYPE_HEADER","title":"MISSING_TYPE_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container missing types section.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_TYPE_SECTION_SIZE","title":"INVALID_TYPE_SECTION_SIZE = auto() class-attribute instance-attribute","text":"

    EOF container types section has wrong size.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_TYPE_BODY","title":"INVALID_TYPE_BODY = auto() class-attribute instance-attribute","text":"

    EOF container types body section bytes are wrong.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.MISSING_CODE_HEADER","title":"MISSING_CODE_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container missing code section.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_CODE_SECTION","title":"INVALID_CODE_SECTION = auto() class-attribute instance-attribute","text":"

    EOF container code section bytes are incorrect.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_CODE_HEADER","title":"INCOMPLETE_CODE_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container code header missing bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_DATA_HEADER","title":"INCOMPLETE_DATA_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container data header missing bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.ZERO_SECTION_SIZE","title":"ZERO_SECTION_SIZE = auto() class-attribute instance-attribute","text":"

    EOF container data header construction is wrong.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.MISSING_DATA_SECTION","title":"MISSING_DATA_SECTION = auto() class-attribute instance-attribute","text":"

    EOF container missing data section

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_CONTAINER","title":"INCOMPLETE_CONTAINER = auto() class-attribute instance-attribute","text":"

    EOF container bytes are incomplete.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_SECTION_BODIES_SIZE","title":"INVALID_SECTION_BODIES_SIZE = auto() class-attribute instance-attribute","text":"

    Sections bodies does not match sections headers.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.TRAILING_BYTES","title":"TRAILING_BYTES = auto() class-attribute instance-attribute","text":"

    EOF container has bytes beyond data section.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.MISSING_TERMINATOR","title":"MISSING_TERMINATOR = auto() class-attribute instance-attribute","text":"

    EOF container missing terminator bytes between header and body.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.MISSING_HEADERS_TERMINATOR","title":"MISSING_HEADERS_TERMINATOR = auto() class-attribute instance-attribute","text":"

    Some type of another exception about missing headers terminator.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_FIRST_SECTION_TYPE","title":"INVALID_FIRST_SECTION_TYPE = auto() class-attribute instance-attribute","text":"

    EOF container header does not have types section first.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_SECTION_NUMBER","title":"INCOMPLETE_SECTION_NUMBER = auto() class-attribute instance-attribute","text":"

    EOF container header has section that is missing declaration bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_SECTION_SIZE","title":"INCOMPLETE_SECTION_SIZE = auto() class-attribute instance-attribute","text":"

    EOF container header has section that is defined incorrectly.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.TOO_MANY_CODE_SECTIONS","title":"TOO_MANY_CODE_SECTIONS = auto() class-attribute instance-attribute","text":"

    EOF container header has too many code sections.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.MISSING_STOP_OPCODE","title":"MISSING_STOP_OPCODE = auto() class-attribute instance-attribute","text":"

    EOF container's code missing STOP bytecode at it's end.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INPUTS_OUTPUTS_NUM_ABOVE_LIMIT","title":"INPUTS_OUTPUTS_NUM_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    EOF container code section inputs/outputs number is above the limit

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.UNREACHABLE_INSTRUCTIONS","title":"UNREACHABLE_INSTRUCTIONS = auto() class-attribute instance-attribute","text":"

    EOF container's code have instructions that are unreachable.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.UNREACHABLE_CODE_SECTIONS","title":"UNREACHABLE_CODE_SECTIONS = auto() class-attribute instance-attribute","text":"

    EOF container's body have code sections that are unreachable.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.STACK_UNDERFLOW","title":"STACK_UNDERFLOW = auto() class-attribute instance-attribute","text":"

    EOF container's code produces an stack underflow.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.STACK_HEIGHT_MISMATCH","title":"STACK_HEIGHT_MISMATCH = auto() class-attribute instance-attribute","text":"

    EOF container section stack height mismatch.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT","title":"MAX_STACK_HEIGHT_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    EOF container's specified max stack height is above the limit.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.STACK_HIGHER_THAN_OUTPUTS","title":"STACK_HIGHER_THAN_OUTPUTS = auto() class-attribute instance-attribute","text":"

    EOF container section stack height is higher than the outputs. when returning

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS","title":"JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS = auto() class-attribute instance-attribute","text":"

    EOF container section JUMPF's to a destination section with incompatible outputs.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_MAX_STACK_HEIGHT","title":"INVALID_MAX_STACK_HEIGHT = auto() class-attribute instance-attribute","text":"

    EOF container section's specified max stack height does not match the actual stack height.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_DATALOADN_INDEX","title":"INVALID_DATALOADN_INDEX = auto() class-attribute instance-attribute","text":"

    A DATALOADN instruction has out-of-bounds index for the data section.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.TRUNCATED_INSTRUCTION","title":"TRUNCATED_INSTRUCTION = auto() class-attribute instance-attribute","text":"

    EOF container's code section has truncated instruction.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.TOPLEVEL_CONTAINER_TRUNCATED","title":"TOPLEVEL_CONTAINER_TRUNCATED = auto() class-attribute instance-attribute","text":"

    Top-level EOF container has data section truncated

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.ORPHAN_SUBCONTAINER","title":"ORPHAN_SUBCONTAINER = auto() class-attribute instance-attribute","text":"

    EOF container has an unreferenced subcontainer. '

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.CONTAINER_SIZE_ABOVE_LIMIT","title":"CONTAINER_SIZE_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    EOF container is above size limit

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_CONTAINER_SECTION_INDEX","title":"INVALID_CONTAINER_SECTION_INDEX = auto() class-attribute instance-attribute","text":"

    Instruction references container section that does not exist.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INCOMPATIBLE_CONTAINER_KIND","title":"INCOMPATIBLE_CONTAINER_KIND = auto() class-attribute instance-attribute","text":"

    Incompatible instruction found in a container of a specific kind.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.TOO_MANY_CONTAINERS","title":"TOO_MANY_CONTAINERS = auto() class-attribute instance-attribute","text":"

    EOF container header has too many sub-containers.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_CODE_SECTION_INDEX","title":"INVALID_CODE_SECTION_INDEX = auto() class-attribute instance-attribute","text":"

    CALLF Operation referes to a non-existent code section

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.UNEXPECTED_HEADER_KIND","title":"UNEXPECTED_HEADER_KIND = auto() class-attribute instance-attribute","text":"

    Header parsing encounterd a section kind it wasn't expecting

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException","title":"TransactionException","text":"

    Bases: ExceptionBase

    Exception raised when a transaction is invalid, and thus cannot be executed.

    If a transaction with any of these exceptions is included in a block, the block is invalid.

    Source code in src/ethereum_test_exceptions/exceptions.py
    @unique\nclass TransactionException(ExceptionBase):\n    \"\"\"\n    Exception raised when a transaction is invalid, and thus cannot be executed.\n\n    If a transaction with any of these exceptions is included in a block, the block is invalid.\n    \"\"\"\n\n    TYPE_NOT_SUPPORTED = auto()\n    \"\"\"\n    Transaction type is not supported on this chain configuration.\n    \"\"\"\n    SENDER_NOT_EOA = auto()\n    \"\"\"\n    Transaction is coming from address that is not exist anymore.\n    \"\"\"\n    ADDRESS_TOO_SHORT = auto()\n    \"\"\"\n    Transaction `to` is not allowed to be less than 20 bytes.\n    \"\"\"\n    ADDRESS_TOO_LONG = auto()\n    \"\"\"\n    Transaction `to` is not allowed to be more than 20 bytes.\n    \"\"\"\n    NONCE_MISMATCH_TOO_HIGH = auto()\n    \"\"\"\n    Transaction nonce > sender.nonce.\n    \"\"\"\n    NONCE_MISMATCH_TOO_LOW = auto()\n    \"\"\"\n    Transaction nonce < sender.nonce.\n    \"\"\"\n    NONCE_TOO_BIG = auto()\n    \"\"\"\n    Transaction `nonce` is not allowed to be max_uint64 - 1 (this is probably TransactionTest).\n    \"\"\"\n    NONCE_IS_MAX = auto()\n    \"\"\"\n    Transaction `nonce` is not allowed to be max_uint64 - 1 (this is StateTests).\n    \"\"\"\n    NONCE_OVERFLOW = auto()\n    \"\"\"\n    Transaction `nonce` is not allowed to be more than uint64.\n    \"\"\"\n    GASLIMIT_OVERFLOW = auto()\n    \"\"\"\n    Transaction gaslimit exceeds 2^64-1 maximum value.\n    \"\"\"\n    VALUE_OVERFLOW = auto()\n    \"\"\"\n    Transaction value exceeds 2^256-1 maximum value.\n    \"\"\"\n    GASPRICE_OVERFLOW = auto()\n    \"\"\"\n    Transaction gasPrice exceeds 2^256-1 maximum value.\n    \"\"\"\n    GASLIMIT_PRICE_PRODUCT_OVERFLOW = auto()\n    \"\"\"\n    Transaction gasPrice * gasLimit exceeds 2^256-1 maximum value.\n    \"\"\"\n    INVALID_SIGNATURE_VRS = auto()\n    \"\"\"\n    Invalid transaction v, r, s values.\n    \"\"\"\n    RLP_INVALID_SIGNATURE_R = auto()\n    \"\"\"\n    Error reading transaction signature R value.\n    \"\"\"\n    RLP_INVALID_SIGNATURE_S = auto()\n    \"\"\"\n    Error reading transaction signature S value.\n    \"\"\"\n    RLP_LEADING_ZEROS_GASLIMIT = auto()\n    \"\"\"\n    Error reading transaction gaslimit field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_GASPRICE = auto()\n    \"\"\"\n    Error reading transaction gasprice field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_VALUE = auto()\n    \"\"\"\n    Error reading transaction value field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_NONCE = auto()\n    \"\"\"\n    Error reading transaction nonce field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_R = auto()\n    \"\"\"\n    Error reading transaction signature R field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_S = auto()\n    \"\"\"\n    Error reading transaction signature S field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_V = auto()\n    \"\"\"\n    Error reading transaction signature V field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_BASEFEE = auto()\n    \"\"\"\n    Error reading transaction basefee field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_PRIORITY_FEE = auto()\n    \"\"\"\n    Error reading transaction priority fee field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_DATA_SIZE = auto()\n    \"\"\"\n    Error reading transaction data field RLP, (rlp field length has leading zeros).\n    \"\"\"\n    RLP_LEADING_ZEROS_NONCE_SIZE = auto()\n    \"\"\"\n    Error reading transaction nonce field RLP, (rlp field length has leading zeros).\n    \"\"\"\n    RLP_TOO_FEW_ELEMENTS = auto()\n    \"\"\"\n    Error reading transaction RLP, structure has too few elements than expected.\n    \"\"\"\n    RLP_TOO_MANY_ELEMENTS = auto()\n    \"\"\"\n    Error reading transaction RLP, structure has too many elements than expected.\n    \"\"\"\n    RLP_ERROR_EOF = auto()\n    \"\"\"\n    Error reading transaction RLP, rlp stream unexpectedly finished.\n    \"\"\"\n    RLP_ERROR_SIZE = auto()\n    \"\"\"\n    Error reading transaction RLP, rlp size is invalid.\n    \"\"\"\n    RLP_ERROR_SIZE_LEADING_ZEROS = auto()\n    \"\"\"\n    Error reading transaction RLP, field size has leading zeros.\n    \"\"\"\n    INVALID_CHAINID = auto()\n    \"\"\"\n    Transaction chain id encoding is incorrect.\n    \"\"\"\n    RLP_INVALID_DATA = auto()\n    \"\"\"\n    Transaction data field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_GASLIMIT = auto()\n    \"\"\"\n    Transaction gaslimit field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_NONCE = auto()\n    \"\"\"\n    Transaction nonce field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_TO = auto()\n    \"\"\"\n    Transaction to field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_LONG = auto()\n    \"\"\"\n    Transaction access list address is > 20 bytes.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_SHORT = auto()\n    \"\"\"\n    Transaction access list address is < 20 bytes.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_STORAGE_TOO_LONG = auto()\n    \"\"\"\n    Transaction access list storage hash > 32 bytes.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_STORAGE_TOO_SHORT = auto()\n    \"\"\"\n    Transaction access list storage hash < 32 bytes.\n    \"\"\"\n    RLP_INVALID_HEADER = auto()\n    \"\"\"\n    Transaction failed to read from RLP as rlp header is invalid.\n    \"\"\"\n    RLP_INVALID_VALUE = auto()\n    \"\"\"\n    Transaction value field is invalid rlp/structure.\n    \"\"\"\n    EC_RECOVERY_FAIL = auto()\n    \"\"\"\n    Transaction has correct signature, but ec recovery failed.\n    \"\"\"\n    INSUFFICIENT_ACCOUNT_FUNDS = auto()\n    \"\"\"\n    Transaction's sender does not have enough funds to pay for the transaction.\n    \"\"\"\n    INSUFFICIENT_MAX_FEE_PER_GAS = auto()\n    \"\"\"\n    Transaction's max-fee-per-gas is lower than the block base-fee.\n    \"\"\"\n    PRIORITY_OVERFLOW = auto()\n    \"\"\"\n    Transaction's max-priority-fee-per-gas is exceeds 2^256-1 maximum value.\n    \"\"\"\n    PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS = auto()\n    \"\"\"\n    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas.\n    \"\"\"\n    PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS_2 = auto()\n    \"\"\"\n    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas (TransactionTests).\n    \"\"\"\n    INSUFFICIENT_MAX_FEE_PER_BLOB_GAS = auto()\n    \"\"\"\n    Transaction's max-fee-per-blob-gas is lower than the block's blob-gas price.\n    \"\"\"\n    INTRINSIC_GAS_TOO_LOW = auto()\n    \"\"\"\n    Transaction's gas limit is too low.\n    \"\"\"\n    INITCODE_SIZE_EXCEEDED = auto()\n    \"\"\"\n    Transaction's initcode for a contract-creating transaction is too large.\n    \"\"\"\n    TYPE_3_TX_PRE_FORK = auto()\n    \"\"\"\n    Transaction type 3 included before activation fork.\n    \"\"\"\n    TYPE_3_TX_ZERO_BLOBS_PRE_FORK = auto()\n    \"\"\"\n    Transaction type 3, with zero blobs, included before activation fork.\n    \"\"\"\n    TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH = auto()\n    \"\"\"\n    Transaction contains a blob versioned hash with an invalid version.\n    \"\"\"\n    TYPE_3_TX_WITH_FULL_BLOBS = auto()\n    \"\"\"\n    Transaction contains full blobs (network-version of the transaction).\n    \"\"\"\n    TYPE_3_TX_BLOB_COUNT_EXCEEDED = auto()\n    \"\"\"\n    Transaction contains too many blob versioned hashes.\n    \"\"\"\n    TYPE_3_TX_CONTRACT_CREATION = auto()\n    \"\"\"\n    Transaction is a type 3 transaction and has an empty `to`.\n    \"\"\"\n    TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED = auto()\n    \"\"\"\n    Transaction causes block to go over blob gas limit.\n    \"\"\"\n    GAS_ALLOWANCE_EXCEEDED = auto()\n    \"\"\"\n    Transaction causes block to go over blob gas limit.\n    \"\"\"\n    TYPE_3_TX_ZERO_BLOBS = auto()\n    \"\"\"\n    Transaction is type 3, but has no blobs.\n    \"\"\"\n
    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_NOT_SUPPORTED","title":"TYPE_NOT_SUPPORTED = auto() class-attribute instance-attribute","text":"

    Transaction type is not supported on this chain configuration.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.SENDER_NOT_EOA","title":"SENDER_NOT_EOA = auto() class-attribute instance-attribute","text":"

    Transaction is coming from address that is not exist anymore.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.ADDRESS_TOO_SHORT","title":"ADDRESS_TOO_SHORT = auto() class-attribute instance-attribute","text":"

    Transaction to is not allowed to be less than 20 bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.ADDRESS_TOO_LONG","title":"ADDRESS_TOO_LONG = auto() class-attribute instance-attribute","text":"

    Transaction to is not allowed to be more than 20 bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.NONCE_MISMATCH_TOO_HIGH","title":"NONCE_MISMATCH_TOO_HIGH = auto() class-attribute instance-attribute","text":"

    Transaction nonce > sender.nonce.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.NONCE_MISMATCH_TOO_LOW","title":"NONCE_MISMATCH_TOO_LOW = auto() class-attribute instance-attribute","text":"

    Transaction nonce < sender.nonce.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.NONCE_TOO_BIG","title":"NONCE_TOO_BIG = auto() class-attribute instance-attribute","text":"

    Transaction nonce is not allowed to be max_uint64 - 1 (this is probably TransactionTest).

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.NONCE_IS_MAX","title":"NONCE_IS_MAX = auto() class-attribute instance-attribute","text":"

    Transaction nonce is not allowed to be max_uint64 - 1 (this is StateTests).

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.NONCE_OVERFLOW","title":"NONCE_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction nonce is not allowed to be more than uint64.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.GASLIMIT_OVERFLOW","title":"GASLIMIT_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction gaslimit exceeds 2^64-1 maximum value.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.VALUE_OVERFLOW","title":"VALUE_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction value exceeds 2^256-1 maximum value.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.GASPRICE_OVERFLOW","title":"GASPRICE_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction gasPrice exceeds 2^256-1 maximum value.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.GASLIMIT_PRICE_PRODUCT_OVERFLOW","title":"GASLIMIT_PRICE_PRODUCT_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction gasPrice * gasLimit exceeds 2^256-1 maximum value.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.INVALID_SIGNATURE_VRS","title":"INVALID_SIGNATURE_VRS = auto() class-attribute instance-attribute","text":"

    Invalid transaction v, r, s values.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_SIGNATURE_R","title":"RLP_INVALID_SIGNATURE_R = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature R value.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_SIGNATURE_S","title":"RLP_INVALID_SIGNATURE_S = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature S value.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_GASLIMIT","title":"RLP_LEADING_ZEROS_GASLIMIT = auto() class-attribute instance-attribute","text":"

    Error reading transaction gaslimit field RLP.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_GASPRICE","title":"RLP_LEADING_ZEROS_GASPRICE = auto() class-attribute instance-attribute","text":"

    Error reading transaction gasprice field RLP.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_VALUE","title":"RLP_LEADING_ZEROS_VALUE = auto() class-attribute instance-attribute","text":"

    Error reading transaction value field RLP.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_NONCE","title":"RLP_LEADING_ZEROS_NONCE = auto() class-attribute instance-attribute","text":"

    Error reading transaction nonce field RLP.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_R","title":"RLP_LEADING_ZEROS_R = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature R field RLP.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_S","title":"RLP_LEADING_ZEROS_S = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature S field RLP.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_V","title":"RLP_LEADING_ZEROS_V = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature V field RLP.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_BASEFEE","title":"RLP_LEADING_ZEROS_BASEFEE = auto() class-attribute instance-attribute","text":"

    Error reading transaction basefee field RLP.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_PRIORITY_FEE","title":"RLP_LEADING_ZEROS_PRIORITY_FEE = auto() class-attribute instance-attribute","text":"

    Error reading transaction priority fee field RLP.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_DATA_SIZE","title":"RLP_LEADING_ZEROS_DATA_SIZE = auto() class-attribute instance-attribute","text":"

    Error reading transaction data field RLP, (rlp field length has leading zeros).

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_NONCE_SIZE","title":"RLP_LEADING_ZEROS_NONCE_SIZE = auto() class-attribute instance-attribute","text":"

    Error reading transaction nonce field RLP, (rlp field length has leading zeros).

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_TOO_FEW_ELEMENTS","title":"RLP_TOO_FEW_ELEMENTS = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, structure has too few elements than expected.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_TOO_MANY_ELEMENTS","title":"RLP_TOO_MANY_ELEMENTS = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, structure has too many elements than expected.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_ERROR_EOF","title":"RLP_ERROR_EOF = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, rlp stream unexpectedly finished.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_ERROR_SIZE","title":"RLP_ERROR_SIZE = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, rlp size is invalid.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_ERROR_SIZE_LEADING_ZEROS","title":"RLP_ERROR_SIZE_LEADING_ZEROS = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, field size has leading zeros.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.INVALID_CHAINID","title":"INVALID_CHAINID = auto() class-attribute instance-attribute","text":"

    Transaction chain id encoding is incorrect.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_DATA","title":"RLP_INVALID_DATA = auto() class-attribute instance-attribute","text":"

    Transaction data field is invalid rlp.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_GASLIMIT","title":"RLP_INVALID_GASLIMIT = auto() class-attribute instance-attribute","text":"

    Transaction gaslimit field is invalid rlp.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_NONCE","title":"RLP_INVALID_NONCE = auto() class-attribute instance-attribute","text":"

    Transaction nonce field is invalid rlp.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_TO","title":"RLP_INVALID_TO = auto() class-attribute instance-attribute","text":"

    Transaction to field is invalid rlp.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_LONG","title":"RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_LONG = auto() class-attribute instance-attribute","text":"

    Transaction access list address is > 20 bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_SHORT","title":"RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_SHORT = auto() class-attribute instance-attribute","text":"

    Transaction access list address is < 20 bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_ACCESS_LIST_STORAGE_TOO_LONG","title":"RLP_INVALID_ACCESS_LIST_STORAGE_TOO_LONG = auto() class-attribute instance-attribute","text":"

    Transaction access list storage hash > 32 bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_ACCESS_LIST_STORAGE_TOO_SHORT","title":"RLP_INVALID_ACCESS_LIST_STORAGE_TOO_SHORT = auto() class-attribute instance-attribute","text":"

    Transaction access list storage hash < 32 bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_HEADER","title":"RLP_INVALID_HEADER = auto() class-attribute instance-attribute","text":"

    Transaction failed to read from RLP as rlp header is invalid.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_VALUE","title":"RLP_INVALID_VALUE = auto() class-attribute instance-attribute","text":"

    Transaction value field is invalid rlp/structure.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.EC_RECOVERY_FAIL","title":"EC_RECOVERY_FAIL = auto() class-attribute instance-attribute","text":"

    Transaction has correct signature, but ec recovery failed.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.INSUFFICIENT_ACCOUNT_FUNDS","title":"INSUFFICIENT_ACCOUNT_FUNDS = auto() class-attribute instance-attribute","text":"

    Transaction's sender does not have enough funds to pay for the transaction.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS","title":"INSUFFICIENT_MAX_FEE_PER_GAS = auto() class-attribute instance-attribute","text":"

    Transaction's max-fee-per-gas is lower than the block base-fee.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.PRIORITY_OVERFLOW","title":"PRIORITY_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction's max-priority-fee-per-gas is exceeds 2^256-1 maximum value.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS","title":"PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS = auto() class-attribute instance-attribute","text":"

    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS_2","title":"PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS_2 = auto() class-attribute instance-attribute","text":"

    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas (TransactionTests).

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS","title":"INSUFFICIENT_MAX_FEE_PER_BLOB_GAS = auto() class-attribute instance-attribute","text":"

    Transaction's max-fee-per-blob-gas is lower than the block's blob-gas price.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.INTRINSIC_GAS_TOO_LOW","title":"INTRINSIC_GAS_TOO_LOW = auto() class-attribute instance-attribute","text":"

    Transaction's gas limit is too low.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.INITCODE_SIZE_EXCEEDED","title":"INITCODE_SIZE_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction's initcode for a contract-creating transaction is too large.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_PRE_FORK","title":"TYPE_3_TX_PRE_FORK = auto() class-attribute instance-attribute","text":"

    Transaction type 3 included before activation fork.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_ZERO_BLOBS_PRE_FORK","title":"TYPE_3_TX_ZERO_BLOBS_PRE_FORK = auto() class-attribute instance-attribute","text":"

    Transaction type 3, with zero blobs, included before activation fork.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH","title":"TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH = auto() class-attribute instance-attribute","text":"

    Transaction contains a blob versioned hash with an invalid version.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_WITH_FULL_BLOBS","title":"TYPE_3_TX_WITH_FULL_BLOBS = auto() class-attribute instance-attribute","text":"

    Transaction contains full blobs (network-version of the transaction).

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED","title":"TYPE_3_TX_BLOB_COUNT_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction contains too many blob versioned hashes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_CONTRACT_CREATION","title":"TYPE_3_TX_CONTRACT_CREATION = auto() class-attribute instance-attribute","text":"

    Transaction is a type 3 transaction and has an empty to.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED","title":"TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction causes block to go over blob gas limit.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.GAS_ALLOWANCE_EXCEEDED","title":"GAS_ALLOWANCE_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction causes block to go over blob gas limit.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_ZERO_BLOBS","title":"TYPE_3_TX_ZERO_BLOBS = auto() class-attribute instance-attribute","text":"

    Transaction is type 3, but has no blobs.

    "},{"location":"library/ethereum_test_fixtures/","title":"Ethereum Test Fixtures package","text":"

    Ethereum test fixture format definitions.

    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.BaseFixture","title":"BaseFixture","text":"

    Bases: CamelModel

    Represents a base Ethereum test fixture of any type.

    Source code in src/ethereum_test_fixtures/base.py
    class BaseFixture(CamelModel):\n    \"\"\"Represents a base Ethereum test fixture of any type.\"\"\"\n\n    info: Dict[str, str] = Field(default_factory=dict, alias=\"_info\")\n    format: ClassVar[FixtureFormats] = FixtureFormats.UNSET_TEST_FORMAT\n\n    @cached_property\n    def json_dict(self) -> Dict[str, Any]:\n        \"\"\"\n        Returns the JSON representation of the fixture.\n        \"\"\"\n        return self.model_dump(mode=\"json\", by_alias=True, exclude_none=True, exclude={\"info\"})\n\n    @cached_property\n    def hash(self) -> str:\n        \"\"\"\n        Returns the hash of the fixture.\n        \"\"\"\n        json_str = json.dumps(self.json_dict, sort_keys=True, separators=(\",\", \":\"))\n        h = hashlib.sha256(json_str.encode(\"utf-8\")).hexdigest()\n        return f\"0x{h}\"\n\n    def json_dict_with_info(self, hash_only: bool = False) -> Dict[str, Any]:\n        \"\"\"\n        Returns the JSON representation of the fixture with the info field.\n        \"\"\"\n        dict_with_info = self.json_dict.copy()\n        dict_with_info[\"_info\"] = {\"hash\": self.hash}\n        if not hash_only:\n            dict_with_info[\"_info\"].update(self.info)\n        return dict_with_info\n\n    def fill_info(\n        self,\n        t8n_version: str,\n        fixture_description: str,\n        fixture_source_url: str,\n        ref_spec: ReferenceSpec | None,\n    ):\n        \"\"\"\n        Fill the info field for this fixture\n        \"\"\"\n        if \"comment\" not in self.info:\n            self.info[\"comment\"] = \"`execution-spec-tests` generated test\"\n        self.info[\"filling-transition-tool\"] = t8n_version\n        self.info[\"description\"] = fixture_description\n        self.info[\"url\"] = fixture_source_url\n        if ref_spec is not None:\n            ref_spec.write_info(self.info)\n\n    def get_fork(self) -> str | None:\n        \"\"\"\n        Returns the fork of the fixture as a string.\n        \"\"\"\n        raise NotImplementedError\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.BaseFixture.json_dict","title":"json_dict: Dict[str, Any] cached property","text":"

    Returns the JSON representation of the fixture.

    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.BaseFixture.hash","title":"hash: str cached property","text":"

    Returns the hash of the fixture.

    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.BaseFixture.json_dict_with_info","title":"json_dict_with_info(hash_only=False)","text":"

    Returns the JSON representation of the fixture with the info field.

    Source code in src/ethereum_test_fixtures/base.py
    def json_dict_with_info(self, hash_only: bool = False) -> Dict[str, Any]:\n    \"\"\"\n    Returns the JSON representation of the fixture with the info field.\n    \"\"\"\n    dict_with_info = self.json_dict.copy()\n    dict_with_info[\"_info\"] = {\"hash\": self.hash}\n    if not hash_only:\n        dict_with_info[\"_info\"].update(self.info)\n    return dict_with_info\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.BaseFixture.fill_info","title":"fill_info(t8n_version, fixture_description, fixture_source_url, ref_spec)","text":"

    Fill the info field for this fixture

    Source code in src/ethereum_test_fixtures/base.py
    def fill_info(\n    self,\n    t8n_version: str,\n    fixture_description: str,\n    fixture_source_url: str,\n    ref_spec: ReferenceSpec | None,\n):\n    \"\"\"\n    Fill the info field for this fixture\n    \"\"\"\n    if \"comment\" not in self.info:\n        self.info[\"comment\"] = \"`execution-spec-tests` generated test\"\n    self.info[\"filling-transition-tool\"] = t8n_version\n    self.info[\"description\"] = fixture_description\n    self.info[\"url\"] = fixture_source_url\n    if ref_spec is not None:\n        ref_spec.write_info(self.info)\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.BaseFixture.get_fork","title":"get_fork()","text":"

    Returns the fork of the fixture as a string.

    Source code in src/ethereum_test_fixtures/base.py
    def get_fork(self) -> str | None:\n    \"\"\"\n    Returns the fork of the fixture as a string.\n    \"\"\"\n    raise NotImplementedError\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.BlockchainEngineFixture","title":"BlockchainEngineFixture","text":"

    Bases: FixtureCommon

    Engine specific test fixture information.

    Source code in src/ethereum_test_fixtures/blockchain.py
    class EngineFixture(FixtureCommon):\n    \"\"\"\n    Engine specific test fixture information.\n    \"\"\"\n\n    payloads: List[FixtureEngineNewPayload] = Field(..., alias=\"engineNewPayloads\")\n    sync_payload: FixtureEngineNewPayload | None = None\n\n    format: ClassVar[FixtureFormats] = FixtureFormats.BLOCKCHAIN_TEST_ENGINE\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.BlockchainFixture","title":"BlockchainFixture","text":"

    Bases: FixtureCommon

    Cross-client specific blockchain test model use in JSON fixtures.

    Source code in src/ethereum_test_fixtures/blockchain.py
    class Fixture(FixtureCommon):\n    \"\"\"\n    Cross-client specific blockchain test model use in JSON fixtures.\n    \"\"\"\n\n    genesis_rlp: Bytes = Field(..., alias=\"genesisRLP\")\n    blocks: List[FixtureBlock | InvalidFixtureBlock]\n    seal_engine: Literal[\"NoProof\"] = Field(\"NoProof\")\n\n    format: ClassVar[FixtureFormats] = FixtureFormats.BLOCKCHAIN_TEST\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.BlockchainFixtureCommon","title":"BlockchainFixtureCommon","text":"

    Bases: BaseFixture

    Base blockchain test fixture model.

    Source code in src/ethereum_test_fixtures/blockchain.py
    class FixtureCommon(BaseFixture):\n    \"\"\"\n    Base blockchain test fixture model.\n    \"\"\"\n\n    fork: str = Field(..., alias=\"network\")\n    genesis: FixtureHeader = Field(..., alias=\"genesisBlockHeader\")\n    pre: Alloc\n    post_state: Alloc | None = Field(None)\n    last_block_hash: Hash = Field(..., alias=\"lastblockhash\")  # FIXME: lastBlockHash\n\n    def get_fork(self) -> str | None:\n        \"\"\"\n        Returns the fork of the fixture as a string.\n        \"\"\"\n        return self.fork\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.BlockchainFixtureCommon.get_fork","title":"get_fork()","text":"

    Returns the fork of the fixture as a string.

    Source code in src/ethereum_test_fixtures/blockchain.py
    def get_fork(self) -> str | None:\n    \"\"\"\n    Returns the fork of the fixture as a string.\n    \"\"\"\n    return self.fork\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureCollector","title":"FixtureCollector dataclass","text":"

    Collects all fixtures generated by the test cases.

    Source code in src/ethereum_test_fixtures/collector.py
    @dataclass(kw_only=True)\nclass FixtureCollector:\n    \"\"\"\n    Collects all fixtures generated by the test cases.\n    \"\"\"\n\n    output_dir: Path\n    flat_output: bool\n    single_fixture_per_file: bool\n    filler_path: Path\n    base_dump_dir: Optional[Path] = None\n\n    # Internal state\n    all_fixtures: Dict[Path, Fixtures] = field(default_factory=dict)\n    json_path_to_test_item: Dict[Path, TestInfo] = field(default_factory=dict)\n\n    def get_fixture_basename(self, info: TestInfo) -> Path:\n        \"\"\"\n        Returns the basename of the fixture file for a given test case.\n        \"\"\"\n        if self.flat_output:\n            if self.single_fixture_per_file:\n                return Path(strip_test_prefix(info.get_single_test_name()))\n            return Path(strip_test_prefix(info.original_name))\n        else:\n            relative_fixture_output_dir = Path(info.path).parent / strip_test_prefix(\n                Path(info.path).stem\n            )\n            module_relative_output_dir = get_module_relative_output_dir(\n                relative_fixture_output_dir, self.filler_path\n            )\n\n            if self.single_fixture_per_file:\n                return module_relative_output_dir / strip_test_prefix(info.get_single_test_name())\n            return module_relative_output_dir / strip_test_prefix(info.original_name)\n\n    def add_fixture(self, info: TestInfo, fixture: BaseFixture) -> Path:\n        \"\"\"\n        Adds a fixture to the list of fixtures of a given test case.\n        \"\"\"\n        fixture_basename = self.get_fixture_basename(info)\n\n        fixture_path = (\n            self.output_dir\n            / fixture.format.output_base_dir_name\n            / fixture_basename.with_suffix(fixture.format.output_file_extension)\n        )\n        if fixture_path not in self.all_fixtures.keys():  # relevant when we group by test function\n            self.all_fixtures[fixture_path] = Fixtures(root={})\n            self.json_path_to_test_item[fixture_path] = info\n\n        self.all_fixtures[fixture_path][info.id] = fixture\n\n        return fixture_path\n\n    def dump_fixtures(self) -> None:\n        \"\"\"\n        Dumps all collected fixtures to their respective files.\n        \"\"\"\n        if self.output_dir.name == \"stdout\":\n            combined_fixtures = {\n                k: to_json(v) for fixture in self.all_fixtures.values() for k, v in fixture.items()\n            }\n            json.dump(combined_fixtures, sys.stdout, indent=4)\n            return\n        os.makedirs(self.output_dir, exist_ok=True)\n        for fixture_path, fixtures in self.all_fixtures.items():\n            os.makedirs(fixture_path.parent, exist_ok=True)\n            if len({fixture.format for fixture in fixtures.values()}) != 1:\n                raise TypeError(\"All fixtures in a single file must have the same format.\")\n            fixtures.collect_into_file(fixture_path)\n\n    def verify_fixture_files(self, evm_fixture_verification: FixtureVerifier) -> None:\n        \"\"\"\n        Runs `evm [state|block]test` on each fixture.\n        \"\"\"\n        for fixture_path, name_fixture_dict in self.all_fixtures.items():\n            for fixture_name, fixture in name_fixture_dict.items():\n                if FixtureFormats.is_verifiable(fixture.format):\n                    info = self.json_path_to_test_item[fixture_path]\n                    verify_fixtures_dump_dir = self._get_verify_fixtures_dump_dir(info)\n                    evm_fixture_verification.verify_fixture(\n                        fixture.format,\n                        fixture_path,\n                        fixture_name=None,\n                        debug_output_path=verify_fixtures_dump_dir,\n                    )\n\n    def _get_verify_fixtures_dump_dir(\n        self,\n        info: TestInfo,\n    ):\n        \"\"\"\n        The directory to dump the current test function's fixture.json and fixture\n        verification debug output.\n        \"\"\"\n        if not self.base_dump_dir:\n            return None\n        if self.single_fixture_per_file:\n            return info.get_dump_dir_path(\n                self.base_dump_dir, self.filler_path, level=\"test_parameter\"\n            )\n        else:\n            return info.get_dump_dir_path(\n                self.base_dump_dir, self.filler_path, level=\"test_function\"\n            )\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureCollector.get_fixture_basename","title":"get_fixture_basename(info)","text":"

    Returns the basename of the fixture file for a given test case.

    Source code in src/ethereum_test_fixtures/collector.py
    def get_fixture_basename(self, info: TestInfo) -> Path:\n    \"\"\"\n    Returns the basename of the fixture file for a given test case.\n    \"\"\"\n    if self.flat_output:\n        if self.single_fixture_per_file:\n            return Path(strip_test_prefix(info.get_single_test_name()))\n        return Path(strip_test_prefix(info.original_name))\n    else:\n        relative_fixture_output_dir = Path(info.path).parent / strip_test_prefix(\n            Path(info.path).stem\n        )\n        module_relative_output_dir = get_module_relative_output_dir(\n            relative_fixture_output_dir, self.filler_path\n        )\n\n        if self.single_fixture_per_file:\n            return module_relative_output_dir / strip_test_prefix(info.get_single_test_name())\n        return module_relative_output_dir / strip_test_prefix(info.original_name)\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureCollector.add_fixture","title":"add_fixture(info, fixture)","text":"

    Adds a fixture to the list of fixtures of a given test case.

    Source code in src/ethereum_test_fixtures/collector.py
    def add_fixture(self, info: TestInfo, fixture: BaseFixture) -> Path:\n    \"\"\"\n    Adds a fixture to the list of fixtures of a given test case.\n    \"\"\"\n    fixture_basename = self.get_fixture_basename(info)\n\n    fixture_path = (\n        self.output_dir\n        / fixture.format.output_base_dir_name\n        / fixture_basename.with_suffix(fixture.format.output_file_extension)\n    )\n    if fixture_path not in self.all_fixtures.keys():  # relevant when we group by test function\n        self.all_fixtures[fixture_path] = Fixtures(root={})\n        self.json_path_to_test_item[fixture_path] = info\n\n    self.all_fixtures[fixture_path][info.id] = fixture\n\n    return fixture_path\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureCollector.dump_fixtures","title":"dump_fixtures()","text":"

    Dumps all collected fixtures to their respective files.

    Source code in src/ethereum_test_fixtures/collector.py
    def dump_fixtures(self) -> None:\n    \"\"\"\n    Dumps all collected fixtures to their respective files.\n    \"\"\"\n    if self.output_dir.name == \"stdout\":\n        combined_fixtures = {\n            k: to_json(v) for fixture in self.all_fixtures.values() for k, v in fixture.items()\n        }\n        json.dump(combined_fixtures, sys.stdout, indent=4)\n        return\n    os.makedirs(self.output_dir, exist_ok=True)\n    for fixture_path, fixtures in self.all_fixtures.items():\n        os.makedirs(fixture_path.parent, exist_ok=True)\n        if len({fixture.format for fixture in fixtures.values()}) != 1:\n            raise TypeError(\"All fixtures in a single file must have the same format.\")\n        fixtures.collect_into_file(fixture_path)\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureCollector.verify_fixture_files","title":"verify_fixture_files(evm_fixture_verification)","text":"

    Runs evm [state|block]test on each fixture.

    Source code in src/ethereum_test_fixtures/collector.py
    def verify_fixture_files(self, evm_fixture_verification: FixtureVerifier) -> None:\n    \"\"\"\n    Runs `evm [state|block]test` on each fixture.\n    \"\"\"\n    for fixture_path, name_fixture_dict in self.all_fixtures.items():\n        for fixture_name, fixture in name_fixture_dict.items():\n            if FixtureFormats.is_verifiable(fixture.format):\n                info = self.json_path_to_test_item[fixture_path]\n                verify_fixtures_dump_dir = self._get_verify_fixtures_dump_dir(info)\n                evm_fixture_verification.verify_fixture(\n                    fixture.format,\n                    fixture_path,\n                    fixture_name=None,\n                    debug_output_path=verify_fixtures_dump_dir,\n                )\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.TestInfo","title":"TestInfo dataclass","text":"

    Contains test information from the current node.

    Source code in src/ethereum_test_fixtures/collector.py
    @dataclass(kw_only=True)\nclass TestInfo:\n    \"\"\"\n    Contains test information from the current node.\n    \"\"\"\n\n    name: str  # pytest: Item.name\n    id: str  # pytest: Item.nodeid\n    original_name: str  # pytest: Item.originalname\n    path: Path  # pytest: Item.path\n\n    def get_name_and_parameters(self) -> Tuple[str, str]:\n        \"\"\"\n        Converts a test name to a tuple containing the test name and test parameters.\n\n        Example:\n        test_push0_key_sstore[fork_Shanghai] -> test_push0_key_sstore, fork_Shanghai\n        \"\"\"\n        test_name, parameters = self.name.split(\"[\")\n        return test_name, re.sub(r\"[\\[\\-]\", \"_\", parameters).replace(\"]\", \"\")\n\n    def get_single_test_name(self) -> str:\n        \"\"\"\n        Converts a test name to a single test name.\n        \"\"\"\n        test_name, test_parameters = self.get_name_and_parameters()\n        return f\"{test_name}__{test_parameters}\"\n\n    def get_dump_dir_path(\n        self,\n        base_dump_dir: Optional[Path],\n        filler_path: Path,\n        level: Literal[\"test_module\", \"test_function\", \"test_parameter\"] = \"test_parameter\",\n    ) -> Optional[Path]:\n        \"\"\"\n        The path to dump the debug output as defined by the level to dump at.\n        \"\"\"\n        if not base_dump_dir:\n            return None\n        test_module_relative_dir = get_module_relative_output_dir(self.path, filler_path)\n        if level == \"test_module\":\n            return Path(base_dump_dir) / Path(str(test_module_relative_dir).replace(os.sep, \"__\"))\n        test_name, test_parameter_string = self.get_name_and_parameters()\n        flat_path = f\"{str(test_module_relative_dir).replace(os.sep, '__')}__{test_name}\"\n        if level == \"test_function\":\n            return Path(base_dump_dir) / flat_path\n        elif level == \"test_parameter\":\n            return Path(base_dump_dir) / flat_path / test_parameter_string\n        raise Exception(\"Unexpected level.\")\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.TestInfo.get_name_and_parameters","title":"get_name_and_parameters()","text":"

    Converts a test name to a tuple containing the test name and test parameters.

    Example: test_push0_key_sstore[fork_Shanghai] -> test_push0_key_sstore, fork_Shanghai

    Source code in src/ethereum_test_fixtures/collector.py
    def get_name_and_parameters(self) -> Tuple[str, str]:\n    \"\"\"\n    Converts a test name to a tuple containing the test name and test parameters.\n\n    Example:\n    test_push0_key_sstore[fork_Shanghai] -> test_push0_key_sstore, fork_Shanghai\n    \"\"\"\n    test_name, parameters = self.name.split(\"[\")\n    return test_name, re.sub(r\"[\\[\\-]\", \"_\", parameters).replace(\"]\", \"\")\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.TestInfo.get_single_test_name","title":"get_single_test_name()","text":"

    Converts a test name to a single test name.

    Source code in src/ethereum_test_fixtures/collector.py
    def get_single_test_name(self) -> str:\n    \"\"\"\n    Converts a test name to a single test name.\n    \"\"\"\n    test_name, test_parameters = self.get_name_and_parameters()\n    return f\"{test_name}__{test_parameters}\"\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.TestInfo.get_dump_dir_path","title":"get_dump_dir_path(base_dump_dir, filler_path, level='test_parameter')","text":"

    The path to dump the debug output as defined by the level to dump at.

    Source code in src/ethereum_test_fixtures/collector.py
    def get_dump_dir_path(\n    self,\n    base_dump_dir: Optional[Path],\n    filler_path: Path,\n    level: Literal[\"test_module\", \"test_function\", \"test_parameter\"] = \"test_parameter\",\n) -> Optional[Path]:\n    \"\"\"\n    The path to dump the debug output as defined by the level to dump at.\n    \"\"\"\n    if not base_dump_dir:\n        return None\n    test_module_relative_dir = get_module_relative_output_dir(self.path, filler_path)\n    if level == \"test_module\":\n        return Path(base_dump_dir) / Path(str(test_module_relative_dir).replace(os.sep, \"__\"))\n    test_name, test_parameter_string = self.get_name_and_parameters()\n    flat_path = f\"{str(test_module_relative_dir).replace(os.sep, '__')}__{test_name}\"\n    if level == \"test_function\":\n        return Path(base_dump_dir) / flat_path\n    elif level == \"test_parameter\":\n        return Path(base_dump_dir) / flat_path / test_parameter_string\n    raise Exception(\"Unexpected level.\")\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.EOFFixture","title":"EOFFixture","text":"

    Bases: BaseFixture

    Fixture for a single EOFTest.

    Source code in src/ethereum_test_fixtures/eof.py
    class Fixture(BaseFixture):\n    \"\"\"\n    Fixture for a single EOFTest.\n    \"\"\"\n\n    vectors: Mapping[Number, Vector]\n\n    format: ClassVar[FixtureFormats] = FixtureFormats.EOF_TEST\n\n    def get_fork(self) -> str | None:\n        \"\"\"\n        Returns the fork of the fixture as a string.\n        \"\"\"\n        return None\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.EOFFixture.get_fork","title":"get_fork()","text":"

    Returns the fork of the fixture as a string.

    Source code in src/ethereum_test_fixtures/eof.py
    def get_fork(self) -> str | None:\n    \"\"\"\n    Returns the fork of the fixture as a string.\n    \"\"\"\n    return None\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureFormats","title":"FixtureFormats","text":"

    Bases: Enum

    Helper class to define fixture formats.

    Source code in src/ethereum_test_fixtures/formats.py
    class FixtureFormats(Enum):\n    \"\"\"\n    Helper class to define fixture formats.\n    \"\"\"\n\n    UNSET_TEST_FORMAT = \"unset_test_format\"\n    STATE_TEST = \"state_test\"\n    BLOCKCHAIN_TEST = \"blockchain_test\"\n    BLOCKCHAIN_TEST_ENGINE = \"blockchain_test_engine\"\n    EOF_TEST = \"eof_test\"\n\n    @classmethod\n    def is_state_test(cls, format):  # noqa: D102\n        return format == cls.STATE_TEST\n\n    @classmethod\n    def is_blockchain_test(cls, format):  # noqa: D102\n        return format in (cls.BLOCKCHAIN_TEST, cls.BLOCKCHAIN_TEST_ENGINE)\n\n    @classmethod\n    def is_hive_format(cls, format):  # noqa: D102\n        return format == cls.BLOCKCHAIN_TEST_ENGINE\n\n    @classmethod\n    def is_standard_format(cls, format):  # noqa: D102\n        return format in (cls.STATE_TEST, cls.BLOCKCHAIN_TEST)\n\n    @classmethod\n    def is_verifiable(cls, format):  # noqa: D102\n        return format in (cls.STATE_TEST, cls.BLOCKCHAIN_TEST)\n\n    @classmethod\n    def get_format_description(cls, format):\n        \"\"\"\n        Returns a description of the fixture format.\n\n        Used to add a description to the generated pytest marks.\n        \"\"\"\n        if format == cls.UNSET_TEST_FORMAT:\n            return \"Unknown fixture format; it has not been set.\"\n        elif format == cls.STATE_TEST:\n            return \"Tests that generate a state test fixture.\"\n        elif format == cls.BLOCKCHAIN_TEST:\n            return \"Tests that generate a blockchain test fixture.\"\n        elif format == cls.BLOCKCHAIN_TEST_ENGINE:\n            return \"Tests that generate a blockchain test fixture in Engine API format.\"\n        elif format == cls.EOF_TEST:\n            return \"Tests that generate an EOF test fixture.\"\n        raise Exception(f\"Unknown fixture format: {format}.\")\n\n    @property\n    def output_base_dir_name(self) -> Path:\n        \"\"\"\n        Returns the name of the subdirectory where this type of fixture should be dumped to.\n        \"\"\"\n        return Path(self.value.replace(\"test\", \"tests\"))\n\n    @property\n    def output_file_extension(self) -> str:\n        \"\"\"\n        Returns the file extension for this type of fixture.\n\n        By default, fixtures are dumped as JSON files.\n        \"\"\"\n        return \".json\"\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureFormats.get_format_description","title":"get_format_description(format) classmethod","text":"

    Returns a description of the fixture format.

    Used to add a description to the generated pytest marks.

    Source code in src/ethereum_test_fixtures/formats.py
    @classmethod\ndef get_format_description(cls, format):\n    \"\"\"\n    Returns a description of the fixture format.\n\n    Used to add a description to the generated pytest marks.\n    \"\"\"\n    if format == cls.UNSET_TEST_FORMAT:\n        return \"Unknown fixture format; it has not been set.\"\n    elif format == cls.STATE_TEST:\n        return \"Tests that generate a state test fixture.\"\n    elif format == cls.BLOCKCHAIN_TEST:\n        return \"Tests that generate a blockchain test fixture.\"\n    elif format == cls.BLOCKCHAIN_TEST_ENGINE:\n        return \"Tests that generate a blockchain test fixture in Engine API format.\"\n    elif format == cls.EOF_TEST:\n        return \"Tests that generate an EOF test fixture.\"\n    raise Exception(f\"Unknown fixture format: {format}.\")\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureFormats.output_base_dir_name","title":"output_base_dir_name: Path property","text":"

    Returns the name of the subdirectory where this type of fixture should be dumped to.

    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureFormats.output_file_extension","title":"output_file_extension: str property","text":"

    Returns the file extension for this type of fixture.

    By default, fixtures are dumped as JSON files.

    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.StateFixture","title":"StateFixture","text":"

    Bases: BaseFixture

    Fixture for a single StateTest.

    Source code in src/ethereum_test_fixtures/state.py
    class Fixture(BaseFixture):\n    \"\"\"\n    Fixture for a single StateTest.\n    \"\"\"\n\n    env: FixtureEnvironment\n    pre: Alloc\n    transaction: FixtureTransaction\n    post: Mapping[str, List[FixtureForkPost]]\n\n    format: ClassVar[FixtureFormats] = FixtureFormats.STATE_TEST\n\n    def get_fork(self) -> str | None:\n        \"\"\"\n        Returns the fork of the fixture as a string.\n        \"\"\"\n        forks = list(self.post.keys())\n        assert len(forks) == 1, \"Expected state test fixture with single fork\"\n        return forks[0]\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.StateFixture.get_fork","title":"get_fork()","text":"

    Returns the fork of the fixture as a string.

    Source code in src/ethereum_test_fixtures/state.py
    def get_fork(self) -> str | None:\n    \"\"\"\n    Returns the fork of the fixture as a string.\n    \"\"\"\n    forks = list(self.post.keys())\n    assert len(forks) == 1, \"Expected state test fixture with single fork\"\n    return forks[0]\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureVerifier","title":"FixtureVerifier","text":"

    Bases: ABC

    Abstract class for verifying Ethereum test fixtures.

    Source code in src/ethereum_test_fixtures/verify.py
    class FixtureVerifier(ABC):\n    \"\"\"\n    Abstract class for verifying Ethereum test fixtures.\n    \"\"\"\n\n    @abstractmethod\n    def verify_fixture(\n        self,\n        fixture_format: FixtureFormats,\n        fixture_path: Path,\n        fixture_name: str | None = None,\n        debug_output_path: Path | None = None,\n    ):\n        \"\"\"\n        Executes `evm [state|block]test` to verify the fixture at `fixture_path`.\n\n        Currently only implemented by geth's evm.\n        \"\"\"\n        raise NotImplementedError(\n            \"The `verify_fixture()` function is not supported by this tool. Use geth's evm tool.\"\n        )\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureVerifier.verify_fixture","title":"verify_fixture(fixture_format, fixture_path, fixture_name=None, debug_output_path=None) abstractmethod","text":"

    Executes evm [state|block]test to verify the fixture at fixture_path.

    Currently only implemented by geth's evm.

    Source code in src/ethereum_test_fixtures/verify.py
    @abstractmethod\ndef verify_fixture(\n    self,\n    fixture_format: FixtureFormats,\n    fixture_path: Path,\n    fixture_name: str | None = None,\n    debug_output_path: Path | None = None,\n):\n    \"\"\"\n    Executes `evm [state|block]test` to verify the fixture at `fixture_path`.\n\n    Currently only implemented by geth's evm.\n    \"\"\"\n    raise NotImplementedError(\n        \"The `verify_fixture()` function is not supported by this tool. Use geth's evm tool.\"\n    )\n
    "},{"location":"library/ethereum_test_forks/","title":"Ethereum Test Forks package","text":"

    Ethereum test fork definitions.

    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.ForkAttribute","title":"ForkAttribute","text":"

    Bases: Protocol

    A protocol to get the attribute of a fork at a given block number and timestamp.

    Source code in src/ethereum_test_forks/base_fork.py
    class ForkAttribute(Protocol):\n    \"\"\"\n    A protocol to get the attribute of a fork at a given block number and timestamp.\n    \"\"\"\n\n    def __call__(self, block_number: int = 0, timestamp: int = 0) -> Any:\n        \"\"\"\n        Returns the value of the attribute at the given block number and timestamp.\n        \"\"\"\n        pass\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.ForkAttribute.__call__","title":"__call__(block_number=0, timestamp=0)","text":"

    Returns the value of the attribute at the given block number and timestamp.

    Source code in src/ethereum_test_forks/base_fork.py
    def __call__(self, block_number: int = 0, timestamp: int = 0) -> Any:\n    \"\"\"\n    Returns the value of the attribute at the given block number and timestamp.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.ArrowGlacier","title":"ArrowGlacier","text":"

    Bases: London

    Arrow Glacier fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class ArrowGlacier(London, solc_name=\"london\", ignore=True):\n    \"\"\"\n    Arrow Glacier fork\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Berlin","title":"Berlin","text":"

    Bases: Istanbul

    Berlin fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class Berlin(Istanbul):\n    \"\"\"\n    Berlin fork\n    \"\"\"\n\n    @classmethod\n    def tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n        \"\"\"\n        At Berlin, access list transactions are introduced\n        \"\"\"\n        return [1] + super(Berlin, cls).tx_types(block_number, timestamp)\n\n    @classmethod\n    def contract_creating_tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n        \"\"\"\n        At Berlin, access list transactions are introduced\n        \"\"\"\n        return [1] + super(Berlin, cls).contract_creating_tx_types(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Berlin.tx_types","title":"tx_types(block_number=0, timestamp=0) classmethod","text":"

    At Berlin, access list transactions are introduced

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n    \"\"\"\n    At Berlin, access list transactions are introduced\n    \"\"\"\n    return [1] + super(Berlin, cls).tx_types(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Berlin.contract_creating_tx_types","title":"contract_creating_tx_types(block_number=0, timestamp=0) classmethod","text":"

    At Berlin, access list transactions are introduced

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef contract_creating_tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n    \"\"\"\n    At Berlin, access list transactions are introduced\n    \"\"\"\n    return [1] + super(Berlin, cls).contract_creating_tx_types(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Byzantium","title":"Byzantium","text":"

    Bases: Homestead

    Byzantium fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class Byzantium(Homestead):\n    \"\"\"\n    Byzantium fork\n    \"\"\"\n\n    @classmethod\n    def get_reward(cls, block_number: int = 0, timestamp: int = 0) -> int:\n        \"\"\"\n        At Byzantium, the block reward is reduced to\n        3_000_000_000_000_000_000 wei\n        \"\"\"\n        return 3_000_000_000_000_000_000\n\n    @classmethod\n    def precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n        \"\"\"\n        At Byzantium, pre-compiles for bigint modular exponentiation, addition and scalar\n        multiplication on elliptic curve alt_bn128, and optimal ate pairing check on\n        elliptic curve alt_bn128 are introduced\n        \"\"\"\n        return list(Address(i) for i in range(5, 9)) + super(Byzantium, cls).precompiles(\n            block_number, timestamp\n        )\n\n    @classmethod\n    def call_opcodes(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> List[Tuple[Opcodes, EVMCodeType]]:\n        \"\"\"\n        At Byzantium, STATICCALL opcode was introduced.\n        \"\"\"\n        return [(Opcodes.STATICCALL, EVMCodeType.LEGACY),] + super(\n            Byzantium, cls\n        ).call_opcodes(block_number, timestamp)\n\n    @classmethod\n    def valid_opcodes(\n        cls,\n    ) -> List[Opcodes]:\n        \"\"\"\n        Returns the list of Opcodes that are valid to work on this fork.\n        \"\"\"\n        return [Opcodes.RETURNDATASIZE, Opcodes.STATICCALL] + super(Byzantium, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Byzantium.get_reward","title":"get_reward(block_number=0, timestamp=0) classmethod","text":"

    At Byzantium, the block reward is reduced to 3_000_000_000_000_000_000 wei

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef get_reward(cls, block_number: int = 0, timestamp: int = 0) -> int:\n    \"\"\"\n    At Byzantium, the block reward is reduced to\n    3_000_000_000_000_000_000 wei\n    \"\"\"\n    return 3_000_000_000_000_000_000\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Byzantium.precompiles","title":"precompiles(block_number=0, timestamp=0) classmethod","text":"

    At Byzantium, pre-compiles for bigint modular exponentiation, addition and scalar multiplication on elliptic curve alt_bn128, and optimal ate pairing check on elliptic curve alt_bn128 are introduced

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n    \"\"\"\n    At Byzantium, pre-compiles for bigint modular exponentiation, addition and scalar\n    multiplication on elliptic curve alt_bn128, and optimal ate pairing check on\n    elliptic curve alt_bn128 are introduced\n    \"\"\"\n    return list(Address(i) for i in range(5, 9)) + super(Byzantium, cls).precompiles(\n        block_number, timestamp\n    )\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Byzantium.call_opcodes","title":"call_opcodes(block_number=0, timestamp=0) classmethod","text":"

    At Byzantium, STATICCALL opcode was introduced.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef call_opcodes(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> List[Tuple[Opcodes, EVMCodeType]]:\n    \"\"\"\n    At Byzantium, STATICCALL opcode was introduced.\n    \"\"\"\n    return [(Opcodes.STATICCALL, EVMCodeType.LEGACY),] + super(\n        Byzantium, cls\n    ).call_opcodes(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Byzantium.valid_opcodes","title":"valid_opcodes() classmethod","text":"

    Returns the list of Opcodes that are valid to work on this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef valid_opcodes(\n    cls,\n) -> List[Opcodes]:\n    \"\"\"\n    Returns the list of Opcodes that are valid to work on this fork.\n    \"\"\"\n    return [Opcodes.RETURNDATASIZE, Opcodes.STATICCALL] + super(Byzantium, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun","title":"Cancun","text":"

    Bases: Shanghai

    Cancun fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class Cancun(Shanghai):\n    \"\"\"\n    Cancun fork\n    \"\"\"\n\n    @classmethod\n    def solc_min_version(cls) -> Version:\n        \"\"\"\n        Returns the minimum version of solc that supports this fork.\n        \"\"\"\n        return Version.parse(\"0.8.24\")\n\n    @classmethod\n    def header_excess_blob_gas_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        Excess blob gas is required starting from Cancun.\n        \"\"\"\n        return True\n\n    @classmethod\n    def header_blob_gas_used_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        Blob gas used is required starting from Cancun.\n        \"\"\"\n        return True\n\n    @classmethod\n    def header_beacon_root_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        Parent beacon block root is required starting from Cancun.\n        \"\"\"\n        return True\n\n    @classmethod\n    def blob_gas_per_blob(cls, block_number: int, timestamp: int) -> int:\n        \"\"\"\n        Blobs are enabled started from Cancun.\n        \"\"\"\n        return 2**17\n\n    @classmethod\n    def tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n        \"\"\"\n        At Cancun, blob type transactions are introduced\n        \"\"\"\n        return [3] + super(Cancun, cls).tx_types(block_number, timestamp)\n\n    @classmethod\n    def precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n        \"\"\"\n        At Cancun, pre-compile for kzg point evaluation is introduced\n        \"\"\"\n        return [Address(0xA)] + super(Cancun, cls).precompiles(block_number, timestamp)\n\n    @classmethod\n    def system_contracts(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n        \"\"\"\n        Cancun introduces the system contract for EIP-4788\n        \"\"\"\n        return [Address(0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02)]\n\n    @classmethod\n    def pre_allocation_blockchain(cls) -> Mapping:\n        \"\"\"\n        Cancun requires pre-allocation of the beacon root contract for EIP-4788 on blockchain\n        type tests\n        \"\"\"\n        new_allocation = {\n            0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02: {\n                \"nonce\": 1,\n                \"code\": \"0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5f\"\n                \"fd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f\"\n                \"5ffd5b62001fff42064281555f359062001fff015500\",\n            }\n        }\n        return new_allocation | super(Cancun, cls).pre_allocation_blockchain()\n\n    @classmethod\n    def engine_new_payload_version(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> Optional[int]:\n        \"\"\"\n        Starting at Cancun, new payload calls must use version 3\n        \"\"\"\n        return 3\n\n    @classmethod\n    def engine_new_payload_blob_hashes(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        Starting at Cancun, payloads must have blob hashes.\n        \"\"\"\n        return True\n\n    @classmethod\n    def engine_new_payload_beacon_root(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        Starting at Cancun, payloads must have a parent beacon block root.\n        \"\"\"\n        return True\n\n    @classmethod\n    def valid_opcodes(\n        cls,\n    ) -> List[Opcodes]:\n        \"\"\"\n        Returns the list of Opcodes that are valid to work on this fork.\n        \"\"\"\n        return [\n            Opcodes.BLOBHASH,\n            Opcodes.BLOBBASEFEE,\n            Opcodes.TLOAD,\n            Opcodes.TSTORE,\n            Opcodes.MCOPY,\n        ] + super(Cancun, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.solc_min_version","title":"solc_min_version() classmethod","text":"

    Returns the minimum version of solc that supports this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef solc_min_version(cls) -> Version:\n    \"\"\"\n    Returns the minimum version of solc that supports this fork.\n    \"\"\"\n    return Version.parse(\"0.8.24\")\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.header_excess_blob_gas_required","title":"header_excess_blob_gas_required(block_number=0, timestamp=0) classmethod","text":"

    Excess blob gas is required starting from Cancun.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_excess_blob_gas_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    Excess blob gas is required starting from Cancun.\n    \"\"\"\n    return True\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.header_blob_gas_used_required","title":"header_blob_gas_used_required(block_number=0, timestamp=0) classmethod","text":"

    Blob gas used is required starting from Cancun.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_blob_gas_used_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    Blob gas used is required starting from Cancun.\n    \"\"\"\n    return True\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.header_beacon_root_required","title":"header_beacon_root_required(block_number=0, timestamp=0) classmethod","text":"

    Parent beacon block root is required starting from Cancun.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_beacon_root_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    Parent beacon block root is required starting from Cancun.\n    \"\"\"\n    return True\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.blob_gas_per_blob","title":"blob_gas_per_blob(block_number, timestamp) classmethod","text":"

    Blobs are enabled started from Cancun.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef blob_gas_per_blob(cls, block_number: int, timestamp: int) -> int:\n    \"\"\"\n    Blobs are enabled started from Cancun.\n    \"\"\"\n    return 2**17\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.tx_types","title":"tx_types(block_number=0, timestamp=0) classmethod","text":"

    At Cancun, blob type transactions are introduced

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n    \"\"\"\n    At Cancun, blob type transactions are introduced\n    \"\"\"\n    return [3] + super(Cancun, cls).tx_types(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.precompiles","title":"precompiles(block_number=0, timestamp=0) classmethod","text":"

    At Cancun, pre-compile for kzg point evaluation is introduced

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n    \"\"\"\n    At Cancun, pre-compile for kzg point evaluation is introduced\n    \"\"\"\n    return [Address(0xA)] + super(Cancun, cls).precompiles(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.system_contracts","title":"system_contracts(block_number=0, timestamp=0) classmethod","text":"

    Cancun introduces the system contract for EIP-4788

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef system_contracts(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n    \"\"\"\n    Cancun introduces the system contract for EIP-4788\n    \"\"\"\n    return [Address(0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02)]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.pre_allocation_blockchain","title":"pre_allocation_blockchain() classmethod","text":"

    Cancun requires pre-allocation of the beacon root contract for EIP-4788 on blockchain type tests

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef pre_allocation_blockchain(cls) -> Mapping:\n    \"\"\"\n    Cancun requires pre-allocation of the beacon root contract for EIP-4788 on blockchain\n    type tests\n    \"\"\"\n    new_allocation = {\n        0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02: {\n            \"nonce\": 1,\n            \"code\": \"0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5f\"\n            \"fd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f\"\n            \"5ffd5b62001fff42064281555f359062001fff015500\",\n        }\n    }\n    return new_allocation | super(Cancun, cls).pre_allocation_blockchain()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.engine_new_payload_version","title":"engine_new_payload_version(block_number=0, timestamp=0) classmethod","text":"

    Starting at Cancun, new payload calls must use version 3

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_new_payload_version(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> Optional[int]:\n    \"\"\"\n    Starting at Cancun, new payload calls must use version 3\n    \"\"\"\n    return 3\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.engine_new_payload_blob_hashes","title":"engine_new_payload_blob_hashes(block_number=0, timestamp=0) classmethod","text":"

    Starting at Cancun, payloads must have blob hashes.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_new_payload_blob_hashes(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    Starting at Cancun, payloads must have blob hashes.\n    \"\"\"\n    return True\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.engine_new_payload_beacon_root","title":"engine_new_payload_beacon_root(block_number=0, timestamp=0) classmethod","text":"

    Starting at Cancun, payloads must have a parent beacon block root.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_new_payload_beacon_root(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    Starting at Cancun, payloads must have a parent beacon block root.\n    \"\"\"\n    return True\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.valid_opcodes","title":"valid_opcodes() classmethod","text":"

    Returns the list of Opcodes that are valid to work on this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef valid_opcodes(\n    cls,\n) -> List[Opcodes]:\n    \"\"\"\n    Returns the list of Opcodes that are valid to work on this fork.\n    \"\"\"\n    return [\n        Opcodes.BLOBHASH,\n        Opcodes.BLOBBASEFEE,\n        Opcodes.TLOAD,\n        Opcodes.TSTORE,\n        Opcodes.MCOPY,\n    ] + super(Cancun, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Constantinople","title":"Constantinople","text":"

    Bases: Byzantium

    Constantinople fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class Constantinople(Byzantium):\n    \"\"\"\n    Constantinople fork\n    \"\"\"\n\n    @classmethod\n    def get_reward(cls, block_number: int = 0, timestamp: int = 0) -> int:\n        \"\"\"\n        At Constantinople, the block reward is reduced to\n        2_000_000_000_000_000_000 wei\n        \"\"\"\n        return 2_000_000_000_000_000_000\n\n    @classmethod\n    def create_opcodes(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> List[Tuple[Opcodes, EVMCodeType]]:\n        \"\"\"\n        At Constantinople, `CREATE2` opcode is added.\n        \"\"\"\n        return [(Opcodes.CREATE2, EVMCodeType.LEGACY),] + super(\n            Constantinople, cls\n        ).create_opcodes(block_number, timestamp)\n\n    @classmethod\n    def valid_opcodes(\n        cls,\n    ) -> List[Opcodes]:\n        \"\"\"\n        Returns the list of Opcodes that are valid to work on this fork.\n        \"\"\"\n        return [\n            Opcodes.SHL,\n            Opcodes.SHR,\n            Opcodes.SAR,\n            Opcodes.EXTCODEHASH,\n            Opcodes.CREATE2,\n        ] + super(Constantinople, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Constantinople.get_reward","title":"get_reward(block_number=0, timestamp=0) classmethod","text":"

    At Constantinople, the block reward is reduced to 2_000_000_000_000_000_000 wei

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef get_reward(cls, block_number: int = 0, timestamp: int = 0) -> int:\n    \"\"\"\n    At Constantinople, the block reward is reduced to\n    2_000_000_000_000_000_000 wei\n    \"\"\"\n    return 2_000_000_000_000_000_000\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Constantinople.create_opcodes","title":"create_opcodes(block_number=0, timestamp=0) classmethod","text":"

    At Constantinople, CREATE2 opcode is added.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef create_opcodes(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> List[Tuple[Opcodes, EVMCodeType]]:\n    \"\"\"\n    At Constantinople, `CREATE2` opcode is added.\n    \"\"\"\n    return [(Opcodes.CREATE2, EVMCodeType.LEGACY),] + super(\n        Constantinople, cls\n    ).create_opcodes(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Constantinople.valid_opcodes","title":"valid_opcodes() classmethod","text":"

    Returns the list of Opcodes that are valid to work on this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef valid_opcodes(\n    cls,\n) -> List[Opcodes]:\n    \"\"\"\n    Returns the list of Opcodes that are valid to work on this fork.\n    \"\"\"\n    return [\n        Opcodes.SHL,\n        Opcodes.SHR,\n        Opcodes.SAR,\n        Opcodes.EXTCODEHASH,\n        Opcodes.CREATE2,\n    ] + super(Constantinople, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.ConstantinopleFix","title":"ConstantinopleFix","text":"

    Bases: Constantinople

    Constantinople Fix fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class ConstantinopleFix(Constantinople, solc_name=\"constantinople\"):\n    \"\"\"\n    Constantinople Fix fork\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier","title":"Frontier","text":"

    Bases: BaseFork

    Frontier fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class Frontier(BaseFork, solc_name=\"homestead\"):\n    \"\"\"\n    Frontier fork\n    \"\"\"\n\n    @classmethod\n    def transition_tool_name(cls, block_number: int = 0, timestamp: int = 0) -> str:\n        \"\"\"\n        Returns fork name as it's meant to be passed to the transition tool for execution.\n        \"\"\"\n        if cls._transition_tool_name is not None:\n            return cls._transition_tool_name\n        return cls.name()\n\n    @classmethod\n    def solc_name(cls) -> str:\n        \"\"\"\n        Returns fork name as it's meant to be passed to the solc compiler.\n        \"\"\"\n        if cls._solc_name is not None:\n            return cls._solc_name\n        return cls.name().lower()\n\n    @classmethod\n    def solc_min_version(cls) -> Version:\n        \"\"\"\n        Returns the minimum version of solc that supports this fork.\n        \"\"\"\n        return Version.parse(\"0.8.20\")\n\n    @classmethod\n    def header_base_fee_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        At genesis, header must not contain base fee\n        \"\"\"\n        return False\n\n    @classmethod\n    def header_prev_randao_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        At genesis, header must not contain Prev Randao value\n        \"\"\"\n        return False\n\n    @classmethod\n    def header_zero_difficulty_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        At genesis, header must not have difficulty zero\n        \"\"\"\n        return False\n\n    @classmethod\n    def header_withdrawals_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        At genesis, header must not contain withdrawals\n        \"\"\"\n        return False\n\n    @classmethod\n    def header_excess_blob_gas_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        At genesis, header must not contain excess blob gas\n        \"\"\"\n        return False\n\n    @classmethod\n    def header_blob_gas_used_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        At genesis, header must not contain blob gas used\n        \"\"\"\n        return False\n\n    @classmethod\n    def blob_gas_per_blob(cls, block_number: int, timestamp: int) -> int:\n        \"\"\"\n        Returns the amount of blob gas used per blob for a given fork.\n        \"\"\"\n        return 0\n\n    @classmethod\n    def header_requests_required(cls, block_number: int, timestamp: int) -> bool:\n        \"\"\"\n        At genesis, header must not contain beacon chain requests.\n        \"\"\"\n        return False\n\n    @classmethod\n    def engine_new_payload_version(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> Optional[int]:\n        \"\"\"\n        At genesis, payloads cannot be sent through the engine API\n        \"\"\"\n        return None\n\n    @classmethod\n    def header_beacon_root_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        At genesis, header must not contain parent beacon block root\n        \"\"\"\n        return False\n\n    @classmethod\n    def engine_new_payload_blob_hashes(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        At genesis, payloads do not have blob hashes.\n        \"\"\"\n        return False\n\n    @classmethod\n    def engine_new_payload_beacon_root(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        At genesis, payloads do not have a parent beacon block root.\n        \"\"\"\n        return False\n\n    @classmethod\n    def engine_forkchoice_updated_version(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> Optional[int]:\n        \"\"\"\n        At genesis, forkchoice updates cannot be sent through the engine API.\n        \"\"\"\n        return cls.engine_new_payload_version(block_number, timestamp)\n\n    @classmethod\n    def get_reward(cls, block_number: int = 0, timestamp: int = 0) -> int:\n        \"\"\"\n        At Genesis the expected reward amount in wei is\n        5_000_000_000_000_000_000\n        \"\"\"\n        return 5_000_000_000_000_000_000\n\n    @classmethod\n    def tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n        \"\"\"\n        At Genesis, only legacy transactions are allowed\n        \"\"\"\n        return [0]\n\n    @classmethod\n    def contract_creating_tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n        \"\"\"\n        At Genesis, only legacy transactions are allowed\n        \"\"\"\n        return [0]\n\n    @classmethod\n    def precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n        \"\"\"\n        At Genesis, no pre-compiles are present\n        \"\"\"\n        return []\n\n    @classmethod\n    def system_contracts(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n        \"\"\"\n        At Genesis, no system-contracts are present\n        \"\"\"\n        return []\n\n    @classmethod\n    def evm_code_types(cls, block_number: int = 0, timestamp: int = 0) -> List[EVMCodeType]:\n        \"\"\"\n        At Genesis, only legacy EVM code is supported.\n        \"\"\"\n        return [EVMCodeType.LEGACY]\n\n    @classmethod\n    def call_opcodes(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> List[Tuple[Opcodes, EVMCodeType]]:\n        \"\"\"\n        Returns the list of call opcodes supported by the fork.\n        \"\"\"\n        return [\n            (Opcodes.CALL, EVMCodeType.LEGACY),\n            (Opcodes.CALLCODE, EVMCodeType.LEGACY),\n        ]\n\n    @classmethod\n    def valid_opcodes(\n        cls,\n    ) -> List[Opcodes]:\n        \"\"\"\n        Returns the list of Opcodes that are valid to work on this fork.\n        \"\"\"\n        return [\n            Opcodes.STOP,\n            Opcodes.ADD,\n            Opcodes.MUL,\n            Opcodes.SUB,\n            Opcodes.DIV,\n            Opcodes.SDIV,\n            Opcodes.MOD,\n            Opcodes.SMOD,\n            Opcodes.ADDMOD,\n            Opcodes.MULMOD,\n            Opcodes.EXP,\n            Opcodes.SIGNEXTEND,\n            Opcodes.LT,\n            Opcodes.GT,\n            Opcodes.SLT,\n            Opcodes.SGT,\n            Opcodes.EQ,\n            Opcodes.ISZERO,\n            Opcodes.AND,\n            Opcodes.OR,\n            Opcodes.XOR,\n            Opcodes.NOT,\n            Opcodes.BYTE,\n            Opcodes.SHA3,\n            Opcodes.ADDRESS,\n            Opcodes.BALANCE,\n            Opcodes.ORIGIN,\n            Opcodes.CALLER,\n            Opcodes.CALLVALUE,\n            Opcodes.CALLDATALOAD,\n            Opcodes.CALLDATASIZE,\n            Opcodes.CALLDATACOPY,\n            Opcodes.CODESIZE,\n            Opcodes.CODECOPY,\n            Opcodes.GASPRICE,\n            Opcodes.EXTCODESIZE,\n            Opcodes.EXTCODECOPY,\n            Opcodes.BLOCKHASH,\n            Opcodes.COINBASE,\n            Opcodes.TIMESTAMP,\n            Opcodes.NUMBER,\n            Opcodes.PREVRANDAO,\n            Opcodes.GASLIMIT,\n            Opcodes.POP,\n            Opcodes.MLOAD,\n            Opcodes.MSTORE,\n            Opcodes.MSTORE8,\n            Opcodes.SLOAD,\n            Opcodes.SSTORE,\n            Opcodes.PC,\n            Opcodes.MSIZE,\n            Opcodes.GAS,\n            Opcodes.JUMP,\n            Opcodes.JUMPI,\n            Opcodes.JUMPDEST,\n            Opcodes.PUSH1,\n            Opcodes.PUSH2,\n            Opcodes.PUSH3,\n            Opcodes.PUSH4,\n            Opcodes.PUSH5,\n            Opcodes.PUSH6,\n            Opcodes.PUSH7,\n            Opcodes.PUSH8,\n            Opcodes.PUSH9,\n            Opcodes.PUSH10,\n            Opcodes.PUSH11,\n            Opcodes.PUSH12,\n            Opcodes.PUSH13,\n            Opcodes.PUSH14,\n            Opcodes.PUSH15,\n            Opcodes.PUSH16,\n            Opcodes.PUSH17,\n            Opcodes.PUSH18,\n            Opcodes.PUSH19,\n            Opcodes.PUSH20,\n            Opcodes.PUSH21,\n            Opcodes.PUSH22,\n            Opcodes.PUSH23,\n            Opcodes.PUSH24,\n            Opcodes.PUSH25,\n            Opcodes.PUSH26,\n            Opcodes.PUSH27,\n            Opcodes.PUSH28,\n            Opcodes.PUSH29,\n            Opcodes.PUSH30,\n            Opcodes.PUSH31,\n            Opcodes.PUSH32,\n            Opcodes.DUP1,\n            Opcodes.DUP2,\n            Opcodes.DUP3,\n            Opcodes.DUP4,\n            Opcodes.DUP5,\n            Opcodes.DUP6,\n            Opcodes.DUP7,\n            Opcodes.DUP8,\n            Opcodes.DUP9,\n            Opcodes.DUP10,\n            Opcodes.DUP11,\n            Opcodes.DUP12,\n            Opcodes.DUP13,\n            Opcodes.DUP14,\n            Opcodes.DUP15,\n            Opcodes.DUP16,\n            Opcodes.SWAP1,\n            Opcodes.SWAP2,\n            Opcodes.SWAP3,\n            Opcodes.SWAP4,\n            Opcodes.SWAP5,\n            Opcodes.SWAP6,\n            Opcodes.SWAP7,\n            Opcodes.SWAP8,\n            Opcodes.SWAP9,\n            Opcodes.SWAP10,\n            Opcodes.SWAP11,\n            Opcodes.SWAP12,\n            Opcodes.SWAP13,\n            Opcodes.SWAP14,\n            Opcodes.SWAP15,\n            Opcodes.SWAP16,\n            Opcodes.LOG0,\n            Opcodes.LOG1,\n            Opcodes.LOG2,\n            Opcodes.LOG3,\n            Opcodes.LOG4,\n            Opcodes.CREATE,\n            Opcodes.CALL,\n            Opcodes.CALLCODE,\n            Opcodes.RETURN,\n            Opcodes.SELFDESTRUCT,\n        ]\n\n    @classmethod\n    def create_opcodes(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> List[Tuple[Opcodes, EVMCodeType]]:\n        \"\"\"\n        At Genesis, only `CREATE` opcode is supported.\n        \"\"\"\n        return [\n            (Opcodes.CREATE, EVMCodeType.LEGACY),\n        ]\n\n    @classmethod\n    def pre_allocation(cls) -> Mapping:\n        \"\"\"\n        Returns whether the fork expects pre-allocation of accounts\n\n        Frontier does not require pre-allocated accounts\n        \"\"\"\n        return {}\n\n    @classmethod\n    def pre_allocation_blockchain(cls) -> Mapping:\n        \"\"\"\n        Returns whether the fork expects pre-allocation of accounts\n\n        Frontier does not require pre-allocated accounts\n        \"\"\"\n        return {}\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.transition_tool_name","title":"transition_tool_name(block_number=0, timestamp=0) classmethod","text":"

    Returns fork name as it's meant to be passed to the transition tool for execution.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef transition_tool_name(cls, block_number: int = 0, timestamp: int = 0) -> str:\n    \"\"\"\n    Returns fork name as it's meant to be passed to the transition tool for execution.\n    \"\"\"\n    if cls._transition_tool_name is not None:\n        return cls._transition_tool_name\n    return cls.name()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.solc_name","title":"solc_name() classmethod","text":"

    Returns fork name as it's meant to be passed to the solc compiler.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef solc_name(cls) -> str:\n    \"\"\"\n    Returns fork name as it's meant to be passed to the solc compiler.\n    \"\"\"\n    if cls._solc_name is not None:\n        return cls._solc_name\n    return cls.name().lower()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.solc_min_version","title":"solc_min_version() classmethod","text":"

    Returns the minimum version of solc that supports this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef solc_min_version(cls) -> Version:\n    \"\"\"\n    Returns the minimum version of solc that supports this fork.\n    \"\"\"\n    return Version.parse(\"0.8.20\")\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.header_base_fee_required","title":"header_base_fee_required(block_number=0, timestamp=0) classmethod","text":"

    At genesis, header must not contain base fee

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_base_fee_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    At genesis, header must not contain base fee\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.header_prev_randao_required","title":"header_prev_randao_required(block_number=0, timestamp=0) classmethod","text":"

    At genesis, header must not contain Prev Randao value

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_prev_randao_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    At genesis, header must not contain Prev Randao value\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.header_zero_difficulty_required","title":"header_zero_difficulty_required(block_number=0, timestamp=0) classmethod","text":"

    At genesis, header must not have difficulty zero

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_zero_difficulty_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    At genesis, header must not have difficulty zero\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.header_withdrawals_required","title":"header_withdrawals_required(block_number=0, timestamp=0) classmethod","text":"

    At genesis, header must not contain withdrawals

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_withdrawals_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    At genesis, header must not contain withdrawals\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.header_excess_blob_gas_required","title":"header_excess_blob_gas_required(block_number=0, timestamp=0) classmethod","text":"

    At genesis, header must not contain excess blob gas

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_excess_blob_gas_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    At genesis, header must not contain excess blob gas\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.header_blob_gas_used_required","title":"header_blob_gas_used_required(block_number=0, timestamp=0) classmethod","text":"

    At genesis, header must not contain blob gas used

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_blob_gas_used_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    At genesis, header must not contain blob gas used\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.blob_gas_per_blob","title":"blob_gas_per_blob(block_number, timestamp) classmethod","text":"

    Returns the amount of blob gas used per blob for a given fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef blob_gas_per_blob(cls, block_number: int, timestamp: int) -> int:\n    \"\"\"\n    Returns the amount of blob gas used per blob for a given fork.\n    \"\"\"\n    return 0\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.header_requests_required","title":"header_requests_required(block_number, timestamp) classmethod","text":"

    At genesis, header must not contain beacon chain requests.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_requests_required(cls, block_number: int, timestamp: int) -> bool:\n    \"\"\"\n    At genesis, header must not contain beacon chain requests.\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.engine_new_payload_version","title":"engine_new_payload_version(block_number=0, timestamp=0) classmethod","text":"

    At genesis, payloads cannot be sent through the engine API

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_new_payload_version(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> Optional[int]:\n    \"\"\"\n    At genesis, payloads cannot be sent through the engine API\n    \"\"\"\n    return None\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.header_beacon_root_required","title":"header_beacon_root_required(block_number=0, timestamp=0) classmethod","text":"

    At genesis, header must not contain parent beacon block root

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_beacon_root_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    At genesis, header must not contain parent beacon block root\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.engine_new_payload_blob_hashes","title":"engine_new_payload_blob_hashes(block_number=0, timestamp=0) classmethod","text":"

    At genesis, payloads do not have blob hashes.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_new_payload_blob_hashes(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    At genesis, payloads do not have blob hashes.\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.engine_new_payload_beacon_root","title":"engine_new_payload_beacon_root(block_number=0, timestamp=0) classmethod","text":"

    At genesis, payloads do not have a parent beacon block root.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_new_payload_beacon_root(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    At genesis, payloads do not have a parent beacon block root.\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.engine_forkchoice_updated_version","title":"engine_forkchoice_updated_version(block_number=0, timestamp=0) classmethod","text":"

    At genesis, forkchoice updates cannot be sent through the engine API.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_forkchoice_updated_version(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> Optional[int]:\n    \"\"\"\n    At genesis, forkchoice updates cannot be sent through the engine API.\n    \"\"\"\n    return cls.engine_new_payload_version(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.get_reward","title":"get_reward(block_number=0, timestamp=0) classmethod","text":"

    At Genesis the expected reward amount in wei is 5_000_000_000_000_000_000

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef get_reward(cls, block_number: int = 0, timestamp: int = 0) -> int:\n    \"\"\"\n    At Genesis the expected reward amount in wei is\n    5_000_000_000_000_000_000\n    \"\"\"\n    return 5_000_000_000_000_000_000\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.tx_types","title":"tx_types(block_number=0, timestamp=0) classmethod","text":"

    At Genesis, only legacy transactions are allowed

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n    \"\"\"\n    At Genesis, only legacy transactions are allowed\n    \"\"\"\n    return [0]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.contract_creating_tx_types","title":"contract_creating_tx_types(block_number=0, timestamp=0) classmethod","text":"

    At Genesis, only legacy transactions are allowed

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef contract_creating_tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n    \"\"\"\n    At Genesis, only legacy transactions are allowed\n    \"\"\"\n    return [0]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.precompiles","title":"precompiles(block_number=0, timestamp=0) classmethod","text":"

    At Genesis, no pre-compiles are present

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n    \"\"\"\n    At Genesis, no pre-compiles are present\n    \"\"\"\n    return []\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.system_contracts","title":"system_contracts(block_number=0, timestamp=0) classmethod","text":"

    At Genesis, no system-contracts are present

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef system_contracts(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n    \"\"\"\n    At Genesis, no system-contracts are present\n    \"\"\"\n    return []\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.evm_code_types","title":"evm_code_types(block_number=0, timestamp=0) classmethod","text":"

    At Genesis, only legacy EVM code is supported.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef evm_code_types(cls, block_number: int = 0, timestamp: int = 0) -> List[EVMCodeType]:\n    \"\"\"\n    At Genesis, only legacy EVM code is supported.\n    \"\"\"\n    return [EVMCodeType.LEGACY]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.call_opcodes","title":"call_opcodes(block_number=0, timestamp=0) classmethod","text":"

    Returns the list of call opcodes supported by the fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef call_opcodes(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> List[Tuple[Opcodes, EVMCodeType]]:\n    \"\"\"\n    Returns the list of call opcodes supported by the fork.\n    \"\"\"\n    return [\n        (Opcodes.CALL, EVMCodeType.LEGACY),\n        (Opcodes.CALLCODE, EVMCodeType.LEGACY),\n    ]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.valid_opcodes","title":"valid_opcodes() classmethod","text":"

    Returns the list of Opcodes that are valid to work on this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef valid_opcodes(\n    cls,\n) -> List[Opcodes]:\n    \"\"\"\n    Returns the list of Opcodes that are valid to work on this fork.\n    \"\"\"\n    return [\n        Opcodes.STOP,\n        Opcodes.ADD,\n        Opcodes.MUL,\n        Opcodes.SUB,\n        Opcodes.DIV,\n        Opcodes.SDIV,\n        Opcodes.MOD,\n        Opcodes.SMOD,\n        Opcodes.ADDMOD,\n        Opcodes.MULMOD,\n        Opcodes.EXP,\n        Opcodes.SIGNEXTEND,\n        Opcodes.LT,\n        Opcodes.GT,\n        Opcodes.SLT,\n        Opcodes.SGT,\n        Opcodes.EQ,\n        Opcodes.ISZERO,\n        Opcodes.AND,\n        Opcodes.OR,\n        Opcodes.XOR,\n        Opcodes.NOT,\n        Opcodes.BYTE,\n        Opcodes.SHA3,\n        Opcodes.ADDRESS,\n        Opcodes.BALANCE,\n        Opcodes.ORIGIN,\n        Opcodes.CALLER,\n        Opcodes.CALLVALUE,\n        Opcodes.CALLDATALOAD,\n        Opcodes.CALLDATASIZE,\n        Opcodes.CALLDATACOPY,\n        Opcodes.CODESIZE,\n        Opcodes.CODECOPY,\n        Opcodes.GASPRICE,\n        Opcodes.EXTCODESIZE,\n        Opcodes.EXTCODECOPY,\n        Opcodes.BLOCKHASH,\n        Opcodes.COINBASE,\n        Opcodes.TIMESTAMP,\n        Opcodes.NUMBER,\n        Opcodes.PREVRANDAO,\n        Opcodes.GASLIMIT,\n        Opcodes.POP,\n        Opcodes.MLOAD,\n        Opcodes.MSTORE,\n        Opcodes.MSTORE8,\n        Opcodes.SLOAD,\n        Opcodes.SSTORE,\n        Opcodes.PC,\n        Opcodes.MSIZE,\n        Opcodes.GAS,\n        Opcodes.JUMP,\n        Opcodes.JUMPI,\n        Opcodes.JUMPDEST,\n        Opcodes.PUSH1,\n        Opcodes.PUSH2,\n        Opcodes.PUSH3,\n        Opcodes.PUSH4,\n        Opcodes.PUSH5,\n        Opcodes.PUSH6,\n        Opcodes.PUSH7,\n        Opcodes.PUSH8,\n        Opcodes.PUSH9,\n        Opcodes.PUSH10,\n        Opcodes.PUSH11,\n        Opcodes.PUSH12,\n        Opcodes.PUSH13,\n        Opcodes.PUSH14,\n        Opcodes.PUSH15,\n        Opcodes.PUSH16,\n        Opcodes.PUSH17,\n        Opcodes.PUSH18,\n        Opcodes.PUSH19,\n        Opcodes.PUSH20,\n        Opcodes.PUSH21,\n        Opcodes.PUSH22,\n        Opcodes.PUSH23,\n        Opcodes.PUSH24,\n        Opcodes.PUSH25,\n        Opcodes.PUSH26,\n        Opcodes.PUSH27,\n        Opcodes.PUSH28,\n        Opcodes.PUSH29,\n        Opcodes.PUSH30,\n        Opcodes.PUSH31,\n        Opcodes.PUSH32,\n        Opcodes.DUP1,\n        Opcodes.DUP2,\n        Opcodes.DUP3,\n        Opcodes.DUP4,\n        Opcodes.DUP5,\n        Opcodes.DUP6,\n        Opcodes.DUP7,\n        Opcodes.DUP8,\n        Opcodes.DUP9,\n        Opcodes.DUP10,\n        Opcodes.DUP11,\n        Opcodes.DUP12,\n        Opcodes.DUP13,\n        Opcodes.DUP14,\n        Opcodes.DUP15,\n        Opcodes.DUP16,\n        Opcodes.SWAP1,\n        Opcodes.SWAP2,\n        Opcodes.SWAP3,\n        Opcodes.SWAP4,\n        Opcodes.SWAP5,\n        Opcodes.SWAP6,\n        Opcodes.SWAP7,\n        Opcodes.SWAP8,\n        Opcodes.SWAP9,\n        Opcodes.SWAP10,\n        Opcodes.SWAP11,\n        Opcodes.SWAP12,\n        Opcodes.SWAP13,\n        Opcodes.SWAP14,\n        Opcodes.SWAP15,\n        Opcodes.SWAP16,\n        Opcodes.LOG0,\n        Opcodes.LOG1,\n        Opcodes.LOG2,\n        Opcodes.LOG3,\n        Opcodes.LOG4,\n        Opcodes.CREATE,\n        Opcodes.CALL,\n        Opcodes.CALLCODE,\n        Opcodes.RETURN,\n        Opcodes.SELFDESTRUCT,\n    ]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.create_opcodes","title":"create_opcodes(block_number=0, timestamp=0) classmethod","text":"

    At Genesis, only CREATE opcode is supported.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef create_opcodes(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> List[Tuple[Opcodes, EVMCodeType]]:\n    \"\"\"\n    At Genesis, only `CREATE` opcode is supported.\n    \"\"\"\n    return [\n        (Opcodes.CREATE, EVMCodeType.LEGACY),\n    ]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.pre_allocation","title":"pre_allocation() classmethod","text":"

    Returns whether the fork expects pre-allocation of accounts

    Frontier does not require pre-allocated accounts

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef pre_allocation(cls) -> Mapping:\n    \"\"\"\n    Returns whether the fork expects pre-allocation of accounts\n\n    Frontier does not require pre-allocated accounts\n    \"\"\"\n    return {}\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.pre_allocation_blockchain","title":"pre_allocation_blockchain() classmethod","text":"

    Returns whether the fork expects pre-allocation of accounts

    Frontier does not require pre-allocated accounts

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef pre_allocation_blockchain(cls) -> Mapping:\n    \"\"\"\n    Returns whether the fork expects pre-allocation of accounts\n\n    Frontier does not require pre-allocated accounts\n    \"\"\"\n    return {}\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.GrayGlacier","title":"GrayGlacier","text":"

    Bases: ArrowGlacier

    Gray Glacier fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class GrayGlacier(ArrowGlacier, solc_name=\"london\", ignore=True):\n    \"\"\"\n    Gray Glacier fork\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Homestead","title":"Homestead","text":"

    Bases: Frontier

    Homestead fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class Homestead(Frontier):\n    \"\"\"\n    Homestead fork\n    \"\"\"\n\n    @classmethod\n    def precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n        \"\"\"\n        At Homestead, EC-recover, SHA256, RIPEMD160, and Identity pre-compiles are introduced\n        \"\"\"\n        return list(Address(i) for i in range(1, 5)) + super(Homestead, cls).precompiles(\n            block_number, timestamp\n        )\n\n    @classmethod\n    def call_opcodes(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> List[Tuple[Opcodes, EVMCodeType]]:\n        \"\"\"\n        At Homestead, DELEGATECALL opcode was introduced.\n        \"\"\"\n        return [(Opcodes.DELEGATECALL, EVMCodeType.LEGACY),] + super(\n            Homestead, cls\n        ).call_opcodes(block_number, timestamp)\n\n    @classmethod\n    def valid_opcodes(\n        cls,\n    ) -> List[Opcodes]:\n        \"\"\"\n        Returns the list of Opcodes that are valid to work on this fork.\n        \"\"\"\n        return [Opcodes.DELEGATECALL] + super(Homestead, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Homestead.precompiles","title":"precompiles(block_number=0, timestamp=0) classmethod","text":"

    At Homestead, EC-recover, SHA256, RIPEMD160, and Identity pre-compiles are introduced

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n    \"\"\"\n    At Homestead, EC-recover, SHA256, RIPEMD160, and Identity pre-compiles are introduced\n    \"\"\"\n    return list(Address(i) for i in range(1, 5)) + super(Homestead, cls).precompiles(\n        block_number, timestamp\n    )\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Homestead.call_opcodes","title":"call_opcodes(block_number=0, timestamp=0) classmethod","text":"

    At Homestead, DELEGATECALL opcode was introduced.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef call_opcodes(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> List[Tuple[Opcodes, EVMCodeType]]:\n    \"\"\"\n    At Homestead, DELEGATECALL opcode was introduced.\n    \"\"\"\n    return [(Opcodes.DELEGATECALL, EVMCodeType.LEGACY),] + super(\n        Homestead, cls\n    ).call_opcodes(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Homestead.valid_opcodes","title":"valid_opcodes() classmethod","text":"

    Returns the list of Opcodes that are valid to work on this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef valid_opcodes(\n    cls,\n) -> List[Opcodes]:\n    \"\"\"\n    Returns the list of Opcodes that are valid to work on this fork.\n    \"\"\"\n    return [Opcodes.DELEGATECALL] + super(Homestead, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Istanbul","title":"Istanbul","text":"

    Bases: ConstantinopleFix

    Istanbul fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class Istanbul(ConstantinopleFix):\n    \"\"\"\n    Istanbul fork\n    \"\"\"\n\n    @classmethod\n    def precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n        \"\"\"\n        At Istanbul, pre-compile for blake2 compression is introduced\n        \"\"\"\n        return [Address(9)] + super(Istanbul, cls).precompiles(block_number, timestamp)\n\n    @classmethod\n    def valid_opcodes(\n        cls,\n    ) -> List[Opcodes]:\n        \"\"\"\n        Returns the list of Opcodes that are valid to work on this fork.\n        \"\"\"\n        return [Opcodes.CHAINID, Opcodes.SELFBALANCE] + super(Istanbul, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Istanbul.precompiles","title":"precompiles(block_number=0, timestamp=0) classmethod","text":"

    At Istanbul, pre-compile for blake2 compression is introduced

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n    \"\"\"\n    At Istanbul, pre-compile for blake2 compression is introduced\n    \"\"\"\n    return [Address(9)] + super(Istanbul, cls).precompiles(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Istanbul.valid_opcodes","title":"valid_opcodes() classmethod","text":"

    Returns the list of Opcodes that are valid to work on this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef valid_opcodes(\n    cls,\n) -> List[Opcodes]:\n    \"\"\"\n    Returns the list of Opcodes that are valid to work on this fork.\n    \"\"\"\n    return [Opcodes.CHAINID, Opcodes.SELFBALANCE] + super(Istanbul, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.London","title":"London","text":"

    Bases: Berlin

    London fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class London(Berlin):\n    \"\"\"\n    London fork\n    \"\"\"\n\n    @classmethod\n    def header_base_fee_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        Base Fee is required starting from London.\n        \"\"\"\n        return True\n\n    @classmethod\n    def tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n        \"\"\"\n        At London, dynamic fee transactions are introduced\n        \"\"\"\n        return [2] + super(London, cls).tx_types(block_number, timestamp)\n\n    @classmethod\n    def contract_creating_tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n        \"\"\"\n        At London, dynamic fee transactions are introduced\n        \"\"\"\n        return [2] + super(London, cls).contract_creating_tx_types(block_number, timestamp)\n\n    @classmethod\n    def valid_opcodes(\n        cls,\n    ) -> List[Opcodes]:\n        \"\"\"\n        Returns the list of Opcodes that are valid to work on this fork.\n        \"\"\"\n        return [Opcodes.BASEFEE] + super(London, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.London.header_base_fee_required","title":"header_base_fee_required(block_number=0, timestamp=0) classmethod","text":"

    Base Fee is required starting from London.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_base_fee_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    Base Fee is required starting from London.\n    \"\"\"\n    return True\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.London.tx_types","title":"tx_types(block_number=0, timestamp=0) classmethod","text":"

    At London, dynamic fee transactions are introduced

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n    \"\"\"\n    At London, dynamic fee transactions are introduced\n    \"\"\"\n    return [2] + super(London, cls).tx_types(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.London.contract_creating_tx_types","title":"contract_creating_tx_types(block_number=0, timestamp=0) classmethod","text":"

    At London, dynamic fee transactions are introduced

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef contract_creating_tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n    \"\"\"\n    At London, dynamic fee transactions are introduced\n    \"\"\"\n    return [2] + super(London, cls).contract_creating_tx_types(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.London.valid_opcodes","title":"valid_opcodes() classmethod","text":"

    Returns the list of Opcodes that are valid to work on this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef valid_opcodes(\n    cls,\n) -> List[Opcodes]:\n    \"\"\"\n    Returns the list of Opcodes that are valid to work on this fork.\n    \"\"\"\n    return [Opcodes.BASEFEE] + super(London, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.MuirGlacier","title":"MuirGlacier","text":"

    Bases: Istanbul

    Muir Glacier fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class MuirGlacier(Istanbul, solc_name=\"istanbul\", ignore=True):\n    \"\"\"\n    Muir Glacier fork\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Paris","title":"Paris","text":"

    Bases: London

    Paris (Merge) fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class Paris(\n    London,\n    transition_tool_name=\"Merge\",\n    blockchain_test_network_name=\"Paris\",\n):\n    \"\"\"\n    Paris (Merge) fork\n    \"\"\"\n\n    @classmethod\n    def header_prev_randao_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        Prev Randao is required starting from Paris.\n        \"\"\"\n        return True\n\n    @classmethod\n    def header_zero_difficulty_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        Zero difficulty is required starting from Paris.\n        \"\"\"\n        return True\n\n    @classmethod\n    def get_reward(cls, block_number: int = 0, timestamp: int = 0) -> int:\n        \"\"\"\n        Paris updates the reward to 0.\n        \"\"\"\n        return 0\n\n    @classmethod\n    def engine_new_payload_version(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> Optional[int]:\n        \"\"\"\n        Starting at Paris, payloads can be sent through the engine API\n        \"\"\"\n        return 1\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Paris.header_prev_randao_required","title":"header_prev_randao_required(block_number=0, timestamp=0) classmethod","text":"

    Prev Randao is required starting from Paris.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_prev_randao_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    Prev Randao is required starting from Paris.\n    \"\"\"\n    return True\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Paris.header_zero_difficulty_required","title":"header_zero_difficulty_required(block_number=0, timestamp=0) classmethod","text":"

    Zero difficulty is required starting from Paris.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_zero_difficulty_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    Zero difficulty is required starting from Paris.\n    \"\"\"\n    return True\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Paris.get_reward","title":"get_reward(block_number=0, timestamp=0) classmethod","text":"

    Paris updates the reward to 0.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef get_reward(cls, block_number: int = 0, timestamp: int = 0) -> int:\n    \"\"\"\n    Paris updates the reward to 0.\n    \"\"\"\n    return 0\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Paris.engine_new_payload_version","title":"engine_new_payload_version(block_number=0, timestamp=0) classmethod","text":"

    Starting at Paris, payloads can be sent through the engine API

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_new_payload_version(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> Optional[int]:\n    \"\"\"\n    Starting at Paris, payloads can be sent through the engine API\n    \"\"\"\n    return 1\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Prague","title":"Prague","text":"

    Bases: Cancun

    Prague fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class Prague(Cancun):\n    \"\"\"\n    Prague fork\n    \"\"\"\n\n    @classmethod\n    def is_deployed(cls) -> bool:\n        \"\"\"\n        Flags that the fork has not been deployed to mainnet; it is under active\n        development.\n        \"\"\"\n        return False\n\n    @classmethod\n    def solc_min_version(cls) -> Version:\n        \"\"\"\n        Returns the minimum version of solc that supports this fork.\n        \"\"\"\n        return Version.parse(\"1.0.0\")  # set a high version; currently unknown\n\n    @classmethod\n    def precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n        \"\"\"\n        At Prague, pre-compile for BLS operations are added:\n\n        G1ADD = 0x0B\n        G1MUL = 0x0C\n        G1MSM = 0x0D\n        G2ADD = 0x0E\n        G2MUL = 0x0F\n        G2MSM = 0x10\n        PAIRING = 0x11\n        MAP_FP_TO_G1 = 0x12\n        MAP_FP2_TO_G2 = 0x13\n        \"\"\"\n        return list(Address(i) for i in range(0xB, 0x13 + 1)) + super(Prague, cls).precompiles(\n            block_number, timestamp\n        )\n\n    @classmethod\n    def system_contracts(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n        \"\"\"\n        Prague introduces the system contracts for EIP-6110, EIP-7002, EIP-7251 and EIP-2935\n        \"\"\"\n        return [\n            Address(0x00000000219AB540356CBB839CBE05303D7705FA),\n            Address(0x00A3CA265EBCB825B45F985A16CEFB49958CE017),\n            Address(0x00B42DBF2194E931E80326D950320F7D9DBEAC02),\n            Address(0x0AAE40965E6800CD9B1F4B05FF21581047E3F91E),\n        ] + super(Prague, cls).system_contracts(block_number, timestamp)\n\n    @classmethod\n    def pre_allocation_blockchain(cls) -> Mapping:\n        \"\"\"\n        Prague requires pre-allocation of the beacon chain deposit contract for EIP-6110,\n        the exits contract for EIP-7002, and the history storage contract for EIP-2935.\n        \"\"\"\n        new_allocation = {}\n\n        # Add the beacon chain deposit contract\n        DEPOSIT_CONTRACT_TREE_DEPTH = 32\n        storage = {}\n        next_hash = sha256(b\"\\x00\" * 64).digest()\n        for i in range(DEPOSIT_CONTRACT_TREE_DEPTH + 2, DEPOSIT_CONTRACT_TREE_DEPTH * 2 + 1):\n            storage[i] = next_hash\n            next_hash = sha256(next_hash + next_hash).digest()\n\n        with open(CURRENT_FOLDER / \"contracts\" / \"deposit_contract.bin\", mode=\"rb\") as f:\n            new_allocation.update(\n                {\n                    0x00000000219AB540356CBB839CBE05303D7705FA: {\n                        \"nonce\": 1,\n                        \"code\": f.read(),\n                        \"storage\": storage,\n                    }\n                }\n            )\n\n        # Add the withdrawal request contract\n        with open(CURRENT_FOLDER / \"contracts\" / \"withdrawal_request.bin\", mode=\"rb\") as f:\n            new_allocation.update(\n                {\n                    0x00A3CA265EBCB825B45F985A16CEFB49958CE017: {\n                        \"nonce\": 1,\n                        \"code\": f.read(),\n                    },\n                }\n            )\n\n        # Add the consolidation request contract\n        with open(CURRENT_FOLDER / \"contracts\" / \"consolidation_request.bin\", mode=\"rb\") as f:\n            new_allocation.update(\n                {\n                    0x00B42DBF2194E931E80326D950320F7D9DBEAC02: {\n                        \"nonce\": 1,\n                        \"code\": f.read(),\n                    },\n                }\n            )\n\n        # Add the history storage contract\n        with open(CURRENT_FOLDER / \"contracts\" / \"history_contract.bin\", mode=\"rb\") as f:\n            new_allocation.update(\n                {\n                    0x0AAE40965E6800CD9B1F4B05FF21581047E3F91E: {\n                        \"nonce\": 1,\n                        \"code\": f.read(),\n                    }\n                }\n            )\n\n        return new_allocation | super(Prague, cls).pre_allocation_blockchain()\n\n    @classmethod\n    def header_requests_required(cls, block_number: int, timestamp: int) -> bool:\n        \"\"\"\n        Prague requires that the execution layer block contains the beacon\n        chain requests.\n        \"\"\"\n        return True\n\n    @classmethod\n    def engine_new_payload_version(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> Optional[int]:\n        \"\"\"\n        Starting at Prague, new payload calls must use version 4\n        \"\"\"\n        return 4\n\n    @classmethod\n    def engine_forkchoice_updated_version(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> Optional[int]:\n        \"\"\"\n        At Prague, version number of NewPayload and ForkchoiceUpdated diverge.\n        \"\"\"\n        return 3\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Prague.is_deployed","title":"is_deployed() classmethod","text":"

    Flags that the fork has not been deployed to mainnet; it is under active development.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef is_deployed(cls) -> bool:\n    \"\"\"\n    Flags that the fork has not been deployed to mainnet; it is under active\n    development.\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Prague.solc_min_version","title":"solc_min_version() classmethod","text":"

    Returns the minimum version of solc that supports this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef solc_min_version(cls) -> Version:\n    \"\"\"\n    Returns the minimum version of solc that supports this fork.\n    \"\"\"\n    return Version.parse(\"1.0.0\")  # set a high version; currently unknown\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Prague.precompiles","title":"precompiles(block_number=0, timestamp=0) classmethod","text":"

    At Prague, pre-compile for BLS operations are added:

    G1ADD = 0x0B G1MUL = 0x0C G1MSM = 0x0D G2ADD = 0x0E G2MUL = 0x0F G2MSM = 0x10 PAIRING = 0x11 MAP_FP_TO_G1 = 0x12 MAP_FP2_TO_G2 = 0x13

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n    \"\"\"\n    At Prague, pre-compile for BLS operations are added:\n\n    G1ADD = 0x0B\n    G1MUL = 0x0C\n    G1MSM = 0x0D\n    G2ADD = 0x0E\n    G2MUL = 0x0F\n    G2MSM = 0x10\n    PAIRING = 0x11\n    MAP_FP_TO_G1 = 0x12\n    MAP_FP2_TO_G2 = 0x13\n    \"\"\"\n    return list(Address(i) for i in range(0xB, 0x13 + 1)) + super(Prague, cls).precompiles(\n        block_number, timestamp\n    )\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Prague.system_contracts","title":"system_contracts(block_number=0, timestamp=0) classmethod","text":"

    Prague introduces the system contracts for EIP-6110, EIP-7002, EIP-7251 and EIP-2935

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef system_contracts(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n    \"\"\"\n    Prague introduces the system contracts for EIP-6110, EIP-7002, EIP-7251 and EIP-2935\n    \"\"\"\n    return [\n        Address(0x00000000219AB540356CBB839CBE05303D7705FA),\n        Address(0x00A3CA265EBCB825B45F985A16CEFB49958CE017),\n        Address(0x00B42DBF2194E931E80326D950320F7D9DBEAC02),\n        Address(0x0AAE40965E6800CD9B1F4B05FF21581047E3F91E),\n    ] + super(Prague, cls).system_contracts(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Prague.pre_allocation_blockchain","title":"pre_allocation_blockchain() classmethod","text":"

    Prague requires pre-allocation of the beacon chain deposit contract for EIP-6110, the exits contract for EIP-7002, and the history storage contract for EIP-2935.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef pre_allocation_blockchain(cls) -> Mapping:\n    \"\"\"\n    Prague requires pre-allocation of the beacon chain deposit contract for EIP-6110,\n    the exits contract for EIP-7002, and the history storage contract for EIP-2935.\n    \"\"\"\n    new_allocation = {}\n\n    # Add the beacon chain deposit contract\n    DEPOSIT_CONTRACT_TREE_DEPTH = 32\n    storage = {}\n    next_hash = sha256(b\"\\x00\" * 64).digest()\n    for i in range(DEPOSIT_CONTRACT_TREE_DEPTH + 2, DEPOSIT_CONTRACT_TREE_DEPTH * 2 + 1):\n        storage[i] = next_hash\n        next_hash = sha256(next_hash + next_hash).digest()\n\n    with open(CURRENT_FOLDER / \"contracts\" / \"deposit_contract.bin\", mode=\"rb\") as f:\n        new_allocation.update(\n            {\n                0x00000000219AB540356CBB839CBE05303D7705FA: {\n                    \"nonce\": 1,\n                    \"code\": f.read(),\n                    \"storage\": storage,\n                }\n            }\n        )\n\n    # Add the withdrawal request contract\n    with open(CURRENT_FOLDER / \"contracts\" / \"withdrawal_request.bin\", mode=\"rb\") as f:\n        new_allocation.update(\n            {\n                0x00A3CA265EBCB825B45F985A16CEFB49958CE017: {\n                    \"nonce\": 1,\n                    \"code\": f.read(),\n                },\n            }\n        )\n\n    # Add the consolidation request contract\n    with open(CURRENT_FOLDER / \"contracts\" / \"consolidation_request.bin\", mode=\"rb\") as f:\n        new_allocation.update(\n            {\n                0x00B42DBF2194E931E80326D950320F7D9DBEAC02: {\n                    \"nonce\": 1,\n                    \"code\": f.read(),\n                },\n            }\n        )\n\n    # Add the history storage contract\n    with open(CURRENT_FOLDER / \"contracts\" / \"history_contract.bin\", mode=\"rb\") as f:\n        new_allocation.update(\n            {\n                0x0AAE40965E6800CD9B1F4B05FF21581047E3F91E: {\n                    \"nonce\": 1,\n                    \"code\": f.read(),\n                }\n            }\n        )\n\n    return new_allocation | super(Prague, cls).pre_allocation_blockchain()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Prague.header_requests_required","title":"header_requests_required(block_number, timestamp) classmethod","text":"

    Prague requires that the execution layer block contains the beacon chain requests.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_requests_required(cls, block_number: int, timestamp: int) -> bool:\n    \"\"\"\n    Prague requires that the execution layer block contains the beacon\n    chain requests.\n    \"\"\"\n    return True\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Prague.engine_new_payload_version","title":"engine_new_payload_version(block_number=0, timestamp=0) classmethod","text":"

    Starting at Prague, new payload calls must use version 4

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_new_payload_version(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> Optional[int]:\n    \"\"\"\n    Starting at Prague, new payload calls must use version 4\n    \"\"\"\n    return 4\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Prague.engine_forkchoice_updated_version","title":"engine_forkchoice_updated_version(block_number=0, timestamp=0) classmethod","text":"

    At Prague, version number of NewPayload and ForkchoiceUpdated diverge.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_forkchoice_updated_version(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> Optional[int]:\n    \"\"\"\n    At Prague, version number of NewPayload and ForkchoiceUpdated diverge.\n    \"\"\"\n    return 3\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Shanghai","title":"Shanghai","text":"

    Bases: Paris

    Shanghai fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class Shanghai(Paris):\n    \"\"\"\n    Shanghai fork\n    \"\"\"\n\n    @classmethod\n    def header_withdrawals_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        Withdrawals are required starting from Shanghai.\n        \"\"\"\n        return True\n\n    @classmethod\n    def engine_new_payload_version(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> Optional[int]:\n        \"\"\"\n        Starting at Shanghai, new payload calls must use version 2\n        \"\"\"\n        return 2\n\n    @classmethod\n    def valid_opcodes(\n        cls,\n    ) -> List[Opcodes]:\n        \"\"\"\n        Returns the list of Opcodes that are valid to work on this fork.\n        \"\"\"\n        return [Opcodes.PUSH0] + super(Shanghai, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Shanghai.header_withdrawals_required","title":"header_withdrawals_required(block_number=0, timestamp=0) classmethod","text":"

    Withdrawals are required starting from Shanghai.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_withdrawals_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    Withdrawals are required starting from Shanghai.\n    \"\"\"\n    return True\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Shanghai.engine_new_payload_version","title":"engine_new_payload_version(block_number=0, timestamp=0) classmethod","text":"

    Starting at Shanghai, new payload calls must use version 2

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_new_payload_version(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> Optional[int]:\n    \"\"\"\n    Starting at Shanghai, new payload calls must use version 2\n    \"\"\"\n    return 2\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Shanghai.valid_opcodes","title":"valid_opcodes() classmethod","text":"

    Returns the list of Opcodes that are valid to work on this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef valid_opcodes(\n    cls,\n) -> List[Opcodes]:\n    \"\"\"\n    Returns the list of Opcodes that are valid to work on this fork.\n    \"\"\"\n    return [Opcodes.PUSH0] + super(Shanghai, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.BerlinToLondonAt5","title":"BerlinToLondonAt5","text":"

    Bases: Berlin

    Berlin to London transition at Block 5

    Source code in src/ethereum_test_forks/forks/transition.py
    @transition_fork(to_fork=London, at_block=5)\nclass BerlinToLondonAt5(Berlin):\n    \"\"\"\n    Berlin to London transition at Block 5\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.ParisToShanghaiAtTime15k","title":"ParisToShanghaiAtTime15k","text":"

    Bases: Paris

    Paris to Shanghai transition at Timestamp 15k

    Source code in src/ethereum_test_forks/forks/transition.py
    @transition_fork(to_fork=Shanghai, at_timestamp=15_000)\nclass ParisToShanghaiAtTime15k(Paris, blockchain_test_network_name=\"ParisToShanghaiAtTime15k\"):\n    \"\"\"\n    Paris to Shanghai transition at Timestamp 15k\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.ShanghaiToCancunAtTime15k","title":"ShanghaiToCancunAtTime15k","text":"

    Bases: Shanghai

    Shanghai to Cancun transition at Timestamp 15k

    Source code in src/ethereum_test_forks/forks/transition.py
    @transition_fork(to_fork=Cancun, at_timestamp=15_000)\nclass ShanghaiToCancunAtTime15k(Shanghai):\n    \"\"\"\n    Shanghai to Cancun transition at Timestamp 15k\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.InvalidForkError","title":"InvalidForkError","text":"

    Bases: Exception

    Invalid fork error raised when the fork specified by command-line option --latest-fork is not found.

    Source code in src/ethereum_test_forks/helpers.py
    class InvalidForkError(Exception):\n    \"\"\"\n    Invalid fork error raised when the fork specified by command-line option\n    --latest-fork is not found.\n    \"\"\"\n\n    def __init__(self, message):\n        super().__init__(message)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.forks_from","title":"forks_from(fork, deployed_only=True)","text":"

    Returns the specified fork and all forks after it.

    Source code in src/ethereum_test_forks/helpers.py
    def forks_from(fork: Fork, deployed_only: bool = True) -> List[Fork]:\n    \"\"\"\n    Returns the specified fork and all forks after it.\n    \"\"\"\n    if deployed_only:\n        latest_fork = get_deployed_forks()[-1]\n    else:\n        latest_fork = get_forks()[-1]\n    return forks_from_until(fork, latest_fork)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.forks_from_until","title":"forks_from_until(fork_from, fork_until)","text":"

    Returns the specified fork and all forks after it until and including the second specified fork

    Source code in src/ethereum_test_forks/helpers.py
    def forks_from_until(fork_from: Fork, fork_until: Fork) -> List[Fork]:\n    \"\"\"\n    Returns the specified fork and all forks after it until and including the\n    second specified fork\n    \"\"\"\n    prev_fork = fork_until\n\n    forks: List[Fork] = []\n\n    while prev_fork != BaseFork and prev_fork != fork_from:\n        forks.insert(0, prev_fork)\n\n        prev_fork = prev_fork.__base__\n\n    if prev_fork == BaseFork:\n        return []\n\n    forks.insert(0, fork_from)\n\n    return forks\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.get_closest_fork_with_solc_support","title":"get_closest_fork_with_solc_support(fork, solc_version)","text":"

    Returns the closest fork, potentially the provided fork itself, that has solc support.

    Source code in src/ethereum_test_forks/helpers.py
    def get_closest_fork_with_solc_support(fork: Fork, solc_version: Version) -> Optional[Fork]:\n    \"\"\"\n    Returns the closest fork, potentially the provided fork itself, that has\n    solc support.\n    \"\"\"\n    if fork is BaseFork:\n        return None\n    return (\n        fork\n        if solc_version >= fork.solc_min_version()\n        else get_closest_fork_with_solc_support(get_parent_fork(fork), solc_version)\n    )\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.get_deployed_forks","title":"get_deployed_forks()","text":"

    Returns a list of all the fork classes implemented by ethereum_test_forks that have been deployed to mainnet, chronologically ordered by deployment.

    Source code in src/ethereum_test_forks/helpers.py
    def get_deployed_forks() -> List[Fork]:\n    \"\"\"\n    Returns a list of all the fork classes implemented by `ethereum_test_forks`\n    that have been deployed to mainnet, chronologically ordered by deployment.\n    \"\"\"\n    return [fork for fork in get_forks() if fork.is_deployed()]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.get_development_forks","title":"get_development_forks()","text":"

    Returns a list of all the fork classes implemented by ethereum_test_forks that have been not yet deployed to mainnet and are currently under development. The list is ordered by their planned deployment date.

    Source code in src/ethereum_test_forks/helpers.py
    def get_development_forks() -> List[Fork]:\n    \"\"\"\n    Returns a list of all the fork classes implemented by `ethereum_test_forks`\n    that have been not yet deployed to mainnet and are currently under\n    development. The list is ordered by their planned deployment date.\n    \"\"\"\n    return [fork for fork in get_forks() if not fork.is_deployed()]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.get_forks","title":"get_forks()","text":"

    Returns a list of all the fork classes implemented by ethereum_test_forks ordered chronologically by deployment.

    Source code in src/ethereum_test_forks/helpers.py
    def get_forks() -> List[Fork]:\n    \"\"\"\n    Returns a list of all the fork classes implemented by\n    `ethereum_test_forks` ordered chronologically by deployment.\n    \"\"\"\n    all_forks: List[Fork] = []\n    for fork_name in forks.__dict__:\n        fork = forks.__dict__[fork_name]\n        if not isinstance(fork, type):\n            continue\n        if issubclass(fork, BaseFork) and fork is not BaseFork:\n            all_forks.append(fork)\n    return all_forks\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.get_forks_with_solc_support","title":"get_forks_with_solc_support(solc_version)","text":"

    Returns a list of all fork classes that are supported by solc.

    Source code in src/ethereum_test_forks/helpers.py
    def get_forks_with_solc_support(solc_version: Version) -> List[Fork]:\n    \"\"\"\n    Returns a list of all fork classes that are supported by solc.\n    \"\"\"\n    return [fork for fork in get_forks() if solc_version >= fork.solc_min_version()]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.get_forks_without_solc_support","title":"get_forks_without_solc_support(solc_version)","text":"

    Returns a list of all fork classes that aren't supported by solc.

    Source code in src/ethereum_test_forks/helpers.py
    def get_forks_without_solc_support(solc_version: Version) -> List[Fork]:\n    \"\"\"\n    Returns a list of all fork classes that aren't supported by solc.\n    \"\"\"\n    return [fork for fork in get_forks() if solc_version < fork.solc_min_version()]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.get_transition_forks","title":"get_transition_forks()","text":"

    Returns all the transition forks

    Source code in src/ethereum_test_forks/helpers.py
    def get_transition_forks() -> List[Fork]:\n    \"\"\"\n    Returns all the transition forks\n    \"\"\"\n    transition_forks: List[Fork] = []\n\n    for fork_name in transition.__dict__:\n        fork = transition.__dict__[fork_name]\n        if not isinstance(fork, type):\n            continue\n        if issubclass(fork, TransitionBaseClass) and issubclass(fork, BaseFork):\n            transition_forks.append(fork)\n\n    return transition_forks\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.transition_fork_from_to","title":"transition_fork_from_to(fork_from, fork_to)","text":"

    Returns the transition fork that transitions to and from the specified forks.

    Source code in src/ethereum_test_forks/helpers.py
    def transition_fork_from_to(fork_from: Fork, fork_to: Fork) -> Fork | None:\n    \"\"\"\n    Returns the transition fork that transitions to and from the specified\n    forks.\n    \"\"\"\n    for transition_fork in get_transition_forks():\n        if not issubclass(transition_fork, TransitionBaseClass):\n            continue\n        if (\n            transition_fork.transitions_to() == fork_to\n            and transition_fork.transitions_from() == fork_from\n        ):\n            return transition_fork\n\n    return None\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.transition_fork_to","title":"transition_fork_to(fork_to)","text":"

    Returns the transition fork that transitions to the specified fork.

    Source code in src/ethereum_test_forks/helpers.py
    def transition_fork_to(fork_to: Fork) -> List[Fork]:\n    \"\"\"\n    Returns the transition fork that transitions to the specified fork.\n    \"\"\"\n    transition_forks: List[Fork] = []\n    for transition_fork in get_transition_forks():\n        if not issubclass(transition_fork, TransitionBaseClass):\n            continue\n        if transition_fork.transitions_to() == fork_to:\n            transition_forks.append(transition_fork)\n\n    return transition_forks\n
    "},{"location":"library/ethereum_test_specs/","title":"Ethereum Test Specs package","text":"

    Test spec definitions and utilities.

    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BaseTest","title":"BaseTest","text":"

    Bases: BaseModel

    Represents a base Ethereum test which must return a single test fixture.

    Source code in src/ethereum_test_specs/base.py
    class BaseTest(BaseModel):\n    \"\"\"\n    Represents a base Ethereum test which must return a single test fixture.\n    \"\"\"\n\n    tag: str = \"\"\n\n    # Transition tool specific fields\n    t8n_dump_dir: Path | None = Field(None, exclude=True)\n    _t8n_call_counter: Iterator[int] = count(0)\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = []\n\n    @abstractmethod\n    def generate(\n        self,\n        *,\n        t8n: TransitionTool,\n        fork: Fork,\n        fixture_format: FixtureFormats,\n        eips: Optional[List[int]] = None,\n    ) -> BaseFixture:\n        \"\"\"\n        Generate the list of test fixtures.\n        \"\"\"\n        pass\n\n    @classmethod\n    def pytest_parameter_name(cls) -> str:\n        \"\"\"\n        Must return the name of the parameter used in pytest to select this\n        spec type as filler for the test.\n\n        By default, it returns the underscore separated name of the class.\n        \"\"\"\n        return reduce(lambda x, y: x + (\"_\" if y.isupper() else \"\") + y, cls.__name__).lower()\n\n    def get_next_transition_tool_output_path(self) -> str:\n        \"\"\"\n        Returns the path to the next transition tool output file.\n        \"\"\"\n        if not self.t8n_dump_dir:\n            return \"\"\n        return path.join(\n            self.t8n_dump_dir,\n            str(next(self._t8n_call_counter)),\n        )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BaseTest.generate","title":"generate(*, t8n, fork, fixture_format, eips=None) abstractmethod","text":"

    Generate the list of test fixtures.

    Source code in src/ethereum_test_specs/base.py
    @abstractmethod\ndef generate(\n    self,\n    *,\n    t8n: TransitionTool,\n    fork: Fork,\n    fixture_format: FixtureFormats,\n    eips: Optional[List[int]] = None,\n) -> BaseFixture:\n    \"\"\"\n    Generate the list of test fixtures.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BaseTest.pytest_parameter_name","title":"pytest_parameter_name() classmethod","text":"

    Must return the name of the parameter used in pytest to select this spec type as filler for the test.

    By default, it returns the underscore separated name of the class.

    Source code in src/ethereum_test_specs/base.py
    @classmethod\ndef pytest_parameter_name(cls) -> str:\n    \"\"\"\n    Must return the name of the parameter used in pytest to select this\n    spec type as filler for the test.\n\n    By default, it returns the underscore separated name of the class.\n    \"\"\"\n    return reduce(lambda x, y: x + (\"_\" if y.isupper() else \"\") + y, cls.__name__).lower()\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BaseTest.get_next_transition_tool_output_path","title":"get_next_transition_tool_output_path()","text":"

    Returns the path to the next transition tool output file.

    Source code in src/ethereum_test_specs/base.py
    def get_next_transition_tool_output_path(self) -> str:\n    \"\"\"\n    Returns the path to the next transition tool output file.\n    \"\"\"\n    if not self.t8n_dump_dir:\n        return \"\"\n    return path.join(\n        self.t8n_dump_dir,\n        str(next(self._t8n_call_counter)),\n    )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BlockchainTest","title":"BlockchainTest","text":"

    Bases: BaseTest

    Filler type that tests multiple blocks (valid or invalid) in a chain.

    Source code in src/ethereum_test_specs/blockchain.py
    class BlockchainTest(BaseTest):\n    \"\"\"\n    Filler type that tests multiple blocks (valid or invalid) in a chain.\n    \"\"\"\n\n    pre: Alloc\n    post: Alloc\n    blocks: List[Block]\n    genesis_environment: Environment = Field(default_factory=Environment)\n    verify_sync: bool = False\n    chain_id: int = 1\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = [\n        FixtureFormats.BLOCKCHAIN_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST_ENGINE,\n    ]\n\n    def make_genesis(\n        self,\n        fork: Fork,\n    ) -> Tuple[Alloc, FixtureBlock]:\n        \"\"\"\n        Create a genesis block from the blockchain test definition.\n        \"\"\"\n        env = self.genesis_environment.set_fork_requirements(fork)\n        assert (\n            env.withdrawals is None or len(env.withdrawals) == 0\n        ), \"withdrawals must be empty at genesis\"\n        assert env.parent_beacon_block_root is None or env.parent_beacon_block_root == Hash(\n            0\n        ), \"parent_beacon_block_root must be empty at genesis\"\n\n        pre_alloc = Alloc.merge(\n            Alloc.model_validate(fork.pre_allocation_blockchain()),\n            self.pre,\n        )\n        if empty_accounts := pre_alloc.empty_accounts():\n            raise Exception(f\"Empty accounts in pre state: {empty_accounts}\")\n        state_root = pre_alloc.state_root()\n        genesis = FixtureHeader(\n            parent_hash=0,\n            ommers_hash=EmptyOmmersRoot,\n            fee_recipient=0,\n            state_root=state_root,\n            transactions_trie=EmptyTrieRoot,\n            receipts_root=EmptyTrieRoot,\n            logs_bloom=0,\n            difficulty=0x20000 if env.difficulty is None else env.difficulty,\n            number=0,\n            gas_limit=env.gas_limit,\n            gas_used=0,\n            timestamp=0,\n            extra_data=b\"\\x00\",\n            prev_randao=0,\n            nonce=0,\n            base_fee_per_gas=env.base_fee_per_gas,\n            blob_gas_used=env.blob_gas_used,\n            excess_blob_gas=env.excess_blob_gas,\n            withdrawals_root=Withdrawal.list_root(env.withdrawals)\n            if env.withdrawals is not None\n            else None,\n            parent_beacon_block_root=env.parent_beacon_block_root,\n            requests_root=Requests(root=[]).trie_root\n            if fork.header_requests_required(0, 0)\n            else None,\n        )\n\n        return (\n            pre_alloc,\n            FixtureBlockBase(\n                header=genesis,\n                withdrawals=None if env.withdrawals is None else [],\n                deposit_requests=[] if fork.header_requests_required(0, 0) else None,\n                withdrawal_requests=[] if fork.header_requests_required(0, 0) else None,\n                consolidation_requests=[] if fork.header_requests_required(0, 0) else None,\n            ).with_rlp(\n                txs=[], requests=Requests() if fork.header_requests_required(0, 0) else None\n            ),\n        )\n\n    def generate_block_data(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        block: Block,\n        previous_env: Environment,\n        previous_alloc: Alloc,\n        eips: Optional[List[int]] = None,\n    ) -> Tuple[FixtureHeader, List[Transaction], Requests | None, Alloc, Environment]:\n        \"\"\"\n        Generate common block data for both make_fixture and make_hive_fixture.\n        \"\"\"\n        if block.rlp and block.exception is not None:\n            raise Exception(\n                \"test correctness: post-state cannot be verified if the \"\n                + \"block's rlp is supplied and the block is not supposed \"\n                + \"to produce an exception\"\n            )\n\n        env = block.set_environment(previous_env)\n        env = env.set_fork_requirements(fork)\n\n        txs = [tx.with_signature_and_sender() for tx in block.txs]\n\n        if failing_tx_count := len([tx for tx in txs if tx.error]) > 0:\n            if failing_tx_count > 1:\n                raise Exception(\n                    \"test correctness: only one transaction can produce an exception in a block\"\n                )\n            if not txs[-1].error:\n                raise Exception(\n                    \"test correctness: the transaction that produces an exception \"\n                    + \"must be the last transaction in the block\"\n                )\n\n        transition_tool_output = t8n.evaluate(\n            alloc=previous_alloc,\n            txs=txs,\n            env=env,\n            fork=fork,\n            chain_id=self.chain_id,\n            reward=fork.get_reward(env.number, env.timestamp),\n            eips=eips,\n            debug_output_path=self.get_next_transition_tool_output_path(),\n        )\n\n        try:\n            rejected_txs = verify_transactions(txs, transition_tool_output.result)\n            verify_result(transition_tool_output.result, env)\n        except Exception as e:\n            print_traces(t8n.get_traces())\n            pprint(transition_tool_output.result)\n            pprint(previous_alloc)\n            pprint(transition_tool_output.alloc)\n            raise e\n\n        if len(rejected_txs) > 0 and block.exception is None:\n            print_traces(t8n.get_traces())\n            raise Exception(\n                \"one or more transactions in `BlockchainTest` are \"\n                + \"intrinsically invalid, but the block was not expected \"\n                + \"to be invalid. Please verify whether the transaction \"\n                + \"was indeed expected to fail and add the proper \"\n                + \"`block.exception`\"\n            )\n\n        # One special case of the invalid transactions is the blob gas used, since this value\n        # is not included in the transition tool result, but it is included in the block header,\n        # and some clients check it before executing the block by simply counting the type-3 txs,\n        # we need to set the correct value by default.\n        blob_gas_used: int | None = None\n        if (blob_gas_per_blob := fork.blob_gas_per_blob(env.number, env.timestamp)) > 0:\n            blob_gas_used = blob_gas_per_blob * count_blobs(txs)\n\n        header = FixtureHeader(\n            **(\n                transition_tool_output.result.model_dump(\n                    exclude_none=True, exclude={\"blob_gas_used\", \"transactions_trie\"}\n                )\n                | env.model_dump(exclude_none=True, exclude={\"blob_gas_used\"})\n            ),\n            blob_gas_used=blob_gas_used,\n            transactions_trie=Transaction.list_root(txs),\n            extra_data=block.extra_data if block.extra_data is not None else b\"\",\n            fork=fork,\n        )\n\n        if block.header_verify is not None:\n            # Verify the header after transition tool processing.\n            block.header_verify.verify(header)\n\n        if block.rlp_modifier is not None:\n            # Modify any parameter specified in the `rlp_modifier` after\n            # transition tool processing.\n            header = block.rlp_modifier.apply(header)\n\n        requests = None\n        if fork.header_requests_required(header.number, header.timestamp):\n            requests_list: List[DepositRequest | WithdrawalRequest | ConsolidationRequest] = []\n            if transition_tool_output.result.deposit_requests is not None:\n                requests_list += transition_tool_output.result.deposit_requests\n            if transition_tool_output.result.withdrawal_requests is not None:\n                requests_list += transition_tool_output.result.withdrawal_requests\n            if transition_tool_output.result.consolidation_requests is not None:\n                requests_list += transition_tool_output.result.consolidation_requests\n            requests = Requests(root=requests_list)\n\n        if requests is not None and requests.trie_root != header.requests_root:\n            raise Exception(\n                f\"Requests root in header does not match the requests root in the transition tool \"\n                \"output: \"\n                f\"{header.requests_root} != {requests.trie_root}\"\n            )\n\n        if block.requests is not None:\n            requests = Requests(root=block.requests)\n            header.requests_root = requests.trie_root\n\n        return (\n            header,\n            txs,\n            requests,\n            transition_tool_output.alloc,\n            env,\n        )\n\n    def network_info(self, fork: Fork, eips: Optional[List[int]] = None):\n        \"\"\"\n        Returns fixture network information for the fork & EIP/s.\n        \"\"\"\n        return (\n            \"+\".join([fork.blockchain_test_network_name()] + [str(eip) for eip in eips])\n            if eips\n            else fork.blockchain_test_network_name()\n        )\n\n    def verify_post_state(self, t8n, alloc: Alloc):\n        \"\"\"\n        Verifies the post alloc after all block/s or payload/s are generated.\n        \"\"\"\n        try:\n            self.post.verify_post_alloc(alloc)\n        except Exception as e:\n            print_traces(t8n.get_traces())\n            raise e\n\n    def make_fixture(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        eips: Optional[List[int]] = None,\n    ) -> Fixture:\n        \"\"\"\n        Create a fixture from the blockchain test definition.\n        \"\"\"\n        fixture_blocks: List[FixtureBlock | InvalidFixtureBlock] = []\n\n        pre, genesis = self.make_genesis(fork)\n\n        alloc = pre\n        env = environment_from_parent_header(genesis.header)\n        head = genesis.header.block_hash\n\n        for block in self.blocks:\n            if block.rlp is None:\n                # This is the most common case, the RLP needs to be constructed\n                # based on the transactions to be included in the block.\n                # Set the environment according to the block to execute.\n                header, txs, requests, new_alloc, new_env = self.generate_block_data(\n                    t8n=t8n,\n                    fork=fork,\n                    block=block,\n                    previous_env=env,\n                    previous_alloc=alloc,\n                    eips=eips,\n                )\n                fixture_block = FixtureBlockBase(\n                    header=header,\n                    txs=[FixtureTransaction.from_transaction(tx) for tx in txs],\n                    ommers=[],\n                    withdrawals=[FixtureWithdrawal.from_withdrawal(w) for w in new_env.withdrawals]\n                    if new_env.withdrawals is not None\n                    else None,\n                    deposit_requests=[\n                        FixtureDepositRequest.from_deposit_request(d)\n                        for d in requests.deposit_requests()\n                    ]\n                    if requests is not None\n                    else None,\n                    withdrawal_requests=[\n                        FixtureWithdrawalRequest.from_withdrawal_request(w)\n                        for w in requests.withdrawal_requests()\n                    ]\n                    if requests is not None\n                    else None,\n                    consolidation_requests=[\n                        FixtureConsolidationRequest.from_consolidation_request(c)\n                        for c in requests.consolidation_requests()\n                    ]\n                    if requests is not None\n                    else None,\n                ).with_rlp(txs=txs, requests=requests)\n                if block.exception is None:\n                    fixture_blocks.append(fixture_block)\n                    # Update env, alloc and last block hash for the next block.\n                    alloc = new_alloc\n                    env = apply_new_parent(new_env, header)\n                    head = header.block_hash\n                else:\n                    fixture_blocks.append(\n                        InvalidFixtureBlock(\n                            rlp=fixture_block.rlp,\n                            expect_exception=block.exception,\n                            rlp_decoded=(\n                                None\n                                if BlockException.RLP_STRUCTURES_ENCODING in block.exception\n                                else fixture_block.without_rlp()\n                            ),\n                        ),\n                    )\n            else:\n                assert block.exception is not None, (\n                    \"test correctness: if the block's rlp is hard-coded, \"\n                    + \"the block is expected to produce an exception\"\n                )\n                fixture_blocks.append(\n                    InvalidFixtureBlock(\n                        rlp=block.rlp,\n                        expect_exception=block.exception,\n                    ),\n                )\n\n        self.verify_post_state(t8n, alloc)\n        return Fixture(\n            fork=self.network_info(fork, eips),\n            genesis=genesis.header,\n            genesis_rlp=genesis.rlp,\n            blocks=fixture_blocks,\n            last_block_hash=head,\n            pre=pre,\n            post_state=alloc,\n        )\n\n    def make_hive_fixture(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        eips: Optional[List[int]] = None,\n    ) -> EngineFixture:\n        \"\"\"\n        Create a hive fixture from the blocktest definition.\n        \"\"\"\n        fixture_payloads: List[FixtureEngineNewPayload] = []\n\n        pre, genesis = self.make_genesis(fork)\n        alloc = pre\n        env = environment_from_parent_header(genesis.header)\n        head_hash = genesis.header.block_hash\n\n        for block in self.blocks:\n            header, txs, requests, new_alloc, new_env = self.generate_block_data(\n                t8n=t8n, fork=fork, block=block, previous_env=env, previous_alloc=alloc, eips=eips\n            )\n            if block.rlp is None:\n                fixture_payloads.append(\n                    FixtureEngineNewPayload.from_fixture_header(\n                        fork=fork,\n                        header=header,\n                        transactions=txs,\n                        withdrawals=new_env.withdrawals,\n                        requests=requests,\n                        validation_error=block.exception,\n                        error_code=block.engine_api_error_code,\n                    )\n                )\n                if block.exception is None:\n                    alloc = new_alloc\n                    env = apply_new_parent(env, header)\n                    head_hash = header.block_hash\n        fcu_version = fork.engine_forkchoice_updated_version(header.number, header.timestamp)\n        assert (\n            fcu_version is not None\n        ), \"A hive fixture was requested but no forkchoice update is defined. The framework should\"\n        \" never try to execute this test case.\"\n\n        self.verify_post_state(t8n, alloc)\n\n        sync_payload: Optional[FixtureEngineNewPayload] = None\n        if self.verify_sync:\n            # Test is marked for syncing verification.\n            assert (\n                genesis.header.block_hash != head_hash\n            ), \"Invalid payload tests negative test via sync is not supported yet.\"\n\n            # Most clients require the header to start the sync process, so we create an empty\n            # block on top of the last block of the test to send it as new payload and trigger the\n            # sync process.\n            sync_header, _, requests, _, _ = self.generate_block_data(\n                t8n=t8n,\n                fork=fork,\n                block=Block(),\n                previous_env=env,\n                previous_alloc=alloc,\n                eips=eips,\n            )\n            sync_payload = FixtureEngineNewPayload.from_fixture_header(\n                fork=fork,\n                header=sync_header,\n                transactions=[],\n                withdrawals=[],\n                requests=requests,\n                validation_error=None,\n                error_code=None,\n            )\n\n        return EngineFixture(\n            fork=self.network_info(fork, eips),\n            genesis=genesis.header,\n            payloads=fixture_payloads,\n            fcu_version=fcu_version,\n            pre=pre,\n            post_state=alloc,\n            sync_payload=sync_payload,\n            last_block_hash=head_hash,\n        )\n\n    def generate(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        fixture_format: FixtureFormats,\n        eips: Optional[List[int]] = None,\n    ) -> BaseFixture:\n        \"\"\"\n        Generate the BlockchainTest fixture.\n        \"\"\"\n        t8n.reset_traces()\n        if fixture_format == FixtureFormats.BLOCKCHAIN_TEST_ENGINE:\n            return self.make_hive_fixture(t8n, fork, eips)\n        elif fixture_format == FixtureFormats.BLOCKCHAIN_TEST:\n            return self.make_fixture(t8n, fork, eips)\n\n        raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BlockchainTest.make_genesis","title":"make_genesis(fork)","text":"

    Create a genesis block from the blockchain test definition.

    Source code in src/ethereum_test_specs/blockchain.py
    def make_genesis(\n    self,\n    fork: Fork,\n) -> Tuple[Alloc, FixtureBlock]:\n    \"\"\"\n    Create a genesis block from the blockchain test definition.\n    \"\"\"\n    env = self.genesis_environment.set_fork_requirements(fork)\n    assert (\n        env.withdrawals is None or len(env.withdrawals) == 0\n    ), \"withdrawals must be empty at genesis\"\n    assert env.parent_beacon_block_root is None or env.parent_beacon_block_root == Hash(\n        0\n    ), \"parent_beacon_block_root must be empty at genesis\"\n\n    pre_alloc = Alloc.merge(\n        Alloc.model_validate(fork.pre_allocation_blockchain()),\n        self.pre,\n    )\n    if empty_accounts := pre_alloc.empty_accounts():\n        raise Exception(f\"Empty accounts in pre state: {empty_accounts}\")\n    state_root = pre_alloc.state_root()\n    genesis = FixtureHeader(\n        parent_hash=0,\n        ommers_hash=EmptyOmmersRoot,\n        fee_recipient=0,\n        state_root=state_root,\n        transactions_trie=EmptyTrieRoot,\n        receipts_root=EmptyTrieRoot,\n        logs_bloom=0,\n        difficulty=0x20000 if env.difficulty is None else env.difficulty,\n        number=0,\n        gas_limit=env.gas_limit,\n        gas_used=0,\n        timestamp=0,\n        extra_data=b\"\\x00\",\n        prev_randao=0,\n        nonce=0,\n        base_fee_per_gas=env.base_fee_per_gas,\n        blob_gas_used=env.blob_gas_used,\n        excess_blob_gas=env.excess_blob_gas,\n        withdrawals_root=Withdrawal.list_root(env.withdrawals)\n        if env.withdrawals is not None\n        else None,\n        parent_beacon_block_root=env.parent_beacon_block_root,\n        requests_root=Requests(root=[]).trie_root\n        if fork.header_requests_required(0, 0)\n        else None,\n    )\n\n    return (\n        pre_alloc,\n        FixtureBlockBase(\n            header=genesis,\n            withdrawals=None if env.withdrawals is None else [],\n            deposit_requests=[] if fork.header_requests_required(0, 0) else None,\n            withdrawal_requests=[] if fork.header_requests_required(0, 0) else None,\n            consolidation_requests=[] if fork.header_requests_required(0, 0) else None,\n        ).with_rlp(\n            txs=[], requests=Requests() if fork.header_requests_required(0, 0) else None\n        ),\n    )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BlockchainTest.generate_block_data","title":"generate_block_data(t8n, fork, block, previous_env, previous_alloc, eips=None)","text":"

    Generate common block data for both make_fixture and make_hive_fixture.

    Source code in src/ethereum_test_specs/blockchain.py
    def generate_block_data(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    block: Block,\n    previous_env: Environment,\n    previous_alloc: Alloc,\n    eips: Optional[List[int]] = None,\n) -> Tuple[FixtureHeader, List[Transaction], Requests | None, Alloc, Environment]:\n    \"\"\"\n    Generate common block data for both make_fixture and make_hive_fixture.\n    \"\"\"\n    if block.rlp and block.exception is not None:\n        raise Exception(\n            \"test correctness: post-state cannot be verified if the \"\n            + \"block's rlp is supplied and the block is not supposed \"\n            + \"to produce an exception\"\n        )\n\n    env = block.set_environment(previous_env)\n    env = env.set_fork_requirements(fork)\n\n    txs = [tx.with_signature_and_sender() for tx in block.txs]\n\n    if failing_tx_count := len([tx for tx in txs if tx.error]) > 0:\n        if failing_tx_count > 1:\n            raise Exception(\n                \"test correctness: only one transaction can produce an exception in a block\"\n            )\n        if not txs[-1].error:\n            raise Exception(\n                \"test correctness: the transaction that produces an exception \"\n                + \"must be the last transaction in the block\"\n            )\n\n    transition_tool_output = t8n.evaluate(\n        alloc=previous_alloc,\n        txs=txs,\n        env=env,\n        fork=fork,\n        chain_id=self.chain_id,\n        reward=fork.get_reward(env.number, env.timestamp),\n        eips=eips,\n        debug_output_path=self.get_next_transition_tool_output_path(),\n    )\n\n    try:\n        rejected_txs = verify_transactions(txs, transition_tool_output.result)\n        verify_result(transition_tool_output.result, env)\n    except Exception as e:\n        print_traces(t8n.get_traces())\n        pprint(transition_tool_output.result)\n        pprint(previous_alloc)\n        pprint(transition_tool_output.alloc)\n        raise e\n\n    if len(rejected_txs) > 0 and block.exception is None:\n        print_traces(t8n.get_traces())\n        raise Exception(\n            \"one or more transactions in `BlockchainTest` are \"\n            + \"intrinsically invalid, but the block was not expected \"\n            + \"to be invalid. Please verify whether the transaction \"\n            + \"was indeed expected to fail and add the proper \"\n            + \"`block.exception`\"\n        )\n\n    # One special case of the invalid transactions is the blob gas used, since this value\n    # is not included in the transition tool result, but it is included in the block header,\n    # and some clients check it before executing the block by simply counting the type-3 txs,\n    # we need to set the correct value by default.\n    blob_gas_used: int | None = None\n    if (blob_gas_per_blob := fork.blob_gas_per_blob(env.number, env.timestamp)) > 0:\n        blob_gas_used = blob_gas_per_blob * count_blobs(txs)\n\n    header = FixtureHeader(\n        **(\n            transition_tool_output.result.model_dump(\n                exclude_none=True, exclude={\"blob_gas_used\", \"transactions_trie\"}\n            )\n            | env.model_dump(exclude_none=True, exclude={\"blob_gas_used\"})\n        ),\n        blob_gas_used=blob_gas_used,\n        transactions_trie=Transaction.list_root(txs),\n        extra_data=block.extra_data if block.extra_data is not None else b\"\",\n        fork=fork,\n    )\n\n    if block.header_verify is not None:\n        # Verify the header after transition tool processing.\n        block.header_verify.verify(header)\n\n    if block.rlp_modifier is not None:\n        # Modify any parameter specified in the `rlp_modifier` after\n        # transition tool processing.\n        header = block.rlp_modifier.apply(header)\n\n    requests = None\n    if fork.header_requests_required(header.number, header.timestamp):\n        requests_list: List[DepositRequest | WithdrawalRequest | ConsolidationRequest] = []\n        if transition_tool_output.result.deposit_requests is not None:\n            requests_list += transition_tool_output.result.deposit_requests\n        if transition_tool_output.result.withdrawal_requests is not None:\n            requests_list += transition_tool_output.result.withdrawal_requests\n        if transition_tool_output.result.consolidation_requests is not None:\n            requests_list += transition_tool_output.result.consolidation_requests\n        requests = Requests(root=requests_list)\n\n    if requests is not None and requests.trie_root != header.requests_root:\n        raise Exception(\n            f\"Requests root in header does not match the requests root in the transition tool \"\n            \"output: \"\n            f\"{header.requests_root} != {requests.trie_root}\"\n        )\n\n    if block.requests is not None:\n        requests = Requests(root=block.requests)\n        header.requests_root = requests.trie_root\n\n    return (\n        header,\n        txs,\n        requests,\n        transition_tool_output.alloc,\n        env,\n    )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BlockchainTest.network_info","title":"network_info(fork, eips=None)","text":"

    Returns fixture network information for the fork & EIP/s.

    Source code in src/ethereum_test_specs/blockchain.py
    def network_info(self, fork: Fork, eips: Optional[List[int]] = None):\n    \"\"\"\n    Returns fixture network information for the fork & EIP/s.\n    \"\"\"\n    return (\n        \"+\".join([fork.blockchain_test_network_name()] + [str(eip) for eip in eips])\n        if eips\n        else fork.blockchain_test_network_name()\n    )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BlockchainTest.verify_post_state","title":"verify_post_state(t8n, alloc)","text":"

    Verifies the post alloc after all block/s or payload/s are generated.

    Source code in src/ethereum_test_specs/blockchain.py
    def verify_post_state(self, t8n, alloc: Alloc):\n    \"\"\"\n    Verifies the post alloc after all block/s or payload/s are generated.\n    \"\"\"\n    try:\n        self.post.verify_post_alloc(alloc)\n    except Exception as e:\n        print_traces(t8n.get_traces())\n        raise e\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BlockchainTest.make_fixture","title":"make_fixture(t8n, fork, eips=None)","text":"

    Create a fixture from the blockchain test definition.

    Source code in src/ethereum_test_specs/blockchain.py
    def make_fixture(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    eips: Optional[List[int]] = None,\n) -> Fixture:\n    \"\"\"\n    Create a fixture from the blockchain test definition.\n    \"\"\"\n    fixture_blocks: List[FixtureBlock | InvalidFixtureBlock] = []\n\n    pre, genesis = self.make_genesis(fork)\n\n    alloc = pre\n    env = environment_from_parent_header(genesis.header)\n    head = genesis.header.block_hash\n\n    for block in self.blocks:\n        if block.rlp is None:\n            # This is the most common case, the RLP needs to be constructed\n            # based on the transactions to be included in the block.\n            # Set the environment according to the block to execute.\n            header, txs, requests, new_alloc, new_env = self.generate_block_data(\n                t8n=t8n,\n                fork=fork,\n                block=block,\n                previous_env=env,\n                previous_alloc=alloc,\n                eips=eips,\n            )\n            fixture_block = FixtureBlockBase(\n                header=header,\n                txs=[FixtureTransaction.from_transaction(tx) for tx in txs],\n                ommers=[],\n                withdrawals=[FixtureWithdrawal.from_withdrawal(w) for w in new_env.withdrawals]\n                if new_env.withdrawals is not None\n                else None,\n                deposit_requests=[\n                    FixtureDepositRequest.from_deposit_request(d)\n                    for d in requests.deposit_requests()\n                ]\n                if requests is not None\n                else None,\n                withdrawal_requests=[\n                    FixtureWithdrawalRequest.from_withdrawal_request(w)\n                    for w in requests.withdrawal_requests()\n                ]\n                if requests is not None\n                else None,\n                consolidation_requests=[\n                    FixtureConsolidationRequest.from_consolidation_request(c)\n                    for c in requests.consolidation_requests()\n                ]\n                if requests is not None\n                else None,\n            ).with_rlp(txs=txs, requests=requests)\n            if block.exception is None:\n                fixture_blocks.append(fixture_block)\n                # Update env, alloc and last block hash for the next block.\n                alloc = new_alloc\n                env = apply_new_parent(new_env, header)\n                head = header.block_hash\n            else:\n                fixture_blocks.append(\n                    InvalidFixtureBlock(\n                        rlp=fixture_block.rlp,\n                        expect_exception=block.exception,\n                        rlp_decoded=(\n                            None\n                            if BlockException.RLP_STRUCTURES_ENCODING in block.exception\n                            else fixture_block.without_rlp()\n                        ),\n                    ),\n                )\n        else:\n            assert block.exception is not None, (\n                \"test correctness: if the block's rlp is hard-coded, \"\n                + \"the block is expected to produce an exception\"\n            )\n            fixture_blocks.append(\n                InvalidFixtureBlock(\n                    rlp=block.rlp,\n                    expect_exception=block.exception,\n                ),\n            )\n\n    self.verify_post_state(t8n, alloc)\n    return Fixture(\n        fork=self.network_info(fork, eips),\n        genesis=genesis.header,\n        genesis_rlp=genesis.rlp,\n        blocks=fixture_blocks,\n        last_block_hash=head,\n        pre=pre,\n        post_state=alloc,\n    )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BlockchainTest.make_hive_fixture","title":"make_hive_fixture(t8n, fork, eips=None)","text":"

    Create a hive fixture from the blocktest definition.

    Source code in src/ethereum_test_specs/blockchain.py
    def make_hive_fixture(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    eips: Optional[List[int]] = None,\n) -> EngineFixture:\n    \"\"\"\n    Create a hive fixture from the blocktest definition.\n    \"\"\"\n    fixture_payloads: List[FixtureEngineNewPayload] = []\n\n    pre, genesis = self.make_genesis(fork)\n    alloc = pre\n    env = environment_from_parent_header(genesis.header)\n    head_hash = genesis.header.block_hash\n\n    for block in self.blocks:\n        header, txs, requests, new_alloc, new_env = self.generate_block_data(\n            t8n=t8n, fork=fork, block=block, previous_env=env, previous_alloc=alloc, eips=eips\n        )\n        if block.rlp is None:\n            fixture_payloads.append(\n                FixtureEngineNewPayload.from_fixture_header(\n                    fork=fork,\n                    header=header,\n                    transactions=txs,\n                    withdrawals=new_env.withdrawals,\n                    requests=requests,\n                    validation_error=block.exception,\n                    error_code=block.engine_api_error_code,\n                )\n            )\n            if block.exception is None:\n                alloc = new_alloc\n                env = apply_new_parent(env, header)\n                head_hash = header.block_hash\n    fcu_version = fork.engine_forkchoice_updated_version(header.number, header.timestamp)\n    assert (\n        fcu_version is not None\n    ), \"A hive fixture was requested but no forkchoice update is defined. The framework should\"\n    \" never try to execute this test case.\"\n\n    self.verify_post_state(t8n, alloc)\n\n    sync_payload: Optional[FixtureEngineNewPayload] = None\n    if self.verify_sync:\n        # Test is marked for syncing verification.\n        assert (\n            genesis.header.block_hash != head_hash\n        ), \"Invalid payload tests negative test via sync is not supported yet.\"\n\n        # Most clients require the header to start the sync process, so we create an empty\n        # block on top of the last block of the test to send it as new payload and trigger the\n        # sync process.\n        sync_header, _, requests, _, _ = self.generate_block_data(\n            t8n=t8n,\n            fork=fork,\n            block=Block(),\n            previous_env=env,\n            previous_alloc=alloc,\n            eips=eips,\n        )\n        sync_payload = FixtureEngineNewPayload.from_fixture_header(\n            fork=fork,\n            header=sync_header,\n            transactions=[],\n            withdrawals=[],\n            requests=requests,\n            validation_error=None,\n            error_code=None,\n        )\n\n    return EngineFixture(\n        fork=self.network_info(fork, eips),\n        genesis=genesis.header,\n        payloads=fixture_payloads,\n        fcu_version=fcu_version,\n        pre=pre,\n        post_state=alloc,\n        sync_payload=sync_payload,\n        last_block_hash=head_hash,\n    )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BlockchainTest.generate","title":"generate(t8n, fork, fixture_format, eips=None)","text":"

    Generate the BlockchainTest fixture.

    Source code in src/ethereum_test_specs/blockchain.py
    def generate(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    fixture_format: FixtureFormats,\n    eips: Optional[List[int]] = None,\n) -> BaseFixture:\n    \"\"\"\n    Generate the BlockchainTest fixture.\n    \"\"\"\n    t8n.reset_traces()\n    if fixture_format == FixtureFormats.BLOCKCHAIN_TEST_ENGINE:\n        return self.make_hive_fixture(t8n, fork, eips)\n    elif fixture_format == FixtureFormats.BLOCKCHAIN_TEST:\n        return self.make_fixture(t8n, fork, eips)\n\n    raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFStateTest","title":"EOFStateTest","text":"

    Bases: EOFTest

    Filler type that tests EOF containers and also generates a state/blockchain test.

    Source code in src/ethereum_test_specs/eof.py
    class EOFStateTest(EOFTest):\n    \"\"\"\n    Filler type that tests EOF containers and also generates a state/blockchain test.\n    \"\"\"\n\n    deploy_tx: bool = False\n    tx_gas_limit: int = 10_000_000\n    tx_data: Bytes = Bytes(b\"\")\n    tx_sender_funding_amount: int = 1_000_000_000_000_000_000_000\n    env: Environment = Field(default_factory=Environment)\n    container_post: Account = Field(default_factory=Account)\n    pre: Alloc | None = None\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = [\n        FixtureFormats.EOF_TEST,\n        FixtureFormats.STATE_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST_ENGINE,\n    ]\n\n    @model_validator(mode=\"before\")\n    @classmethod\n    def check_container_type(cls, data: Any) -> Any:\n        \"\"\"\n        Check if the container exception matches the expected exception.\n        \"\"\"\n        if isinstance(data, dict):\n            container = data.get(\"data\")\n            deploy_tx = data.get(\"deploy_tx\")\n            container_kind = data.get(\"container_kind\")\n            if deploy_tx is None:\n                if (\n                    container is not None\n                    and isinstance(container, Container)\n                    and \"kind\" in container.model_fields_set\n                    and container.kind == ContainerKind.INITCODE\n                ) or (container_kind is not None and container_kind == ContainerKind.INITCODE):\n                    data[\"deploy_tx\"] = True\n        return data\n\n    @classmethod\n    def pytest_parameter_name(cls) -> str:\n        \"\"\"\n        Workaround for pytest parameter name.\n        \"\"\"\n        return \"eof_state_test\"\n\n    def generate_state_test(self) -> StateTest:\n        \"\"\"\n        Generate the StateTest filler.\n        \"\"\"\n        assert self.pre is not None, \"pre must be set to generate a StateTest.\"\n        tx = Transaction(\n            sender=self.pre.fund_eoa(amount=self.tx_sender_funding_amount),\n            gas_limit=self.tx_gas_limit,\n        )\n        post = Alloc()\n        if self.expect_exception is not None:  # Invalid EOF\n            tx.to = None  # Make EIP-7698 create transaction\n            tx.data = Bytes(self.data + self.tx_data)  # by concatenating container and tx data.\n            post[tx.created_contract] = None  # Expect failure.\n        elif self.deploy_tx:\n            tx.to = None  # Make EIP-7698 create transaction\n            tx.data = Bytes(self.data + self.tx_data)  # by concatenating container and tx data.\n            post[tx.created_contract] = self.container_post  # Successful.\n        else:\n            tx.to = self.pre.deploy_contract(code=self.data)\n            tx.data = self.tx_data\n            post[tx.to] = self.container_post\n        return StateTest(\n            pre=self.pre,\n            tx=tx,\n            env=self.env,\n            post=post,\n            t8n_dump_dir=self.t8n_dump_dir,\n        )\n\n    def generate(\n        self,\n        *,\n        t8n: TransitionTool,\n        fork: Fork,\n        eips: Optional[List[int]] = None,\n        fixture_format: FixtureFormats,\n        **_,\n    ) -> BaseFixture:\n        \"\"\"\n        Generate the BlockchainTest fixture.\n        \"\"\"\n        if fixture_format == FixtureFormats.EOF_TEST:\n            return self.make_eof_test_fixture(fork=fork, eips=eips)\n        elif fixture_format in (\n            FixtureFormats.STATE_TEST,\n            FixtureFormats.BLOCKCHAIN_TEST,\n            FixtureFormats.BLOCKCHAIN_TEST_ENGINE,\n        ):\n            return self.generate_state_test().generate(\n                t8n=t8n, fork=fork, fixture_format=fixture_format, eips=eips\n            )\n\n        raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFStateTest.check_container_type","title":"check_container_type(data) classmethod","text":"

    Check if the container exception matches the expected exception.

    Source code in src/ethereum_test_specs/eof.py
    @model_validator(mode=\"before\")\n@classmethod\ndef check_container_type(cls, data: Any) -> Any:\n    \"\"\"\n    Check if the container exception matches the expected exception.\n    \"\"\"\n    if isinstance(data, dict):\n        container = data.get(\"data\")\n        deploy_tx = data.get(\"deploy_tx\")\n        container_kind = data.get(\"container_kind\")\n        if deploy_tx is None:\n            if (\n                container is not None\n                and isinstance(container, Container)\n                and \"kind\" in container.model_fields_set\n                and container.kind == ContainerKind.INITCODE\n            ) or (container_kind is not None and container_kind == ContainerKind.INITCODE):\n                data[\"deploy_tx\"] = True\n    return data\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFStateTest.pytest_parameter_name","title":"pytest_parameter_name() classmethod","text":"

    Workaround for pytest parameter name.

    Source code in src/ethereum_test_specs/eof.py
    @classmethod\ndef pytest_parameter_name(cls) -> str:\n    \"\"\"\n    Workaround for pytest parameter name.\n    \"\"\"\n    return \"eof_state_test\"\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFStateTest.generate_state_test","title":"generate_state_test()","text":"

    Generate the StateTest filler.

    Source code in src/ethereum_test_specs/eof.py
    def generate_state_test(self) -> StateTest:\n    \"\"\"\n    Generate the StateTest filler.\n    \"\"\"\n    assert self.pre is not None, \"pre must be set to generate a StateTest.\"\n    tx = Transaction(\n        sender=self.pre.fund_eoa(amount=self.tx_sender_funding_amount),\n        gas_limit=self.tx_gas_limit,\n    )\n    post = Alloc()\n    if self.expect_exception is not None:  # Invalid EOF\n        tx.to = None  # Make EIP-7698 create transaction\n        tx.data = Bytes(self.data + self.tx_data)  # by concatenating container and tx data.\n        post[tx.created_contract] = None  # Expect failure.\n    elif self.deploy_tx:\n        tx.to = None  # Make EIP-7698 create transaction\n        tx.data = Bytes(self.data + self.tx_data)  # by concatenating container and tx data.\n        post[tx.created_contract] = self.container_post  # Successful.\n    else:\n        tx.to = self.pre.deploy_contract(code=self.data)\n        tx.data = self.tx_data\n        post[tx.to] = self.container_post\n    return StateTest(\n        pre=self.pre,\n        tx=tx,\n        env=self.env,\n        post=post,\n        t8n_dump_dir=self.t8n_dump_dir,\n    )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFStateTest.generate","title":"generate(*, t8n, fork, eips=None, fixture_format, **_)","text":"

    Generate the BlockchainTest fixture.

    Source code in src/ethereum_test_specs/eof.py
    def generate(\n    self,\n    *,\n    t8n: TransitionTool,\n    fork: Fork,\n    eips: Optional[List[int]] = None,\n    fixture_format: FixtureFormats,\n    **_,\n) -> BaseFixture:\n    \"\"\"\n    Generate the BlockchainTest fixture.\n    \"\"\"\n    if fixture_format == FixtureFormats.EOF_TEST:\n        return self.make_eof_test_fixture(fork=fork, eips=eips)\n    elif fixture_format in (\n        FixtureFormats.STATE_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST_ENGINE,\n    ):\n        return self.generate_state_test().generate(\n            t8n=t8n, fork=fork, fixture_format=fixture_format, eips=eips\n        )\n\n    raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFTest","title":"EOFTest","text":"

    Bases: BaseTest

    Filler type that tests EOF containers.

    Source code in src/ethereum_test_specs/eof.py
    class EOFTest(BaseTest):\n    \"\"\"\n    Filler type that tests EOF containers.\n    \"\"\"\n\n    data: Bytes\n    expect_exception: EOFExceptionInstanceOrList | None = None\n    container_kind: ContainerKind | None = None\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = [\n        FixtureFormats.EOF_TEST,\n    ]\n\n    @model_validator(mode=\"before\")\n    @classmethod\n    def check_container_exception(cls, data: Any) -> Any:\n        \"\"\"\n        Check if the container exception matches the expected exception.\n        \"\"\"\n        if isinstance(data, dict):\n            container = data.get(\"data\")\n            expect_exception = data.get(\"expect_exception\")\n            container_kind = data.get(\"container_kind\")\n            if container is not None and isinstance(container, Container):\n                if (\n                    \"validity_error\" in container.model_fields_set\n                    and container.validity_error is not None\n                ):\n                    if expect_exception is not None:\n                        assert container.validity_error == expect_exception, (\n                            f\"Container validity error {container.validity_error} \"\n                            f\"does not match expected exception {expect_exception}.\"\n                        )\n                    if expect_exception is None:\n                        data[\"expect_exception\"] = container.validity_error\n                if \"kind\" in container.model_fields_set:\n                    if container_kind is not None:\n                        assert container.kind == container_kind, (\n                            f\"Container kind type {str(container.kind)} \"\n                            f\"does not match test {container_kind}.\"\n                        )\n                    if container.kind != ContainerKind.RUNTIME:\n                        data[\"container_kind\"] = container.kind\n        return data\n\n    @classmethod\n    def pytest_parameter_name(cls) -> str:\n        \"\"\"\n        Workaround for pytest parameter name.\n        \"\"\"\n        return \"eof_test\"\n\n    def make_eof_test_fixture(\n        self,\n        *,\n        fork: Fork,\n        eips: Optional[List[int]],\n    ) -> Fixture:\n        \"\"\"\n        Generate the EOF test fixture.\n        \"\"\"\n        vectors = [\n            Vector(\n                code=self.data,\n                container_kind=self.container_kind,\n                results={\n                    fork.blockchain_test_network_name(): Result(\n                        exception=self.expect_exception,\n                        valid=self.expect_exception is None,\n                    ),\n                },\n            )\n        ]\n        fixture = Fixture(vectors=dict(enumerate(vectors)))\n        try:\n            eof_parse = EOFParse()\n        except FileNotFoundError as e:\n            warnings.warn(f\"{e} Skipping EOF fixture verification. Fixtures may be invalid!\")\n            return fixture\n\n        for _, vector in fixture.vectors.items():\n            expected_result = vector.results.get(fork.blockchain_test_network_name())\n            if expected_result is None:\n                raise Exception(f\"EOF Fixture missing vector result for fork: {fork}\")\n            args = []\n            if vector.container_kind == ContainerKind.INITCODE:\n                args.append(\"--initcode\")\n            result = eof_parse.run(*args, input=str(vector.code))\n            self.verify_result(result, expected_result, vector.code)\n\n        return fixture\n\n    def verify_result(self, result: CompletedProcess, expected_result: Result, code: Bytes):\n        \"\"\"\n        Checks that the reported exception string matches the expected error.\n        \"\"\"\n        parser = EvmoneExceptionMapper()\n        actual_message = result.stdout.strip()\n        actual_exception = parser.message_to_exception(actual_message)\n\n        if expected_result.exception is None:\n            if \"OK\" in actual_message:\n                return\n            else:\n                raise UnexpectedEOFException(\n                    code=code, got=f\"{actual_exception} ({actual_message})\"\n                )\n        else:\n            expected_string = to_pipe_str(expected_result.exception)\n            print(expected_string)\n            print(actual_exception)\n            if \"OK\" in actual_message:\n                raise ExpectedEOFException(\n                    code=code,\n                    expected=f\"{expected_string}\",\n                )\n            elif actual_exception in expected_result.exception:\n                return\n            else:\n                raise EOFExceptionMismatch(\n                    code=code,\n                    expected=f\"{expected_string}\",\n                    got=f\"{actual_exception} ({actual_message})\",\n                )\n\n    def generate(\n        self,\n        *,\n        t8n: TransitionTool,\n        fork: Fork,\n        eips: Optional[List[int]] = None,\n        fixture_format: FixtureFormats,\n        **_,\n    ) -> BaseFixture:\n        \"\"\"\n        Generate the BlockchainTest fixture.\n        \"\"\"\n        if fixture_format == FixtureFormats.EOF_TEST:\n            return self.make_eof_test_fixture(fork=fork, eips=eips)\n\n        raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFTest.check_container_exception","title":"check_container_exception(data) classmethod","text":"

    Check if the container exception matches the expected exception.

    Source code in src/ethereum_test_specs/eof.py
    @model_validator(mode=\"before\")\n@classmethod\ndef check_container_exception(cls, data: Any) -> Any:\n    \"\"\"\n    Check if the container exception matches the expected exception.\n    \"\"\"\n    if isinstance(data, dict):\n        container = data.get(\"data\")\n        expect_exception = data.get(\"expect_exception\")\n        container_kind = data.get(\"container_kind\")\n        if container is not None and isinstance(container, Container):\n            if (\n                \"validity_error\" in container.model_fields_set\n                and container.validity_error is not None\n            ):\n                if expect_exception is not None:\n                    assert container.validity_error == expect_exception, (\n                        f\"Container validity error {container.validity_error} \"\n                        f\"does not match expected exception {expect_exception}.\"\n                    )\n                if expect_exception is None:\n                    data[\"expect_exception\"] = container.validity_error\n            if \"kind\" in container.model_fields_set:\n                if container_kind is not None:\n                    assert container.kind == container_kind, (\n                        f\"Container kind type {str(container.kind)} \"\n                        f\"does not match test {container_kind}.\"\n                    )\n                if container.kind != ContainerKind.RUNTIME:\n                    data[\"container_kind\"] = container.kind\n    return data\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFTest.pytest_parameter_name","title":"pytest_parameter_name() classmethod","text":"

    Workaround for pytest parameter name.

    Source code in src/ethereum_test_specs/eof.py
    @classmethod\ndef pytest_parameter_name(cls) -> str:\n    \"\"\"\n    Workaround for pytest parameter name.\n    \"\"\"\n    return \"eof_test\"\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFTest.make_eof_test_fixture","title":"make_eof_test_fixture(*, fork, eips)","text":"

    Generate the EOF test fixture.

    Source code in src/ethereum_test_specs/eof.py
    def make_eof_test_fixture(\n    self,\n    *,\n    fork: Fork,\n    eips: Optional[List[int]],\n) -> Fixture:\n    \"\"\"\n    Generate the EOF test fixture.\n    \"\"\"\n    vectors = [\n        Vector(\n            code=self.data,\n            container_kind=self.container_kind,\n            results={\n                fork.blockchain_test_network_name(): Result(\n                    exception=self.expect_exception,\n                    valid=self.expect_exception is None,\n                ),\n            },\n        )\n    ]\n    fixture = Fixture(vectors=dict(enumerate(vectors)))\n    try:\n        eof_parse = EOFParse()\n    except FileNotFoundError as e:\n        warnings.warn(f\"{e} Skipping EOF fixture verification. Fixtures may be invalid!\")\n        return fixture\n\n    for _, vector in fixture.vectors.items():\n        expected_result = vector.results.get(fork.blockchain_test_network_name())\n        if expected_result is None:\n            raise Exception(f\"EOF Fixture missing vector result for fork: {fork}\")\n        args = []\n        if vector.container_kind == ContainerKind.INITCODE:\n            args.append(\"--initcode\")\n        result = eof_parse.run(*args, input=str(vector.code))\n        self.verify_result(result, expected_result, vector.code)\n\n    return fixture\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFTest.verify_result","title":"verify_result(result, expected_result, code)","text":"

    Checks that the reported exception string matches the expected error.

    Source code in src/ethereum_test_specs/eof.py
    def verify_result(self, result: CompletedProcess, expected_result: Result, code: Bytes):\n    \"\"\"\n    Checks that the reported exception string matches the expected error.\n    \"\"\"\n    parser = EvmoneExceptionMapper()\n    actual_message = result.stdout.strip()\n    actual_exception = parser.message_to_exception(actual_message)\n\n    if expected_result.exception is None:\n        if \"OK\" in actual_message:\n            return\n        else:\n            raise UnexpectedEOFException(\n                code=code, got=f\"{actual_exception} ({actual_message})\"\n            )\n    else:\n        expected_string = to_pipe_str(expected_result.exception)\n        print(expected_string)\n        print(actual_exception)\n        if \"OK\" in actual_message:\n            raise ExpectedEOFException(\n                code=code,\n                expected=f\"{expected_string}\",\n            )\n        elif actual_exception in expected_result.exception:\n            return\n        else:\n            raise EOFExceptionMismatch(\n                code=code,\n                expected=f\"{expected_string}\",\n                got=f\"{actual_exception} ({actual_message})\",\n            )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFTest.generate","title":"generate(*, t8n, fork, eips=None, fixture_format, **_)","text":"

    Generate the BlockchainTest fixture.

    Source code in src/ethereum_test_specs/eof.py
    def generate(\n    self,\n    *,\n    t8n: TransitionTool,\n    fork: Fork,\n    eips: Optional[List[int]] = None,\n    fixture_format: FixtureFormats,\n    **_,\n) -> BaseFixture:\n    \"\"\"\n    Generate the BlockchainTest fixture.\n    \"\"\"\n    if fixture_format == FixtureFormats.EOF_TEST:\n        return self.make_eof_test_fixture(fork=fork, eips=eips)\n\n    raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.StateTest","title":"StateTest","text":"

    Bases: BaseTest

    Filler type that tests transactions over the period of a single block.

    Source code in src/ethereum_test_specs/state.py
    class StateTest(BaseTest):\n    \"\"\"\n    Filler type that tests transactions over the period of a single block.\n    \"\"\"\n\n    env: Environment\n    pre: Alloc\n    post: Alloc\n    tx: Transaction\n    engine_api_error_code: Optional[EngineAPIError] = None\n    blockchain_test_header_verify: Optional[Header] = None\n    blockchain_test_rlp_modifier: Optional[Header] = None\n    chain_id: int = 1\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = [\n        FixtureFormats.BLOCKCHAIN_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST_ENGINE,\n        FixtureFormats.STATE_TEST,\n    ]\n\n    def _generate_blockchain_genesis_environment(self) -> Environment:\n        \"\"\"\n        Generate the genesis environment for the BlockchainTest formatted test.\n        \"\"\"\n        assert (\n            self.env.number >= 1\n        ), \"genesis block number cannot be negative, set state test env.number to 1\"\n\n        # Modify values to the proper values for the genesis block\n        # TODO: All of this can be moved to a new method in `Fork`\n        updated_values: Dict[str, Any] = {\n            \"withdrawals\": None,\n            \"parent_beacon_block_root\": None,\n            \"number\": self.env.number - 1,\n        }\n        if self.env.excess_blob_gas:\n            # The excess blob gas environment value means the value of the context (block header)\n            # where the transaction is executed. In a blockchain test, we need to indirectly\n            # set the excess blob gas by setting the excess blob gas of the genesis block\n            # to the expected value plus the TARGET_BLOB_GAS_PER_BLOCK, which is the value\n            # that will be subtracted from the excess blob gas when the first block is mined.\n            updated_values[\"excess_blob_gas\"] = (\n                self.env.excess_blob_gas + TARGET_BLOB_GAS_PER_BLOCK\n            )\n\n        return self.env.copy(**updated_values)\n\n    def _generate_blockchain_blocks(self) -> List[Block]:\n        \"\"\"\n        Generate the single block that represents this state test in a BlockchainTest format.\n        \"\"\"\n        return [\n            Block(\n                number=self.env.number,\n                timestamp=self.env.timestamp,\n                fee_recipient=self.env.fee_recipient,\n                difficulty=self.env.difficulty,\n                gas_limit=self.env.gas_limit,\n                extra_data=self.env.extra_data,\n                withdrawals=self.env.withdrawals,\n                parent_beacon_block_root=self.env.parent_beacon_block_root,\n                txs=[self.tx],\n                ommers=[],\n                exception=self.tx.error,\n                header_verify=self.blockchain_test_header_verify,\n                rlp_modifier=self.blockchain_test_rlp_modifier,\n            )\n        ]\n\n    def generate_blockchain_test(self) -> BlockchainTest:\n        \"\"\"\n        Generate a BlockchainTest fixture from this StateTest fixture.\n        \"\"\"\n        return BlockchainTest(\n            genesis_environment=self._generate_blockchain_genesis_environment(),\n            pre=self.pre,\n            post=self.post,\n            blocks=self._generate_blockchain_blocks(),\n            t8n_dump_dir=self.t8n_dump_dir,\n        )\n\n    def make_state_test_fixture(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        eips: Optional[List[int]] = None,\n    ) -> Fixture:\n        \"\"\"\n        Create a fixture from the state test definition.\n        \"\"\"\n        # We can't generate a state test fixture that names a transition fork,\n        # so we get the fork at the block number and timestamp of the state test\n        fork = fork.fork_at(self.env.number, self.env.timestamp)\n\n        env = self.env.set_fork_requirements(fork)\n        tx = self.tx.with_signature_and_sender(keep_secret_key=True)\n        pre_alloc = Alloc.merge(\n            Alloc.model_validate(fork.pre_allocation()),\n            self.pre,\n        )\n        if empty_accounts := pre_alloc.empty_accounts():\n            raise Exception(f\"Empty accounts in pre state: {empty_accounts}\")\n\n        transition_tool_output = t8n.evaluate(\n            alloc=pre_alloc,\n            txs=[tx],\n            env=env,\n            fork=fork,\n            chain_id=self.chain_id,\n            reward=0,  # Reward on state tests is always zero\n            eips=eips,\n            debug_output_path=self.get_next_transition_tool_output_path(),\n        )\n\n        try:\n            self.post.verify_post_alloc(transition_tool_output.alloc)\n        except Exception as e:\n            print_traces(t8n.get_traces())\n            raise e\n\n        return Fixture(\n            env=FixtureEnvironment(**env.model_dump(exclude_none=True)),\n            pre=pre_alloc,\n            post={\n                fork.blockchain_test_network_name(): [\n                    FixtureForkPost(\n                        state_root=transition_tool_output.result.state_root,\n                        logs_hash=transition_tool_output.result.logs_hash,\n                        tx_bytes=tx.rlp,\n                        expect_exception=tx.error,\n                    )\n                ]\n            },\n            transaction=FixtureTransaction.from_transaction(tx),\n        )\n\n    def generate(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        fixture_format: FixtureFormats,\n        eips: Optional[List[int]] = None,\n    ) -> BaseFixture:\n        \"\"\"\n        Generate the BlockchainTest fixture.\n        \"\"\"\n        if fixture_format in BlockchainTest.supported_fixture_formats:\n            return self.generate_blockchain_test().generate(\n                t8n=t8n, fork=fork, fixture_format=fixture_format, eips=eips\n            )\n        elif fixture_format == FixtureFormats.STATE_TEST:\n            return self.make_state_test_fixture(t8n, fork, eips)\n\n        raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.StateTest.generate_blockchain_test","title":"generate_blockchain_test()","text":"

    Generate a BlockchainTest fixture from this StateTest fixture.

    Source code in src/ethereum_test_specs/state.py
    def generate_blockchain_test(self) -> BlockchainTest:\n    \"\"\"\n    Generate a BlockchainTest fixture from this StateTest fixture.\n    \"\"\"\n    return BlockchainTest(\n        genesis_environment=self._generate_blockchain_genesis_environment(),\n        pre=self.pre,\n        post=self.post,\n        blocks=self._generate_blockchain_blocks(),\n        t8n_dump_dir=self.t8n_dump_dir,\n    )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.StateTest.make_state_test_fixture","title":"make_state_test_fixture(t8n, fork, eips=None)","text":"

    Create a fixture from the state test definition.

    Source code in src/ethereum_test_specs/state.py
    def make_state_test_fixture(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    eips: Optional[List[int]] = None,\n) -> Fixture:\n    \"\"\"\n    Create a fixture from the state test definition.\n    \"\"\"\n    # We can't generate a state test fixture that names a transition fork,\n    # so we get the fork at the block number and timestamp of the state test\n    fork = fork.fork_at(self.env.number, self.env.timestamp)\n\n    env = self.env.set_fork_requirements(fork)\n    tx = self.tx.with_signature_and_sender(keep_secret_key=True)\n    pre_alloc = Alloc.merge(\n        Alloc.model_validate(fork.pre_allocation()),\n        self.pre,\n    )\n    if empty_accounts := pre_alloc.empty_accounts():\n        raise Exception(f\"Empty accounts in pre state: {empty_accounts}\")\n\n    transition_tool_output = t8n.evaluate(\n        alloc=pre_alloc,\n        txs=[tx],\n        env=env,\n        fork=fork,\n        chain_id=self.chain_id,\n        reward=0,  # Reward on state tests is always zero\n        eips=eips,\n        debug_output_path=self.get_next_transition_tool_output_path(),\n    )\n\n    try:\n        self.post.verify_post_alloc(transition_tool_output.alloc)\n    except Exception as e:\n        print_traces(t8n.get_traces())\n        raise e\n\n    return Fixture(\n        env=FixtureEnvironment(**env.model_dump(exclude_none=True)),\n        pre=pre_alloc,\n        post={\n            fork.blockchain_test_network_name(): [\n                FixtureForkPost(\n                    state_root=transition_tool_output.result.state_root,\n                    logs_hash=transition_tool_output.result.logs_hash,\n                    tx_bytes=tx.rlp,\n                    expect_exception=tx.error,\n                )\n            ]\n        },\n        transaction=FixtureTransaction.from_transaction(tx),\n    )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.StateTest.generate","title":"generate(t8n, fork, fixture_format, eips=None)","text":"

    Generate the BlockchainTest fixture.

    Source code in src/ethereum_test_specs/state.py
    def generate(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    fixture_format: FixtureFormats,\n    eips: Optional[List[int]] = None,\n) -> BaseFixture:\n    \"\"\"\n    Generate the BlockchainTest fixture.\n    \"\"\"\n    if fixture_format in BlockchainTest.supported_fixture_formats:\n        return self.generate_blockchain_test().generate(\n            t8n=t8n, fork=fork, fixture_format=fixture_format, eips=eips\n        )\n    elif fixture_format == FixtureFormats.STATE_TEST:\n        return self.make_state_test_fixture(t8n, fork, eips)\n\n    raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.StateTestOnly","title":"StateTestOnly","text":"

    Bases: StateTest

    StateTest filler that only generates a state test fixture.

    Source code in src/ethereum_test_specs/state.py
    class StateTestOnly(StateTest):\n    \"\"\"\n    StateTest filler that only generates a state test fixture.\n    \"\"\"\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = [FixtureFormats.STATE_TEST]\n
    "},{"location":"library/ethereum_test_tools/","title":"Ethereum Test Tools Package","text":"

    Module containing tools for generating cross-client Ethereum execution layer tests.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account","title":"Account","text":"

    Bases: CamelModel

    State associated with an address.

    Source code in src/ethereum_test_base_types/composite_types.py
    class Account(CamelModel):\n    \"\"\"\n    State associated with an address.\n    \"\"\"\n\n    nonce: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0)\n    \"\"\"\n    The scalar value equal to a) the number of transactions sent by\n    an Externally Owned Account, b) the amount of contracts created by a\n    contract.\n    \"\"\"\n    balance: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0)\n    \"\"\"\n    The amount of Wei (10<sup>-18</sup> Eth) the account has.\n    \"\"\"\n    code: Bytes = Bytes(b\"\")\n    \"\"\"\n    Bytecode contained by the account.\n    \"\"\"\n    storage: Storage = Field(default_factory=Storage)\n    \"\"\"\n    Storage within a contract.\n    \"\"\"\n\n    NONEXISTENT: ClassVar[None] = None\n    \"\"\"\n    Sentinel object used to specify when an account should not exist in the\n    state.\n    \"\"\"\n\n    @dataclass(kw_only=True)\n    class NonceMismatch(Exception):\n        \"\"\"\n        Test expected a certain nonce value for an account but a different\n        value was found.\n        \"\"\"\n\n        address: Address\n        want: int | None\n        got: int | None\n\n        def __init__(self, address: Address, want: int | None, got: int | None, *args):\n            super().__init__(args)\n            self.address = address\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"unexpected nonce for account {self.address}{label_str}: \"\n                + f\"want {self.want}, got {self.got}\"\n            )\n\n    @dataclass(kw_only=True)\n    class BalanceMismatch(Exception):\n        \"\"\"\n        Test expected a certain balance for an account but a different\n        value was found.\n        \"\"\"\n\n        address: Address\n        want: int | None\n        got: int | None\n\n        def __init__(self, address: Address, want: int | None, got: int | None, *args):\n            super().__init__(args)\n            self.address = address\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"unexpected balance for account {self.address}{label_str}: \"\n                + f\"want {self.want}, got {self.got}\"\n            )\n\n    @dataclass(kw_only=True)\n    class CodeMismatch(Exception):\n        \"\"\"\n        Test expected a certain bytecode for an account but a different\n        one was found.\n        \"\"\"\n\n        address: Address\n        want: bytes | None\n        got: bytes | None\n\n        def __init__(self, address: Address, want: bytes | None, got: bytes | None, *args):\n            super().__init__(args)\n            self.address = address\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"unexpected code for account {self.address}{label_str}: \"\n                + f\"want {self.want}, got {self.got}\"\n            )\n\n    def check_alloc(self: \"Account\", address: Address, account: \"Account\"):\n        \"\"\"\n        Checks the returned alloc against an expected account in post state.\n        Raises exception on failure.\n        \"\"\"\n        if \"nonce\" in self.model_fields_set:\n            if self.nonce != account.nonce:\n                raise Account.NonceMismatch(\n                    address=address,\n                    want=self.nonce,\n                    got=account.nonce,\n                )\n\n        if \"balance\" in self.model_fields_set:\n            if self.balance != account.balance:\n                raise Account.BalanceMismatch(\n                    address=address,\n                    want=self.balance,\n                    got=account.balance,\n                )\n\n        if \"code\" in self.model_fields_set:\n            if self.code != account.code:\n                raise Account.CodeMismatch(\n                    address=address,\n                    want=self.code,\n                    got=account.code,\n                )\n\n        if \"storage\" in self.model_fields_set:\n            self.storage.must_be_equal(address=address, other=account.storage)\n\n    def __bool__(self: \"Account\") -> bool:\n        \"\"\"\n        Returns True on a non-empty account.\n        \"\"\"\n        return any((self.nonce, self.balance, self.code, self.storage))\n\n    @classmethod\n    def with_code(cls: Type, code: BytesConvertible) -> \"Account\":\n        \"\"\"\n        Create account with provided `code` and nonce of `1`.\n        \"\"\"\n        return Account(nonce=HexNumber(1), code=Bytes(code))\n\n    @classmethod\n    def merge(\n        cls: Type, account_1: \"Dict | Account | None\", account_2: \"Dict | Account | None\"\n    ) -> \"Account\":\n        \"\"\"\n        Create a merged account from two sources.\n        \"\"\"\n\n        def to_kwargs_dict(account: \"Dict | Account | None\") -> Dict:\n            if account is None:\n                return {}\n            if isinstance(account, dict):\n                return account\n            elif isinstance(account, cls):\n                return account.model_dump(exclude_unset=True)\n            raise TypeError(f\"Unexpected type for account merge: {type(account)}\")\n\n        kwargs = to_kwargs_dict(account_1)\n        kwargs.update(to_kwargs_dict(account_2))\n\n        return cls(**kwargs)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.nonce","title":"nonce: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0) class-attribute instance-attribute","text":"

    The scalar value equal to a) the number of transactions sent by an Externally Owned Account, b) the amount of contracts created by a contract.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.balance","title":"balance: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0) class-attribute instance-attribute","text":"

    The amount of Wei (10-18 Eth) the account has.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.code","title":"code: Bytes = Bytes(b'') class-attribute instance-attribute","text":"

    Bytecode contained by the account.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.storage","title":"storage: Storage = Field(default_factory=Storage) class-attribute instance-attribute","text":"

    Storage within a contract.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.NONEXISTENT","title":"NONEXISTENT: None = None class-attribute","text":"

    Sentinel object used to specify when an account should not exist in the state.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.NonceMismatch","title":"NonceMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain nonce value for an account but a different value was found.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass NonceMismatch(Exception):\n    \"\"\"\n    Test expected a certain nonce value for an account but a different\n    value was found.\n    \"\"\"\n\n    address: Address\n    want: int | None\n    got: int | None\n\n    def __init__(self, address: Address, want: int | None, got: int | None, *args):\n        super().__init__(args)\n        self.address = address\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"unexpected nonce for account {self.address}{label_str}: \"\n            + f\"want {self.want}, got {self.got}\"\n        )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.NonceMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"unexpected nonce for account {self.address}{label_str}: \"\n        + f\"want {self.want}, got {self.got}\"\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.BalanceMismatch","title":"BalanceMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain balance for an account but a different value was found.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass BalanceMismatch(Exception):\n    \"\"\"\n    Test expected a certain balance for an account but a different\n    value was found.\n    \"\"\"\n\n    address: Address\n    want: int | None\n    got: int | None\n\n    def __init__(self, address: Address, want: int | None, got: int | None, *args):\n        super().__init__(args)\n        self.address = address\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"unexpected balance for account {self.address}{label_str}: \"\n            + f\"want {self.want}, got {self.got}\"\n        )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.BalanceMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"unexpected balance for account {self.address}{label_str}: \"\n        + f\"want {self.want}, got {self.got}\"\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.CodeMismatch","title":"CodeMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain bytecode for an account but a different one was found.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass CodeMismatch(Exception):\n    \"\"\"\n    Test expected a certain bytecode for an account but a different\n    one was found.\n    \"\"\"\n\n    address: Address\n    want: bytes | None\n    got: bytes | None\n\n    def __init__(self, address: Address, want: bytes | None, got: bytes | None, *args):\n        super().__init__(args)\n        self.address = address\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"unexpected code for account {self.address}{label_str}: \"\n            + f\"want {self.want}, got {self.got}\"\n        )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.CodeMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"unexpected code for account {self.address}{label_str}: \"\n        + f\"want {self.want}, got {self.got}\"\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.check_alloc","title":"check_alloc(address, account)","text":"

    Checks the returned alloc against an expected account in post state. Raises exception on failure.

    Source code in src/ethereum_test_base_types/composite_types.py
    def check_alloc(self: \"Account\", address: Address, account: \"Account\"):\n    \"\"\"\n    Checks the returned alloc against an expected account in post state.\n    Raises exception on failure.\n    \"\"\"\n    if \"nonce\" in self.model_fields_set:\n        if self.nonce != account.nonce:\n            raise Account.NonceMismatch(\n                address=address,\n                want=self.nonce,\n                got=account.nonce,\n            )\n\n    if \"balance\" in self.model_fields_set:\n        if self.balance != account.balance:\n            raise Account.BalanceMismatch(\n                address=address,\n                want=self.balance,\n                got=account.balance,\n            )\n\n    if \"code\" in self.model_fields_set:\n        if self.code != account.code:\n            raise Account.CodeMismatch(\n                address=address,\n                want=self.code,\n                got=account.code,\n            )\n\n    if \"storage\" in self.model_fields_set:\n        self.storage.must_be_equal(address=address, other=account.storage)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.__bool__","title":"__bool__()","text":"

    Returns True on a non-empty account.

    Source code in src/ethereum_test_base_types/composite_types.py
    def __bool__(self: \"Account\") -> bool:\n    \"\"\"\n    Returns True on a non-empty account.\n    \"\"\"\n    return any((self.nonce, self.balance, self.code, self.storage))\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.with_code","title":"with_code(code) classmethod","text":"

    Create account with provided code and nonce of 1.

    Source code in src/ethereum_test_base_types/composite_types.py
    @classmethod\ndef with_code(cls: Type, code: BytesConvertible) -> \"Account\":\n    \"\"\"\n    Create account with provided `code` and nonce of `1`.\n    \"\"\"\n    return Account(nonce=HexNumber(1), code=Bytes(code))\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.merge","title":"merge(account_1, account_2) classmethod","text":"

    Create a merged account from two sources.

    Source code in src/ethereum_test_base_types/composite_types.py
    @classmethod\ndef merge(\n    cls: Type, account_1: \"Dict | Account | None\", account_2: \"Dict | Account | None\"\n) -> \"Account\":\n    \"\"\"\n    Create a merged account from two sources.\n    \"\"\"\n\n    def to_kwargs_dict(account: \"Dict | Account | None\") -> Dict:\n        if account is None:\n            return {}\n        if isinstance(account, dict):\n            return account\n        elif isinstance(account, cls):\n            return account.model_dump(exclude_unset=True)\n        raise TypeError(f\"Unexpected type for account merge: {type(account)}\")\n\n    kwargs = to_kwargs_dict(account_1)\n    kwargs.update(to_kwargs_dict(account_2))\n\n    return cls(**kwargs)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Address","title":"Address","text":"

    Bases: FixedSizeBytes[20]

    Class that helps represent Ethereum addresses in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class Address(FixedSizeBytes[20]):  # type: ignore\n    \"\"\"\n    Class that helps represent Ethereum addresses in tests.\n    \"\"\"\n\n    label: str | None = None\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Bytes","title":"Bytes","text":"

    Bases: bytes, ToStringSchema

    Class that helps represent bytes of variable length in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class Bytes(bytes, ToStringSchema):\n    \"\"\"\n    Class that helps represent bytes of variable length in tests.\n    \"\"\"\n\n    def __new__(cls, input: BytesConvertible):\n        \"\"\"\n        Creates a new Bytes object.\n        \"\"\"\n        if type(input) is cls:\n            return input\n        return super(Bytes, cls).__new__(cls, to_bytes(input))\n\n    def __hash__(self) -> int:\n        \"\"\"\n        Returns the hash of the bytes.\n        \"\"\"\n        return super(Bytes, self).__hash__()\n\n    def __str__(self) -> str:\n        \"\"\"\n        Returns the hexadecimal representation of the bytes.\n        \"\"\"\n        return self.hex()\n\n    def hex(self, *args, **kwargs) -> str:\n        \"\"\"\n        Returns the hexadecimal representation of the bytes.\n        \"\"\"\n        return \"0x\" + super().hex(*args, **kwargs)\n\n    @classmethod\n    def or_none(cls, input: \"Bytes | BytesConvertible | None\") -> \"Bytes | None\":\n        \"\"\"\n        Converts the input to a Bytes while accepting None.\n        \"\"\"\n        if input is None:\n            return input\n        return cls(input)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Bytes.__new__","title":"__new__(input)","text":"

    Creates a new Bytes object.

    Source code in src/ethereum_test_base_types/base_types.py
    def __new__(cls, input: BytesConvertible):\n    \"\"\"\n    Creates a new Bytes object.\n    \"\"\"\n    if type(input) is cls:\n        return input\n    return super(Bytes, cls).__new__(cls, to_bytes(input))\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Bytes.__hash__","title":"__hash__()","text":"

    Returns the hash of the bytes.

    Source code in src/ethereum_test_base_types/base_types.py
    def __hash__(self) -> int:\n    \"\"\"\n    Returns the hash of the bytes.\n    \"\"\"\n    return super(Bytes, self).__hash__()\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Bytes.__str__","title":"__str__()","text":"

    Returns the hexadecimal representation of the bytes.

    Source code in src/ethereum_test_base_types/base_types.py
    def __str__(self) -> str:\n    \"\"\"\n    Returns the hexadecimal representation of the bytes.\n    \"\"\"\n    return self.hex()\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Bytes.hex","title":"hex(*args, **kwargs)","text":"

    Returns the hexadecimal representation of the bytes.

    Source code in src/ethereum_test_base_types/base_types.py
    def hex(self, *args, **kwargs) -> str:\n    \"\"\"\n    Returns the hexadecimal representation of the bytes.\n    \"\"\"\n    return \"0x\" + super().hex(*args, **kwargs)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Bytes.or_none","title":"or_none(input) classmethod","text":"

    Converts the input to a Bytes while accepting None.

    Source code in src/ethereum_test_base_types/base_types.py
    @classmethod\ndef or_none(cls, input: \"Bytes | BytesConvertible | None\") -> \"Bytes | None\":\n    \"\"\"\n    Converts the input to a Bytes while accepting None.\n    \"\"\"\n    if input is None:\n        return input\n    return cls(input)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Hash","title":"Hash","text":"

    Bases: FixedSizeBytes[32]

    Class that helps represent hashes in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class Hash(FixedSizeBytes[32]):  # type: ignore\n    \"\"\"\n    Class that helps represent hashes in tests.\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.ReferenceSpec","title":"ReferenceSpec","text":"

    Reference Specification Description Abstract Class.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    class ReferenceSpec:\n    \"\"\"\n    Reference Specification Description Abstract Class.\n    \"\"\"\n\n    @abstractmethod\n    def name(self) -> str:\n        \"\"\"\n        Returns the name of the spec.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def has_known_version(self) -> bool:\n        \"\"\"\n        Returns true if the reference spec object is hard-coded with a latest\n        known version.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def known_version(self) -> str:\n        \"\"\"\n        Returns the latest known version in the reference.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def api_url(self) -> str:\n        \"\"\"\n        Returns the URL required to poll the version from an API, if needed.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def latest_version(self) -> str:\n        \"\"\"\n        Returns a digest that points to the latest version of the spec.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def is_outdated(self) -> bool:\n        \"\"\"\n        Checks whether the reference specification has been updated since the\n        test was last updated.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def write_info(self, info: Dict[str, str]):\n        \"\"\"\n        Writes info about the reference specification used into the output\n        fixture.\n        \"\"\"\n        pass\n\n    @staticmethod\n    @abstractmethod\n    def parseable_from_module(module_dict: Dict[str, Any]) -> bool:\n        \"\"\"\n        Checks whether the module's dict contains required reference spec\n        information.\n        \"\"\"\n        pass\n\n    @staticmethod\n    @abstractmethod\n    def parse_from_module(module_dict: Dict[str, Any]) -> \"ReferenceSpec\":\n        \"\"\"\n        Parses the module's dict into a reference spec.\n        \"\"\"\n        pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.ReferenceSpec.name","title":"name() abstractmethod","text":"

    Returns the name of the spec.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef name(self) -> str:\n    \"\"\"\n    Returns the name of the spec.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.ReferenceSpec.has_known_version","title":"has_known_version() abstractmethod","text":"

    Returns true if the reference spec object is hard-coded with a latest known version.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef has_known_version(self) -> bool:\n    \"\"\"\n    Returns true if the reference spec object is hard-coded with a latest\n    known version.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.ReferenceSpec.known_version","title":"known_version() abstractmethod","text":"

    Returns the latest known version in the reference.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef known_version(self) -> str:\n    \"\"\"\n    Returns the latest known version in the reference.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.ReferenceSpec.api_url","title":"api_url() abstractmethod","text":"

    Returns the URL required to poll the version from an API, if needed.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef api_url(self) -> str:\n    \"\"\"\n    Returns the URL required to poll the version from an API, if needed.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.ReferenceSpec.latest_version","title":"latest_version() abstractmethod","text":"

    Returns a digest that points to the latest version of the spec.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef latest_version(self) -> str:\n    \"\"\"\n    Returns a digest that points to the latest version of the spec.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.ReferenceSpec.is_outdated","title":"is_outdated() abstractmethod","text":"

    Checks whether the reference specification has been updated since the test was last updated.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef is_outdated(self) -> bool:\n    \"\"\"\n    Checks whether the reference specification has been updated since the\n    test was last updated.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.ReferenceSpec.write_info","title":"write_info(info) abstractmethod","text":"

    Writes info about the reference specification used into the output fixture.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef write_info(self, info: Dict[str, str]):\n    \"\"\"\n    Writes info about the reference specification used into the output\n    fixture.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.ReferenceSpec.parseable_from_module","title":"parseable_from_module(module_dict) abstractmethod staticmethod","text":"

    Checks whether the module's dict contains required reference spec information.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @staticmethod\n@abstractmethod\ndef parseable_from_module(module_dict: Dict[str, Any]) -> bool:\n    \"\"\"\n    Checks whether the module's dict contains required reference spec\n    information.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.ReferenceSpec.parse_from_module","title":"parse_from_module(module_dict) abstractmethod staticmethod","text":"

    Parses the module's dict into a reference spec.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @staticmethod\n@abstractmethod\ndef parse_from_module(module_dict: Dict[str, Any]) -> \"ReferenceSpec\":\n    \"\"\"\n    Parses the module's dict into a reference spec.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException","title":"BlockException","text":"

    Bases: ExceptionBase

    Exception raised when a block is invalid, but not due to a transaction.

    E.g. all transactions in the block are valid, and can be applied to the state, but the block header contains an invalid field.

    Source code in src/ethereum_test_exceptions/exceptions.py
    @unique\nclass BlockException(ExceptionBase):\n    \"\"\"\n    Exception raised when a block is invalid, but not due to a transaction.\n\n    E.g. all transactions in the block are valid, and can be applied to the state, but the\n    block header contains an invalid field.\n    \"\"\"\n\n    TOO_MANY_UNCLES = auto()\n    \"\"\"\n    Block declares too many uncles over the allowed limit.\n    \"\"\"\n    UNCLE_IN_CHAIN = auto()\n    \"\"\"\n    Block declares uncle header that is already imported into chain.\n    \"\"\"\n    UNCLE_IS_ANCESTOR = auto()\n    \"\"\"\n    Block declares uncle header that is directly a parent of this block.\n    \"\"\"\n    UNCLE_IS_BROTHER = auto()\n    \"\"\"\n    Block declares two similar uncle headers.\n    \"\"\"\n    UNCLE_PARENT_INCORRECT = auto()\n    \"\"\"\n    Block declares uncle header that is an outdated block to be an uncle.\n    \"\"\"\n    EXTRA_DATA_TOO_BIG = auto()\n    \"\"\"\n    Block header's extra data >32 bytes.\n    \"\"\"\n    EXTRA_DATA_INVALID_DAO = auto()\n    \"\"\"\n    Block header's extra data after dao fork must be a fixed pre defined hash.\n    \"\"\"\n    UNKNOWN_PARENT = auto()\n    \"\"\"\n    Block header's parent hash does not correspond to any of existing blocks on chain.\n    \"\"\"\n    UNCLE_UNKNOWN_PARENT = auto()\n    \"\"\"\n    Uncle header's parent hash does not correspond to any of existing blocks on chain.\n    \"\"\"\n    UNKNOWN_PARENT_ZERO = auto()\n    \"\"\"\n    Block header's parent hash is zero hash.\n    \"\"\"\n    GASLIMIT_TOO_BIG = auto()\n    \"\"\"\n    Block header's gas limit > 0x7fffffffffffffff.\n    \"\"\"\n    INVALID_BLOCK_NUMBER = auto()\n    \"\"\"\n    Block header's number != parent header's number + 1.\n    \"\"\"\n    INVALID_BLOCK_TIMESTAMP_OLDER_THAN_PARENT = auto()\n    \"\"\"\n    Block header's timestamp <= parent header's timestamp.\n    \"\"\"\n    INVALID_DIFFICULTY = auto()\n    \"\"\"\n    Block header's difficulty does not match the difficulty formula calculated from previous block.\n    \"\"\"\n    INVALID_LOG_BLOOM = auto()\n    \"\"\"\n    Block header's logs bloom hash does not match the actually computed log bloom.\n    \"\"\"\n    INVALID_STATE_ROOT = auto()\n    \"\"\"\n    Block header's state root hash does not match the actually computed hash of the state.\n    \"\"\"\n    INVALID_RECEIPTS_ROOT = auto()\n    \"\"\"\n    Block header's receipts root hash does not match the actually computed hash of receipts.\n    \"\"\"\n    INVALID_TRANSACTIONS_ROOT = auto()\n    \"\"\"\n    Block header's transactions root hash does not match the actually computed hash of tx tree.\n    \"\"\"\n    INVALID_UNCLES_HASH = auto()\n    \"\"\"\n    Block header's uncle hash does not match the actually computed hash of block's uncles.\n    \"\"\"\n    GAS_USED_OVERFLOW = auto()\n    \"\"\"\n    Block transactions consume more gas than block header allow.\n    \"\"\"\n    INVALID_GASLIMIT = auto()\n    \"\"\"\n    Block header's gas limit does not match the gas limit formula calculated from previous block.\n    \"\"\"\n    INVALID_BASEFEE_PER_GAS = auto()\n    \"\"\"\n    Block header's base_fee_per_gas field is calculated incorrect.\n    \"\"\"\n    INVALID_GAS_USED = auto()\n    \"\"\"\n    Block header's actual gas used does not match the provided header's value\n    \"\"\"\n    INVALID_WITHDRAWALS_ROOT = auto()\n    \"\"\"\n    Block header's withdrawals root does not match calculated withdrawals root.\n    \"\"\"\n    INCORRECT_BLOCK_FORMAT = auto()\n    \"\"\"\n    Block's format is incorrect, contains invalid fields, is missing fields, or contains fields of\n    a fork that is not active yet.\n    \"\"\"\n    BLOB_GAS_USED_ABOVE_LIMIT = auto()\n    \"\"\"\n    Block's blob gas used in header is above the limit.\n    \"\"\"\n    INCORRECT_BLOB_GAS_USED = auto()\n    \"\"\"\n    Block's blob gas used in header is incorrect.\n    \"\"\"\n    INCORRECT_EXCESS_BLOB_GAS = auto()\n    \"\"\"\n    Block's excess blob gas in header is incorrect.\n    \"\"\"\n    RLP_STRUCTURES_ENCODING = auto()\n    \"\"\"\n    Block's rlp encoding is valid but ethereum structures in it are invalid.\n    \"\"\"\n    RLP_WITHDRAWALS_NOT_READ = auto()\n    \"\"\"\n    Block's rlp encoding is missing withdrawals.\n    \"\"\"\n    RLP_INVALID_FIELD_OVERFLOW_64 = auto()\n    \"\"\"\n    One of block's fields rlp is overflow 2**64 value.\n    \"\"\"\n    RLP_INVALID_ADDRESS = auto()\n    \"\"\"\n    Block withdrawals address is rlp of invalid address != 20 bytes.\n    \"\"\"\n    INVALID_REQUESTS = auto()\n    \"\"\"\n    Block's requests are invalid.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LEGACY = auto()\n    \"\"\"\n    Legacy block import is impossible in this chain configuration.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LEGACY_WRONG_PARENT = auto()\n    \"\"\"\n    Legacy block import is impossible, trying to import on top of a block that is not legacy.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LONDON_WRONG_PARENT = auto()\n    \"\"\"\n    Trying to import london (basefee) block on top of block that is not 1559.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_PARIS_WRONG_POW = auto()\n    \"\"\"\n    Trying to import paris(merge) block with PoW enabled.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_PARIS_WRONG_POS = auto()\n    \"\"\"\n    Trying to import paris(merge) block with PoS enabled before TTD is reached.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LONDON_OVER_PARIS = auto()\n    \"\"\"\n    Trying to import london looking block over paris network (POS).\n    \"\"\"\n    IMPORT_IMPOSSIBLE_PARIS_OVER_SHANGHAI = auto()\n    \"\"\"\n    Trying to import paris block on top of shanghai block.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_SHANGHAI = auto()\n    \"\"\"\n    Shanghai block import is impossible in this chain configuration.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_UNCLES_OVER_PARIS = auto()\n    \"\"\"\n    Trying to import a block after paris fork that has not empty uncles hash.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_DIFFICULTY_OVER_PARIS = auto()\n    \"\"\"\n    Trying to import a block after paris fork that has difficulty != 0.\n    \"\"\"\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.TOO_MANY_UNCLES","title":"TOO_MANY_UNCLES = auto() class-attribute instance-attribute","text":"

    Block declares too many uncles over the allowed limit.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.UNCLE_IN_CHAIN","title":"UNCLE_IN_CHAIN = auto() class-attribute instance-attribute","text":"

    Block declares uncle header that is already imported into chain.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.UNCLE_IS_ANCESTOR","title":"UNCLE_IS_ANCESTOR = auto() class-attribute instance-attribute","text":"

    Block declares uncle header that is directly a parent of this block.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.UNCLE_IS_BROTHER","title":"UNCLE_IS_BROTHER = auto() class-attribute instance-attribute","text":"

    Block declares two similar uncle headers.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.UNCLE_PARENT_INCORRECT","title":"UNCLE_PARENT_INCORRECT = auto() class-attribute instance-attribute","text":"

    Block declares uncle header that is an outdated block to be an uncle.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.EXTRA_DATA_TOO_BIG","title":"EXTRA_DATA_TOO_BIG = auto() class-attribute instance-attribute","text":"

    Block header's extra data >32 bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.EXTRA_DATA_INVALID_DAO","title":"EXTRA_DATA_INVALID_DAO = auto() class-attribute instance-attribute","text":"

    Block header's extra data after dao fork must be a fixed pre defined hash.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.UNKNOWN_PARENT","title":"UNKNOWN_PARENT = auto() class-attribute instance-attribute","text":"

    Block header's parent hash does not correspond to any of existing blocks on chain.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.UNCLE_UNKNOWN_PARENT","title":"UNCLE_UNKNOWN_PARENT = auto() class-attribute instance-attribute","text":"

    Uncle header's parent hash does not correspond to any of existing blocks on chain.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.UNKNOWN_PARENT_ZERO","title":"UNKNOWN_PARENT_ZERO = auto() class-attribute instance-attribute","text":"

    Block header's parent hash is zero hash.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.GASLIMIT_TOO_BIG","title":"GASLIMIT_TOO_BIG = auto() class-attribute instance-attribute","text":"

    Block header's gas limit > 0x7fffffffffffffff.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_BLOCK_NUMBER","title":"INVALID_BLOCK_NUMBER = auto() class-attribute instance-attribute","text":"

    Block header's number != parent header's number + 1.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_BLOCK_TIMESTAMP_OLDER_THAN_PARENT","title":"INVALID_BLOCK_TIMESTAMP_OLDER_THAN_PARENT = auto() class-attribute instance-attribute","text":"

    Block header's timestamp <= parent header's timestamp.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_DIFFICULTY","title":"INVALID_DIFFICULTY = auto() class-attribute instance-attribute","text":"

    Block header's difficulty does not match the difficulty formula calculated from previous block.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_LOG_BLOOM","title":"INVALID_LOG_BLOOM = auto() class-attribute instance-attribute","text":"

    Block header's logs bloom hash does not match the actually computed log bloom.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_STATE_ROOT","title":"INVALID_STATE_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's state root hash does not match the actually computed hash of the state.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_RECEIPTS_ROOT","title":"INVALID_RECEIPTS_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's receipts root hash does not match the actually computed hash of receipts.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_TRANSACTIONS_ROOT","title":"INVALID_TRANSACTIONS_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's transactions root hash does not match the actually computed hash of tx tree.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_UNCLES_HASH","title":"INVALID_UNCLES_HASH = auto() class-attribute instance-attribute","text":"

    Block header's uncle hash does not match the actually computed hash of block's uncles.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.GAS_USED_OVERFLOW","title":"GAS_USED_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Block transactions consume more gas than block header allow.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_GASLIMIT","title":"INVALID_GASLIMIT = auto() class-attribute instance-attribute","text":"

    Block header's gas limit does not match the gas limit formula calculated from previous block.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_BASEFEE_PER_GAS","title":"INVALID_BASEFEE_PER_GAS = auto() class-attribute instance-attribute","text":"

    Block header's base_fee_per_gas field is calculated incorrect.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_GAS_USED","title":"INVALID_GAS_USED = auto() class-attribute instance-attribute","text":"

    Block header's actual gas used does not match the provided header's value

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_WITHDRAWALS_ROOT","title":"INVALID_WITHDRAWALS_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's withdrawals root does not match calculated withdrawals root.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INCORRECT_BLOCK_FORMAT","title":"INCORRECT_BLOCK_FORMAT = auto() class-attribute instance-attribute","text":"

    Block's format is incorrect, contains invalid fields, is missing fields, or contains fields of a fork that is not active yet.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.BLOB_GAS_USED_ABOVE_LIMIT","title":"BLOB_GAS_USED_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    Block's blob gas used in header is above the limit.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INCORRECT_BLOB_GAS_USED","title":"INCORRECT_BLOB_GAS_USED = auto() class-attribute instance-attribute","text":"

    Block's blob gas used in header is incorrect.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INCORRECT_EXCESS_BLOB_GAS","title":"INCORRECT_EXCESS_BLOB_GAS = auto() class-attribute instance-attribute","text":"

    Block's excess blob gas in header is incorrect.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.RLP_STRUCTURES_ENCODING","title":"RLP_STRUCTURES_ENCODING = auto() class-attribute instance-attribute","text":"

    Block's rlp encoding is valid but ethereum structures in it are invalid.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.RLP_WITHDRAWALS_NOT_READ","title":"RLP_WITHDRAWALS_NOT_READ = auto() class-attribute instance-attribute","text":"

    Block's rlp encoding is missing withdrawals.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.RLP_INVALID_FIELD_OVERFLOW_64","title":"RLP_INVALID_FIELD_OVERFLOW_64 = auto() class-attribute instance-attribute","text":"

    One of block's fields rlp is overflow 2**64 value.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.RLP_INVALID_ADDRESS","title":"RLP_INVALID_ADDRESS = auto() class-attribute instance-attribute","text":"

    Block withdrawals address is rlp of invalid address != 20 bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_REQUESTS","title":"INVALID_REQUESTS = auto() class-attribute instance-attribute","text":"

    Block's requests are invalid.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.IMPORT_IMPOSSIBLE_LEGACY","title":"IMPORT_IMPOSSIBLE_LEGACY = auto() class-attribute instance-attribute","text":"

    Legacy block import is impossible in this chain configuration.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.IMPORT_IMPOSSIBLE_LEGACY_WRONG_PARENT","title":"IMPORT_IMPOSSIBLE_LEGACY_WRONG_PARENT = auto() class-attribute instance-attribute","text":"

    Legacy block import is impossible, trying to import on top of a block that is not legacy.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.IMPORT_IMPOSSIBLE_LONDON_WRONG_PARENT","title":"IMPORT_IMPOSSIBLE_LONDON_WRONG_PARENT = auto() class-attribute instance-attribute","text":"

    Trying to import london (basefee) block on top of block that is not 1559.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.IMPORT_IMPOSSIBLE_PARIS_WRONG_POW","title":"IMPORT_IMPOSSIBLE_PARIS_WRONG_POW = auto() class-attribute instance-attribute","text":"

    Trying to import paris(merge) block with PoW enabled.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.IMPORT_IMPOSSIBLE_PARIS_WRONG_POS","title":"IMPORT_IMPOSSIBLE_PARIS_WRONG_POS = auto() class-attribute instance-attribute","text":"

    Trying to import paris(merge) block with PoS enabled before TTD is reached.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.IMPORT_IMPOSSIBLE_LONDON_OVER_PARIS","title":"IMPORT_IMPOSSIBLE_LONDON_OVER_PARIS = auto() class-attribute instance-attribute","text":"

    Trying to import london looking block over paris network (POS).

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.IMPORT_IMPOSSIBLE_PARIS_OVER_SHANGHAI","title":"IMPORT_IMPOSSIBLE_PARIS_OVER_SHANGHAI = auto() class-attribute instance-attribute","text":"

    Trying to import paris block on top of shanghai block.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.IMPORT_IMPOSSIBLE_SHANGHAI","title":"IMPORT_IMPOSSIBLE_SHANGHAI = auto() class-attribute instance-attribute","text":"

    Shanghai block import is impossible in this chain configuration.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.IMPORT_IMPOSSIBLE_UNCLES_OVER_PARIS","title":"IMPORT_IMPOSSIBLE_UNCLES_OVER_PARIS = auto() class-attribute instance-attribute","text":"

    Trying to import a block after paris fork that has not empty uncles hash.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.IMPORT_IMPOSSIBLE_DIFFICULTY_OVER_PARIS","title":"IMPORT_IMPOSSIBLE_DIFFICULTY_OVER_PARIS = auto() class-attribute instance-attribute","text":"

    Trying to import a block after paris fork that has difficulty != 0.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EngineAPIError","title":"EngineAPIError","text":"

    Bases: IntEnum

    List of Engine API errors

    Source code in src/ethereum_test_exceptions/engine_api.py
    class EngineAPIError(IntEnum):\n    \"\"\"\n    List of Engine API errors\n    \"\"\"\n\n    ParseError = -32700\n    InvalidRequest = -32600\n    MethodNotFound = -32601\n    InvalidParams = -32602\n    InternalError = -32603\n    ServerError = -32000\n    UnknownPayload = -38001\n    InvalidForkchoiceState = -38002\n    InvalidPayloadAttributes = -38003\n    TooLargeRequest = -38004\n    UnsupportedFork = -38005\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException","title":"EOFException","text":"

    Bases: ExceptionBase

    Exception raised when an EOF container is invalid.

    Source code in src/ethereum_test_exceptions/exceptions.py
    @unique\nclass EOFException(ExceptionBase):\n    \"\"\"\n    Exception raised when an EOF container is invalid.\n    \"\"\"\n\n    DEFAULT_EXCEPTION = auto()\n    \"\"\"\n    Expect some exception, not yet known.\n    \"\"\"\n\n    UNDEFINED_EXCEPTION = auto()\n    \"\"\"\n    Indicates that exception string is not mapped to an exception enum.\n    \"\"\"\n\n    UNDEFINED_INSTRUCTION = auto()\n    \"\"\"\n    EOF container has undefined instruction in it's body code.\n    \"\"\"\n\n    UNKNOWN_VERSION = auto()\n    \"\"\"\n    EOF container has an unknown version.\n    \"\"\"\n    INCOMPLETE_MAGIC = auto()\n    \"\"\"\n    EOF container has not enough bytes to read magic.\n    \"\"\"\n    INVALID_MAGIC = auto()\n    \"\"\"\n    EOF container has not allowed magic version byte.\n    \"\"\"\n    INVALID_VERSION = auto()\n    \"\"\"\n    EOF container version bytes mismatch.\n    \"\"\"\n    INVALID_NON_RETURNING_FLAG = auto()\n    \"\"\"\n    EOF container's section has non-returning flag set incorrectly.\n    \"\"\"\n    INVALID_RJUMP_DESTINATION = auto()\n    \"\"\"\n    Code has RJUMP instruction with invalid parameters.\n    \"\"\"\n    MISSING_TYPE_HEADER = auto()\n    \"\"\"\n    EOF container missing types section.\n    \"\"\"\n    INVALID_TYPE_SECTION_SIZE = auto()\n    \"\"\"\n    EOF container types section has wrong size.\n    \"\"\"\n    INVALID_TYPE_BODY = auto()\n    \"\"\"\n    EOF container types body section bytes are wrong.\n    \"\"\"\n    MISSING_CODE_HEADER = auto()\n    \"\"\"\n    EOF container missing code section.\n    \"\"\"\n    INVALID_CODE_SECTION = auto()\n    \"\"\"\n    EOF container code section bytes are incorrect.\n    \"\"\"\n    INCOMPLETE_CODE_HEADER = auto()\n    \"\"\"\n    EOF container code header missing bytes.\n    \"\"\"\n    INCOMPLETE_DATA_HEADER = auto()\n    \"\"\"\n    EOF container data header missing bytes.\n    \"\"\"\n    ZERO_SECTION_SIZE = auto()\n    \"\"\"\n    EOF container data header construction is wrong.\n    \"\"\"\n    MISSING_DATA_SECTION = auto()\n    \"\"\"\n    EOF container missing data section\n    \"\"\"\n    INCOMPLETE_CONTAINER = auto()\n    \"\"\"\n    EOF container bytes are incomplete.\n    \"\"\"\n    INVALID_SECTION_BODIES_SIZE = auto()\n    \"\"\"\n    Sections bodies does not match sections headers.\n    \"\"\"\n    TRAILING_BYTES = auto()\n    \"\"\"\n    EOF container has bytes beyond data section.\n    \"\"\"\n    MISSING_TERMINATOR = auto()\n    \"\"\"\n    EOF container missing terminator bytes between header and body.\n    \"\"\"\n    MISSING_HEADERS_TERMINATOR = auto()\n    \"\"\"\n    Some type of another exception about missing headers terminator.\n    \"\"\"\n    INVALID_FIRST_SECTION_TYPE = auto()\n    \"\"\"\n    EOF container header does not have types section first.\n    \"\"\"\n    INCOMPLETE_SECTION_NUMBER = auto()\n    \"\"\"\n    EOF container header has section that is missing declaration bytes.\n    \"\"\"\n    INCOMPLETE_SECTION_SIZE = auto()\n    \"\"\"\n    EOF container header has section that is defined incorrectly.\n    \"\"\"\n    TOO_MANY_CODE_SECTIONS = auto()\n    \"\"\"\n    EOF container header has too many code sections.\n    \"\"\"\n    MISSING_STOP_OPCODE = auto()\n    \"\"\"\n    EOF container's code missing STOP bytecode at it's end.\n    \"\"\"\n    INPUTS_OUTPUTS_NUM_ABOVE_LIMIT = auto()\n    \"\"\"\n    EOF container code section inputs/outputs number is above the limit\n    \"\"\"\n    UNREACHABLE_INSTRUCTIONS = auto()\n    \"\"\"\n    EOF container's code have instructions that are unreachable.\n    \"\"\"\n    UNREACHABLE_CODE_SECTIONS = auto()\n    \"\"\"\n    EOF container's body have code sections that are unreachable.\n    \"\"\"\n    STACK_UNDERFLOW = auto()\n    \"\"\"\n    EOF container's code produces an stack underflow.\n    \"\"\"\n    STACK_HEIGHT_MISMATCH = auto()\n    \"\"\"\n    EOF container section stack height mismatch.\n    \"\"\"\n    MAX_STACK_HEIGHT_ABOVE_LIMIT = auto()\n    \"\"\"\n    EOF container's specified max stack height is above the limit.\n    \"\"\"\n    STACK_HIGHER_THAN_OUTPUTS = auto()\n    \"\"\"\n    EOF container section stack height is higher than the outputs.\n    when returning\n    \"\"\"\n    JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS = auto()\n    \"\"\"\n    EOF container section JUMPF's to a destination section with incompatible outputs.\n    \"\"\"\n    INVALID_MAX_STACK_HEIGHT = auto()\n    \"\"\"\n    EOF container section's specified max stack height does not match the actual stack height.\n    \"\"\"\n    INVALID_DATALOADN_INDEX = auto()\n    \"\"\"\n    A DATALOADN instruction has out-of-bounds index for the data section.\n    \"\"\"\n    TRUNCATED_INSTRUCTION = auto()\n    \"\"\"\n    EOF container's code section has truncated instruction.\n    \"\"\"\n    TOPLEVEL_CONTAINER_TRUNCATED = auto()\n    \"\"\"\n    Top-level EOF container has data section truncated\n    \"\"\"\n    ORPHAN_SUBCONTAINER = auto()\n    \"\"\"\n    EOF container has an unreferenced subcontainer.\n    '\"\"\"\n    CONTAINER_SIZE_ABOVE_LIMIT = auto()\n    \"\"\"\n    EOF container is above size limit\n    \"\"\"\n    INVALID_CONTAINER_SECTION_INDEX = auto()\n    \"\"\"\n    Instruction references container section that does not exist.\n    \"\"\"\n    INCOMPATIBLE_CONTAINER_KIND = auto()\n    \"\"\"\n    Incompatible instruction found in a container of a specific kind.\n    \"\"\"\n    TOO_MANY_CONTAINERS = auto()\n    \"\"\"\n    EOF container header has too many sub-containers.\n    \"\"\"\n    INVALID_CODE_SECTION_INDEX = auto()\n    \"\"\"\n    CALLF Operation referes to a non-existent code section\n    \"\"\"\n    UNEXPECTED_HEADER_KIND = auto()\n    \"\"\"\n    Header parsing encounterd a section kind it wasn't expecting\n    \"\"\"\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.DEFAULT_EXCEPTION","title":"DEFAULT_EXCEPTION = auto() class-attribute instance-attribute","text":"

    Expect some exception, not yet known.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.UNDEFINED_EXCEPTION","title":"UNDEFINED_EXCEPTION = auto() class-attribute instance-attribute","text":"

    Indicates that exception string is not mapped to an exception enum.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.UNDEFINED_INSTRUCTION","title":"UNDEFINED_INSTRUCTION = auto() class-attribute instance-attribute","text":"

    EOF container has undefined instruction in it's body code.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.UNKNOWN_VERSION","title":"UNKNOWN_VERSION = auto() class-attribute instance-attribute","text":"

    EOF container has an unknown version.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INCOMPLETE_MAGIC","title":"INCOMPLETE_MAGIC = auto() class-attribute instance-attribute","text":"

    EOF container has not enough bytes to read magic.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_MAGIC","title":"INVALID_MAGIC = auto() class-attribute instance-attribute","text":"

    EOF container has not allowed magic version byte.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_VERSION","title":"INVALID_VERSION = auto() class-attribute instance-attribute","text":"

    EOF container version bytes mismatch.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_NON_RETURNING_FLAG","title":"INVALID_NON_RETURNING_FLAG = auto() class-attribute instance-attribute","text":"

    EOF container's section has non-returning flag set incorrectly.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_RJUMP_DESTINATION","title":"INVALID_RJUMP_DESTINATION = auto() class-attribute instance-attribute","text":"

    Code has RJUMP instruction with invalid parameters.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.MISSING_TYPE_HEADER","title":"MISSING_TYPE_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container missing types section.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_TYPE_SECTION_SIZE","title":"INVALID_TYPE_SECTION_SIZE = auto() class-attribute instance-attribute","text":"

    EOF container types section has wrong size.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_TYPE_BODY","title":"INVALID_TYPE_BODY = auto() class-attribute instance-attribute","text":"

    EOF container types body section bytes are wrong.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.MISSING_CODE_HEADER","title":"MISSING_CODE_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container missing code section.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_CODE_SECTION","title":"INVALID_CODE_SECTION = auto() class-attribute instance-attribute","text":"

    EOF container code section bytes are incorrect.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INCOMPLETE_CODE_HEADER","title":"INCOMPLETE_CODE_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container code header missing bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INCOMPLETE_DATA_HEADER","title":"INCOMPLETE_DATA_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container data header missing bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.ZERO_SECTION_SIZE","title":"ZERO_SECTION_SIZE = auto() class-attribute instance-attribute","text":"

    EOF container data header construction is wrong.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.MISSING_DATA_SECTION","title":"MISSING_DATA_SECTION = auto() class-attribute instance-attribute","text":"

    EOF container missing data section

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INCOMPLETE_CONTAINER","title":"INCOMPLETE_CONTAINER = auto() class-attribute instance-attribute","text":"

    EOF container bytes are incomplete.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_SECTION_BODIES_SIZE","title":"INVALID_SECTION_BODIES_SIZE = auto() class-attribute instance-attribute","text":"

    Sections bodies does not match sections headers.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.TRAILING_BYTES","title":"TRAILING_BYTES = auto() class-attribute instance-attribute","text":"

    EOF container has bytes beyond data section.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.MISSING_TERMINATOR","title":"MISSING_TERMINATOR = auto() class-attribute instance-attribute","text":"

    EOF container missing terminator bytes between header and body.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.MISSING_HEADERS_TERMINATOR","title":"MISSING_HEADERS_TERMINATOR = auto() class-attribute instance-attribute","text":"

    Some type of another exception about missing headers terminator.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_FIRST_SECTION_TYPE","title":"INVALID_FIRST_SECTION_TYPE = auto() class-attribute instance-attribute","text":"

    EOF container header does not have types section first.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INCOMPLETE_SECTION_NUMBER","title":"INCOMPLETE_SECTION_NUMBER = auto() class-attribute instance-attribute","text":"

    EOF container header has section that is missing declaration bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INCOMPLETE_SECTION_SIZE","title":"INCOMPLETE_SECTION_SIZE = auto() class-attribute instance-attribute","text":"

    EOF container header has section that is defined incorrectly.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.TOO_MANY_CODE_SECTIONS","title":"TOO_MANY_CODE_SECTIONS = auto() class-attribute instance-attribute","text":"

    EOF container header has too many code sections.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.MISSING_STOP_OPCODE","title":"MISSING_STOP_OPCODE = auto() class-attribute instance-attribute","text":"

    EOF container's code missing STOP bytecode at it's end.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INPUTS_OUTPUTS_NUM_ABOVE_LIMIT","title":"INPUTS_OUTPUTS_NUM_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    EOF container code section inputs/outputs number is above the limit

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.UNREACHABLE_INSTRUCTIONS","title":"UNREACHABLE_INSTRUCTIONS = auto() class-attribute instance-attribute","text":"

    EOF container's code have instructions that are unreachable.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.UNREACHABLE_CODE_SECTIONS","title":"UNREACHABLE_CODE_SECTIONS = auto() class-attribute instance-attribute","text":"

    EOF container's body have code sections that are unreachable.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.STACK_UNDERFLOW","title":"STACK_UNDERFLOW = auto() class-attribute instance-attribute","text":"

    EOF container's code produces an stack underflow.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.STACK_HEIGHT_MISMATCH","title":"STACK_HEIGHT_MISMATCH = auto() class-attribute instance-attribute","text":"

    EOF container section stack height mismatch.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT","title":"MAX_STACK_HEIGHT_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    EOF container's specified max stack height is above the limit.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.STACK_HIGHER_THAN_OUTPUTS","title":"STACK_HIGHER_THAN_OUTPUTS = auto() class-attribute instance-attribute","text":"

    EOF container section stack height is higher than the outputs. when returning

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS","title":"JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS = auto() class-attribute instance-attribute","text":"

    EOF container section JUMPF's to a destination section with incompatible outputs.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_MAX_STACK_HEIGHT","title":"INVALID_MAX_STACK_HEIGHT = auto() class-attribute instance-attribute","text":"

    EOF container section's specified max stack height does not match the actual stack height.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_DATALOADN_INDEX","title":"INVALID_DATALOADN_INDEX = auto() class-attribute instance-attribute","text":"

    A DATALOADN instruction has out-of-bounds index for the data section.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.TRUNCATED_INSTRUCTION","title":"TRUNCATED_INSTRUCTION = auto() class-attribute instance-attribute","text":"

    EOF container's code section has truncated instruction.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.TOPLEVEL_CONTAINER_TRUNCATED","title":"TOPLEVEL_CONTAINER_TRUNCATED = auto() class-attribute instance-attribute","text":"

    Top-level EOF container has data section truncated

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.ORPHAN_SUBCONTAINER","title":"ORPHAN_SUBCONTAINER = auto() class-attribute instance-attribute","text":"

    EOF container has an unreferenced subcontainer. '

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.CONTAINER_SIZE_ABOVE_LIMIT","title":"CONTAINER_SIZE_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    EOF container is above size limit

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_CONTAINER_SECTION_INDEX","title":"INVALID_CONTAINER_SECTION_INDEX = auto() class-attribute instance-attribute","text":"

    Instruction references container section that does not exist.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INCOMPATIBLE_CONTAINER_KIND","title":"INCOMPATIBLE_CONTAINER_KIND = auto() class-attribute instance-attribute","text":"

    Incompatible instruction found in a container of a specific kind.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.TOO_MANY_CONTAINERS","title":"TOO_MANY_CONTAINERS = auto() class-attribute instance-attribute","text":"

    EOF container header has too many sub-containers.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_CODE_SECTION_INDEX","title":"INVALID_CODE_SECTION_INDEX = auto() class-attribute instance-attribute","text":"

    CALLF Operation referes to a non-existent code section

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.UNEXPECTED_HEADER_KIND","title":"UNEXPECTED_HEADER_KIND = auto() class-attribute instance-attribute","text":"

    Header parsing encounterd a section kind it wasn't expecting

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException","title":"TransactionException","text":"

    Bases: ExceptionBase

    Exception raised when a transaction is invalid, and thus cannot be executed.

    If a transaction with any of these exceptions is included in a block, the block is invalid.

    Source code in src/ethereum_test_exceptions/exceptions.py
    @unique\nclass TransactionException(ExceptionBase):\n    \"\"\"\n    Exception raised when a transaction is invalid, and thus cannot be executed.\n\n    If a transaction with any of these exceptions is included in a block, the block is invalid.\n    \"\"\"\n\n    TYPE_NOT_SUPPORTED = auto()\n    \"\"\"\n    Transaction type is not supported on this chain configuration.\n    \"\"\"\n    SENDER_NOT_EOA = auto()\n    \"\"\"\n    Transaction is coming from address that is not exist anymore.\n    \"\"\"\n    ADDRESS_TOO_SHORT = auto()\n    \"\"\"\n    Transaction `to` is not allowed to be less than 20 bytes.\n    \"\"\"\n    ADDRESS_TOO_LONG = auto()\n    \"\"\"\n    Transaction `to` is not allowed to be more than 20 bytes.\n    \"\"\"\n    NONCE_MISMATCH_TOO_HIGH = auto()\n    \"\"\"\n    Transaction nonce > sender.nonce.\n    \"\"\"\n    NONCE_MISMATCH_TOO_LOW = auto()\n    \"\"\"\n    Transaction nonce < sender.nonce.\n    \"\"\"\n    NONCE_TOO_BIG = auto()\n    \"\"\"\n    Transaction `nonce` is not allowed to be max_uint64 - 1 (this is probably TransactionTest).\n    \"\"\"\n    NONCE_IS_MAX = auto()\n    \"\"\"\n    Transaction `nonce` is not allowed to be max_uint64 - 1 (this is StateTests).\n    \"\"\"\n    NONCE_OVERFLOW = auto()\n    \"\"\"\n    Transaction `nonce` is not allowed to be more than uint64.\n    \"\"\"\n    GASLIMIT_OVERFLOW = auto()\n    \"\"\"\n    Transaction gaslimit exceeds 2^64-1 maximum value.\n    \"\"\"\n    VALUE_OVERFLOW = auto()\n    \"\"\"\n    Transaction value exceeds 2^256-1 maximum value.\n    \"\"\"\n    GASPRICE_OVERFLOW = auto()\n    \"\"\"\n    Transaction gasPrice exceeds 2^256-1 maximum value.\n    \"\"\"\n    GASLIMIT_PRICE_PRODUCT_OVERFLOW = auto()\n    \"\"\"\n    Transaction gasPrice * gasLimit exceeds 2^256-1 maximum value.\n    \"\"\"\n    INVALID_SIGNATURE_VRS = auto()\n    \"\"\"\n    Invalid transaction v, r, s values.\n    \"\"\"\n    RLP_INVALID_SIGNATURE_R = auto()\n    \"\"\"\n    Error reading transaction signature R value.\n    \"\"\"\n    RLP_INVALID_SIGNATURE_S = auto()\n    \"\"\"\n    Error reading transaction signature S value.\n    \"\"\"\n    RLP_LEADING_ZEROS_GASLIMIT = auto()\n    \"\"\"\n    Error reading transaction gaslimit field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_GASPRICE = auto()\n    \"\"\"\n    Error reading transaction gasprice field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_VALUE = auto()\n    \"\"\"\n    Error reading transaction value field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_NONCE = auto()\n    \"\"\"\n    Error reading transaction nonce field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_R = auto()\n    \"\"\"\n    Error reading transaction signature R field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_S = auto()\n    \"\"\"\n    Error reading transaction signature S field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_V = auto()\n    \"\"\"\n    Error reading transaction signature V field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_BASEFEE = auto()\n    \"\"\"\n    Error reading transaction basefee field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_PRIORITY_FEE = auto()\n    \"\"\"\n    Error reading transaction priority fee field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_DATA_SIZE = auto()\n    \"\"\"\n    Error reading transaction data field RLP, (rlp field length has leading zeros).\n    \"\"\"\n    RLP_LEADING_ZEROS_NONCE_SIZE = auto()\n    \"\"\"\n    Error reading transaction nonce field RLP, (rlp field length has leading zeros).\n    \"\"\"\n    RLP_TOO_FEW_ELEMENTS = auto()\n    \"\"\"\n    Error reading transaction RLP, structure has too few elements than expected.\n    \"\"\"\n    RLP_TOO_MANY_ELEMENTS = auto()\n    \"\"\"\n    Error reading transaction RLP, structure has too many elements than expected.\n    \"\"\"\n    RLP_ERROR_EOF = auto()\n    \"\"\"\n    Error reading transaction RLP, rlp stream unexpectedly finished.\n    \"\"\"\n    RLP_ERROR_SIZE = auto()\n    \"\"\"\n    Error reading transaction RLP, rlp size is invalid.\n    \"\"\"\n    RLP_ERROR_SIZE_LEADING_ZEROS = auto()\n    \"\"\"\n    Error reading transaction RLP, field size has leading zeros.\n    \"\"\"\n    INVALID_CHAINID = auto()\n    \"\"\"\n    Transaction chain id encoding is incorrect.\n    \"\"\"\n    RLP_INVALID_DATA = auto()\n    \"\"\"\n    Transaction data field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_GASLIMIT = auto()\n    \"\"\"\n    Transaction gaslimit field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_NONCE = auto()\n    \"\"\"\n    Transaction nonce field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_TO = auto()\n    \"\"\"\n    Transaction to field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_LONG = auto()\n    \"\"\"\n    Transaction access list address is > 20 bytes.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_SHORT = auto()\n    \"\"\"\n    Transaction access list address is < 20 bytes.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_STORAGE_TOO_LONG = auto()\n    \"\"\"\n    Transaction access list storage hash > 32 bytes.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_STORAGE_TOO_SHORT = auto()\n    \"\"\"\n    Transaction access list storage hash < 32 bytes.\n    \"\"\"\n    RLP_INVALID_HEADER = auto()\n    \"\"\"\n    Transaction failed to read from RLP as rlp header is invalid.\n    \"\"\"\n    RLP_INVALID_VALUE = auto()\n    \"\"\"\n    Transaction value field is invalid rlp/structure.\n    \"\"\"\n    EC_RECOVERY_FAIL = auto()\n    \"\"\"\n    Transaction has correct signature, but ec recovery failed.\n    \"\"\"\n    INSUFFICIENT_ACCOUNT_FUNDS = auto()\n    \"\"\"\n    Transaction's sender does not have enough funds to pay for the transaction.\n    \"\"\"\n    INSUFFICIENT_MAX_FEE_PER_GAS = auto()\n    \"\"\"\n    Transaction's max-fee-per-gas is lower than the block base-fee.\n    \"\"\"\n    PRIORITY_OVERFLOW = auto()\n    \"\"\"\n    Transaction's max-priority-fee-per-gas is exceeds 2^256-1 maximum value.\n    \"\"\"\n    PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS = auto()\n    \"\"\"\n    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas.\n    \"\"\"\n    PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS_2 = auto()\n    \"\"\"\n    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas (TransactionTests).\n    \"\"\"\n    INSUFFICIENT_MAX_FEE_PER_BLOB_GAS = auto()\n    \"\"\"\n    Transaction's max-fee-per-blob-gas is lower than the block's blob-gas price.\n    \"\"\"\n    INTRINSIC_GAS_TOO_LOW = auto()\n    \"\"\"\n    Transaction's gas limit is too low.\n    \"\"\"\n    INITCODE_SIZE_EXCEEDED = auto()\n    \"\"\"\n    Transaction's initcode for a contract-creating transaction is too large.\n    \"\"\"\n    TYPE_3_TX_PRE_FORK = auto()\n    \"\"\"\n    Transaction type 3 included before activation fork.\n    \"\"\"\n    TYPE_3_TX_ZERO_BLOBS_PRE_FORK = auto()\n    \"\"\"\n    Transaction type 3, with zero blobs, included before activation fork.\n    \"\"\"\n    TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH = auto()\n    \"\"\"\n    Transaction contains a blob versioned hash with an invalid version.\n    \"\"\"\n    TYPE_3_TX_WITH_FULL_BLOBS = auto()\n    \"\"\"\n    Transaction contains full blobs (network-version of the transaction).\n    \"\"\"\n    TYPE_3_TX_BLOB_COUNT_EXCEEDED = auto()\n    \"\"\"\n    Transaction contains too many blob versioned hashes.\n    \"\"\"\n    TYPE_3_TX_CONTRACT_CREATION = auto()\n    \"\"\"\n    Transaction is a type 3 transaction and has an empty `to`.\n    \"\"\"\n    TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED = auto()\n    \"\"\"\n    Transaction causes block to go over blob gas limit.\n    \"\"\"\n    GAS_ALLOWANCE_EXCEEDED = auto()\n    \"\"\"\n    Transaction causes block to go over blob gas limit.\n    \"\"\"\n    TYPE_3_TX_ZERO_BLOBS = auto()\n    \"\"\"\n    Transaction is type 3, but has no blobs.\n    \"\"\"\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.TYPE_NOT_SUPPORTED","title":"TYPE_NOT_SUPPORTED = auto() class-attribute instance-attribute","text":"

    Transaction type is not supported on this chain configuration.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.SENDER_NOT_EOA","title":"SENDER_NOT_EOA = auto() class-attribute instance-attribute","text":"

    Transaction is coming from address that is not exist anymore.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.ADDRESS_TOO_SHORT","title":"ADDRESS_TOO_SHORT = auto() class-attribute instance-attribute","text":"

    Transaction to is not allowed to be less than 20 bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.ADDRESS_TOO_LONG","title":"ADDRESS_TOO_LONG = auto() class-attribute instance-attribute","text":"

    Transaction to is not allowed to be more than 20 bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.NONCE_MISMATCH_TOO_HIGH","title":"NONCE_MISMATCH_TOO_HIGH = auto() class-attribute instance-attribute","text":"

    Transaction nonce > sender.nonce.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.NONCE_MISMATCH_TOO_LOW","title":"NONCE_MISMATCH_TOO_LOW = auto() class-attribute instance-attribute","text":"

    Transaction nonce < sender.nonce.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.NONCE_TOO_BIG","title":"NONCE_TOO_BIG = auto() class-attribute instance-attribute","text":"

    Transaction nonce is not allowed to be max_uint64 - 1 (this is probably TransactionTest).

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.NONCE_IS_MAX","title":"NONCE_IS_MAX = auto() class-attribute instance-attribute","text":"

    Transaction nonce is not allowed to be max_uint64 - 1 (this is StateTests).

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.NONCE_OVERFLOW","title":"NONCE_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction nonce is not allowed to be more than uint64.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.GASLIMIT_OVERFLOW","title":"GASLIMIT_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction gaslimit exceeds 2^64-1 maximum value.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.VALUE_OVERFLOW","title":"VALUE_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction value exceeds 2^256-1 maximum value.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.GASPRICE_OVERFLOW","title":"GASPRICE_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction gasPrice exceeds 2^256-1 maximum value.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.GASLIMIT_PRICE_PRODUCT_OVERFLOW","title":"GASLIMIT_PRICE_PRODUCT_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction gasPrice * gasLimit exceeds 2^256-1 maximum value.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.INVALID_SIGNATURE_VRS","title":"INVALID_SIGNATURE_VRS = auto() class-attribute instance-attribute","text":"

    Invalid transaction v, r, s values.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_SIGNATURE_R","title":"RLP_INVALID_SIGNATURE_R = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature R value.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_SIGNATURE_S","title":"RLP_INVALID_SIGNATURE_S = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature S value.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_GASLIMIT","title":"RLP_LEADING_ZEROS_GASLIMIT = auto() class-attribute instance-attribute","text":"

    Error reading transaction gaslimit field RLP.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_GASPRICE","title":"RLP_LEADING_ZEROS_GASPRICE = auto() class-attribute instance-attribute","text":"

    Error reading transaction gasprice field RLP.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_VALUE","title":"RLP_LEADING_ZEROS_VALUE = auto() class-attribute instance-attribute","text":"

    Error reading transaction value field RLP.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_NONCE","title":"RLP_LEADING_ZEROS_NONCE = auto() class-attribute instance-attribute","text":"

    Error reading transaction nonce field RLP.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_R","title":"RLP_LEADING_ZEROS_R = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature R field RLP.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_S","title":"RLP_LEADING_ZEROS_S = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature S field RLP.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_V","title":"RLP_LEADING_ZEROS_V = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature V field RLP.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_BASEFEE","title":"RLP_LEADING_ZEROS_BASEFEE = auto() class-attribute instance-attribute","text":"

    Error reading transaction basefee field RLP.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_PRIORITY_FEE","title":"RLP_LEADING_ZEROS_PRIORITY_FEE = auto() class-attribute instance-attribute","text":"

    Error reading transaction priority fee field RLP.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_DATA_SIZE","title":"RLP_LEADING_ZEROS_DATA_SIZE = auto() class-attribute instance-attribute","text":"

    Error reading transaction data field RLP, (rlp field length has leading zeros).

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_NONCE_SIZE","title":"RLP_LEADING_ZEROS_NONCE_SIZE = auto() class-attribute instance-attribute","text":"

    Error reading transaction nonce field RLP, (rlp field length has leading zeros).

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_TOO_FEW_ELEMENTS","title":"RLP_TOO_FEW_ELEMENTS = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, structure has too few elements than expected.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_TOO_MANY_ELEMENTS","title":"RLP_TOO_MANY_ELEMENTS = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, structure has too many elements than expected.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_ERROR_EOF","title":"RLP_ERROR_EOF = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, rlp stream unexpectedly finished.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_ERROR_SIZE","title":"RLP_ERROR_SIZE = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, rlp size is invalid.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_ERROR_SIZE_LEADING_ZEROS","title":"RLP_ERROR_SIZE_LEADING_ZEROS = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, field size has leading zeros.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.INVALID_CHAINID","title":"INVALID_CHAINID = auto() class-attribute instance-attribute","text":"

    Transaction chain id encoding is incorrect.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_DATA","title":"RLP_INVALID_DATA = auto() class-attribute instance-attribute","text":"

    Transaction data field is invalid rlp.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_GASLIMIT","title":"RLP_INVALID_GASLIMIT = auto() class-attribute instance-attribute","text":"

    Transaction gaslimit field is invalid rlp.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_NONCE","title":"RLP_INVALID_NONCE = auto() class-attribute instance-attribute","text":"

    Transaction nonce field is invalid rlp.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_TO","title":"RLP_INVALID_TO = auto() class-attribute instance-attribute","text":"

    Transaction to field is invalid rlp.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_LONG","title":"RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_LONG = auto() class-attribute instance-attribute","text":"

    Transaction access list address is > 20 bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_SHORT","title":"RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_SHORT = auto() class-attribute instance-attribute","text":"

    Transaction access list address is < 20 bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_ACCESS_LIST_STORAGE_TOO_LONG","title":"RLP_INVALID_ACCESS_LIST_STORAGE_TOO_LONG = auto() class-attribute instance-attribute","text":"

    Transaction access list storage hash > 32 bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_ACCESS_LIST_STORAGE_TOO_SHORT","title":"RLP_INVALID_ACCESS_LIST_STORAGE_TOO_SHORT = auto() class-attribute instance-attribute","text":"

    Transaction access list storage hash < 32 bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_HEADER","title":"RLP_INVALID_HEADER = auto() class-attribute instance-attribute","text":"

    Transaction failed to read from RLP as rlp header is invalid.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_VALUE","title":"RLP_INVALID_VALUE = auto() class-attribute instance-attribute","text":"

    Transaction value field is invalid rlp/structure.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.EC_RECOVERY_FAIL","title":"EC_RECOVERY_FAIL = auto() class-attribute instance-attribute","text":"

    Transaction has correct signature, but ec recovery failed.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.INSUFFICIENT_ACCOUNT_FUNDS","title":"INSUFFICIENT_ACCOUNT_FUNDS = auto() class-attribute instance-attribute","text":"

    Transaction's sender does not have enough funds to pay for the transaction.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS","title":"INSUFFICIENT_MAX_FEE_PER_GAS = auto() class-attribute instance-attribute","text":"

    Transaction's max-fee-per-gas is lower than the block base-fee.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.PRIORITY_OVERFLOW","title":"PRIORITY_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction's max-priority-fee-per-gas is exceeds 2^256-1 maximum value.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS","title":"PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS = auto() class-attribute instance-attribute","text":"

    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS_2","title":"PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS_2 = auto() class-attribute instance-attribute","text":"

    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas (TransactionTests).

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS","title":"INSUFFICIENT_MAX_FEE_PER_BLOB_GAS = auto() class-attribute instance-attribute","text":"

    Transaction's max-fee-per-blob-gas is lower than the block's blob-gas price.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.INTRINSIC_GAS_TOO_LOW","title":"INTRINSIC_GAS_TOO_LOW = auto() class-attribute instance-attribute","text":"

    Transaction's gas limit is too low.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.INITCODE_SIZE_EXCEEDED","title":"INITCODE_SIZE_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction's initcode for a contract-creating transaction is too large.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.TYPE_3_TX_PRE_FORK","title":"TYPE_3_TX_PRE_FORK = auto() class-attribute instance-attribute","text":"

    Transaction type 3 included before activation fork.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.TYPE_3_TX_ZERO_BLOBS_PRE_FORK","title":"TYPE_3_TX_ZERO_BLOBS_PRE_FORK = auto() class-attribute instance-attribute","text":"

    Transaction type 3, with zero blobs, included before activation fork.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH","title":"TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH = auto() class-attribute instance-attribute","text":"

    Transaction contains a blob versioned hash with an invalid version.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.TYPE_3_TX_WITH_FULL_BLOBS","title":"TYPE_3_TX_WITH_FULL_BLOBS = auto() class-attribute instance-attribute","text":"

    Transaction contains full blobs (network-version of the transaction).

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED","title":"TYPE_3_TX_BLOB_COUNT_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction contains too many blob versioned hashes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.TYPE_3_TX_CONTRACT_CREATION","title":"TYPE_3_TX_CONTRACT_CREATION = auto() class-attribute instance-attribute","text":"

    Transaction is a type 3 transaction and has an empty to.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED","title":"TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction causes block to go over blob gas limit.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.GAS_ALLOWANCE_EXCEEDED","title":"GAS_ALLOWANCE_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction causes block to go over blob gas limit.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.TYPE_3_TX_ZERO_BLOBS","title":"TYPE_3_TX_ZERO_BLOBS = auto() class-attribute instance-attribute","text":"

    Transaction is type 3, but has no blobs.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BaseFixture","title":"BaseFixture","text":"

    Bases: CamelModel

    Represents a base Ethereum test fixture of any type.

    Source code in src/ethereum_test_fixtures/base.py
    class BaseFixture(CamelModel):\n    \"\"\"Represents a base Ethereum test fixture of any type.\"\"\"\n\n    info: Dict[str, str] = Field(default_factory=dict, alias=\"_info\")\n    format: ClassVar[FixtureFormats] = FixtureFormats.UNSET_TEST_FORMAT\n\n    @cached_property\n    def json_dict(self) -> Dict[str, Any]:\n        \"\"\"\n        Returns the JSON representation of the fixture.\n        \"\"\"\n        return self.model_dump(mode=\"json\", by_alias=True, exclude_none=True, exclude={\"info\"})\n\n    @cached_property\n    def hash(self) -> str:\n        \"\"\"\n        Returns the hash of the fixture.\n        \"\"\"\n        json_str = json.dumps(self.json_dict, sort_keys=True, separators=(\",\", \":\"))\n        h = hashlib.sha256(json_str.encode(\"utf-8\")).hexdigest()\n        return f\"0x{h}\"\n\n    def json_dict_with_info(self, hash_only: bool = False) -> Dict[str, Any]:\n        \"\"\"\n        Returns the JSON representation of the fixture with the info field.\n        \"\"\"\n        dict_with_info = self.json_dict.copy()\n        dict_with_info[\"_info\"] = {\"hash\": self.hash}\n        if not hash_only:\n            dict_with_info[\"_info\"].update(self.info)\n        return dict_with_info\n\n    def fill_info(\n        self,\n        t8n_version: str,\n        fixture_description: str,\n        fixture_source_url: str,\n        ref_spec: ReferenceSpec | None,\n    ):\n        \"\"\"\n        Fill the info field for this fixture\n        \"\"\"\n        if \"comment\" not in self.info:\n            self.info[\"comment\"] = \"`execution-spec-tests` generated test\"\n        self.info[\"filling-transition-tool\"] = t8n_version\n        self.info[\"description\"] = fixture_description\n        self.info[\"url\"] = fixture_source_url\n        if ref_spec is not None:\n            ref_spec.write_info(self.info)\n\n    def get_fork(self) -> str | None:\n        \"\"\"\n        Returns the fork of the fixture as a string.\n        \"\"\"\n        raise NotImplementedError\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BaseFixture.json_dict","title":"json_dict: Dict[str, Any] cached property","text":"

    Returns the JSON representation of the fixture.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BaseFixture.hash","title":"hash: str cached property","text":"

    Returns the hash of the fixture.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BaseFixture.json_dict_with_info","title":"json_dict_with_info(hash_only=False)","text":"

    Returns the JSON representation of the fixture with the info field.

    Source code in src/ethereum_test_fixtures/base.py
    def json_dict_with_info(self, hash_only: bool = False) -> Dict[str, Any]:\n    \"\"\"\n    Returns the JSON representation of the fixture with the info field.\n    \"\"\"\n    dict_with_info = self.json_dict.copy()\n    dict_with_info[\"_info\"] = {\"hash\": self.hash}\n    if not hash_only:\n        dict_with_info[\"_info\"].update(self.info)\n    return dict_with_info\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BaseFixture.fill_info","title":"fill_info(t8n_version, fixture_description, fixture_source_url, ref_spec)","text":"

    Fill the info field for this fixture

    Source code in src/ethereum_test_fixtures/base.py
    def fill_info(\n    self,\n    t8n_version: str,\n    fixture_description: str,\n    fixture_source_url: str,\n    ref_spec: ReferenceSpec | None,\n):\n    \"\"\"\n    Fill the info field for this fixture\n    \"\"\"\n    if \"comment\" not in self.info:\n        self.info[\"comment\"] = \"`execution-spec-tests` generated test\"\n    self.info[\"filling-transition-tool\"] = t8n_version\n    self.info[\"description\"] = fixture_description\n    self.info[\"url\"] = fixture_source_url\n    if ref_spec is not None:\n        ref_spec.write_info(self.info)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BaseFixture.get_fork","title":"get_fork()","text":"

    Returns the fork of the fixture as a string.

    Source code in src/ethereum_test_fixtures/base.py
    def get_fork(self) -> str | None:\n    \"\"\"\n    Returns the fork of the fixture as a string.\n    \"\"\"\n    raise NotImplementedError\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.FixtureCollector","title":"FixtureCollector dataclass","text":"

    Collects all fixtures generated by the test cases.

    Source code in src/ethereum_test_fixtures/collector.py
    @dataclass(kw_only=True)\nclass FixtureCollector:\n    \"\"\"\n    Collects all fixtures generated by the test cases.\n    \"\"\"\n\n    output_dir: Path\n    flat_output: bool\n    single_fixture_per_file: bool\n    filler_path: Path\n    base_dump_dir: Optional[Path] = None\n\n    # Internal state\n    all_fixtures: Dict[Path, Fixtures] = field(default_factory=dict)\n    json_path_to_test_item: Dict[Path, TestInfo] = field(default_factory=dict)\n\n    def get_fixture_basename(self, info: TestInfo) -> Path:\n        \"\"\"\n        Returns the basename of the fixture file for a given test case.\n        \"\"\"\n        if self.flat_output:\n            if self.single_fixture_per_file:\n                return Path(strip_test_prefix(info.get_single_test_name()))\n            return Path(strip_test_prefix(info.original_name))\n        else:\n            relative_fixture_output_dir = Path(info.path).parent / strip_test_prefix(\n                Path(info.path).stem\n            )\n            module_relative_output_dir = get_module_relative_output_dir(\n                relative_fixture_output_dir, self.filler_path\n            )\n\n            if self.single_fixture_per_file:\n                return module_relative_output_dir / strip_test_prefix(info.get_single_test_name())\n            return module_relative_output_dir / strip_test_prefix(info.original_name)\n\n    def add_fixture(self, info: TestInfo, fixture: BaseFixture) -> Path:\n        \"\"\"\n        Adds a fixture to the list of fixtures of a given test case.\n        \"\"\"\n        fixture_basename = self.get_fixture_basename(info)\n\n        fixture_path = (\n            self.output_dir\n            / fixture.format.output_base_dir_name\n            / fixture_basename.with_suffix(fixture.format.output_file_extension)\n        )\n        if fixture_path not in self.all_fixtures.keys():  # relevant when we group by test function\n            self.all_fixtures[fixture_path] = Fixtures(root={})\n            self.json_path_to_test_item[fixture_path] = info\n\n        self.all_fixtures[fixture_path][info.id] = fixture\n\n        return fixture_path\n\n    def dump_fixtures(self) -> None:\n        \"\"\"\n        Dumps all collected fixtures to their respective files.\n        \"\"\"\n        if self.output_dir.name == \"stdout\":\n            combined_fixtures = {\n                k: to_json(v) for fixture in self.all_fixtures.values() for k, v in fixture.items()\n            }\n            json.dump(combined_fixtures, sys.stdout, indent=4)\n            return\n        os.makedirs(self.output_dir, exist_ok=True)\n        for fixture_path, fixtures in self.all_fixtures.items():\n            os.makedirs(fixture_path.parent, exist_ok=True)\n            if len({fixture.format for fixture in fixtures.values()}) != 1:\n                raise TypeError(\"All fixtures in a single file must have the same format.\")\n            fixtures.collect_into_file(fixture_path)\n\n    def verify_fixture_files(self, evm_fixture_verification: FixtureVerifier) -> None:\n        \"\"\"\n        Runs `evm [state|block]test` on each fixture.\n        \"\"\"\n        for fixture_path, name_fixture_dict in self.all_fixtures.items():\n            for fixture_name, fixture in name_fixture_dict.items():\n                if FixtureFormats.is_verifiable(fixture.format):\n                    info = self.json_path_to_test_item[fixture_path]\n                    verify_fixtures_dump_dir = self._get_verify_fixtures_dump_dir(info)\n                    evm_fixture_verification.verify_fixture(\n                        fixture.format,\n                        fixture_path,\n                        fixture_name=None,\n                        debug_output_path=verify_fixtures_dump_dir,\n                    )\n\n    def _get_verify_fixtures_dump_dir(\n        self,\n        info: TestInfo,\n    ):\n        \"\"\"\n        The directory to dump the current test function's fixture.json and fixture\n        verification debug output.\n        \"\"\"\n        if not self.base_dump_dir:\n            return None\n        if self.single_fixture_per_file:\n            return info.get_dump_dir_path(\n                self.base_dump_dir, self.filler_path, level=\"test_parameter\"\n            )\n        else:\n            return info.get_dump_dir_path(\n                self.base_dump_dir, self.filler_path, level=\"test_function\"\n            )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.FixtureCollector.get_fixture_basename","title":"get_fixture_basename(info)","text":"

    Returns the basename of the fixture file for a given test case.

    Source code in src/ethereum_test_fixtures/collector.py
    def get_fixture_basename(self, info: TestInfo) -> Path:\n    \"\"\"\n    Returns the basename of the fixture file for a given test case.\n    \"\"\"\n    if self.flat_output:\n        if self.single_fixture_per_file:\n            return Path(strip_test_prefix(info.get_single_test_name()))\n        return Path(strip_test_prefix(info.original_name))\n    else:\n        relative_fixture_output_dir = Path(info.path).parent / strip_test_prefix(\n            Path(info.path).stem\n        )\n        module_relative_output_dir = get_module_relative_output_dir(\n            relative_fixture_output_dir, self.filler_path\n        )\n\n        if self.single_fixture_per_file:\n            return module_relative_output_dir / strip_test_prefix(info.get_single_test_name())\n        return module_relative_output_dir / strip_test_prefix(info.original_name)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.FixtureCollector.add_fixture","title":"add_fixture(info, fixture)","text":"

    Adds a fixture to the list of fixtures of a given test case.

    Source code in src/ethereum_test_fixtures/collector.py
    def add_fixture(self, info: TestInfo, fixture: BaseFixture) -> Path:\n    \"\"\"\n    Adds a fixture to the list of fixtures of a given test case.\n    \"\"\"\n    fixture_basename = self.get_fixture_basename(info)\n\n    fixture_path = (\n        self.output_dir\n        / fixture.format.output_base_dir_name\n        / fixture_basename.with_suffix(fixture.format.output_file_extension)\n    )\n    if fixture_path not in self.all_fixtures.keys():  # relevant when we group by test function\n        self.all_fixtures[fixture_path] = Fixtures(root={})\n        self.json_path_to_test_item[fixture_path] = info\n\n    self.all_fixtures[fixture_path][info.id] = fixture\n\n    return fixture_path\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.FixtureCollector.dump_fixtures","title":"dump_fixtures()","text":"

    Dumps all collected fixtures to their respective files.

    Source code in src/ethereum_test_fixtures/collector.py
    def dump_fixtures(self) -> None:\n    \"\"\"\n    Dumps all collected fixtures to their respective files.\n    \"\"\"\n    if self.output_dir.name == \"stdout\":\n        combined_fixtures = {\n            k: to_json(v) for fixture in self.all_fixtures.values() for k, v in fixture.items()\n        }\n        json.dump(combined_fixtures, sys.stdout, indent=4)\n        return\n    os.makedirs(self.output_dir, exist_ok=True)\n    for fixture_path, fixtures in self.all_fixtures.items():\n        os.makedirs(fixture_path.parent, exist_ok=True)\n        if len({fixture.format for fixture in fixtures.values()}) != 1:\n            raise TypeError(\"All fixtures in a single file must have the same format.\")\n        fixtures.collect_into_file(fixture_path)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.FixtureCollector.verify_fixture_files","title":"verify_fixture_files(evm_fixture_verification)","text":"

    Runs evm [state|block]test on each fixture.

    Source code in src/ethereum_test_fixtures/collector.py
    def verify_fixture_files(self, evm_fixture_verification: FixtureVerifier) -> None:\n    \"\"\"\n    Runs `evm [state|block]test` on each fixture.\n    \"\"\"\n    for fixture_path, name_fixture_dict in self.all_fixtures.items():\n        for fixture_name, fixture in name_fixture_dict.items():\n            if FixtureFormats.is_verifiable(fixture.format):\n                info = self.json_path_to_test_item[fixture_path]\n                verify_fixtures_dump_dir = self._get_verify_fixtures_dump_dir(info)\n                evm_fixture_verification.verify_fixture(\n                    fixture.format,\n                    fixture_path,\n                    fixture_name=None,\n                    debug_output_path=verify_fixtures_dump_dir,\n                )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TestInfo","title":"TestInfo dataclass","text":"

    Contains test information from the current node.

    Source code in src/ethereum_test_fixtures/collector.py
    @dataclass(kw_only=True)\nclass TestInfo:\n    \"\"\"\n    Contains test information from the current node.\n    \"\"\"\n\n    name: str  # pytest: Item.name\n    id: str  # pytest: Item.nodeid\n    original_name: str  # pytest: Item.originalname\n    path: Path  # pytest: Item.path\n\n    def get_name_and_parameters(self) -> Tuple[str, str]:\n        \"\"\"\n        Converts a test name to a tuple containing the test name and test parameters.\n\n        Example:\n        test_push0_key_sstore[fork_Shanghai] -> test_push0_key_sstore, fork_Shanghai\n        \"\"\"\n        test_name, parameters = self.name.split(\"[\")\n        return test_name, re.sub(r\"[\\[\\-]\", \"_\", parameters).replace(\"]\", \"\")\n\n    def get_single_test_name(self) -> str:\n        \"\"\"\n        Converts a test name to a single test name.\n        \"\"\"\n        test_name, test_parameters = self.get_name_and_parameters()\n        return f\"{test_name}__{test_parameters}\"\n\n    def get_dump_dir_path(\n        self,\n        base_dump_dir: Optional[Path],\n        filler_path: Path,\n        level: Literal[\"test_module\", \"test_function\", \"test_parameter\"] = \"test_parameter\",\n    ) -> Optional[Path]:\n        \"\"\"\n        The path to dump the debug output as defined by the level to dump at.\n        \"\"\"\n        if not base_dump_dir:\n            return None\n        test_module_relative_dir = get_module_relative_output_dir(self.path, filler_path)\n        if level == \"test_module\":\n            return Path(base_dump_dir) / Path(str(test_module_relative_dir).replace(os.sep, \"__\"))\n        test_name, test_parameter_string = self.get_name_and_parameters()\n        flat_path = f\"{str(test_module_relative_dir).replace(os.sep, '__')}__{test_name}\"\n        if level == \"test_function\":\n            return Path(base_dump_dir) / flat_path\n        elif level == \"test_parameter\":\n            return Path(base_dump_dir) / flat_path / test_parameter_string\n        raise Exception(\"Unexpected level.\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TestInfo.get_name_and_parameters","title":"get_name_and_parameters()","text":"

    Converts a test name to a tuple containing the test name and test parameters.

    Example: test_push0_key_sstore[fork_Shanghai] -> test_push0_key_sstore, fork_Shanghai

    Source code in src/ethereum_test_fixtures/collector.py
    def get_name_and_parameters(self) -> Tuple[str, str]:\n    \"\"\"\n    Converts a test name to a tuple containing the test name and test parameters.\n\n    Example:\n    test_push0_key_sstore[fork_Shanghai] -> test_push0_key_sstore, fork_Shanghai\n    \"\"\"\n    test_name, parameters = self.name.split(\"[\")\n    return test_name, re.sub(r\"[\\[\\-]\", \"_\", parameters).replace(\"]\", \"\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TestInfo.get_single_test_name","title":"get_single_test_name()","text":"

    Converts a test name to a single test name.

    Source code in src/ethereum_test_fixtures/collector.py
    def get_single_test_name(self) -> str:\n    \"\"\"\n    Converts a test name to a single test name.\n    \"\"\"\n    test_name, test_parameters = self.get_name_and_parameters()\n    return f\"{test_name}__{test_parameters}\"\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TestInfo.get_dump_dir_path","title":"get_dump_dir_path(base_dump_dir, filler_path, level='test_parameter')","text":"

    The path to dump the debug output as defined by the level to dump at.

    Source code in src/ethereum_test_fixtures/collector.py
    def get_dump_dir_path(\n    self,\n    base_dump_dir: Optional[Path],\n    filler_path: Path,\n    level: Literal[\"test_module\", \"test_function\", \"test_parameter\"] = \"test_parameter\",\n) -> Optional[Path]:\n    \"\"\"\n    The path to dump the debug output as defined by the level to dump at.\n    \"\"\"\n    if not base_dump_dir:\n        return None\n    test_module_relative_dir = get_module_relative_output_dir(self.path, filler_path)\n    if level == \"test_module\":\n        return Path(base_dump_dir) / Path(str(test_module_relative_dir).replace(os.sep, \"__\"))\n    test_name, test_parameter_string = self.get_name_and_parameters()\n    flat_path = f\"{str(test_module_relative_dir).replace(os.sep, '__')}__{test_name}\"\n    if level == \"test_function\":\n        return Path(base_dump_dir) / flat_path\n    elif level == \"test_parameter\":\n        return Path(base_dump_dir) / flat_path / test_parameter_string\n    raise Exception(\"Unexpected level.\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BaseTest","title":"BaseTest","text":"

    Bases: BaseModel

    Represents a base Ethereum test which must return a single test fixture.

    Source code in src/ethereum_test_specs/base.py
    class BaseTest(BaseModel):\n    \"\"\"\n    Represents a base Ethereum test which must return a single test fixture.\n    \"\"\"\n\n    tag: str = \"\"\n\n    # Transition tool specific fields\n    t8n_dump_dir: Path | None = Field(None, exclude=True)\n    _t8n_call_counter: Iterator[int] = count(0)\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = []\n\n    @abstractmethod\n    def generate(\n        self,\n        *,\n        t8n: TransitionTool,\n        fork: Fork,\n        fixture_format: FixtureFormats,\n        eips: Optional[List[int]] = None,\n    ) -> BaseFixture:\n        \"\"\"\n        Generate the list of test fixtures.\n        \"\"\"\n        pass\n\n    @classmethod\n    def pytest_parameter_name(cls) -> str:\n        \"\"\"\n        Must return the name of the parameter used in pytest to select this\n        spec type as filler for the test.\n\n        By default, it returns the underscore separated name of the class.\n        \"\"\"\n        return reduce(lambda x, y: x + (\"_\" if y.isupper() else \"\") + y, cls.__name__).lower()\n\n    def get_next_transition_tool_output_path(self) -> str:\n        \"\"\"\n        Returns the path to the next transition tool output file.\n        \"\"\"\n        if not self.t8n_dump_dir:\n            return \"\"\n        return path.join(\n            self.t8n_dump_dir,\n            str(next(self._t8n_call_counter)),\n        )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BaseTest.generate","title":"generate(*, t8n, fork, fixture_format, eips=None) abstractmethod","text":"

    Generate the list of test fixtures.

    Source code in src/ethereum_test_specs/base.py
    @abstractmethod\ndef generate(\n    self,\n    *,\n    t8n: TransitionTool,\n    fork: Fork,\n    fixture_format: FixtureFormats,\n    eips: Optional[List[int]] = None,\n) -> BaseFixture:\n    \"\"\"\n    Generate the list of test fixtures.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BaseTest.pytest_parameter_name","title":"pytest_parameter_name() classmethod","text":"

    Must return the name of the parameter used in pytest to select this spec type as filler for the test.

    By default, it returns the underscore separated name of the class.

    Source code in src/ethereum_test_specs/base.py
    @classmethod\ndef pytest_parameter_name(cls) -> str:\n    \"\"\"\n    Must return the name of the parameter used in pytest to select this\n    spec type as filler for the test.\n\n    By default, it returns the underscore separated name of the class.\n    \"\"\"\n    return reduce(lambda x, y: x + (\"_\" if y.isupper() else \"\") + y, cls.__name__).lower()\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BaseTest.get_next_transition_tool_output_path","title":"get_next_transition_tool_output_path()","text":"

    Returns the path to the next transition tool output file.

    Source code in src/ethereum_test_specs/base.py
    def get_next_transition_tool_output_path(self) -> str:\n    \"\"\"\n    Returns the path to the next transition tool output file.\n    \"\"\"\n    if not self.t8n_dump_dir:\n        return \"\"\n    return path.join(\n        self.t8n_dump_dir,\n        str(next(self._t8n_call_counter)),\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockchainTest","title":"BlockchainTest","text":"

    Bases: BaseTest

    Filler type that tests multiple blocks (valid or invalid) in a chain.

    Source code in src/ethereum_test_specs/blockchain.py
    class BlockchainTest(BaseTest):\n    \"\"\"\n    Filler type that tests multiple blocks (valid or invalid) in a chain.\n    \"\"\"\n\n    pre: Alloc\n    post: Alloc\n    blocks: List[Block]\n    genesis_environment: Environment = Field(default_factory=Environment)\n    verify_sync: bool = False\n    chain_id: int = 1\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = [\n        FixtureFormats.BLOCKCHAIN_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST_ENGINE,\n    ]\n\n    def make_genesis(\n        self,\n        fork: Fork,\n    ) -> Tuple[Alloc, FixtureBlock]:\n        \"\"\"\n        Create a genesis block from the blockchain test definition.\n        \"\"\"\n        env = self.genesis_environment.set_fork_requirements(fork)\n        assert (\n            env.withdrawals is None or len(env.withdrawals) == 0\n        ), \"withdrawals must be empty at genesis\"\n        assert env.parent_beacon_block_root is None or env.parent_beacon_block_root == Hash(\n            0\n        ), \"parent_beacon_block_root must be empty at genesis\"\n\n        pre_alloc = Alloc.merge(\n            Alloc.model_validate(fork.pre_allocation_blockchain()),\n            self.pre,\n        )\n        if empty_accounts := pre_alloc.empty_accounts():\n            raise Exception(f\"Empty accounts in pre state: {empty_accounts}\")\n        state_root = pre_alloc.state_root()\n        genesis = FixtureHeader(\n            parent_hash=0,\n            ommers_hash=EmptyOmmersRoot,\n            fee_recipient=0,\n            state_root=state_root,\n            transactions_trie=EmptyTrieRoot,\n            receipts_root=EmptyTrieRoot,\n            logs_bloom=0,\n            difficulty=0x20000 if env.difficulty is None else env.difficulty,\n            number=0,\n            gas_limit=env.gas_limit,\n            gas_used=0,\n            timestamp=0,\n            extra_data=b\"\\x00\",\n            prev_randao=0,\n            nonce=0,\n            base_fee_per_gas=env.base_fee_per_gas,\n            blob_gas_used=env.blob_gas_used,\n            excess_blob_gas=env.excess_blob_gas,\n            withdrawals_root=Withdrawal.list_root(env.withdrawals)\n            if env.withdrawals is not None\n            else None,\n            parent_beacon_block_root=env.parent_beacon_block_root,\n            requests_root=Requests(root=[]).trie_root\n            if fork.header_requests_required(0, 0)\n            else None,\n        )\n\n        return (\n            pre_alloc,\n            FixtureBlockBase(\n                header=genesis,\n                withdrawals=None if env.withdrawals is None else [],\n                deposit_requests=[] if fork.header_requests_required(0, 0) else None,\n                withdrawal_requests=[] if fork.header_requests_required(0, 0) else None,\n                consolidation_requests=[] if fork.header_requests_required(0, 0) else None,\n            ).with_rlp(\n                txs=[], requests=Requests() if fork.header_requests_required(0, 0) else None\n            ),\n        )\n\n    def generate_block_data(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        block: Block,\n        previous_env: Environment,\n        previous_alloc: Alloc,\n        eips: Optional[List[int]] = None,\n    ) -> Tuple[FixtureHeader, List[Transaction], Requests | None, Alloc, Environment]:\n        \"\"\"\n        Generate common block data for both make_fixture and make_hive_fixture.\n        \"\"\"\n        if block.rlp and block.exception is not None:\n            raise Exception(\n                \"test correctness: post-state cannot be verified if the \"\n                + \"block's rlp is supplied and the block is not supposed \"\n                + \"to produce an exception\"\n            )\n\n        env = block.set_environment(previous_env)\n        env = env.set_fork_requirements(fork)\n\n        txs = [tx.with_signature_and_sender() for tx in block.txs]\n\n        if failing_tx_count := len([tx for tx in txs if tx.error]) > 0:\n            if failing_tx_count > 1:\n                raise Exception(\n                    \"test correctness: only one transaction can produce an exception in a block\"\n                )\n            if not txs[-1].error:\n                raise Exception(\n                    \"test correctness: the transaction that produces an exception \"\n                    + \"must be the last transaction in the block\"\n                )\n\n        transition_tool_output = t8n.evaluate(\n            alloc=previous_alloc,\n            txs=txs,\n            env=env,\n            fork=fork,\n            chain_id=self.chain_id,\n            reward=fork.get_reward(env.number, env.timestamp),\n            eips=eips,\n            debug_output_path=self.get_next_transition_tool_output_path(),\n        )\n\n        try:\n            rejected_txs = verify_transactions(txs, transition_tool_output.result)\n            verify_result(transition_tool_output.result, env)\n        except Exception as e:\n            print_traces(t8n.get_traces())\n            pprint(transition_tool_output.result)\n            pprint(previous_alloc)\n            pprint(transition_tool_output.alloc)\n            raise e\n\n        if len(rejected_txs) > 0 and block.exception is None:\n            print_traces(t8n.get_traces())\n            raise Exception(\n                \"one or more transactions in `BlockchainTest` are \"\n                + \"intrinsically invalid, but the block was not expected \"\n                + \"to be invalid. Please verify whether the transaction \"\n                + \"was indeed expected to fail and add the proper \"\n                + \"`block.exception`\"\n            )\n\n        # One special case of the invalid transactions is the blob gas used, since this value\n        # is not included in the transition tool result, but it is included in the block header,\n        # and some clients check it before executing the block by simply counting the type-3 txs,\n        # we need to set the correct value by default.\n        blob_gas_used: int | None = None\n        if (blob_gas_per_blob := fork.blob_gas_per_blob(env.number, env.timestamp)) > 0:\n            blob_gas_used = blob_gas_per_blob * count_blobs(txs)\n\n        header = FixtureHeader(\n            **(\n                transition_tool_output.result.model_dump(\n                    exclude_none=True, exclude={\"blob_gas_used\", \"transactions_trie\"}\n                )\n                | env.model_dump(exclude_none=True, exclude={\"blob_gas_used\"})\n            ),\n            blob_gas_used=blob_gas_used,\n            transactions_trie=Transaction.list_root(txs),\n            extra_data=block.extra_data if block.extra_data is not None else b\"\",\n            fork=fork,\n        )\n\n        if block.header_verify is not None:\n            # Verify the header after transition tool processing.\n            block.header_verify.verify(header)\n\n        if block.rlp_modifier is not None:\n            # Modify any parameter specified in the `rlp_modifier` after\n            # transition tool processing.\n            header = block.rlp_modifier.apply(header)\n\n        requests = None\n        if fork.header_requests_required(header.number, header.timestamp):\n            requests_list: List[DepositRequest | WithdrawalRequest | ConsolidationRequest] = []\n            if transition_tool_output.result.deposit_requests is not None:\n                requests_list += transition_tool_output.result.deposit_requests\n            if transition_tool_output.result.withdrawal_requests is not None:\n                requests_list += transition_tool_output.result.withdrawal_requests\n            if transition_tool_output.result.consolidation_requests is not None:\n                requests_list += transition_tool_output.result.consolidation_requests\n            requests = Requests(root=requests_list)\n\n        if requests is not None and requests.trie_root != header.requests_root:\n            raise Exception(\n                f\"Requests root in header does not match the requests root in the transition tool \"\n                \"output: \"\n                f\"{header.requests_root} != {requests.trie_root}\"\n            )\n\n        if block.requests is not None:\n            requests = Requests(root=block.requests)\n            header.requests_root = requests.trie_root\n\n        return (\n            header,\n            txs,\n            requests,\n            transition_tool_output.alloc,\n            env,\n        )\n\n    def network_info(self, fork: Fork, eips: Optional[List[int]] = None):\n        \"\"\"\n        Returns fixture network information for the fork & EIP/s.\n        \"\"\"\n        return (\n            \"+\".join([fork.blockchain_test_network_name()] + [str(eip) for eip in eips])\n            if eips\n            else fork.blockchain_test_network_name()\n        )\n\n    def verify_post_state(self, t8n, alloc: Alloc):\n        \"\"\"\n        Verifies the post alloc after all block/s or payload/s are generated.\n        \"\"\"\n        try:\n            self.post.verify_post_alloc(alloc)\n        except Exception as e:\n            print_traces(t8n.get_traces())\n            raise e\n\n    def make_fixture(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        eips: Optional[List[int]] = None,\n    ) -> Fixture:\n        \"\"\"\n        Create a fixture from the blockchain test definition.\n        \"\"\"\n        fixture_blocks: List[FixtureBlock | InvalidFixtureBlock] = []\n\n        pre, genesis = self.make_genesis(fork)\n\n        alloc = pre\n        env = environment_from_parent_header(genesis.header)\n        head = genesis.header.block_hash\n\n        for block in self.blocks:\n            if block.rlp is None:\n                # This is the most common case, the RLP needs to be constructed\n                # based on the transactions to be included in the block.\n                # Set the environment according to the block to execute.\n                header, txs, requests, new_alloc, new_env = self.generate_block_data(\n                    t8n=t8n,\n                    fork=fork,\n                    block=block,\n                    previous_env=env,\n                    previous_alloc=alloc,\n                    eips=eips,\n                )\n                fixture_block = FixtureBlockBase(\n                    header=header,\n                    txs=[FixtureTransaction.from_transaction(tx) for tx in txs],\n                    ommers=[],\n                    withdrawals=[FixtureWithdrawal.from_withdrawal(w) for w in new_env.withdrawals]\n                    if new_env.withdrawals is not None\n                    else None,\n                    deposit_requests=[\n                        FixtureDepositRequest.from_deposit_request(d)\n                        for d in requests.deposit_requests()\n                    ]\n                    if requests is not None\n                    else None,\n                    withdrawal_requests=[\n                        FixtureWithdrawalRequest.from_withdrawal_request(w)\n                        for w in requests.withdrawal_requests()\n                    ]\n                    if requests is not None\n                    else None,\n                    consolidation_requests=[\n                        FixtureConsolidationRequest.from_consolidation_request(c)\n                        for c in requests.consolidation_requests()\n                    ]\n                    if requests is not None\n                    else None,\n                ).with_rlp(txs=txs, requests=requests)\n                if block.exception is None:\n                    fixture_blocks.append(fixture_block)\n                    # Update env, alloc and last block hash for the next block.\n                    alloc = new_alloc\n                    env = apply_new_parent(new_env, header)\n                    head = header.block_hash\n                else:\n                    fixture_blocks.append(\n                        InvalidFixtureBlock(\n                            rlp=fixture_block.rlp,\n                            expect_exception=block.exception,\n                            rlp_decoded=(\n                                None\n                                if BlockException.RLP_STRUCTURES_ENCODING in block.exception\n                                else fixture_block.without_rlp()\n                            ),\n                        ),\n                    )\n            else:\n                assert block.exception is not None, (\n                    \"test correctness: if the block's rlp is hard-coded, \"\n                    + \"the block is expected to produce an exception\"\n                )\n                fixture_blocks.append(\n                    InvalidFixtureBlock(\n                        rlp=block.rlp,\n                        expect_exception=block.exception,\n                    ),\n                )\n\n        self.verify_post_state(t8n, alloc)\n        return Fixture(\n            fork=self.network_info(fork, eips),\n            genesis=genesis.header,\n            genesis_rlp=genesis.rlp,\n            blocks=fixture_blocks,\n            last_block_hash=head,\n            pre=pre,\n            post_state=alloc,\n        )\n\n    def make_hive_fixture(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        eips: Optional[List[int]] = None,\n    ) -> EngineFixture:\n        \"\"\"\n        Create a hive fixture from the blocktest definition.\n        \"\"\"\n        fixture_payloads: List[FixtureEngineNewPayload] = []\n\n        pre, genesis = self.make_genesis(fork)\n        alloc = pre\n        env = environment_from_parent_header(genesis.header)\n        head_hash = genesis.header.block_hash\n\n        for block in self.blocks:\n            header, txs, requests, new_alloc, new_env = self.generate_block_data(\n                t8n=t8n, fork=fork, block=block, previous_env=env, previous_alloc=alloc, eips=eips\n            )\n            if block.rlp is None:\n                fixture_payloads.append(\n                    FixtureEngineNewPayload.from_fixture_header(\n                        fork=fork,\n                        header=header,\n                        transactions=txs,\n                        withdrawals=new_env.withdrawals,\n                        requests=requests,\n                        validation_error=block.exception,\n                        error_code=block.engine_api_error_code,\n                    )\n                )\n                if block.exception is None:\n                    alloc = new_alloc\n                    env = apply_new_parent(env, header)\n                    head_hash = header.block_hash\n        fcu_version = fork.engine_forkchoice_updated_version(header.number, header.timestamp)\n        assert (\n            fcu_version is not None\n        ), \"A hive fixture was requested but no forkchoice update is defined. The framework should\"\n        \" never try to execute this test case.\"\n\n        self.verify_post_state(t8n, alloc)\n\n        sync_payload: Optional[FixtureEngineNewPayload] = None\n        if self.verify_sync:\n            # Test is marked for syncing verification.\n            assert (\n                genesis.header.block_hash != head_hash\n            ), \"Invalid payload tests negative test via sync is not supported yet.\"\n\n            # Most clients require the header to start the sync process, so we create an empty\n            # block on top of the last block of the test to send it as new payload and trigger the\n            # sync process.\n            sync_header, _, requests, _, _ = self.generate_block_data(\n                t8n=t8n,\n                fork=fork,\n                block=Block(),\n                previous_env=env,\n                previous_alloc=alloc,\n                eips=eips,\n            )\n            sync_payload = FixtureEngineNewPayload.from_fixture_header(\n                fork=fork,\n                header=sync_header,\n                transactions=[],\n                withdrawals=[],\n                requests=requests,\n                validation_error=None,\n                error_code=None,\n            )\n\n        return EngineFixture(\n            fork=self.network_info(fork, eips),\n            genesis=genesis.header,\n            payloads=fixture_payloads,\n            fcu_version=fcu_version,\n            pre=pre,\n            post_state=alloc,\n            sync_payload=sync_payload,\n            last_block_hash=head_hash,\n        )\n\n    def generate(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        fixture_format: FixtureFormats,\n        eips: Optional[List[int]] = None,\n    ) -> BaseFixture:\n        \"\"\"\n        Generate the BlockchainTest fixture.\n        \"\"\"\n        t8n.reset_traces()\n        if fixture_format == FixtureFormats.BLOCKCHAIN_TEST_ENGINE:\n            return self.make_hive_fixture(t8n, fork, eips)\n        elif fixture_format == FixtureFormats.BLOCKCHAIN_TEST:\n            return self.make_fixture(t8n, fork, eips)\n\n        raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockchainTest.make_genesis","title":"make_genesis(fork)","text":"

    Create a genesis block from the blockchain test definition.

    Source code in src/ethereum_test_specs/blockchain.py
    def make_genesis(\n    self,\n    fork: Fork,\n) -> Tuple[Alloc, FixtureBlock]:\n    \"\"\"\n    Create a genesis block from the blockchain test definition.\n    \"\"\"\n    env = self.genesis_environment.set_fork_requirements(fork)\n    assert (\n        env.withdrawals is None or len(env.withdrawals) == 0\n    ), \"withdrawals must be empty at genesis\"\n    assert env.parent_beacon_block_root is None or env.parent_beacon_block_root == Hash(\n        0\n    ), \"parent_beacon_block_root must be empty at genesis\"\n\n    pre_alloc = Alloc.merge(\n        Alloc.model_validate(fork.pre_allocation_blockchain()),\n        self.pre,\n    )\n    if empty_accounts := pre_alloc.empty_accounts():\n        raise Exception(f\"Empty accounts in pre state: {empty_accounts}\")\n    state_root = pre_alloc.state_root()\n    genesis = FixtureHeader(\n        parent_hash=0,\n        ommers_hash=EmptyOmmersRoot,\n        fee_recipient=0,\n        state_root=state_root,\n        transactions_trie=EmptyTrieRoot,\n        receipts_root=EmptyTrieRoot,\n        logs_bloom=0,\n        difficulty=0x20000 if env.difficulty is None else env.difficulty,\n        number=0,\n        gas_limit=env.gas_limit,\n        gas_used=0,\n        timestamp=0,\n        extra_data=b\"\\x00\",\n        prev_randao=0,\n        nonce=0,\n        base_fee_per_gas=env.base_fee_per_gas,\n        blob_gas_used=env.blob_gas_used,\n        excess_blob_gas=env.excess_blob_gas,\n        withdrawals_root=Withdrawal.list_root(env.withdrawals)\n        if env.withdrawals is not None\n        else None,\n        parent_beacon_block_root=env.parent_beacon_block_root,\n        requests_root=Requests(root=[]).trie_root\n        if fork.header_requests_required(0, 0)\n        else None,\n    )\n\n    return (\n        pre_alloc,\n        FixtureBlockBase(\n            header=genesis,\n            withdrawals=None if env.withdrawals is None else [],\n            deposit_requests=[] if fork.header_requests_required(0, 0) else None,\n            withdrawal_requests=[] if fork.header_requests_required(0, 0) else None,\n            consolidation_requests=[] if fork.header_requests_required(0, 0) else None,\n        ).with_rlp(\n            txs=[], requests=Requests() if fork.header_requests_required(0, 0) else None\n        ),\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockchainTest.generate_block_data","title":"generate_block_data(t8n, fork, block, previous_env, previous_alloc, eips=None)","text":"

    Generate common block data for both make_fixture and make_hive_fixture.

    Source code in src/ethereum_test_specs/blockchain.py
    def generate_block_data(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    block: Block,\n    previous_env: Environment,\n    previous_alloc: Alloc,\n    eips: Optional[List[int]] = None,\n) -> Tuple[FixtureHeader, List[Transaction], Requests | None, Alloc, Environment]:\n    \"\"\"\n    Generate common block data for both make_fixture and make_hive_fixture.\n    \"\"\"\n    if block.rlp and block.exception is not None:\n        raise Exception(\n            \"test correctness: post-state cannot be verified if the \"\n            + \"block's rlp is supplied and the block is not supposed \"\n            + \"to produce an exception\"\n        )\n\n    env = block.set_environment(previous_env)\n    env = env.set_fork_requirements(fork)\n\n    txs = [tx.with_signature_and_sender() for tx in block.txs]\n\n    if failing_tx_count := len([tx for tx in txs if tx.error]) > 0:\n        if failing_tx_count > 1:\n            raise Exception(\n                \"test correctness: only one transaction can produce an exception in a block\"\n            )\n        if not txs[-1].error:\n            raise Exception(\n                \"test correctness: the transaction that produces an exception \"\n                + \"must be the last transaction in the block\"\n            )\n\n    transition_tool_output = t8n.evaluate(\n        alloc=previous_alloc,\n        txs=txs,\n        env=env,\n        fork=fork,\n        chain_id=self.chain_id,\n        reward=fork.get_reward(env.number, env.timestamp),\n        eips=eips,\n        debug_output_path=self.get_next_transition_tool_output_path(),\n    )\n\n    try:\n        rejected_txs = verify_transactions(txs, transition_tool_output.result)\n        verify_result(transition_tool_output.result, env)\n    except Exception as e:\n        print_traces(t8n.get_traces())\n        pprint(transition_tool_output.result)\n        pprint(previous_alloc)\n        pprint(transition_tool_output.alloc)\n        raise e\n\n    if len(rejected_txs) > 0 and block.exception is None:\n        print_traces(t8n.get_traces())\n        raise Exception(\n            \"one or more transactions in `BlockchainTest` are \"\n            + \"intrinsically invalid, but the block was not expected \"\n            + \"to be invalid. Please verify whether the transaction \"\n            + \"was indeed expected to fail and add the proper \"\n            + \"`block.exception`\"\n        )\n\n    # One special case of the invalid transactions is the blob gas used, since this value\n    # is not included in the transition tool result, but it is included in the block header,\n    # and some clients check it before executing the block by simply counting the type-3 txs,\n    # we need to set the correct value by default.\n    blob_gas_used: int | None = None\n    if (blob_gas_per_blob := fork.blob_gas_per_blob(env.number, env.timestamp)) > 0:\n        blob_gas_used = blob_gas_per_blob * count_blobs(txs)\n\n    header = FixtureHeader(\n        **(\n            transition_tool_output.result.model_dump(\n                exclude_none=True, exclude={\"blob_gas_used\", \"transactions_trie\"}\n            )\n            | env.model_dump(exclude_none=True, exclude={\"blob_gas_used\"})\n        ),\n        blob_gas_used=blob_gas_used,\n        transactions_trie=Transaction.list_root(txs),\n        extra_data=block.extra_data if block.extra_data is not None else b\"\",\n        fork=fork,\n    )\n\n    if block.header_verify is not None:\n        # Verify the header after transition tool processing.\n        block.header_verify.verify(header)\n\n    if block.rlp_modifier is not None:\n        # Modify any parameter specified in the `rlp_modifier` after\n        # transition tool processing.\n        header = block.rlp_modifier.apply(header)\n\n    requests = None\n    if fork.header_requests_required(header.number, header.timestamp):\n        requests_list: List[DepositRequest | WithdrawalRequest | ConsolidationRequest] = []\n        if transition_tool_output.result.deposit_requests is not None:\n            requests_list += transition_tool_output.result.deposit_requests\n        if transition_tool_output.result.withdrawal_requests is not None:\n            requests_list += transition_tool_output.result.withdrawal_requests\n        if transition_tool_output.result.consolidation_requests is not None:\n            requests_list += transition_tool_output.result.consolidation_requests\n        requests = Requests(root=requests_list)\n\n    if requests is not None and requests.trie_root != header.requests_root:\n        raise Exception(\n            f\"Requests root in header does not match the requests root in the transition tool \"\n            \"output: \"\n            f\"{header.requests_root} != {requests.trie_root}\"\n        )\n\n    if block.requests is not None:\n        requests = Requests(root=block.requests)\n        header.requests_root = requests.trie_root\n\n    return (\n        header,\n        txs,\n        requests,\n        transition_tool_output.alloc,\n        env,\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockchainTest.network_info","title":"network_info(fork, eips=None)","text":"

    Returns fixture network information for the fork & EIP/s.

    Source code in src/ethereum_test_specs/blockchain.py
    def network_info(self, fork: Fork, eips: Optional[List[int]] = None):\n    \"\"\"\n    Returns fixture network information for the fork & EIP/s.\n    \"\"\"\n    return (\n        \"+\".join([fork.blockchain_test_network_name()] + [str(eip) for eip in eips])\n        if eips\n        else fork.blockchain_test_network_name()\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockchainTest.verify_post_state","title":"verify_post_state(t8n, alloc)","text":"

    Verifies the post alloc after all block/s or payload/s are generated.

    Source code in src/ethereum_test_specs/blockchain.py
    def verify_post_state(self, t8n, alloc: Alloc):\n    \"\"\"\n    Verifies the post alloc after all block/s or payload/s are generated.\n    \"\"\"\n    try:\n        self.post.verify_post_alloc(alloc)\n    except Exception as e:\n        print_traces(t8n.get_traces())\n        raise e\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockchainTest.make_fixture","title":"make_fixture(t8n, fork, eips=None)","text":"

    Create a fixture from the blockchain test definition.

    Source code in src/ethereum_test_specs/blockchain.py
    def make_fixture(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    eips: Optional[List[int]] = None,\n) -> Fixture:\n    \"\"\"\n    Create a fixture from the blockchain test definition.\n    \"\"\"\n    fixture_blocks: List[FixtureBlock | InvalidFixtureBlock] = []\n\n    pre, genesis = self.make_genesis(fork)\n\n    alloc = pre\n    env = environment_from_parent_header(genesis.header)\n    head = genesis.header.block_hash\n\n    for block in self.blocks:\n        if block.rlp is None:\n            # This is the most common case, the RLP needs to be constructed\n            # based on the transactions to be included in the block.\n            # Set the environment according to the block to execute.\n            header, txs, requests, new_alloc, new_env = self.generate_block_data(\n                t8n=t8n,\n                fork=fork,\n                block=block,\n                previous_env=env,\n                previous_alloc=alloc,\n                eips=eips,\n            )\n            fixture_block = FixtureBlockBase(\n                header=header,\n                txs=[FixtureTransaction.from_transaction(tx) for tx in txs],\n                ommers=[],\n                withdrawals=[FixtureWithdrawal.from_withdrawal(w) for w in new_env.withdrawals]\n                if new_env.withdrawals is not None\n                else None,\n                deposit_requests=[\n                    FixtureDepositRequest.from_deposit_request(d)\n                    for d in requests.deposit_requests()\n                ]\n                if requests is not None\n                else None,\n                withdrawal_requests=[\n                    FixtureWithdrawalRequest.from_withdrawal_request(w)\n                    for w in requests.withdrawal_requests()\n                ]\n                if requests is not None\n                else None,\n                consolidation_requests=[\n                    FixtureConsolidationRequest.from_consolidation_request(c)\n                    for c in requests.consolidation_requests()\n                ]\n                if requests is not None\n                else None,\n            ).with_rlp(txs=txs, requests=requests)\n            if block.exception is None:\n                fixture_blocks.append(fixture_block)\n                # Update env, alloc and last block hash for the next block.\n                alloc = new_alloc\n                env = apply_new_parent(new_env, header)\n                head = header.block_hash\n            else:\n                fixture_blocks.append(\n                    InvalidFixtureBlock(\n                        rlp=fixture_block.rlp,\n                        expect_exception=block.exception,\n                        rlp_decoded=(\n                            None\n                            if BlockException.RLP_STRUCTURES_ENCODING in block.exception\n                            else fixture_block.without_rlp()\n                        ),\n                    ),\n                )\n        else:\n            assert block.exception is not None, (\n                \"test correctness: if the block's rlp is hard-coded, \"\n                + \"the block is expected to produce an exception\"\n            )\n            fixture_blocks.append(\n                InvalidFixtureBlock(\n                    rlp=block.rlp,\n                    expect_exception=block.exception,\n                ),\n            )\n\n    self.verify_post_state(t8n, alloc)\n    return Fixture(\n        fork=self.network_info(fork, eips),\n        genesis=genesis.header,\n        genesis_rlp=genesis.rlp,\n        blocks=fixture_blocks,\n        last_block_hash=head,\n        pre=pre,\n        post_state=alloc,\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockchainTest.make_hive_fixture","title":"make_hive_fixture(t8n, fork, eips=None)","text":"

    Create a hive fixture from the blocktest definition.

    Source code in src/ethereum_test_specs/blockchain.py
    def make_hive_fixture(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    eips: Optional[List[int]] = None,\n) -> EngineFixture:\n    \"\"\"\n    Create a hive fixture from the blocktest definition.\n    \"\"\"\n    fixture_payloads: List[FixtureEngineNewPayload] = []\n\n    pre, genesis = self.make_genesis(fork)\n    alloc = pre\n    env = environment_from_parent_header(genesis.header)\n    head_hash = genesis.header.block_hash\n\n    for block in self.blocks:\n        header, txs, requests, new_alloc, new_env = self.generate_block_data(\n            t8n=t8n, fork=fork, block=block, previous_env=env, previous_alloc=alloc, eips=eips\n        )\n        if block.rlp is None:\n            fixture_payloads.append(\n                FixtureEngineNewPayload.from_fixture_header(\n                    fork=fork,\n                    header=header,\n                    transactions=txs,\n                    withdrawals=new_env.withdrawals,\n                    requests=requests,\n                    validation_error=block.exception,\n                    error_code=block.engine_api_error_code,\n                )\n            )\n            if block.exception is None:\n                alloc = new_alloc\n                env = apply_new_parent(env, header)\n                head_hash = header.block_hash\n    fcu_version = fork.engine_forkchoice_updated_version(header.number, header.timestamp)\n    assert (\n        fcu_version is not None\n    ), \"A hive fixture was requested but no forkchoice update is defined. The framework should\"\n    \" never try to execute this test case.\"\n\n    self.verify_post_state(t8n, alloc)\n\n    sync_payload: Optional[FixtureEngineNewPayload] = None\n    if self.verify_sync:\n        # Test is marked for syncing verification.\n        assert (\n            genesis.header.block_hash != head_hash\n        ), \"Invalid payload tests negative test via sync is not supported yet.\"\n\n        # Most clients require the header to start the sync process, so we create an empty\n        # block on top of the last block of the test to send it as new payload and trigger the\n        # sync process.\n        sync_header, _, requests, _, _ = self.generate_block_data(\n            t8n=t8n,\n            fork=fork,\n            block=Block(),\n            previous_env=env,\n            previous_alloc=alloc,\n            eips=eips,\n        )\n        sync_payload = FixtureEngineNewPayload.from_fixture_header(\n            fork=fork,\n            header=sync_header,\n            transactions=[],\n            withdrawals=[],\n            requests=requests,\n            validation_error=None,\n            error_code=None,\n        )\n\n    return EngineFixture(\n        fork=self.network_info(fork, eips),\n        genesis=genesis.header,\n        payloads=fixture_payloads,\n        fcu_version=fcu_version,\n        pre=pre,\n        post_state=alloc,\n        sync_payload=sync_payload,\n        last_block_hash=head_hash,\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockchainTest.generate","title":"generate(t8n, fork, fixture_format, eips=None)","text":"

    Generate the BlockchainTest fixture.

    Source code in src/ethereum_test_specs/blockchain.py
    def generate(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    fixture_format: FixtureFormats,\n    eips: Optional[List[int]] = None,\n) -> BaseFixture:\n    \"\"\"\n    Generate the BlockchainTest fixture.\n    \"\"\"\n    t8n.reset_traces()\n    if fixture_format == FixtureFormats.BLOCKCHAIN_TEST_ENGINE:\n        return self.make_hive_fixture(t8n, fork, eips)\n    elif fixture_format == FixtureFormats.BLOCKCHAIN_TEST:\n        return self.make_fixture(t8n, fork, eips)\n\n    raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFStateTest","title":"EOFStateTest","text":"

    Bases: EOFTest

    Filler type that tests EOF containers and also generates a state/blockchain test.

    Source code in src/ethereum_test_specs/eof.py
    class EOFStateTest(EOFTest):\n    \"\"\"\n    Filler type that tests EOF containers and also generates a state/blockchain test.\n    \"\"\"\n\n    deploy_tx: bool = False\n    tx_gas_limit: int = 10_000_000\n    tx_data: Bytes = Bytes(b\"\")\n    tx_sender_funding_amount: int = 1_000_000_000_000_000_000_000\n    env: Environment = Field(default_factory=Environment)\n    container_post: Account = Field(default_factory=Account)\n    pre: Alloc | None = None\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = [\n        FixtureFormats.EOF_TEST,\n        FixtureFormats.STATE_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST_ENGINE,\n    ]\n\n    @model_validator(mode=\"before\")\n    @classmethod\n    def check_container_type(cls, data: Any) -> Any:\n        \"\"\"\n        Check if the container exception matches the expected exception.\n        \"\"\"\n        if isinstance(data, dict):\n            container = data.get(\"data\")\n            deploy_tx = data.get(\"deploy_tx\")\n            container_kind = data.get(\"container_kind\")\n            if deploy_tx is None:\n                if (\n                    container is not None\n                    and isinstance(container, Container)\n                    and \"kind\" in container.model_fields_set\n                    and container.kind == ContainerKind.INITCODE\n                ) or (container_kind is not None and container_kind == ContainerKind.INITCODE):\n                    data[\"deploy_tx\"] = True\n        return data\n\n    @classmethod\n    def pytest_parameter_name(cls) -> str:\n        \"\"\"\n        Workaround for pytest parameter name.\n        \"\"\"\n        return \"eof_state_test\"\n\n    def generate_state_test(self) -> StateTest:\n        \"\"\"\n        Generate the StateTest filler.\n        \"\"\"\n        assert self.pre is not None, \"pre must be set to generate a StateTest.\"\n        tx = Transaction(\n            sender=self.pre.fund_eoa(amount=self.tx_sender_funding_amount),\n            gas_limit=self.tx_gas_limit,\n        )\n        post = Alloc()\n        if self.expect_exception is not None:  # Invalid EOF\n            tx.to = None  # Make EIP-7698 create transaction\n            tx.data = Bytes(self.data + self.tx_data)  # by concatenating container and tx data.\n            post[tx.created_contract] = None  # Expect failure.\n        elif self.deploy_tx:\n            tx.to = None  # Make EIP-7698 create transaction\n            tx.data = Bytes(self.data + self.tx_data)  # by concatenating container and tx data.\n            post[tx.created_contract] = self.container_post  # Successful.\n        else:\n            tx.to = self.pre.deploy_contract(code=self.data)\n            tx.data = self.tx_data\n            post[tx.to] = self.container_post\n        return StateTest(\n            pre=self.pre,\n            tx=tx,\n            env=self.env,\n            post=post,\n            t8n_dump_dir=self.t8n_dump_dir,\n        )\n\n    def generate(\n        self,\n        *,\n        t8n: TransitionTool,\n        fork: Fork,\n        eips: Optional[List[int]] = None,\n        fixture_format: FixtureFormats,\n        **_,\n    ) -> BaseFixture:\n        \"\"\"\n        Generate the BlockchainTest fixture.\n        \"\"\"\n        if fixture_format == FixtureFormats.EOF_TEST:\n            return self.make_eof_test_fixture(fork=fork, eips=eips)\n        elif fixture_format in (\n            FixtureFormats.STATE_TEST,\n            FixtureFormats.BLOCKCHAIN_TEST,\n            FixtureFormats.BLOCKCHAIN_TEST_ENGINE,\n        ):\n            return self.generate_state_test().generate(\n                t8n=t8n, fork=fork, fixture_format=fixture_format, eips=eips\n            )\n\n        raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFStateTest.check_container_type","title":"check_container_type(data) classmethod","text":"

    Check if the container exception matches the expected exception.

    Source code in src/ethereum_test_specs/eof.py
    @model_validator(mode=\"before\")\n@classmethod\ndef check_container_type(cls, data: Any) -> Any:\n    \"\"\"\n    Check if the container exception matches the expected exception.\n    \"\"\"\n    if isinstance(data, dict):\n        container = data.get(\"data\")\n        deploy_tx = data.get(\"deploy_tx\")\n        container_kind = data.get(\"container_kind\")\n        if deploy_tx is None:\n            if (\n                container is not None\n                and isinstance(container, Container)\n                and \"kind\" in container.model_fields_set\n                and container.kind == ContainerKind.INITCODE\n            ) or (container_kind is not None and container_kind == ContainerKind.INITCODE):\n                data[\"deploy_tx\"] = True\n    return data\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFStateTest.pytest_parameter_name","title":"pytest_parameter_name() classmethod","text":"

    Workaround for pytest parameter name.

    Source code in src/ethereum_test_specs/eof.py
    @classmethod\ndef pytest_parameter_name(cls) -> str:\n    \"\"\"\n    Workaround for pytest parameter name.\n    \"\"\"\n    return \"eof_state_test\"\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFStateTest.generate_state_test","title":"generate_state_test()","text":"

    Generate the StateTest filler.

    Source code in src/ethereum_test_specs/eof.py
    def generate_state_test(self) -> StateTest:\n    \"\"\"\n    Generate the StateTest filler.\n    \"\"\"\n    assert self.pre is not None, \"pre must be set to generate a StateTest.\"\n    tx = Transaction(\n        sender=self.pre.fund_eoa(amount=self.tx_sender_funding_amount),\n        gas_limit=self.tx_gas_limit,\n    )\n    post = Alloc()\n    if self.expect_exception is not None:  # Invalid EOF\n        tx.to = None  # Make EIP-7698 create transaction\n        tx.data = Bytes(self.data + self.tx_data)  # by concatenating container and tx data.\n        post[tx.created_contract] = None  # Expect failure.\n    elif self.deploy_tx:\n        tx.to = None  # Make EIP-7698 create transaction\n        tx.data = Bytes(self.data + self.tx_data)  # by concatenating container and tx data.\n        post[tx.created_contract] = self.container_post  # Successful.\n    else:\n        tx.to = self.pre.deploy_contract(code=self.data)\n        tx.data = self.tx_data\n        post[tx.to] = self.container_post\n    return StateTest(\n        pre=self.pre,\n        tx=tx,\n        env=self.env,\n        post=post,\n        t8n_dump_dir=self.t8n_dump_dir,\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFStateTest.generate","title":"generate(*, t8n, fork, eips=None, fixture_format, **_)","text":"

    Generate the BlockchainTest fixture.

    Source code in src/ethereum_test_specs/eof.py
    def generate(\n    self,\n    *,\n    t8n: TransitionTool,\n    fork: Fork,\n    eips: Optional[List[int]] = None,\n    fixture_format: FixtureFormats,\n    **_,\n) -> BaseFixture:\n    \"\"\"\n    Generate the BlockchainTest fixture.\n    \"\"\"\n    if fixture_format == FixtureFormats.EOF_TEST:\n        return self.make_eof_test_fixture(fork=fork, eips=eips)\n    elif fixture_format in (\n        FixtureFormats.STATE_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST_ENGINE,\n    ):\n        return self.generate_state_test().generate(\n            t8n=t8n, fork=fork, fixture_format=fixture_format, eips=eips\n        )\n\n    raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFTest","title":"EOFTest","text":"

    Bases: BaseTest

    Filler type that tests EOF containers.

    Source code in src/ethereum_test_specs/eof.py
    class EOFTest(BaseTest):\n    \"\"\"\n    Filler type that tests EOF containers.\n    \"\"\"\n\n    data: Bytes\n    expect_exception: EOFExceptionInstanceOrList | None = None\n    container_kind: ContainerKind | None = None\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = [\n        FixtureFormats.EOF_TEST,\n    ]\n\n    @model_validator(mode=\"before\")\n    @classmethod\n    def check_container_exception(cls, data: Any) -> Any:\n        \"\"\"\n        Check if the container exception matches the expected exception.\n        \"\"\"\n        if isinstance(data, dict):\n            container = data.get(\"data\")\n            expect_exception = data.get(\"expect_exception\")\n            container_kind = data.get(\"container_kind\")\n            if container is not None and isinstance(container, Container):\n                if (\n                    \"validity_error\" in container.model_fields_set\n                    and container.validity_error is not None\n                ):\n                    if expect_exception is not None:\n                        assert container.validity_error == expect_exception, (\n                            f\"Container validity error {container.validity_error} \"\n                            f\"does not match expected exception {expect_exception}.\"\n                        )\n                    if expect_exception is None:\n                        data[\"expect_exception\"] = container.validity_error\n                if \"kind\" in container.model_fields_set:\n                    if container_kind is not None:\n                        assert container.kind == container_kind, (\n                            f\"Container kind type {str(container.kind)} \"\n                            f\"does not match test {container_kind}.\"\n                        )\n                    if container.kind != ContainerKind.RUNTIME:\n                        data[\"container_kind\"] = container.kind\n        return data\n\n    @classmethod\n    def pytest_parameter_name(cls) -> str:\n        \"\"\"\n        Workaround for pytest parameter name.\n        \"\"\"\n        return \"eof_test\"\n\n    def make_eof_test_fixture(\n        self,\n        *,\n        fork: Fork,\n        eips: Optional[List[int]],\n    ) -> Fixture:\n        \"\"\"\n        Generate the EOF test fixture.\n        \"\"\"\n        vectors = [\n            Vector(\n                code=self.data,\n                container_kind=self.container_kind,\n                results={\n                    fork.blockchain_test_network_name(): Result(\n                        exception=self.expect_exception,\n                        valid=self.expect_exception is None,\n                    ),\n                },\n            )\n        ]\n        fixture = Fixture(vectors=dict(enumerate(vectors)))\n        try:\n            eof_parse = EOFParse()\n        except FileNotFoundError as e:\n            warnings.warn(f\"{e} Skipping EOF fixture verification. Fixtures may be invalid!\")\n            return fixture\n\n        for _, vector in fixture.vectors.items():\n            expected_result = vector.results.get(fork.blockchain_test_network_name())\n            if expected_result is None:\n                raise Exception(f\"EOF Fixture missing vector result for fork: {fork}\")\n            args = []\n            if vector.container_kind == ContainerKind.INITCODE:\n                args.append(\"--initcode\")\n            result = eof_parse.run(*args, input=str(vector.code))\n            self.verify_result(result, expected_result, vector.code)\n\n        return fixture\n\n    def verify_result(self, result: CompletedProcess, expected_result: Result, code: Bytes):\n        \"\"\"\n        Checks that the reported exception string matches the expected error.\n        \"\"\"\n        parser = EvmoneExceptionMapper()\n        actual_message = result.stdout.strip()\n        actual_exception = parser.message_to_exception(actual_message)\n\n        if expected_result.exception is None:\n            if \"OK\" in actual_message:\n                return\n            else:\n                raise UnexpectedEOFException(\n                    code=code, got=f\"{actual_exception} ({actual_message})\"\n                )\n        else:\n            expected_string = to_pipe_str(expected_result.exception)\n            print(expected_string)\n            print(actual_exception)\n            if \"OK\" in actual_message:\n                raise ExpectedEOFException(\n                    code=code,\n                    expected=f\"{expected_string}\",\n                )\n            elif actual_exception in expected_result.exception:\n                return\n            else:\n                raise EOFExceptionMismatch(\n                    code=code,\n                    expected=f\"{expected_string}\",\n                    got=f\"{actual_exception} ({actual_message})\",\n                )\n\n    def generate(\n        self,\n        *,\n        t8n: TransitionTool,\n        fork: Fork,\n        eips: Optional[List[int]] = None,\n        fixture_format: FixtureFormats,\n        **_,\n    ) -> BaseFixture:\n        \"\"\"\n        Generate the BlockchainTest fixture.\n        \"\"\"\n        if fixture_format == FixtureFormats.EOF_TEST:\n            return self.make_eof_test_fixture(fork=fork, eips=eips)\n\n        raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFTest.check_container_exception","title":"check_container_exception(data) classmethod","text":"

    Check if the container exception matches the expected exception.

    Source code in src/ethereum_test_specs/eof.py
    @model_validator(mode=\"before\")\n@classmethod\ndef check_container_exception(cls, data: Any) -> Any:\n    \"\"\"\n    Check if the container exception matches the expected exception.\n    \"\"\"\n    if isinstance(data, dict):\n        container = data.get(\"data\")\n        expect_exception = data.get(\"expect_exception\")\n        container_kind = data.get(\"container_kind\")\n        if container is not None and isinstance(container, Container):\n            if (\n                \"validity_error\" in container.model_fields_set\n                and container.validity_error is not None\n            ):\n                if expect_exception is not None:\n                    assert container.validity_error == expect_exception, (\n                        f\"Container validity error {container.validity_error} \"\n                        f\"does not match expected exception {expect_exception}.\"\n                    )\n                if expect_exception is None:\n                    data[\"expect_exception\"] = container.validity_error\n            if \"kind\" in container.model_fields_set:\n                if container_kind is not None:\n                    assert container.kind == container_kind, (\n                        f\"Container kind type {str(container.kind)} \"\n                        f\"does not match test {container_kind}.\"\n                    )\n                if container.kind != ContainerKind.RUNTIME:\n                    data[\"container_kind\"] = container.kind\n    return data\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFTest.pytest_parameter_name","title":"pytest_parameter_name() classmethod","text":"

    Workaround for pytest parameter name.

    Source code in src/ethereum_test_specs/eof.py
    @classmethod\ndef pytest_parameter_name(cls) -> str:\n    \"\"\"\n    Workaround for pytest parameter name.\n    \"\"\"\n    return \"eof_test\"\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFTest.make_eof_test_fixture","title":"make_eof_test_fixture(*, fork, eips)","text":"

    Generate the EOF test fixture.

    Source code in src/ethereum_test_specs/eof.py
    def make_eof_test_fixture(\n    self,\n    *,\n    fork: Fork,\n    eips: Optional[List[int]],\n) -> Fixture:\n    \"\"\"\n    Generate the EOF test fixture.\n    \"\"\"\n    vectors = [\n        Vector(\n            code=self.data,\n            container_kind=self.container_kind,\n            results={\n                fork.blockchain_test_network_name(): Result(\n                    exception=self.expect_exception,\n                    valid=self.expect_exception is None,\n                ),\n            },\n        )\n    ]\n    fixture = Fixture(vectors=dict(enumerate(vectors)))\n    try:\n        eof_parse = EOFParse()\n    except FileNotFoundError as e:\n        warnings.warn(f\"{e} Skipping EOF fixture verification. Fixtures may be invalid!\")\n        return fixture\n\n    for _, vector in fixture.vectors.items():\n        expected_result = vector.results.get(fork.blockchain_test_network_name())\n        if expected_result is None:\n            raise Exception(f\"EOF Fixture missing vector result for fork: {fork}\")\n        args = []\n        if vector.container_kind == ContainerKind.INITCODE:\n            args.append(\"--initcode\")\n        result = eof_parse.run(*args, input=str(vector.code))\n        self.verify_result(result, expected_result, vector.code)\n\n    return fixture\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFTest.verify_result","title":"verify_result(result, expected_result, code)","text":"

    Checks that the reported exception string matches the expected error.

    Source code in src/ethereum_test_specs/eof.py
    def verify_result(self, result: CompletedProcess, expected_result: Result, code: Bytes):\n    \"\"\"\n    Checks that the reported exception string matches the expected error.\n    \"\"\"\n    parser = EvmoneExceptionMapper()\n    actual_message = result.stdout.strip()\n    actual_exception = parser.message_to_exception(actual_message)\n\n    if expected_result.exception is None:\n        if \"OK\" in actual_message:\n            return\n        else:\n            raise UnexpectedEOFException(\n                code=code, got=f\"{actual_exception} ({actual_message})\"\n            )\n    else:\n        expected_string = to_pipe_str(expected_result.exception)\n        print(expected_string)\n        print(actual_exception)\n        if \"OK\" in actual_message:\n            raise ExpectedEOFException(\n                code=code,\n                expected=f\"{expected_string}\",\n            )\n        elif actual_exception in expected_result.exception:\n            return\n        else:\n            raise EOFExceptionMismatch(\n                code=code,\n                expected=f\"{expected_string}\",\n                got=f\"{actual_exception} ({actual_message})\",\n            )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFTest.generate","title":"generate(*, t8n, fork, eips=None, fixture_format, **_)","text":"

    Generate the BlockchainTest fixture.

    Source code in src/ethereum_test_specs/eof.py
    def generate(\n    self,\n    *,\n    t8n: TransitionTool,\n    fork: Fork,\n    eips: Optional[List[int]] = None,\n    fixture_format: FixtureFormats,\n    **_,\n) -> BaseFixture:\n    \"\"\"\n    Generate the BlockchainTest fixture.\n    \"\"\"\n    if fixture_format == FixtureFormats.EOF_TEST:\n        return self.make_eof_test_fixture(fork=fork, eips=eips)\n\n    raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.StateTest","title":"StateTest","text":"

    Bases: BaseTest

    Filler type that tests transactions over the period of a single block.

    Source code in src/ethereum_test_specs/state.py
    class StateTest(BaseTest):\n    \"\"\"\n    Filler type that tests transactions over the period of a single block.\n    \"\"\"\n\n    env: Environment\n    pre: Alloc\n    post: Alloc\n    tx: Transaction\n    engine_api_error_code: Optional[EngineAPIError] = None\n    blockchain_test_header_verify: Optional[Header] = None\n    blockchain_test_rlp_modifier: Optional[Header] = None\n    chain_id: int = 1\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = [\n        FixtureFormats.BLOCKCHAIN_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST_ENGINE,\n        FixtureFormats.STATE_TEST,\n    ]\n\n    def _generate_blockchain_genesis_environment(self) -> Environment:\n        \"\"\"\n        Generate the genesis environment for the BlockchainTest formatted test.\n        \"\"\"\n        assert (\n            self.env.number >= 1\n        ), \"genesis block number cannot be negative, set state test env.number to 1\"\n\n        # Modify values to the proper values for the genesis block\n        # TODO: All of this can be moved to a new method in `Fork`\n        updated_values: Dict[str, Any] = {\n            \"withdrawals\": None,\n            \"parent_beacon_block_root\": None,\n            \"number\": self.env.number - 1,\n        }\n        if self.env.excess_blob_gas:\n            # The excess blob gas environment value means the value of the context (block header)\n            # where the transaction is executed. In a blockchain test, we need to indirectly\n            # set the excess blob gas by setting the excess blob gas of the genesis block\n            # to the expected value plus the TARGET_BLOB_GAS_PER_BLOCK, which is the value\n            # that will be subtracted from the excess blob gas when the first block is mined.\n            updated_values[\"excess_blob_gas\"] = (\n                self.env.excess_blob_gas + TARGET_BLOB_GAS_PER_BLOCK\n            )\n\n        return self.env.copy(**updated_values)\n\n    def _generate_blockchain_blocks(self) -> List[Block]:\n        \"\"\"\n        Generate the single block that represents this state test in a BlockchainTest format.\n        \"\"\"\n        return [\n            Block(\n                number=self.env.number,\n                timestamp=self.env.timestamp,\n                fee_recipient=self.env.fee_recipient,\n                difficulty=self.env.difficulty,\n                gas_limit=self.env.gas_limit,\n                extra_data=self.env.extra_data,\n                withdrawals=self.env.withdrawals,\n                parent_beacon_block_root=self.env.parent_beacon_block_root,\n                txs=[self.tx],\n                ommers=[],\n                exception=self.tx.error,\n                header_verify=self.blockchain_test_header_verify,\n                rlp_modifier=self.blockchain_test_rlp_modifier,\n            )\n        ]\n\n    def generate_blockchain_test(self) -> BlockchainTest:\n        \"\"\"\n        Generate a BlockchainTest fixture from this StateTest fixture.\n        \"\"\"\n        return BlockchainTest(\n            genesis_environment=self._generate_blockchain_genesis_environment(),\n            pre=self.pre,\n            post=self.post,\n            blocks=self._generate_blockchain_blocks(),\n            t8n_dump_dir=self.t8n_dump_dir,\n        )\n\n    def make_state_test_fixture(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        eips: Optional[List[int]] = None,\n    ) -> Fixture:\n        \"\"\"\n        Create a fixture from the state test definition.\n        \"\"\"\n        # We can't generate a state test fixture that names a transition fork,\n        # so we get the fork at the block number and timestamp of the state test\n        fork = fork.fork_at(self.env.number, self.env.timestamp)\n\n        env = self.env.set_fork_requirements(fork)\n        tx = self.tx.with_signature_and_sender(keep_secret_key=True)\n        pre_alloc = Alloc.merge(\n            Alloc.model_validate(fork.pre_allocation()),\n            self.pre,\n        )\n        if empty_accounts := pre_alloc.empty_accounts():\n            raise Exception(f\"Empty accounts in pre state: {empty_accounts}\")\n\n        transition_tool_output = t8n.evaluate(\n            alloc=pre_alloc,\n            txs=[tx],\n            env=env,\n            fork=fork,\n            chain_id=self.chain_id,\n            reward=0,  # Reward on state tests is always zero\n            eips=eips,\n            debug_output_path=self.get_next_transition_tool_output_path(),\n        )\n\n        try:\n            self.post.verify_post_alloc(transition_tool_output.alloc)\n        except Exception as e:\n            print_traces(t8n.get_traces())\n            raise e\n\n        return Fixture(\n            env=FixtureEnvironment(**env.model_dump(exclude_none=True)),\n            pre=pre_alloc,\n            post={\n                fork.blockchain_test_network_name(): [\n                    FixtureForkPost(\n                        state_root=transition_tool_output.result.state_root,\n                        logs_hash=transition_tool_output.result.logs_hash,\n                        tx_bytes=tx.rlp,\n                        expect_exception=tx.error,\n                    )\n                ]\n            },\n            transaction=FixtureTransaction.from_transaction(tx),\n        )\n\n    def generate(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        fixture_format: FixtureFormats,\n        eips: Optional[List[int]] = None,\n    ) -> BaseFixture:\n        \"\"\"\n        Generate the BlockchainTest fixture.\n        \"\"\"\n        if fixture_format in BlockchainTest.supported_fixture_formats:\n            return self.generate_blockchain_test().generate(\n                t8n=t8n, fork=fork, fixture_format=fixture_format, eips=eips\n            )\n        elif fixture_format == FixtureFormats.STATE_TEST:\n            return self.make_state_test_fixture(t8n, fork, eips)\n\n        raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.StateTest.generate_blockchain_test","title":"generate_blockchain_test()","text":"

    Generate a BlockchainTest fixture from this StateTest fixture.

    Source code in src/ethereum_test_specs/state.py
    def generate_blockchain_test(self) -> BlockchainTest:\n    \"\"\"\n    Generate a BlockchainTest fixture from this StateTest fixture.\n    \"\"\"\n    return BlockchainTest(\n        genesis_environment=self._generate_blockchain_genesis_environment(),\n        pre=self.pre,\n        post=self.post,\n        blocks=self._generate_blockchain_blocks(),\n        t8n_dump_dir=self.t8n_dump_dir,\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.StateTest.make_state_test_fixture","title":"make_state_test_fixture(t8n, fork, eips=None)","text":"

    Create a fixture from the state test definition.

    Source code in src/ethereum_test_specs/state.py
    def make_state_test_fixture(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    eips: Optional[List[int]] = None,\n) -> Fixture:\n    \"\"\"\n    Create a fixture from the state test definition.\n    \"\"\"\n    # We can't generate a state test fixture that names a transition fork,\n    # so we get the fork at the block number and timestamp of the state test\n    fork = fork.fork_at(self.env.number, self.env.timestamp)\n\n    env = self.env.set_fork_requirements(fork)\n    tx = self.tx.with_signature_and_sender(keep_secret_key=True)\n    pre_alloc = Alloc.merge(\n        Alloc.model_validate(fork.pre_allocation()),\n        self.pre,\n    )\n    if empty_accounts := pre_alloc.empty_accounts():\n        raise Exception(f\"Empty accounts in pre state: {empty_accounts}\")\n\n    transition_tool_output = t8n.evaluate(\n        alloc=pre_alloc,\n        txs=[tx],\n        env=env,\n        fork=fork,\n        chain_id=self.chain_id,\n        reward=0,  # Reward on state tests is always zero\n        eips=eips,\n        debug_output_path=self.get_next_transition_tool_output_path(),\n    )\n\n    try:\n        self.post.verify_post_alloc(transition_tool_output.alloc)\n    except Exception as e:\n        print_traces(t8n.get_traces())\n        raise e\n\n    return Fixture(\n        env=FixtureEnvironment(**env.model_dump(exclude_none=True)),\n        pre=pre_alloc,\n        post={\n            fork.blockchain_test_network_name(): [\n                FixtureForkPost(\n                    state_root=transition_tool_output.result.state_root,\n                    logs_hash=transition_tool_output.result.logs_hash,\n                    tx_bytes=tx.rlp,\n                    expect_exception=tx.error,\n                )\n            ]\n        },\n        transaction=FixtureTransaction.from_transaction(tx),\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.StateTest.generate","title":"generate(t8n, fork, fixture_format, eips=None)","text":"

    Generate the BlockchainTest fixture.

    Source code in src/ethereum_test_specs/state.py
    def generate(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    fixture_format: FixtureFormats,\n    eips: Optional[List[int]] = None,\n) -> BaseFixture:\n    \"\"\"\n    Generate the BlockchainTest fixture.\n    \"\"\"\n    if fixture_format in BlockchainTest.supported_fixture_formats:\n        return self.generate_blockchain_test().generate(\n            t8n=t8n, fork=fork, fixture_format=fixture_format, eips=eips\n        )\n    elif fixture_format == FixtureFormats.STATE_TEST:\n        return self.make_state_test_fixture(t8n, fork, eips)\n\n    raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block","title":"Block","text":"

    Bases: Header

    Block type used to describe block properties in test specs

    Source code in src/ethereum_test_specs/blockchain.py
    class Block(Header):\n    \"\"\"\n    Block type used to describe block properties in test specs\n    \"\"\"\n\n    rlp: Bytes | None = None\n    \"\"\"\n    If set, blockchain test will skip generating the block and will pass this value directly to\n    the Fixture.\n\n    Only meant to be used to simulate blocks with bad formats, and therefore\n    requires the block to produce an exception.\n    \"\"\"\n    header_verify: Header | None = None\n    \"\"\"\n    If set, the block header will be verified against the specified values.\n    \"\"\"\n    rlp_modifier: Header | None = None\n    \"\"\"\n    An RLP modifying header which values would be used to override the ones\n    returned by the  `evm_transition_tool`.\n    \"\"\"\n    exception: List[\n        TransactionException | BlockException\n    ] | TransactionException | BlockException | None = None\n    \"\"\"\n    If set, the block is expected to be rejected by the client.\n    \"\"\"\n    engine_api_error_code: EngineAPIError | None = None\n    \"\"\"\n    If set, the block is expected to produce an error response from the Engine API.\n    \"\"\"\n    txs: List[Transaction] = Field(default_factory=list)\n    \"\"\"\n    List of transactions included in the block.\n    \"\"\"\n    ommers: List[Header] | None = None\n    \"\"\"\n    List of ommer headers included in the block.\n    \"\"\"\n    withdrawals: List[Withdrawal] | None = None\n    \"\"\"\n    List of withdrawals to perform for this block.\n    \"\"\"\n    requests: List[DepositRequest | WithdrawalRequest | ConsolidationRequest] | None = None\n    \"\"\"\n    Custom list of requests to embed in this block.\n    \"\"\"\n\n    def set_environment(self, env: Environment) -> Environment:\n        \"\"\"\n        Creates a copy of the environment with the characteristics of this\n        specific block.\n        \"\"\"\n        new_env_values: Dict[str, Any] = {}\n\n        \"\"\"\n        Values that need to be set in the environment and are `None` for\n        this block need to be set to their defaults.\n        \"\"\"\n        new_env_values[\"difficulty\"] = self.difficulty\n        new_env_values[\"fee_recipient\"] = (\n            self.fee_recipient if self.fee_recipient is not None else Environment().fee_recipient\n        )\n        new_env_values[\"gas_limit\"] = (\n            self.gas_limit or env.parent_gas_limit or Environment().gas_limit\n        )\n        if not isinstance(self.base_fee_per_gas, Removable):\n            new_env_values[\"base_fee_per_gas\"] = self.base_fee_per_gas\n        new_env_values[\"withdrawals\"] = self.withdrawals\n        if not isinstance(self.excess_blob_gas, Removable):\n            new_env_values[\"excess_blob_gas\"] = self.excess_blob_gas\n        if not isinstance(self.blob_gas_used, Removable):\n            new_env_values[\"blob_gas_used\"] = self.blob_gas_used\n        if not isinstance(self.parent_beacon_block_root, Removable):\n            new_env_values[\"parent_beacon_block_root\"] = self.parent_beacon_block_root\n        \"\"\"\n        These values are required, but they depend on the previous environment,\n        so they can be calculated here.\n        \"\"\"\n        if self.number is not None:\n            new_env_values[\"number\"] = self.number\n        else:\n            # calculate the next block number for the environment\n            if len(env.block_hashes) == 0:\n                new_env_values[\"number\"] = 0\n            else:\n                new_env_values[\"number\"] = max([Number(n) for n in env.block_hashes.keys()]) + 1\n\n        if self.timestamp is not None:\n            new_env_values[\"timestamp\"] = self.timestamp\n        else:\n            assert env.parent_timestamp is not None\n            new_env_values[\"timestamp\"] = int(Number(env.parent_timestamp) + 12)\n\n        return env.copy(**new_env_values)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block.rlp","title":"rlp: Bytes | None = None class-attribute instance-attribute","text":"

    If set, blockchain test will skip generating the block and will pass this value directly to the Fixture.

    Only meant to be used to simulate blocks with bad formats, and therefore requires the block to produce an exception.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block.header_verify","title":"header_verify: Header | None = None class-attribute instance-attribute","text":"

    If set, the block header will be verified against the specified values.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block.rlp_modifier","title":"rlp_modifier: Header | None = None class-attribute instance-attribute","text":"

    An RLP modifying header which values would be used to override the ones returned by the evm_transition_tool.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block.exception","title":"exception: List[TransactionException | BlockException] | TransactionException | BlockException | None = None class-attribute instance-attribute","text":"

    If set, the block is expected to be rejected by the client.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block.engine_api_error_code","title":"engine_api_error_code: EngineAPIError | None = None class-attribute instance-attribute","text":"

    If set, the block is expected to produce an error response from the Engine API.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block.txs","title":"txs: List[Transaction] = Field(default_factory=list) class-attribute instance-attribute","text":"

    List of transactions included in the block.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block.ommers","title":"ommers: List[Header] | None = None class-attribute instance-attribute","text":"

    List of ommer headers included in the block.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block.withdrawals","title":"withdrawals: List[Withdrawal] | None = None class-attribute instance-attribute","text":"

    List of withdrawals to perform for this block.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block.requests","title":"requests: List[DepositRequest | WithdrawalRequest | ConsolidationRequest] | None = None class-attribute instance-attribute","text":"

    Custom list of requests to embed in this block.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block.set_environment","title":"set_environment(env)","text":"

    Creates a copy of the environment with the characteristics of this specific block.

    Source code in src/ethereum_test_specs/blockchain.py
    def set_environment(self, env: Environment) -> Environment:\n    \"\"\"\n    Creates a copy of the environment with the characteristics of this\n    specific block.\n    \"\"\"\n    new_env_values: Dict[str, Any] = {}\n\n    \"\"\"\n    Values that need to be set in the environment and are `None` for\n    this block need to be set to their defaults.\n    \"\"\"\n    new_env_values[\"difficulty\"] = self.difficulty\n    new_env_values[\"fee_recipient\"] = (\n        self.fee_recipient if self.fee_recipient is not None else Environment().fee_recipient\n    )\n    new_env_values[\"gas_limit\"] = (\n        self.gas_limit or env.parent_gas_limit or Environment().gas_limit\n    )\n    if not isinstance(self.base_fee_per_gas, Removable):\n        new_env_values[\"base_fee_per_gas\"] = self.base_fee_per_gas\n    new_env_values[\"withdrawals\"] = self.withdrawals\n    if not isinstance(self.excess_blob_gas, Removable):\n        new_env_values[\"excess_blob_gas\"] = self.excess_blob_gas\n    if not isinstance(self.blob_gas_used, Removable):\n        new_env_values[\"blob_gas_used\"] = self.blob_gas_used\n    if not isinstance(self.parent_beacon_block_root, Removable):\n        new_env_values[\"parent_beacon_block_root\"] = self.parent_beacon_block_root\n    \"\"\"\n    These values are required, but they depend on the previous environment,\n    so they can be calculated here.\n    \"\"\"\n    if self.number is not None:\n        new_env_values[\"number\"] = self.number\n    else:\n        # calculate the next block number for the environment\n        if len(env.block_hashes) == 0:\n            new_env_values[\"number\"] = 0\n        else:\n            new_env_values[\"number\"] = max([Number(n) for n in env.block_hashes.keys()]) + 1\n\n    if self.timestamp is not None:\n        new_env_values[\"timestamp\"] = self.timestamp\n    else:\n        assert env.parent_timestamp is not None\n        new_env_values[\"timestamp\"] = int(Number(env.parent_timestamp) + 12)\n\n    return env.copy(**new_env_values)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Header","title":"Header","text":"

    Bases: CamelModel

    Header type used to describe block header properties in test specs.

    Source code in src/ethereum_test_specs/blockchain.py
    class Header(CamelModel):\n    \"\"\"\n    Header type used to describe block header properties in test specs.\n    \"\"\"\n\n    parent_hash: Hash | None = None\n    ommers_hash: Hash | None = None\n    fee_recipient: Address | None = None\n    state_root: Hash | None = None\n    transactions_trie: Hash | None = None\n    receipts_root: Hash | None = None\n    logs_bloom: Bloom | None = None\n    difficulty: HexNumber | None = None\n    number: HexNumber | None = None\n    gas_limit: HexNumber | None = None\n    gas_used: HexNumber | None = None\n    timestamp: HexNumber | None = None\n    extra_data: Bytes | None = None\n    prev_randao: Hash | None = None\n    nonce: HeaderNonce | None = None\n    base_fee_per_gas: Removable | HexNumber | None = None\n    withdrawals_root: Removable | Hash | None = None\n    blob_gas_used: Removable | HexNumber | None = None\n    excess_blob_gas: Removable | HexNumber | None = None\n    parent_beacon_block_root: Removable | Hash | None = None\n    requests_root: Removable | Hash | None = None\n\n    REMOVE_FIELD: ClassVar[Removable] = Removable()\n    \"\"\"\n    Sentinel object used to specify that a header field should be removed.\n    \"\"\"\n    EMPTY_FIELD: ClassVar[Removable] = Removable()\n    \"\"\"\n    Sentinel object used to specify that a header field must be empty during verification.\n\n    This can be used in a test to explicitly skip a field in a block's RLP encoding.\n    included in the (json) output when the model is serialized. For example:\n    ```\n    header_modifier = Header(\n        excess_blob_gas=Header.REMOVE_FIELD,\n    )\n    block = Block(\n        timestamp=TIMESTAMP,\n        rlp_modifier=header_modifier,\n        exception=BlockException.INCORRECT_BLOCK_FORMAT,\n        engine_api_error_code=EngineAPIError.InvalidParams,\n    )\n    ```\n    \"\"\"\n\n    model_config = ConfigDict(\n        arbitrary_types_allowed=True,\n        # explicitly set Removable items to None so they are not included in the serialization\n        # (in combination with exclude_None=True in model.dump()).\n        json_encoders={\n            Removable: lambda x: None,\n        },\n    )\n\n    @field_validator(\"withdrawals_root\", mode=\"before\")\n    @classmethod\n    def validate_withdrawals_root(cls, value):\n        \"\"\"\n        Helper validator to convert a list of withdrawals into the withdrawals root hash.\n        \"\"\"\n        if isinstance(value, list):\n            return Withdrawal.list_root(value)\n        return value\n\n    @field_validator(\"requests_root\", mode=\"before\")\n    @classmethod\n    def validate_requests_root(cls, value):\n        \"\"\"\n        Helper validator to convert a list of requests into the requests root hash.\n        \"\"\"\n        if isinstance(value, list):\n            return Requests(root=value).trie_root\n        return value\n\n    def apply(self, target: FixtureHeader) -> FixtureHeader:\n        \"\"\"\n        Produces a fixture header copy with the set values from the modifier.\n        \"\"\"\n        return target.copy(\n            **{\n                k: (v if v is not Header.REMOVE_FIELD else None)\n                for k, v in self.model_dump(exclude_none=True).items()\n            }\n        )\n\n    def verify(self, target: FixtureHeader):\n        \"\"\"\n        Verifies that the header fields from self are as expected.\n        \"\"\"\n        for field_name in self.model_fields:\n            baseline_value = getattr(self, field_name)\n            if baseline_value is not None:\n                assert baseline_value is not Header.REMOVE_FIELD, \"invalid header\"\n                value = getattr(target, field_name)\n                if baseline_value is Header.EMPTY_FIELD:\n                    assert (\n                        value is None\n                    ), f\"invalid header field {field_name}, got {value}, want None\"\n                    continue\n                assert value == baseline_value, (\n                    f\"invalid header field ({field_name}) value, \"\n                    + f\"got {value}, want {baseline_value}\"\n                )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Header.REMOVE_FIELD","title":"REMOVE_FIELD: Removable = Removable() class-attribute","text":"

    Sentinel object used to specify that a header field should be removed.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Header.EMPTY_FIELD","title":"EMPTY_FIELD: Removable = Removable() class-attribute","text":"

    Sentinel object used to specify that a header field must be empty during verification.

    This can be used in a test to explicitly skip a field in a block's RLP encoding. included in the (json) output when the model is serialized. For example:

    header_modifier = Header(\n    excess_blob_gas=Header.REMOVE_FIELD,\n)\nblock = Block(\n    timestamp=TIMESTAMP,\n    rlp_modifier=header_modifier,\n    exception=BlockException.INCORRECT_BLOCK_FORMAT,\n    engine_api_error_code=EngineAPIError.InvalidParams,\n)\n

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Header.validate_withdrawals_root","title":"validate_withdrawals_root(value) classmethod","text":"

    Helper validator to convert a list of withdrawals into the withdrawals root hash.

    Source code in src/ethereum_test_specs/blockchain.py
    @field_validator(\"withdrawals_root\", mode=\"before\")\n@classmethod\ndef validate_withdrawals_root(cls, value):\n    \"\"\"\n    Helper validator to convert a list of withdrawals into the withdrawals root hash.\n    \"\"\"\n    if isinstance(value, list):\n        return Withdrawal.list_root(value)\n    return value\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Header.validate_requests_root","title":"validate_requests_root(value) classmethod","text":"

    Helper validator to convert a list of requests into the requests root hash.

    Source code in src/ethereum_test_specs/blockchain.py
    @field_validator(\"requests_root\", mode=\"before\")\n@classmethod\ndef validate_requests_root(cls, value):\n    \"\"\"\n    Helper validator to convert a list of requests into the requests root hash.\n    \"\"\"\n    if isinstance(value, list):\n        return Requests(root=value).trie_root\n    return value\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Header.apply","title":"apply(target)","text":"

    Produces a fixture header copy with the set values from the modifier.

    Source code in src/ethereum_test_specs/blockchain.py
    def apply(self, target: FixtureHeader) -> FixtureHeader:\n    \"\"\"\n    Produces a fixture header copy with the set values from the modifier.\n    \"\"\"\n    return target.copy(\n        **{\n            k: (v if v is not Header.REMOVE_FIELD else None)\n            for k, v in self.model_dump(exclude_none=True).items()\n        }\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Header.verify","title":"verify(target)","text":"

    Verifies that the header fields from self are as expected.

    Source code in src/ethereum_test_specs/blockchain.py
    def verify(self, target: FixtureHeader):\n    \"\"\"\n    Verifies that the header fields from self are as expected.\n    \"\"\"\n    for field_name in self.model_fields:\n        baseline_value = getattr(self, field_name)\n        if baseline_value is not None:\n            assert baseline_value is not Header.REMOVE_FIELD, \"invalid header\"\n            value = getattr(target, field_name)\n            if baseline_value is Header.EMPTY_FIELD:\n                assert (\n                    value is None\n                ), f\"invalid header field {field_name}, got {value}, want None\"\n                continue\n            assert value == baseline_value, (\n                f\"invalid header field ({field_name}) value, \"\n                + f\"got {value}, want {baseline_value}\"\n            )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.CalldataCase","title":"CalldataCase","text":"

    Bases: Case

    Small helper class to represent a single case whose condition depends on the value of the contract's calldata in a Switch case statement.

    By default the calldata is read from position zero, but this can be overridden using position.

    The condition is generated automatically based on the value (and optionally position) and may not be set directly.

    Source code in src/ethereum_test_tools/code/generators.py
    class CalldataCase(Case):\n    \"\"\"\n    Small helper class to represent a single case whose condition depends\n    on the value of the contract's calldata in a Switch case statement.\n\n    By default the calldata is read from position zero, but this can be\n    overridden using `position`.\n\n    The `condition` is generated automatically based on the `value` (and\n    optionally `position`) and may not be set directly.\n    \"\"\"\n\n    def __init__(self, value: int | str | Bytecode, position: int = 0, **kwargs):\n        \"\"\"\n        Generate the condition base on `value` and `position`.\n        \"\"\"\n        condition = Op.EQ(Op.CALLDATALOAD(position), value)\n        super().__init__(condition=condition, **kwargs)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.CalldataCase.__init__","title":"__init__(value, position=0, **kwargs)","text":"

    Generate the condition base on value and position.

    Source code in src/ethereum_test_tools/code/generators.py
    def __init__(self, value: int | str | Bytecode, position: int = 0, **kwargs):\n    \"\"\"\n    Generate the condition base on `value` and `position`.\n    \"\"\"\n    condition = Op.EQ(Op.CALLDATALOAD(position), value)\n    super().__init__(condition=condition, **kwargs)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Case","title":"Case dataclass","text":"

    Small helper class to represent a single, generic case in a Switch cases list.

    Source code in src/ethereum_test_tools/code/generators.py
    @dataclass(kw_only=True)\nclass Case:\n    \"\"\"\n    Small helper class to represent a single, generic case in a `Switch` cases\n    list.\n    \"\"\"\n\n    condition: Bytecode | Op\n    action: Bytecode | Op\n    terminating: bool | None = None\n\n    @property\n    def is_terminating(self) -> bool:\n        \"\"\"\n        Returns whether the case is terminating.\n        \"\"\"\n        return self.terminating if self.terminating is not None else self.action.terminating\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Case.is_terminating","title":"is_terminating: bool property","text":"

    Returns whether the case is terminating.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.CodeGasMeasure","title":"CodeGasMeasure","text":"

    Bases: Bytecode

    Helper class used to generate bytecode that measures gas usage of a bytecode, taking into account and subtracting any extra overhead gas costs required to execute. By default, the result gas calculation is saved to storage key 0.

    Source code in src/ethereum_test_tools/code/generators.py
    class CodeGasMeasure(Bytecode):\n    \"\"\"\n    Helper class used to generate bytecode that measures gas usage of a\n    bytecode, taking into account and subtracting any extra overhead gas costs\n    required to execute.\n    By default, the result gas calculation is saved to storage key 0.\n    \"\"\"\n\n    code: Bytecode\n    \"\"\"\n    Bytecode to be executed to measure the gas usage.\n    \"\"\"\n    overhead_cost: int\n    \"\"\"\n    Extra gas cost to be subtracted from extra operations.\n    \"\"\"\n    extra_stack_items: int\n    \"\"\"\n    Extra stack items that remain at the end of the execution.\n    To be considered when subtracting the value of the previous GAS operation,\n    and to be popped at the end of the execution.\n    \"\"\"\n    sstore_key: int\n    \"\"\"\n    Storage key to save the gas used.\n    \"\"\"\n\n    def __new__(\n        cls,\n        *,\n        code: Bytecode,\n        overhead_cost: int = 0,\n        extra_stack_items: int = 0,\n        sstore_key: int = 0,\n        stop: bool = True,\n    ):\n        \"\"\"\n        Assemble the bytecode that measures gas usage.\n        \"\"\"\n        res = Op.GAS + code + Op.GAS\n        # We need to swap and pop for each extra stack item that remained from\n        # the execution of the code\n        res += (Op.SWAP1 + Op.POP) * extra_stack_items\n        res += (\n            Op.SWAP1\n            + Op.SUB\n            + Op.PUSH1(overhead_cost + 2)\n            + Op.SWAP1\n            + Op.SUB\n            + Op.PUSH1(sstore_key)\n            + Op.SSTORE\n        )\n        if stop:\n            res += Op.STOP\n\n        instance = super().__new__(cls, res)\n        instance.code = code\n        instance.overhead_cost = overhead_cost\n        instance.extra_stack_items = extra_stack_items\n        instance.sstore_key = sstore_key\n        return instance\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.CodeGasMeasure.code","title":"code: Bytecode instance-attribute","text":"

    Bytecode to be executed to measure the gas usage.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.CodeGasMeasure.overhead_cost","title":"overhead_cost: int instance-attribute","text":"

    Extra gas cost to be subtracted from extra operations.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.CodeGasMeasure.extra_stack_items","title":"extra_stack_items: int instance-attribute","text":"

    Extra stack items that remain at the end of the execution. To be considered when subtracting the value of the previous GAS operation, and to be popped at the end of the execution.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.CodeGasMeasure.sstore_key","title":"sstore_key: int instance-attribute","text":"

    Storage key to save the gas used.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.CodeGasMeasure.__new__","title":"__new__(*, code, overhead_cost=0, extra_stack_items=0, sstore_key=0, stop=True)","text":"

    Assemble the bytecode that measures gas usage.

    Source code in src/ethereum_test_tools/code/generators.py
    def __new__(\n    cls,\n    *,\n    code: Bytecode,\n    overhead_cost: int = 0,\n    extra_stack_items: int = 0,\n    sstore_key: int = 0,\n    stop: bool = True,\n):\n    \"\"\"\n    Assemble the bytecode that measures gas usage.\n    \"\"\"\n    res = Op.GAS + code + Op.GAS\n    # We need to swap and pop for each extra stack item that remained from\n    # the execution of the code\n    res += (Op.SWAP1 + Op.POP) * extra_stack_items\n    res += (\n        Op.SWAP1\n        + Op.SUB\n        + Op.PUSH1(overhead_cost + 2)\n        + Op.SWAP1\n        + Op.SUB\n        + Op.PUSH1(sstore_key)\n        + Op.SSTORE\n    )\n    if stop:\n        res += Op.STOP\n\n    instance = super().__new__(cls, res)\n    instance.code = code\n    instance.overhead_cost = overhead_cost\n    instance.extra_stack_items = extra_stack_items\n    instance.sstore_key = sstore_key\n    return instance\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Conditional","title":"Conditional","text":"

    Bases: Bytecode

    Helper class used to generate conditional bytecode.

    Source code in src/ethereum_test_tools/code/generators.py
    class Conditional(Bytecode):\n    \"\"\"\n    Helper class used to generate conditional bytecode.\n    \"\"\"\n\n    def __new__(\n        cls,\n        *,\n        condition: Bytecode | Op,\n        if_true: Bytecode | Op = Bytecode(),\n        if_false: Bytecode | Op = Bytecode(),\n        evm_code_type: EVMCodeType = EVMCodeType.LEGACY,\n    ):\n        \"\"\"\n        Assemble the conditional bytecode by generating the necessary jump and\n        jumpdest opcodes surrounding the condition and the two possible execution\n        paths.\n\n        In the future, PC usage should be replaced by using RJUMP and RJUMPI\n        \"\"\"\n        if evm_code_type == EVMCodeType.LEGACY:\n            # First we append a jumpdest to the start of the true branch\n            if_true = Op.JUMPDEST + if_true\n\n            # Then we append the unconditional jump to the end of the false branch, used to skip\n            # the true branch\n            if_false += Op.JUMP(Op.ADD(Op.PC, len(if_true) + 3))\n\n            # Then we need to do the conditional jump by skipping the false branch\n            condition = Op.JUMPI(Op.ADD(Op.PC, len(if_false) + 3), condition)\n\n        elif evm_code_type == EVMCodeType.EOF_V1:\n            if_false += Op.RJUMP[len(if_true)]\n            condition = Op.RJUMPI[len(if_false)](condition)\n\n        # Finally we append the true and false branches, and the condition, plus the jumpdest at\n        # the very end\n        bytecode = condition + if_false + if_true + Op.JUMPDEST\n\n        return super().__new__(cls, bytecode)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Conditional.__new__","title":"__new__(*, condition, if_true=Bytecode(), if_false=Bytecode(), evm_code_type=EVMCodeType.LEGACY)","text":"

    Assemble the conditional bytecode by generating the necessary jump and jumpdest opcodes surrounding the condition and the two possible execution paths.

    In the future, PC usage should be replaced by using RJUMP and RJUMPI

    Source code in src/ethereum_test_tools/code/generators.py
    def __new__(\n    cls,\n    *,\n    condition: Bytecode | Op,\n    if_true: Bytecode | Op = Bytecode(),\n    if_false: Bytecode | Op = Bytecode(),\n    evm_code_type: EVMCodeType = EVMCodeType.LEGACY,\n):\n    \"\"\"\n    Assemble the conditional bytecode by generating the necessary jump and\n    jumpdest opcodes surrounding the condition and the two possible execution\n    paths.\n\n    In the future, PC usage should be replaced by using RJUMP and RJUMPI\n    \"\"\"\n    if evm_code_type == EVMCodeType.LEGACY:\n        # First we append a jumpdest to the start of the true branch\n        if_true = Op.JUMPDEST + if_true\n\n        # Then we append the unconditional jump to the end of the false branch, used to skip\n        # the true branch\n        if_false += Op.JUMP(Op.ADD(Op.PC, len(if_true) + 3))\n\n        # Then we need to do the conditional jump by skipping the false branch\n        condition = Op.JUMPI(Op.ADD(Op.PC, len(if_false) + 3), condition)\n\n    elif evm_code_type == EVMCodeType.EOF_V1:\n        if_false += Op.RJUMP[len(if_true)]\n        condition = Op.RJUMPI[len(if_false)](condition)\n\n    # Finally we append the true and false branches, and the condition, plus the jumpdest at\n    # the very end\n    bytecode = condition + if_false + if_true + Op.JUMPDEST\n\n    return super().__new__(cls, bytecode)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Initcode","title":"Initcode","text":"

    Bases: Bytecode

    Helper class used to generate initcode for the specified deployment code.

    The execution gas cost of the initcode is calculated, and also the deployment gas costs for the deployed code.

    The initcode can be padded to a certain length if necessary, which does not affect the deployed code.

    Other costs such as the CREATE2 hashing costs or the initcode_word_cost of EIP-3860 are not taken into account by any of these calculated costs.

    Source code in src/ethereum_test_tools/code/generators.py
    class Initcode(Bytecode):\n    \"\"\"\n    Helper class used to generate initcode for the specified deployment code.\n\n    The execution gas cost of the initcode is calculated, and also the\n    deployment gas costs for the deployed code.\n\n    The initcode can be padded to a certain length if necessary, which\n    does not affect the deployed code.\n\n    Other costs such as the CREATE2 hashing costs or the initcode_word_cost\n    of EIP-3860 are *not* taken into account by any of these calculated\n    costs.\n    \"\"\"\n\n    deploy_code: SupportsBytes\n    \"\"\"\n    Bytecode to be deployed by the initcode.\n    \"\"\"\n    execution_gas: int\n    \"\"\"\n    Gas cost of executing the initcode, without considering deployment gas\n    costs.\n    \"\"\"\n    deployment_gas: int\n    \"\"\"\n    Gas cost of deploying the cost, subtracted after initcode execution,\n    \"\"\"\n\n    def __new__(\n        cls,\n        *,\n        deploy_code: SupportsBytes = Bytecode(),\n        initcode_length: int | None = None,\n        initcode_prefix: Bytecode = Bytecode(),\n        initcode_prefix_execution_gas: int = 0,\n        padding_byte: int = 0x00,\n        name: str = \"\",\n    ):\n        \"\"\"\n        Generate legacy initcode that inits a contract with the specified code.\n        The initcode can be padded to a specified length for testing purposes.\n        \"\"\"\n        initcode = initcode_prefix\n        code_length = len(bytes(deploy_code))\n        execution_gas = initcode_prefix_execution_gas\n\n        # PUSH2: length=<bytecode length>\n        initcode += Op.PUSH2(code_length)\n        execution_gas = 3\n\n        # PUSH1: offset=0\n        initcode += Op.PUSH1(0)\n        execution_gas += 3\n\n        # DUP2\n        initcode += Op.DUP2\n        execution_gas += 3\n\n        # PUSH1: initcode_length=11 + len(initcode_prefix_bytes) (constant)\n        no_prefix_length = 0x0B\n        assert no_prefix_length + len(initcode_prefix) <= 0xFF, \"initcode prefix too long\"\n        initcode += Op.PUSH1(no_prefix_length + len(initcode_prefix))\n        execution_gas += 3\n\n        # DUP3\n        initcode += Op.DUP3\n        execution_gas += 3\n\n        # CODECOPY: destinationOffset=0, offset=0, length\n        initcode += Op.CODECOPY\n        execution_gas += (\n            3\n            + (3 * ceiling_division(code_length, 32))\n            + (3 * code_length)\n            + ((code_length * code_length) // 512)\n        )\n\n        # RETURN: offset=0, length\n        initcode += Op.RETURN\n        execution_gas += 0\n\n        initcode_plus_deploy_code = bytes(initcode) + bytes(deploy_code)\n        padding_bytes = bytes()\n\n        if initcode_length is not None:\n            assert initcode_length >= len(\n                initcode_plus_deploy_code\n            ), \"specified invalid length for initcode\"\n\n            padding_bytes = bytes(\n                [padding_byte] * (initcode_length - len(initcode_plus_deploy_code))\n            )\n\n        initcode_bytes = initcode_plus_deploy_code + padding_bytes\n        instance = super().__new__(\n            cls,\n            initcode_bytes,\n            popped_stack_items=initcode.popped_stack_items,\n            pushed_stack_items=initcode.pushed_stack_items,\n            max_stack_height=initcode.max_stack_height,\n            min_stack_height=initcode.min_stack_height,\n        )\n        instance._name_ = name\n        instance.deploy_code = deploy_code\n        instance.execution_gas = execution_gas\n        instance.deployment_gas = GAS_PER_DEPLOYED_CODE_BYTE * len(bytes(instance.deploy_code))\n\n        return instance\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Initcode.deploy_code","title":"deploy_code: SupportsBytes instance-attribute","text":"

    Bytecode to be deployed by the initcode.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Initcode.execution_gas","title":"execution_gas: int instance-attribute","text":"

    Gas cost of executing the initcode, without considering deployment gas costs.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Initcode.deployment_gas","title":"deployment_gas: int instance-attribute","text":"

    Gas cost of deploying the cost, subtracted after initcode execution,

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Initcode.__new__","title":"__new__(*, deploy_code=Bytecode(), initcode_length=None, initcode_prefix=Bytecode(), initcode_prefix_execution_gas=0, padding_byte=0, name='')","text":"

    Generate legacy initcode that inits a contract with the specified code. The initcode can be padded to a specified length for testing purposes.

    Source code in src/ethereum_test_tools/code/generators.py
    def __new__(\n    cls,\n    *,\n    deploy_code: SupportsBytes = Bytecode(),\n    initcode_length: int | None = None,\n    initcode_prefix: Bytecode = Bytecode(),\n    initcode_prefix_execution_gas: int = 0,\n    padding_byte: int = 0x00,\n    name: str = \"\",\n):\n    \"\"\"\n    Generate legacy initcode that inits a contract with the specified code.\n    The initcode can be padded to a specified length for testing purposes.\n    \"\"\"\n    initcode = initcode_prefix\n    code_length = len(bytes(deploy_code))\n    execution_gas = initcode_prefix_execution_gas\n\n    # PUSH2: length=<bytecode length>\n    initcode += Op.PUSH2(code_length)\n    execution_gas = 3\n\n    # PUSH1: offset=0\n    initcode += Op.PUSH1(0)\n    execution_gas += 3\n\n    # DUP2\n    initcode += Op.DUP2\n    execution_gas += 3\n\n    # PUSH1: initcode_length=11 + len(initcode_prefix_bytes) (constant)\n    no_prefix_length = 0x0B\n    assert no_prefix_length + len(initcode_prefix) <= 0xFF, \"initcode prefix too long\"\n    initcode += Op.PUSH1(no_prefix_length + len(initcode_prefix))\n    execution_gas += 3\n\n    # DUP3\n    initcode += Op.DUP3\n    execution_gas += 3\n\n    # CODECOPY: destinationOffset=0, offset=0, length\n    initcode += Op.CODECOPY\n    execution_gas += (\n        3\n        + (3 * ceiling_division(code_length, 32))\n        + (3 * code_length)\n        + ((code_length * code_length) // 512)\n    )\n\n    # RETURN: offset=0, length\n    initcode += Op.RETURN\n    execution_gas += 0\n\n    initcode_plus_deploy_code = bytes(initcode) + bytes(deploy_code)\n    padding_bytes = bytes()\n\n    if initcode_length is not None:\n        assert initcode_length >= len(\n            initcode_plus_deploy_code\n        ), \"specified invalid length for initcode\"\n\n        padding_bytes = bytes(\n            [padding_byte] * (initcode_length - len(initcode_plus_deploy_code))\n        )\n\n    initcode_bytes = initcode_plus_deploy_code + padding_bytes\n    instance = super().__new__(\n        cls,\n        initcode_bytes,\n        popped_stack_items=initcode.popped_stack_items,\n        pushed_stack_items=initcode.pushed_stack_items,\n        max_stack_height=initcode.max_stack_height,\n        min_stack_height=initcode.min_stack_height,\n    )\n    instance._name_ = name\n    instance.deploy_code = deploy_code\n    instance.execution_gas = execution_gas\n    instance.deployment_gas = GAS_PER_DEPLOYED_CODE_BYTE * len(bytes(instance.deploy_code))\n\n    return instance\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Switch","title":"Switch","text":"

    Bases: Bytecode

    Helper class used to generate switch-case expressions in EVM bytecode.

    Switch-case behavior
    • If no condition is met in the list of BytecodeCases conditions, the default_action bytecode is executed.
    • If multiple conditions are met, the action from the first valid condition is the only one executed.
    • There is no fall through; it is not possible to execute multiple actions.
    Source code in src/ethereum_test_tools/code/generators.py
    class Switch(Bytecode):\n    \"\"\"\n    Helper class used to generate switch-case expressions in EVM bytecode.\n\n    Switch-case behavior:\n        - If no condition is met in the list of BytecodeCases conditions,\n            the `default_action` bytecode is executed.\n        - If multiple conditions are met, the action from the first valid\n            condition is the only one executed.\n        - There is no fall through; it is not possible to execute multiple\n            actions.\n    \"\"\"\n\n    default_action: Bytecode | Op | None\n    \"\"\"\n    The default bytecode to execute; if no condition is met, this bytecode is\n    executed.\n    \"\"\"\n\n    cases: List[Case]\n    \"\"\"\n    A list of Cases: The first element with a condition that\n    evaluates to a non-zero value is the one that is executed.\n    \"\"\"\n\n    evm_code_type: EVMCodeType\n    \"\"\"\n    The EVM code type to use for the switch-case bytecode.\n    \"\"\"\n\n    def __new__(\n        cls,\n        *,\n        default_action: Bytecode | Op | None = None,\n        cases: List[Case],\n        evm_code_type: EVMCodeType = EVMCodeType.LEGACY,\n    ):\n        \"\"\"\n        Assemble the bytecode by looping over the list of cases and adding\n        the necessary [R]JUMPI and JUMPDEST opcodes in order to replicate\n        switch-case behavior.\n        \"\"\"\n        # The length required to jump over subsequent actions to the final JUMPDEST at the end\n        # of the switch-case block:\n        # - add 6 per case for the length of the JUMPDEST and JUMP(ADD(PC, action_jump_length))\n        #   bytecode\n        # - add 3 to the total to account for this action's JUMP; the PC within the call\n        #   requires a \"correction\" of 3.\n\n        bytecode = Bytecode()\n\n        # All conditions get pre-pended to this bytecode; if none are met, we reach the default\n        if evm_code_type == EVMCodeType.LEGACY:\n            action_jump_length = sum(len(case.action) + 6 for case in cases) + 3\n            bytecode = default_action + Op.JUMP(Op.ADD(Op.PC, action_jump_length))\n            # The length required to jump over the default action and its JUMP bytecode\n            condition_jump_length = len(bytecode) + 3\n        elif evm_code_type == EVMCodeType.EOF_V1:\n            action_jump_length = sum(\n                len(case.action) + (len(Op.RJUMP[0]) if not case.is_terminating else 0)\n                for case in cases\n                # On not terminating cases, we need to add 3 bytes for the RJUMP\n            )\n            bytecode = default_action + Op.RJUMP[action_jump_length]\n            # The length required to jump over the default action and its JUMP bytecode\n            condition_jump_length = len(bytecode)\n\n        # Reversed: first case in the list has priority; it will become the outer-most onion layer.\n        # We build up layers around the default_action, after 1 iteration of the loop, a simplified\n        # representation of the bytecode is:\n        #\n        #  JUMPI(case[n-1].condition)\n        #  + default_action + JUMP()\n        #  + JUMPDEST + case[n-1].action + JUMP()\n        #\n        # and after n=len(cases) iterations:\n        #\n        #  JUMPI(case[0].condition)\n        #  + JUMPI(case[1].condition)\n        #    ...\n        #  + JUMPI(case[n-1].condition)\n        #  + default_action + JUMP()\n        #  + JUMPDEST + case[n-1].action + JUMP()\n        #  + ...\n        #  + JUMPDEST + case[1].action + JUMP()\n        #  + JUMPDEST + case[0].action + JUMP()\n        #\n        for case in reversed(cases):\n            action = case.action\n            if evm_code_type == EVMCodeType.LEGACY:\n                action_jump_length -= len(action) + 6\n                action = Op.JUMPDEST + action + Op.JUMP(Op.ADD(Op.PC, action_jump_length))\n                condition = Op.JUMPI(Op.ADD(Op.PC, condition_jump_length), case.condition)\n            elif evm_code_type == EVMCodeType.EOF_V1:\n                action_jump_length -= len(action) + (\n                    len(Op.RJUMP[0]) if not case.is_terminating else 0\n                )\n                if not case.is_terminating:\n                    action += Op.RJUMP[action_jump_length]\n                condition = Op.RJUMPI[condition_jump_length](case.condition)\n            # wrap the current case around the onion as its next layer\n            bytecode = condition + bytecode + action\n            condition_jump_length += len(condition) + len(action)\n\n        bytecode += Op.JUMPDEST\n\n        instance = super().__new__(cls, bytecode)\n        instance.default_action = default_action\n        instance.cases = cases\n        return instance\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Switch.default_action","title":"default_action: Bytecode | Op | None instance-attribute","text":"

    The default bytecode to execute; if no condition is met, this bytecode is executed.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Switch.cases","title":"cases: List[Case] instance-attribute","text":"

    A list of Cases: The first element with a condition that evaluates to a non-zero value is the one that is executed.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Switch.evm_code_type","title":"evm_code_type: EVMCodeType instance-attribute","text":"

    The EVM code type to use for the switch-case bytecode.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Switch.__new__","title":"__new__(*, default_action=None, cases, evm_code_type=EVMCodeType.LEGACY)","text":"

    Assemble the bytecode by looping over the list of cases and adding the necessary [R]JUMPI and JUMPDEST opcodes in order to replicate switch-case behavior.

    Source code in src/ethereum_test_tools/code/generators.py
    def __new__(\n    cls,\n    *,\n    default_action: Bytecode | Op | None = None,\n    cases: List[Case],\n    evm_code_type: EVMCodeType = EVMCodeType.LEGACY,\n):\n    \"\"\"\n    Assemble the bytecode by looping over the list of cases and adding\n    the necessary [R]JUMPI and JUMPDEST opcodes in order to replicate\n    switch-case behavior.\n    \"\"\"\n    # The length required to jump over subsequent actions to the final JUMPDEST at the end\n    # of the switch-case block:\n    # - add 6 per case for the length of the JUMPDEST and JUMP(ADD(PC, action_jump_length))\n    #   bytecode\n    # - add 3 to the total to account for this action's JUMP; the PC within the call\n    #   requires a \"correction\" of 3.\n\n    bytecode = Bytecode()\n\n    # All conditions get pre-pended to this bytecode; if none are met, we reach the default\n    if evm_code_type == EVMCodeType.LEGACY:\n        action_jump_length = sum(len(case.action) + 6 for case in cases) + 3\n        bytecode = default_action + Op.JUMP(Op.ADD(Op.PC, action_jump_length))\n        # The length required to jump over the default action and its JUMP bytecode\n        condition_jump_length = len(bytecode) + 3\n    elif evm_code_type == EVMCodeType.EOF_V1:\n        action_jump_length = sum(\n            len(case.action) + (len(Op.RJUMP[0]) if not case.is_terminating else 0)\n            for case in cases\n            # On not terminating cases, we need to add 3 bytes for the RJUMP\n        )\n        bytecode = default_action + Op.RJUMP[action_jump_length]\n        # The length required to jump over the default action and its JUMP bytecode\n        condition_jump_length = len(bytecode)\n\n    # Reversed: first case in the list has priority; it will become the outer-most onion layer.\n    # We build up layers around the default_action, after 1 iteration of the loop, a simplified\n    # representation of the bytecode is:\n    #\n    #  JUMPI(case[n-1].condition)\n    #  + default_action + JUMP()\n    #  + JUMPDEST + case[n-1].action + JUMP()\n    #\n    # and after n=len(cases) iterations:\n    #\n    #  JUMPI(case[0].condition)\n    #  + JUMPI(case[1].condition)\n    #    ...\n    #  + JUMPI(case[n-1].condition)\n    #  + default_action + JUMP()\n    #  + JUMPDEST + case[n-1].action + JUMP()\n    #  + ...\n    #  + JUMPDEST + case[1].action + JUMP()\n    #  + JUMPDEST + case[0].action + JUMP()\n    #\n    for case in reversed(cases):\n        action = case.action\n        if evm_code_type == EVMCodeType.LEGACY:\n            action_jump_length -= len(action) + 6\n            action = Op.JUMPDEST + action + Op.JUMP(Op.ADD(Op.PC, action_jump_length))\n            condition = Op.JUMPI(Op.ADD(Op.PC, condition_jump_length), case.condition)\n        elif evm_code_type == EVMCodeType.EOF_V1:\n            action_jump_length -= len(action) + (\n                len(Op.RJUMP[0]) if not case.is_terminating else 0\n            )\n            if not case.is_terminating:\n                action += Op.RJUMP[action_jump_length]\n            condition = Op.RJUMPI[condition_jump_length](case.condition)\n        # wrap the current case around the onion as its next layer\n        bytecode = condition + bytecode + action\n        condition_jump_length += len(condition) + len(action)\n\n    bytecode += Op.JUMPDEST\n\n    instance = super().__new__(cls, bytecode)\n    instance.default_action = default_action\n    instance.cases = cases\n    return instance\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Yul","title":"Yul","text":"

    Bases: Bytecode

    Yul compiler. Compiles Yul source code into bytecode.

    Source code in src/ethereum_test_tools/code/yul.py
    class Yul(Bytecode):\n    \"\"\"\n    Yul compiler.\n    Compiles Yul source code into bytecode.\n    \"\"\"\n\n    source: str\n    evm_version: str | None\n\n    def __new__(\n        cls,\n        source: str,\n        fork: Optional[Fork] = None,\n        binary: Optional[Path | str] = None,\n    ):\n        \"\"\"\n        Compile Yul source code into bytecode.\n        \"\"\"\n        solc = Solc(binary)\n        evm_version = fork.solc_name() if fork else None\n\n        solc_args = (\"--evm-version\", evm_version) if evm_version else ()\n\n        result = solc.run(*solc_args, *DEFAULT_SOLC_ARGS, input=source)\n\n        if result.returncode:\n            stderr_lines = result.stderr.splitlines()\n            stderr_message = \"\\n\".join(line.strip() for line in stderr_lines)\n            raise Exception(f\"failed to compile yul source:\\n{stderr_message[7:]}\")\n\n        lines = result.stdout.splitlines()\n\n        hex_str = lines[lines.index(\"Binary representation:\") + 1]\n\n        bytecode = bytes.fromhex(hex_str)\n        instance = super().__new__(\n            cls,\n            bytecode,\n            popped_stack_items=0,\n            pushed_stack_items=0,\n        )\n        instance.source = source\n        instance.evm_version = evm_version\n        return instance\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Yul.__new__","title":"__new__(source, fork=None, binary=None)","text":"

    Compile Yul source code into bytecode.

    Source code in src/ethereum_test_tools/code/yul.py
    def __new__(\n    cls,\n    source: str,\n    fork: Optional[Fork] = None,\n    binary: Optional[Path | str] = None,\n):\n    \"\"\"\n    Compile Yul source code into bytecode.\n    \"\"\"\n    solc = Solc(binary)\n    evm_version = fork.solc_name() if fork else None\n\n    solc_args = (\"--evm-version\", evm_version) if evm_version else ()\n\n    result = solc.run(*solc_args, *DEFAULT_SOLC_ARGS, input=source)\n\n    if result.returncode:\n        stderr_lines = result.stderr.splitlines()\n        stderr_message = \"\\n\".join(line.strip() for line in stderr_lines)\n        raise Exception(f\"failed to compile yul source:\\n{stderr_message[7:]}\")\n\n    lines = result.stdout.splitlines()\n\n    hex_str = lines[lines.index(\"Binary representation:\") + 1]\n\n    bytecode = bytes.fromhex(hex_str)\n    instance = super().__new__(\n        cls,\n        bytecode,\n        popped_stack_items=0,\n        pushed_stack_items=0,\n    )\n    instance.source = source\n    instance.evm_version = evm_version\n    return instance\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.extend_with_defaults","title":"extend_with_defaults(defaults, cases, **parametrize_kwargs)","text":"

    Extends test cases with default parameter values.

    This utility function extends test case parameters by adding default values from the defaults dictionary to each case in the cases list. If a case already specifies a value for a parameter, its default is ignored.

    This function is particularly useful in scenarios where you want to define a common set of default values but allow individual test cases to override them as needed.

    The function returns a dictionary that can be directly unpacked and passed to the @pytest.mark.parametrize decorator.

    Parameters:

    Name Type Description Default defaults Dict[str, Any]

    A dictionary of default parameter names and their values. These values will be added to each case unless the case already defines a value for each parameter.

    required cases List[ParameterSet]

    A list of pytest.param objects representing different test cases. Its first argument must be a dictionary defining parameter names and values.

    required parametrize_kwargs Any

    Additional keyword arguments to be passed to @pytest.mark.parametrize. These arguments are not modified by this function and are passed through unchanged.

    {}

    Returns:

    Type Description Dict[str, Any]

    Dict[str, Any]: A dictionary with the following structure: argnames: A list of parameter names. argvalues: A list of test cases with modified parameter values. parametrize_kwargs: Additional keyword arguments passed through unchanged.

    Example
    @pytest.mark.parametrize(**extend_with_defaults(\n    defaults=dict(\n        min_value=0,  # default minimum value is 0\n        max_value=100,  # default maximum value is 100\n        average=50,  # default average value is 50\n    ),\n    cases=[\n        pytest.param(\n            dict(),  # use default values\n            id='default_case',\n        ),\n        pytest.param(\n            dict(min_value=10),  # override with min_value=10\n            id='min_value_10',\n        ),\n        pytest.param(\n            dict(max_value=200),  # override with max_value=200\n            id='max_value_200',\n        ),\n        pytest.param(\n            dict(min_value=-10, max_value=50),  # override both min_value\n            # and max_value\n            id='min_-10_max_50',\n        ),\n        pytest.param(\n            dict(min_value=20, max_value=80, average=50),  # all defaults\n            # are overridden\n            id=\"min_20_max_80_avg_50\",\n        ),\n        pytest.param(\n            dict(min_value=100, max_value=0),  # invalid range\n            id='invalid_range',\n            marks=pytest.mark.xfail(reason='invalid range'),\n        )\n    ],\n))\ndef test_range(min_value, max_value, average):\n    assert min_value <= max_value\n    assert min_value <= average <= max_value\n

    The above test will execute with the following sets of parameters:

    \"default_case\": {\"min_value\": 0, \"max_value\": 100, \"average\": 50}\n\"min_value_10\": {\"min_value\": 10, \"max_value\": 100, \"average\": 50}\n\"max_value_200\": {\"min_value\": 0, \"max_value\": 200, \"average\": 50}\n\"min_-10_max_50\": {\"min_value\": -10, \"max_value\": 50, \"average\": 50}\n\"min_20_max_80_avg_50\": {\"min_value\": 20, \"max_value\": 80, \"average\": 50}\n\"invalid_range\": {\"min_value\": 100, \"max_value\": 0, \"average\": 50}  # expected to fail\n
    Notes
    • Each case in cases must contain exactly one value, which is a dictionary of parameter values.
    • The function performs an in-place update of the cases list, so the original cases list is modified.
    Source code in src/ethereum_test_tools/utility/pytest.py
    def extend_with_defaults(\n    defaults: Dict[str, Any], cases: List[ParameterSet], **parametrize_kwargs: Any\n) -> Dict[str, Any]:\n    \"\"\"\n    Extends test cases with default parameter values.\n\n    This utility function extends test case parameters by adding default values\n    from the `defaults` dictionary to each case in the `cases` list. If a case\n    already specifies a value for a parameter, its default is ignored.\n\n    This function is particularly useful in scenarios where you want to define\n    a common set of default values but allow individual test cases to override\n    them as needed.\n\n    The function returns a dictionary that can be directly unpacked and passed\n    to the `@pytest.mark.parametrize` decorator.\n\n    Args:\n        defaults (Dict[str, Any]): A dictionary of default parameter names and\n            their values. These values will be added to each case unless the case\n            already defines a value for each parameter.\n        cases (List[ParameterSet]): A list of `pytest.param` objects representing\n            different test cases. Its first argument must be a dictionary defining\n            parameter names and values.\n        parametrize_kwargs (Any): Additional keyword arguments to be passed to\n            `@pytest.mark.parametrize`. These arguments are not modified by this\n            function and are passed through unchanged.\n\n    Returns:\n        Dict[str, Any]: A dictionary with the following structure:\n            `argnames`: A list of parameter names.\n            `argvalues`: A list of test cases with modified parameter values.\n            `parametrize_kwargs`: Additional keyword arguments passed through unchanged.\n\n\n    Example:\n        ```python\n        @pytest.mark.parametrize(**extend_with_defaults(\n            defaults=dict(\n                min_value=0,  # default minimum value is 0\n                max_value=100,  # default maximum value is 100\n                average=50,  # default average value is 50\n            ),\n            cases=[\n                pytest.param(\n                    dict(),  # use default values\n                    id='default_case',\n                ),\n                pytest.param(\n                    dict(min_value=10),  # override with min_value=10\n                    id='min_value_10',\n                ),\n                pytest.param(\n                    dict(max_value=200),  # override with max_value=200\n                    id='max_value_200',\n                ),\n                pytest.param(\n                    dict(min_value=-10, max_value=50),  # override both min_value\n                    # and max_value\n                    id='min_-10_max_50',\n                ),\n                pytest.param(\n                    dict(min_value=20, max_value=80, average=50),  # all defaults\n                    # are overridden\n                    id=\"min_20_max_80_avg_50\",\n                ),\n                pytest.param(\n                    dict(min_value=100, max_value=0),  # invalid range\n                    id='invalid_range',\n                    marks=pytest.mark.xfail(reason='invalid range'),\n                )\n            ],\n        ))\n        def test_range(min_value, max_value, average):\n            assert min_value <= max_value\n            assert min_value <= average <= max_value\n        ```\n\n    The above test will execute with the following sets of parameters:\n\n    ```python\n    \"default_case\": {\"min_value\": 0, \"max_value\": 100, \"average\": 50}\n    \"min_value_10\": {\"min_value\": 10, \"max_value\": 100, \"average\": 50}\n    \"max_value_200\": {\"min_value\": 0, \"max_value\": 200, \"average\": 50}\n    \"min_-10_max_50\": {\"min_value\": -10, \"max_value\": 50, \"average\": 50}\n    \"min_20_max_80_avg_50\": {\"min_value\": 20, \"max_value\": 80, \"average\": 50}\n    \"invalid_range\": {\"min_value\": 100, \"max_value\": 0, \"average\": 50}  # expected to fail\n    ```\n\n    Notes:\n        - Each case in `cases` must contain exactly one value, which is a dictionary\n          of parameter values.\n        - The function performs an in-place update of the `cases` list, so the\n          original `cases` list is modified.\n    \"\"\"\n    for i, case in enumerate(cases):\n        if not (len(case.values) == 1 and isinstance(case.values[0], dict)):\n            raise ValueError(\n                \"each case must contain exactly one value; a dict of parameter values\"\n            )\n        if set(case.values[0].keys()) - set(defaults.keys()):\n            raise UnknownParameterInCasesError()\n        # Overwrite values in defaults if the parameter is present in the test case values\n        merged_params = {**defaults, **case.values[0]}  # type: ignore\n        cases[i] = pytest.param(*merged_params.values(), id=case.id, marks=case.marks)\n\n    return {\"argnames\": list(defaults), \"argvalues\": cases, **parametrize_kwargs}\n
    "},{"location":"library/ethereum_test_types/","title":"Ethereum Test Types package","text":"

    Common definitions and types.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.TestParameterGroup","title":"TestParameterGroup dataclass","text":"

    Base class for grouping test parameters in a dataclass. Provides a generic repr method to generate clean test ids, including only non-default optional fields.

    Source code in src/ethereum_test_types/helpers.py
    @dataclass(kw_only=True, frozen=True, repr=False)\nclass TestParameterGroup:\n    \"\"\"\n    Base class for grouping test parameters in a dataclass. Provides a generic\n    __repr__ method to generate clean test ids, including only non-default\n    optional fields.\n    \"\"\"\n\n    __test__ = False  # explicitly prevent pytest collecting this class\n\n    def __repr__(self):\n        \"\"\"\n        Generates a repr string, intended to be used as a test id, based on the class\n        name and the values of the non-default optional fields.\n        \"\"\"\n        class_name = self.__class__.__name__\n        field_strings = []\n\n        for field in fields(self):\n            value = getattr(self, field.name)\n            # Include the field only if it is not optional or not set to its default value\n            if field.default is MISSING or field.default != value:\n                field_strings.append(f\"{field.name}_{value}\")\n\n        return f\"{class_name}_{'-'.join(field_strings)}\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.TestParameterGroup.__repr__","title":"__repr__()","text":"

    Generates a repr string, intended to be used as a test id, based on the class name and the values of the non-default optional fields.

    Source code in src/ethereum_test_types/helpers.py
    def __repr__(self):\n    \"\"\"\n    Generates a repr string, intended to be used as a test id, based on the class\n    name and the values of the non-default optional fields.\n    \"\"\"\n    class_name = self.__class__.__name__\n    field_strings = []\n\n    for field in fields(self):\n        value = getattr(self, field.name)\n        # Include the field only if it is not optional or not set to its default value\n        if field.default is MISSING or field.default != value:\n            field_strings.append(f\"{field.name}_{value}\")\n\n    return f\"{class_name}_{'-'.join(field_strings)}\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.add_kzg_version","title":"add_kzg_version(b_hashes, kzg_version)","text":"

    Adds the Kzg Version to each blob hash.

    Source code in src/ethereum_test_types/helpers.py
    def add_kzg_version(\n    b_hashes: List[bytes | SupportsBytes | int | str], kzg_version: int\n) -> List[bytes]:\n    \"\"\"\n    Adds the Kzg Version to each blob hash.\n    \"\"\"\n    kzg_version_hex = bytes([kzg_version])\n    kzg_versioned_hashes = []\n\n    for hash in b_hashes:\n        hash = bytes(Hash(hash))\n        if isinstance(hash, int) or isinstance(hash, str):\n            kzg_versioned_hashes.append(kzg_version_hex + hash[1:])\n        elif isinstance(hash, bytes) or isinstance(hash, SupportsBytes):\n            if isinstance(hash, SupportsBytes):\n                hash = bytes(hash)\n            kzg_versioned_hashes.append(kzg_version_hex + hash[1:])\n        else:\n            raise TypeError(\"Blob hash must be either an integer, string or bytes\")\n    return kzg_versioned_hashes\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.ceiling_division","title":"ceiling_division(a, b)","text":"

    Calculates the ceil without using floating point. Used by many of the EVM's formulas

    Source code in src/ethereum_test_types/helpers.py
    def ceiling_division(a: int, b: int) -> int:\n    \"\"\"\n    Calculates the ceil without using floating point.\n    Used by many of the EVM's formulas\n    \"\"\"\n    return -(a // -b)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.compute_create2_address","title":"compute_create2_address(address, salt, initcode)","text":"

    Compute address of the resulting contract created using the CREATE2 opcode.

    Source code in src/ethereum_test_types/helpers.py
    def compute_create2_address(\n    address: FixedSizeBytesConvertible, salt: FixedSizeBytesConvertible, initcode: BytesConvertible\n) -> Address:\n    \"\"\"\n    Compute address of the resulting contract created using the `CREATE2`\n    opcode.\n    \"\"\"\n    hash = keccak256(b\"\\xff\" + Address(address) + Hash(salt) + keccak256(Bytes(initcode)))\n    return Address(hash[-20:])\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.compute_create_address","title":"compute_create_address(*, address, nonce=None, salt=0, initcode=b'', opcode=Op.CREATE)","text":"

    Compute address of the resulting contract created using a transaction or the CREATE opcode.

    Source code in src/ethereum_test_types/helpers.py
    def compute_create_address(\n    *,\n    address: FixedSizeBytesConvertible | EOA,\n    nonce: int | None = None,\n    salt: int = 0,\n    initcode: BytesConvertible = b\"\",\n    opcode: Op = Op.CREATE,\n) -> Address:\n    \"\"\"\n    Compute address of the resulting contract created using a transaction\n    or the `CREATE` opcode.\n    \"\"\"\n    if opcode == Op.CREATE:\n        if isinstance(address, EOA):\n            if nonce is None:\n                nonce = address.nonce\n        else:\n            address = Address(address)\n        if nonce is None:\n            nonce = 0\n        nonce_bytes = bytes() if nonce == 0 else nonce.to_bytes(length=1, byteorder=\"big\")\n        hash = keccak256(encode([address, nonce_bytes]))\n        return Address(hash[-20:])\n    if opcode == Op.CREATE2:\n        return compute_create2_address(address, salt, initcode)\n    raise ValueError(\"Unsupported opcode\")\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.compute_eofcreate_address","title":"compute_eofcreate_address(address, salt, init_container)","text":"

    Compute address of the resulting contract created using the EOFCREATE opcode.

    Source code in src/ethereum_test_types/helpers.py
    def compute_eofcreate_address(\n    address: FixedSizeBytesConvertible,\n    salt: FixedSizeBytesConvertible,\n    init_container: BytesConvertible,\n) -> Address:\n    \"\"\"\n    Compute address of the resulting contract created using the `EOFCREATE` opcode.\n    \"\"\"\n    hash = keccak256(b\"\\xff\" + Address(address) + Hash(salt) + keccak256(Bytes(init_container)))\n    return Address(hash[-20:])\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.copy_opcode_cost","title":"copy_opcode_cost(length)","text":"

    Calculates the cost of the COPY opcodes, assuming memory expansion from empty memory, based on the costs specified in the yellow paper: https://ethereum.github.io/yellowpaper/paper.pdf

    Source code in src/ethereum_test_types/helpers.py
    def copy_opcode_cost(length: int) -> int:\n    \"\"\"\n    Calculates the cost of the COPY opcodes, assuming memory expansion from\n    empty memory, based on the costs specified in the yellow paper:\n    https://ethereum.github.io/yellowpaper/paper.pdf\n    \"\"\"\n    return 3 + (ceiling_division(length, 32) * 3) + cost_memory_bytes(length, 0)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.cost_memory_bytes","title":"cost_memory_bytes(new_bytes, previous_bytes)","text":"

    Calculates the cost of memory expansion, based on the costs specified in the yellow paper: https://ethereum.github.io/yellowpaper/paper.pdf

    Source code in src/ethereum_test_types/helpers.py
    def cost_memory_bytes(new_bytes: int, previous_bytes: int) -> int:\n    \"\"\"\n    Calculates the cost of memory expansion, based on the costs specified in\n    the yellow paper: https://ethereum.github.io/yellowpaper/paper.pdf\n    \"\"\"\n    if new_bytes <= previous_bytes:\n        return 0\n    new_words = ceiling_division(new_bytes, 32)\n    previous_words = ceiling_division(previous_bytes, 32)\n\n    def c(w: int) -> int:\n        g_memory = 3\n        return (g_memory * w) + ((w * w) // 512)\n\n    return c(new_words) - c(previous_words)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.eip_2028_transaction_data_cost","title":"eip_2028_transaction_data_cost(data)","text":"

    Calculates the cost of a given data as part of a transaction, based on the costs specified in EIP-2028: https://eips.ethereum.org/EIPS/eip-2028

    Source code in src/ethereum_test_types/helpers.py
    def eip_2028_transaction_data_cost(data: BytesConvertible) -> int:\n    \"\"\"\n    Calculates the cost of a given data as part of a transaction, based on the\n    costs specified in EIP-2028: https://eips.ethereum.org/EIPS/eip-2028\n    \"\"\"\n    cost = 0\n    for b in Bytes(data):\n        if b == 0:\n            cost += 4\n        else:\n            cost += 16\n    return cost\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.EOA","title":"EOA","text":"

    Bases: Address

    An Externally Owned Account (EOA) is an account controlled by a private key.

    The EOA is defined by its address and (optionally) by its corresponding private key.

    Source code in src/ethereum_test_types/types.py
    class EOA(Address):\n    \"\"\"\n    An Externally Owned Account (EOA) is an account controlled by a private key.\n\n    The EOA is defined by its address and (optionally) by its corresponding private key.\n    \"\"\"\n\n    key: Hash | None\n    nonce: Number\n\n    def __new__(\n        cls,\n        address: \"FixedSizeBytesConvertible | Address | EOA | None\" = None,\n        *,\n        key: FixedSizeBytesConvertible | None = None,\n        nonce: NumberConvertible = 0,\n    ):\n        \"\"\"\n        Init the EOA.\n        \"\"\"\n        if address is None:\n            if key is None:\n                raise ValueError(\"impossible to initialize EOA without address\")\n            private_key = PrivateKey(Hash(key))\n            public_key = private_key.public_key\n            address = Address(keccak256(public_key.format(compressed=False)[1:])[32 - 20 :])\n        elif isinstance(address, EOA):\n            return address\n        instance = super(EOA, cls).__new__(cls, address)\n        instance.key = Hash(key) if key is not None else None\n        instance.nonce = Number(nonce)\n        return instance\n\n    def get_nonce(self) -> Number:\n        \"\"\"\n        Returns the current nonce of the EOA and increments it by one.\n        \"\"\"\n        nonce = self.nonce\n        self.nonce = Number(nonce + 1)\n        return nonce\n\n    def copy(self) -> \"EOA\":\n        \"\"\"\n        Returns a copy of the EOA.\n        \"\"\"\n        return EOA(Address(self), key=self.key, nonce=self.nonce)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.EOA.__new__","title":"__new__(address=None, *, key=None, nonce=0)","text":"

    Init the EOA.

    Source code in src/ethereum_test_types/types.py
    def __new__(\n    cls,\n    address: \"FixedSizeBytesConvertible | Address | EOA | None\" = None,\n    *,\n    key: FixedSizeBytesConvertible | None = None,\n    nonce: NumberConvertible = 0,\n):\n    \"\"\"\n    Init the EOA.\n    \"\"\"\n    if address is None:\n        if key is None:\n            raise ValueError(\"impossible to initialize EOA without address\")\n        private_key = PrivateKey(Hash(key))\n        public_key = private_key.public_key\n        address = Address(keccak256(public_key.format(compressed=False)[1:])[32 - 20 :])\n    elif isinstance(address, EOA):\n        return address\n    instance = super(EOA, cls).__new__(cls, address)\n    instance.key = Hash(key) if key is not None else None\n    instance.nonce = Number(nonce)\n    return instance\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.EOA.get_nonce","title":"get_nonce()","text":"

    Returns the current nonce of the EOA and increments it by one.

    Source code in src/ethereum_test_types/types.py
    def get_nonce(self) -> Number:\n    \"\"\"\n    Returns the current nonce of the EOA and increments it by one.\n    \"\"\"\n    nonce = self.nonce\n    self.nonce = Number(nonce + 1)\n    return nonce\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.EOA.copy","title":"copy()","text":"

    Returns a copy of the EOA.

    Source code in src/ethereum_test_types/types.py
    def copy(self) -> \"EOA\":\n    \"\"\"\n    Returns a copy of the EOA.\n    \"\"\"\n    return EOA(Address(self), key=self.key, nonce=self.nonce)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.AccessList","title":"AccessList","text":"

    Bases: CamelModel

    Access List for transactions.

    Source code in src/ethereum_test_types/types.py
    class AccessList(CamelModel):\n    \"\"\"\n    Access List for transactions.\n    \"\"\"\n\n    address: Address\n    storage_keys: List[Hash]\n\n    def to_list(self) -> List[Address | List[Hash]]:\n        \"\"\"\n        Returns the access list as a list of serializable elements.\n        \"\"\"\n        return [self.address, self.storage_keys]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.AccessList.to_list","title":"to_list()","text":"

    Returns the access list as a list of serializable elements.

    Source code in src/ethereum_test_types/types.py
    def to_list(self) -> List[Address | List[Hash]]:\n    \"\"\"\n    Returns the access list as a list of serializable elements.\n    \"\"\"\n    return [self.address, self.storage_keys]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account","title":"Account","text":"

    Bases: CamelModel

    State associated with an address.

    Source code in src/ethereum_test_base_types/composite_types.py
    class Account(CamelModel):\n    \"\"\"\n    State associated with an address.\n    \"\"\"\n\n    nonce: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0)\n    \"\"\"\n    The scalar value equal to a) the number of transactions sent by\n    an Externally Owned Account, b) the amount of contracts created by a\n    contract.\n    \"\"\"\n    balance: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0)\n    \"\"\"\n    The amount of Wei (10<sup>-18</sup> Eth) the account has.\n    \"\"\"\n    code: Bytes = Bytes(b\"\")\n    \"\"\"\n    Bytecode contained by the account.\n    \"\"\"\n    storage: Storage = Field(default_factory=Storage)\n    \"\"\"\n    Storage within a contract.\n    \"\"\"\n\n    NONEXISTENT: ClassVar[None] = None\n    \"\"\"\n    Sentinel object used to specify when an account should not exist in the\n    state.\n    \"\"\"\n\n    @dataclass(kw_only=True)\n    class NonceMismatch(Exception):\n        \"\"\"\n        Test expected a certain nonce value for an account but a different\n        value was found.\n        \"\"\"\n\n        address: Address\n        want: int | None\n        got: int | None\n\n        def __init__(self, address: Address, want: int | None, got: int | None, *args):\n            super().__init__(args)\n            self.address = address\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"unexpected nonce for account {self.address}{label_str}: \"\n                + f\"want {self.want}, got {self.got}\"\n            )\n\n    @dataclass(kw_only=True)\n    class BalanceMismatch(Exception):\n        \"\"\"\n        Test expected a certain balance for an account but a different\n        value was found.\n        \"\"\"\n\n        address: Address\n        want: int | None\n        got: int | None\n\n        def __init__(self, address: Address, want: int | None, got: int | None, *args):\n            super().__init__(args)\n            self.address = address\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"unexpected balance for account {self.address}{label_str}: \"\n                + f\"want {self.want}, got {self.got}\"\n            )\n\n    @dataclass(kw_only=True)\n    class CodeMismatch(Exception):\n        \"\"\"\n        Test expected a certain bytecode for an account but a different\n        one was found.\n        \"\"\"\n\n        address: Address\n        want: bytes | None\n        got: bytes | None\n\n        def __init__(self, address: Address, want: bytes | None, got: bytes | None, *args):\n            super().__init__(args)\n            self.address = address\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"unexpected code for account {self.address}{label_str}: \"\n                + f\"want {self.want}, got {self.got}\"\n            )\n\n    def check_alloc(self: \"Account\", address: Address, account: \"Account\"):\n        \"\"\"\n        Checks the returned alloc against an expected account in post state.\n        Raises exception on failure.\n        \"\"\"\n        if \"nonce\" in self.model_fields_set:\n            if self.nonce != account.nonce:\n                raise Account.NonceMismatch(\n                    address=address,\n                    want=self.nonce,\n                    got=account.nonce,\n                )\n\n        if \"balance\" in self.model_fields_set:\n            if self.balance != account.balance:\n                raise Account.BalanceMismatch(\n                    address=address,\n                    want=self.balance,\n                    got=account.balance,\n                )\n\n        if \"code\" in self.model_fields_set:\n            if self.code != account.code:\n                raise Account.CodeMismatch(\n                    address=address,\n                    want=self.code,\n                    got=account.code,\n                )\n\n        if \"storage\" in self.model_fields_set:\n            self.storage.must_be_equal(address=address, other=account.storage)\n\n    def __bool__(self: \"Account\") -> bool:\n        \"\"\"\n        Returns True on a non-empty account.\n        \"\"\"\n        return any((self.nonce, self.balance, self.code, self.storage))\n\n    @classmethod\n    def with_code(cls: Type, code: BytesConvertible) -> \"Account\":\n        \"\"\"\n        Create account with provided `code` and nonce of `1`.\n        \"\"\"\n        return Account(nonce=HexNumber(1), code=Bytes(code))\n\n    @classmethod\n    def merge(\n        cls: Type, account_1: \"Dict | Account | None\", account_2: \"Dict | Account | None\"\n    ) -> \"Account\":\n        \"\"\"\n        Create a merged account from two sources.\n        \"\"\"\n\n        def to_kwargs_dict(account: \"Dict | Account | None\") -> Dict:\n            if account is None:\n                return {}\n            if isinstance(account, dict):\n                return account\n            elif isinstance(account, cls):\n                return account.model_dump(exclude_unset=True)\n            raise TypeError(f\"Unexpected type for account merge: {type(account)}\")\n\n        kwargs = to_kwargs_dict(account_1)\n        kwargs.update(to_kwargs_dict(account_2))\n\n        return cls(**kwargs)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.nonce","title":"nonce: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0) class-attribute instance-attribute","text":"

    The scalar value equal to a) the number of transactions sent by an Externally Owned Account, b) the amount of contracts created by a contract.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.balance","title":"balance: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0) class-attribute instance-attribute","text":"

    The amount of Wei (10-18 Eth) the account has.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.code","title":"code: Bytes = Bytes(b'') class-attribute instance-attribute","text":"

    Bytecode contained by the account.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.storage","title":"storage: Storage = Field(default_factory=Storage) class-attribute instance-attribute","text":"

    Storage within a contract.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.NONEXISTENT","title":"NONEXISTENT: None = None class-attribute","text":"

    Sentinel object used to specify when an account should not exist in the state.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.NonceMismatch","title":"NonceMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain nonce value for an account but a different value was found.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass NonceMismatch(Exception):\n    \"\"\"\n    Test expected a certain nonce value for an account but a different\n    value was found.\n    \"\"\"\n\n    address: Address\n    want: int | None\n    got: int | None\n\n    def __init__(self, address: Address, want: int | None, got: int | None, *args):\n        super().__init__(args)\n        self.address = address\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"unexpected nonce for account {self.address}{label_str}: \"\n            + f\"want {self.want}, got {self.got}\"\n        )\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.NonceMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"unexpected nonce for account {self.address}{label_str}: \"\n        + f\"want {self.want}, got {self.got}\"\n    )\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.BalanceMismatch","title":"BalanceMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain balance for an account but a different value was found.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass BalanceMismatch(Exception):\n    \"\"\"\n    Test expected a certain balance for an account but a different\n    value was found.\n    \"\"\"\n\n    address: Address\n    want: int | None\n    got: int | None\n\n    def __init__(self, address: Address, want: int | None, got: int | None, *args):\n        super().__init__(args)\n        self.address = address\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"unexpected balance for account {self.address}{label_str}: \"\n            + f\"want {self.want}, got {self.got}\"\n        )\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.BalanceMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"unexpected balance for account {self.address}{label_str}: \"\n        + f\"want {self.want}, got {self.got}\"\n    )\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.CodeMismatch","title":"CodeMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain bytecode for an account but a different one was found.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass CodeMismatch(Exception):\n    \"\"\"\n    Test expected a certain bytecode for an account but a different\n    one was found.\n    \"\"\"\n\n    address: Address\n    want: bytes | None\n    got: bytes | None\n\n    def __init__(self, address: Address, want: bytes | None, got: bytes | None, *args):\n        super().__init__(args)\n        self.address = address\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"unexpected code for account {self.address}{label_str}: \"\n            + f\"want {self.want}, got {self.got}\"\n        )\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.CodeMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"unexpected code for account {self.address}{label_str}: \"\n        + f\"want {self.want}, got {self.got}\"\n    )\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.check_alloc","title":"check_alloc(address, account)","text":"

    Checks the returned alloc against an expected account in post state. Raises exception on failure.

    Source code in src/ethereum_test_base_types/composite_types.py
    def check_alloc(self: \"Account\", address: Address, account: \"Account\"):\n    \"\"\"\n    Checks the returned alloc against an expected account in post state.\n    Raises exception on failure.\n    \"\"\"\n    if \"nonce\" in self.model_fields_set:\n        if self.nonce != account.nonce:\n            raise Account.NonceMismatch(\n                address=address,\n                want=self.nonce,\n                got=account.nonce,\n            )\n\n    if \"balance\" in self.model_fields_set:\n        if self.balance != account.balance:\n            raise Account.BalanceMismatch(\n                address=address,\n                want=self.balance,\n                got=account.balance,\n            )\n\n    if \"code\" in self.model_fields_set:\n        if self.code != account.code:\n            raise Account.CodeMismatch(\n                address=address,\n                want=self.code,\n                got=account.code,\n            )\n\n    if \"storage\" in self.model_fields_set:\n        self.storage.must_be_equal(address=address, other=account.storage)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.__bool__","title":"__bool__()","text":"

    Returns True on a non-empty account.

    Source code in src/ethereum_test_base_types/composite_types.py
    def __bool__(self: \"Account\") -> bool:\n    \"\"\"\n    Returns True on a non-empty account.\n    \"\"\"\n    return any((self.nonce, self.balance, self.code, self.storage))\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.with_code","title":"with_code(code) classmethod","text":"

    Create account with provided code and nonce of 1.

    Source code in src/ethereum_test_base_types/composite_types.py
    @classmethod\ndef with_code(cls: Type, code: BytesConvertible) -> \"Account\":\n    \"\"\"\n    Create account with provided `code` and nonce of `1`.\n    \"\"\"\n    return Account(nonce=HexNumber(1), code=Bytes(code))\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.merge","title":"merge(account_1, account_2) classmethod","text":"

    Create a merged account from two sources.

    Source code in src/ethereum_test_base_types/composite_types.py
    @classmethod\ndef merge(\n    cls: Type, account_1: \"Dict | Account | None\", account_2: \"Dict | Account | None\"\n) -> \"Account\":\n    \"\"\"\n    Create a merged account from two sources.\n    \"\"\"\n\n    def to_kwargs_dict(account: \"Dict | Account | None\") -> Dict:\n        if account is None:\n            return {}\n        if isinstance(account, dict):\n            return account\n        elif isinstance(account, cls):\n            return account.model_dump(exclude_unset=True)\n        raise TypeError(f\"Unexpected type for account merge: {type(account)}\")\n\n    kwargs = to_kwargs_dict(account_1)\n    kwargs.update(to_kwargs_dict(account_2))\n\n    return cls(**kwargs)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc","title":"Alloc","text":"

    Bases: Alloc

    Allocation of accounts in the state, pre and post test execution.

    Source code in src/ethereum_test_types/types.py
    class Alloc(BaseAlloc):\n    \"\"\"\n    Allocation of accounts in the state, pre and post test execution.\n    \"\"\"\n\n    @dataclass(kw_only=True)\n    class UnexpectedAccount(Exception):\n        \"\"\"\n        Unexpected account found in the allocation.\n        \"\"\"\n\n        address: Address\n        account: Account | None\n\n        def __init__(self, address: Address, account: Account | None, *args):\n            super().__init__(args)\n            self.address = address\n            self.account = account\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            return f\"unexpected account in allocation {self.address}: {self.account}\"\n\n    @dataclass(kw_only=True)\n    class MissingAccount(Exception):\n        \"\"\"\n        Expected account not found in the allocation.\n        \"\"\"\n\n        address: Address\n\n        def __init__(self, address: Address, *args):\n            super().__init__(args)\n            self.address = address\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            return f\"Account missing from allocation {self.address}\"\n\n    @classmethod\n    def merge(cls, alloc_1: \"Alloc\", alloc_2: \"Alloc\") -> \"Alloc\":\n        \"\"\"\n        Returns the merged allocation of two sources.\n        \"\"\"\n        merged = alloc_1.model_dump()\n\n        for address, other_account in alloc_2.root.items():\n            merged_account = Account.merge(merged.get(address, None), other_account)\n            if merged_account:\n                merged[address] = merged_account\n            elif address in merged:\n                merged.pop(address, None)\n\n        return Alloc(merged)\n\n    def __iter__(self):\n        \"\"\"\n        Returns an iterator over the allocation.\n        \"\"\"\n        return iter(self.root)\n\n    def __getitem__(self, address: Address | FixedSizeBytesConvertible) -> Account | None:\n        \"\"\"\n        Returns the account associated with an address.\n        \"\"\"\n        if not isinstance(address, Address):\n            address = Address(address)\n        return self.root[address]\n\n    def __setitem__(self, address: Address | FixedSizeBytesConvertible, account: Account | None):\n        \"\"\"\n        Sets the account associated with an address.\n        \"\"\"\n        if not isinstance(address, Address):\n            address = Address(address)\n        self.root[address] = account\n\n    def __delitem__(self, address: Address | FixedSizeBytesConvertible):\n        \"\"\"\n        Deletes the account associated with an address.\n        \"\"\"\n        if not isinstance(address, Address):\n            address = Address(address)\n        self.root.pop(address, None)\n\n    def __eq__(self, other) -> bool:\n        \"\"\"\n        Returns True if both allocations are equal.\n        \"\"\"\n        if not isinstance(other, Alloc):\n            return False\n        return self.root == other.root\n\n    def __contains__(self, address: Address | FixedSizeBytesConvertible) -> bool:\n        \"\"\"\n        Checks if an account is in the allocation.\n        \"\"\"\n        if not isinstance(address, Address):\n            address = Address(address)\n        return address in self.root\n\n    def empty_accounts(self) -> List[Address]:\n        \"\"\"\n        Returns a list of addresses of empty accounts.\n        \"\"\"\n        return [address for address, account in self.root.items() if not account]\n\n    def state_root(self) -> bytes:\n        \"\"\"\n        Returns the state root of the allocation.\n        \"\"\"\n        state = State()\n        for address, account in self.root.items():\n            if account is None:\n                continue\n            set_account(\n                state=state,\n                address=FrontierAddress(address),\n                account=FrontierAccount(\n                    nonce=Uint(account.nonce) if account.nonce is not None else Uint(0),\n                    balance=(U256(account.balance) if account.balance is not None else U256(0)),\n                    code=account.code if account.code is not None else b\"\",\n                ),\n            )\n            if account.storage is not None:\n                for key, value in account.storage.root.items():\n                    set_storage(\n                        state=state,\n                        address=FrontierAddress(address),\n                        key=Hash(key),\n                        value=U256(value),\n                    )\n        return state_root(state)\n\n    def verify_post_alloc(self, got_alloc: \"Alloc\"):\n        \"\"\"\n        Verify that the allocation matches the expected post in the test.\n        Raises exception on unexpected values.\n        \"\"\"\n        assert isinstance(got_alloc, Alloc), f\"got_alloc is not an Alloc: {got_alloc}\"\n        for address, account in self.root.items():\n            if account is None:\n                # Account must not exist\n                if address in got_alloc.root and got_alloc.root[address] is not None:\n                    raise Alloc.UnexpectedAccount(address, got_alloc.root[address])\n            else:\n                if address in got_alloc.root:\n                    got_account = got_alloc.root[address]\n                    assert isinstance(got_account, Account)\n                    assert isinstance(account, Account)\n                    account.check_alloc(address, got_account)\n                else:\n                    raise Alloc.MissingAccount(address)\n\n    def deploy_contract(\n        self,\n        code: BytesConvertible,\n        *,\n        storage: Storage | StorageRootType = {},\n        balance: NumberConvertible = 0,\n        nonce: NumberConvertible = 1,\n        address: Address | None = None,\n        evm_code_type: EVMCodeType | None = None,\n        label: str | None = None,\n    ) -> Address:\n        \"\"\"\n        Deploy a contract to the allocation.\n        \"\"\"\n        raise NotImplementedError(\"deploy_contract is not implemented in the base class\")\n\n    def fund_eoa(\n        self,\n        amount: NumberConvertible = 10**21,\n        label: str | None = None,\n        storage: Storage | None = None,\n    ) -> EOA:\n        \"\"\"\n        Add a previously unused EOA to the pre-alloc with the balance specified by `amount`.\n        \"\"\"\n        raise NotImplementedError(\"fund_eoa is not implemented in the base class\")\n\n    def fund_address(self, address: Address, amount: NumberConvertible):\n        \"\"\"\n        Fund an address with a given amount.\n\n        If the address is already present in the pre-alloc the amount will be\n        added to its existing balance.\n        \"\"\"\n        raise NotImplementedError(\"fund_address is not implemented in the base class\")\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.UnexpectedAccount","title":"UnexpectedAccount dataclass","text":"

    Bases: Exception

    Unexpected account found in the allocation.

    Source code in src/ethereum_test_types/types.py
    @dataclass(kw_only=True)\nclass UnexpectedAccount(Exception):\n    \"\"\"\n    Unexpected account found in the allocation.\n    \"\"\"\n\n    address: Address\n    account: Account | None\n\n    def __init__(self, address: Address, account: Account | None, *args):\n        super().__init__(args)\n        self.address = address\n        self.account = account\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        return f\"unexpected account in allocation {self.address}: {self.account}\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.UnexpectedAccount.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_types/types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    return f\"unexpected account in allocation {self.address}: {self.account}\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.MissingAccount","title":"MissingAccount dataclass","text":"

    Bases: Exception

    Expected account not found in the allocation.

    Source code in src/ethereum_test_types/types.py
    @dataclass(kw_only=True)\nclass MissingAccount(Exception):\n    \"\"\"\n    Expected account not found in the allocation.\n    \"\"\"\n\n    address: Address\n\n    def __init__(self, address: Address, *args):\n        super().__init__(args)\n        self.address = address\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        return f\"Account missing from allocation {self.address}\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.MissingAccount.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_types/types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    return f\"Account missing from allocation {self.address}\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.merge","title":"merge(alloc_1, alloc_2) classmethod","text":"

    Returns the merged allocation of two sources.

    Source code in src/ethereum_test_types/types.py
    @classmethod\ndef merge(cls, alloc_1: \"Alloc\", alloc_2: \"Alloc\") -> \"Alloc\":\n    \"\"\"\n    Returns the merged allocation of two sources.\n    \"\"\"\n    merged = alloc_1.model_dump()\n\n    for address, other_account in alloc_2.root.items():\n        merged_account = Account.merge(merged.get(address, None), other_account)\n        if merged_account:\n            merged[address] = merged_account\n        elif address in merged:\n            merged.pop(address, None)\n\n    return Alloc(merged)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.__iter__","title":"__iter__()","text":"

    Returns an iterator over the allocation.

    Source code in src/ethereum_test_types/types.py
    def __iter__(self):\n    \"\"\"\n    Returns an iterator over the allocation.\n    \"\"\"\n    return iter(self.root)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.__getitem__","title":"__getitem__(address)","text":"

    Returns the account associated with an address.

    Source code in src/ethereum_test_types/types.py
    def __getitem__(self, address: Address | FixedSizeBytesConvertible) -> Account | None:\n    \"\"\"\n    Returns the account associated with an address.\n    \"\"\"\n    if not isinstance(address, Address):\n        address = Address(address)\n    return self.root[address]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.__setitem__","title":"__setitem__(address, account)","text":"

    Sets the account associated with an address.

    Source code in src/ethereum_test_types/types.py
    def __setitem__(self, address: Address | FixedSizeBytesConvertible, account: Account | None):\n    \"\"\"\n    Sets the account associated with an address.\n    \"\"\"\n    if not isinstance(address, Address):\n        address = Address(address)\n    self.root[address] = account\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.__delitem__","title":"__delitem__(address)","text":"

    Deletes the account associated with an address.

    Source code in src/ethereum_test_types/types.py
    def __delitem__(self, address: Address | FixedSizeBytesConvertible):\n    \"\"\"\n    Deletes the account associated with an address.\n    \"\"\"\n    if not isinstance(address, Address):\n        address = Address(address)\n    self.root.pop(address, None)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.__eq__","title":"__eq__(other)","text":"

    Returns True if both allocations are equal.

    Source code in src/ethereum_test_types/types.py
    def __eq__(self, other) -> bool:\n    \"\"\"\n    Returns True if both allocations are equal.\n    \"\"\"\n    if not isinstance(other, Alloc):\n        return False\n    return self.root == other.root\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.__contains__","title":"__contains__(address)","text":"

    Checks if an account is in the allocation.

    Source code in src/ethereum_test_types/types.py
    def __contains__(self, address: Address | FixedSizeBytesConvertible) -> bool:\n    \"\"\"\n    Checks if an account is in the allocation.\n    \"\"\"\n    if not isinstance(address, Address):\n        address = Address(address)\n    return address in self.root\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.empty_accounts","title":"empty_accounts()","text":"

    Returns a list of addresses of empty accounts.

    Source code in src/ethereum_test_types/types.py
    def empty_accounts(self) -> List[Address]:\n    \"\"\"\n    Returns a list of addresses of empty accounts.\n    \"\"\"\n    return [address for address, account in self.root.items() if not account]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.state_root","title":"state_root()","text":"

    Returns the state root of the allocation.

    Source code in src/ethereum_test_types/types.py
    def state_root(self) -> bytes:\n    \"\"\"\n    Returns the state root of the allocation.\n    \"\"\"\n    state = State()\n    for address, account in self.root.items():\n        if account is None:\n            continue\n        set_account(\n            state=state,\n            address=FrontierAddress(address),\n            account=FrontierAccount(\n                nonce=Uint(account.nonce) if account.nonce is not None else Uint(0),\n                balance=(U256(account.balance) if account.balance is not None else U256(0)),\n                code=account.code if account.code is not None else b\"\",\n            ),\n        )\n        if account.storage is not None:\n            for key, value in account.storage.root.items():\n                set_storage(\n                    state=state,\n                    address=FrontierAddress(address),\n                    key=Hash(key),\n                    value=U256(value),\n                )\n    return state_root(state)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.verify_post_alloc","title":"verify_post_alloc(got_alloc)","text":"

    Verify that the allocation matches the expected post in the test. Raises exception on unexpected values.

    Source code in src/ethereum_test_types/types.py
    def verify_post_alloc(self, got_alloc: \"Alloc\"):\n    \"\"\"\n    Verify that the allocation matches the expected post in the test.\n    Raises exception on unexpected values.\n    \"\"\"\n    assert isinstance(got_alloc, Alloc), f\"got_alloc is not an Alloc: {got_alloc}\"\n    for address, account in self.root.items():\n        if account is None:\n            # Account must not exist\n            if address in got_alloc.root and got_alloc.root[address] is not None:\n                raise Alloc.UnexpectedAccount(address, got_alloc.root[address])\n        else:\n            if address in got_alloc.root:\n                got_account = got_alloc.root[address]\n                assert isinstance(got_account, Account)\n                assert isinstance(account, Account)\n                account.check_alloc(address, got_account)\n            else:\n                raise Alloc.MissingAccount(address)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.deploy_contract","title":"deploy_contract(code, *, storage={}, balance=0, nonce=1, address=None, evm_code_type=None, label=None)","text":"

    Deploy a contract to the allocation.

    Source code in src/ethereum_test_types/types.py
    def deploy_contract(\n    self,\n    code: BytesConvertible,\n    *,\n    storage: Storage | StorageRootType = {},\n    balance: NumberConvertible = 0,\n    nonce: NumberConvertible = 1,\n    address: Address | None = None,\n    evm_code_type: EVMCodeType | None = None,\n    label: str | None = None,\n) -> Address:\n    \"\"\"\n    Deploy a contract to the allocation.\n    \"\"\"\n    raise NotImplementedError(\"deploy_contract is not implemented in the base class\")\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.fund_eoa","title":"fund_eoa(amount=10 ** 21, label=None, storage=None)","text":"

    Add a previously unused EOA to the pre-alloc with the balance specified by amount.

    Source code in src/ethereum_test_types/types.py
    def fund_eoa(\n    self,\n    amount: NumberConvertible = 10**21,\n    label: str | None = None,\n    storage: Storage | None = None,\n) -> EOA:\n    \"\"\"\n    Add a previously unused EOA to the pre-alloc with the balance specified by `amount`.\n    \"\"\"\n    raise NotImplementedError(\"fund_eoa is not implemented in the base class\")\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.fund_address","title":"fund_address(address, amount)","text":"

    Fund an address with a given amount.

    If the address is already present in the pre-alloc the amount will be added to its existing balance.

    Source code in src/ethereum_test_types/types.py
    def fund_address(self, address: Address, amount: NumberConvertible):\n    \"\"\"\n    Fund an address with a given amount.\n\n    If the address is already present in the pre-alloc the amount will be\n    added to its existing balance.\n    \"\"\"\n    raise NotImplementedError(\"fund_address is not implemented in the base class\")\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.AuthorizationTuple","title":"AuthorizationTuple","text":"

    Bases: AuthorizationTupleGeneric[HexNumber]

    Authorization tuple for transactions.

    Source code in src/ethereum_test_types/types.py
    class AuthorizationTuple(AuthorizationTupleGeneric[HexNumber]):\n    \"\"\"\n    Authorization tuple for transactions.\n    \"\"\"\n\n    signer: EOA | None = None\n    secret_key: Hash | None = None\n\n    def model_post_init(self, __context: Any) -> None:\n        \"\"\"\n        Automatically signs the authorization tuple if a secret key or sender are provided.\n        \"\"\"\n        super().model_post_init(__context)\n\n        if self.secret_key is not None:\n            self.sign(self.secret_key)\n        elif self.signer is not None:\n            assert self.signer.key is not None, \"signer must have a key\"\n            self.sign(self.signer.key)\n\n    def sign(self, private_key: Hash) -> None:\n        \"\"\"\n        Signs the authorization tuple with a private key.\n        \"\"\"\n        signature = self.signature(private_key)\n\n        self.v = HexNumber(signature[0])\n        self.r = HexNumber(signature[1])\n        self.s = HexNumber(signature[2])\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.AuthorizationTuple.model_post_init","title":"model_post_init(__context)","text":"

    Automatically signs the authorization tuple if a secret key or sender are provided.

    Source code in src/ethereum_test_types/types.py
    def model_post_init(self, __context: Any) -> None:\n    \"\"\"\n    Automatically signs the authorization tuple if a secret key or sender are provided.\n    \"\"\"\n    super().model_post_init(__context)\n\n    if self.secret_key is not None:\n        self.sign(self.secret_key)\n    elif self.signer is not None:\n        assert self.signer.key is not None, \"signer must have a key\"\n        self.sign(self.signer.key)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.AuthorizationTuple.sign","title":"sign(private_key)","text":"

    Signs the authorization tuple with a private key.

    Source code in src/ethereum_test_types/types.py
    def sign(self, private_key: Hash) -> None:\n    \"\"\"\n    Signs the authorization tuple with a private key.\n    \"\"\"\n    signature = self.signature(private_key)\n\n    self.v = HexNumber(signature[0])\n    self.r = HexNumber(signature[1])\n    self.s = HexNumber(signature[2])\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.CamelModel","title":"CamelModel","text":"

    Bases: CopyValidateModel

    A base model that converts field names to camel case when serializing.

    For example, the field name current_timestamp in a Python model will be represented as currentTimestamp when it is serialized to json.

    Source code in src/ethereum_test_base_types/pydantic.py
    class CamelModel(CopyValidateModel):\n    \"\"\"\n    A base model that converts field names to camel case when serializing.\n\n    For example, the field name `current_timestamp` in a Python model will be represented\n    as `currentTimestamp` when it is serialized to json.\n    \"\"\"\n\n    model_config = ConfigDict(\n        alias_generator=to_camel,\n        populate_by_name=True,\n        validate_default=True,\n    )\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.ConsolidationRequest","title":"ConsolidationRequest","text":"

    Bases: ConsolidationRequestGeneric[HexNumber]

    Consolidation Request type

    Source code in src/ethereum_test_types/types.py
    class ConsolidationRequest(ConsolidationRequestGeneric[HexNumber]):\n    \"\"\"\n    Consolidation Request type\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.DepositRequest","title":"DepositRequest","text":"

    Bases: DepositRequestGeneric[HexNumber]

    Deposit Request type

    Source code in src/ethereum_test_types/types.py
    class DepositRequest(DepositRequestGeneric[HexNumber]):\n    \"\"\"\n    Deposit Request type\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Environment","title":"Environment","text":"

    Bases: EnvironmentGeneric[Number]

    Structure used to keep track of the context in which a block must be executed.

    Source code in src/ethereum_test_types/types.py
    class Environment(EnvironmentGeneric[Number]):\n    \"\"\"\n    Structure used to keep track of the context in which a block\n    must be executed.\n    \"\"\"\n\n    blob_gas_used: Number | None = Field(None, alias=\"currentBlobGasUsed\")\n    parent_ommers_hash: Hash = Field(Hash(0), alias=\"parentUncleHash\")\n    parent_blob_gas_used: Number | None = Field(None)\n    parent_excess_blob_gas: Number | None = Field(None)\n    parent_beacon_block_root: Hash | None = Field(None)\n\n    block_hashes: Dict[Number, Hash] = Field(default_factory=dict)\n    ommers: List[Hash] = Field(default_factory=list)\n    withdrawals: List[Withdrawal] | None = Field(None)\n    extra_data: Bytes = Field(Bytes(b\"\\x00\"), exclude=True)\n\n    @computed_field  # type: ignore[misc]\n    @cached_property\n    def parent_hash(self) -> Hash | None:\n        \"\"\"\n        Obtains the latest hash according to the highest block number in\n        `block_hashes`.\n        \"\"\"\n        if len(self.block_hashes) == 0:\n            return None\n\n        last_index = max(self.block_hashes.keys())\n        return Hash(self.block_hashes[last_index])\n\n    def set_fork_requirements(self, fork: Fork) -> \"Environment\":\n        \"\"\"\n        Fills the required fields in an environment depending on the fork.\n        \"\"\"\n        number = self.number\n        timestamp = self.timestamp\n\n        updated_values: Dict[str, Any] = {}\n\n        if fork.header_prev_randao_required(number, timestamp) and self.prev_randao is None:\n            updated_values[\"prev_randao\"] = 0\n\n        if fork.header_withdrawals_required(number, timestamp) and self.withdrawals is None:\n            updated_values[\"withdrawals\"] = []\n\n        if (\n            fork.header_base_fee_required(number, timestamp)\n            and self.base_fee_per_gas is None\n            and self.parent_base_fee_per_gas is None\n        ):\n            updated_values[\"base_fee_per_gas\"] = DEFAULT_BASE_FEE\n\n        if fork.header_zero_difficulty_required(number, timestamp):\n            updated_values[\"difficulty\"] = 0\n        elif self.difficulty is None and self.parent_difficulty is None:\n            updated_values[\"difficulty\"] = 0x20000\n\n        if (\n            fork.header_excess_blob_gas_required(number, timestamp)\n            and self.excess_blob_gas is None\n            and self.parent_excess_blob_gas is None\n        ):\n            updated_values[\"excess_blob_gas\"] = 0\n\n        if (\n            fork.header_blob_gas_used_required(number, timestamp)\n            and self.blob_gas_used is None\n            and self.parent_blob_gas_used is None\n        ):\n            updated_values[\"blob_gas_used\"] = 0\n\n        if (\n            fork.header_beacon_root_required(number, timestamp)\n            and self.parent_beacon_block_root is None\n        ):\n            updated_values[\"parent_beacon_block_root\"] = 0\n\n        return self.copy(**updated_values)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Environment.parent_hash","title":"parent_hash: Hash | None cached property","text":"

    Obtains the latest hash according to the highest block number in block_hashes.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Environment.set_fork_requirements","title":"set_fork_requirements(fork)","text":"

    Fills the required fields in an environment depending on the fork.

    Source code in src/ethereum_test_types/types.py
    def set_fork_requirements(self, fork: Fork) -> \"Environment\":\n    \"\"\"\n    Fills the required fields in an environment depending on the fork.\n    \"\"\"\n    number = self.number\n    timestamp = self.timestamp\n\n    updated_values: Dict[str, Any] = {}\n\n    if fork.header_prev_randao_required(number, timestamp) and self.prev_randao is None:\n        updated_values[\"prev_randao\"] = 0\n\n    if fork.header_withdrawals_required(number, timestamp) and self.withdrawals is None:\n        updated_values[\"withdrawals\"] = []\n\n    if (\n        fork.header_base_fee_required(number, timestamp)\n        and self.base_fee_per_gas is None\n        and self.parent_base_fee_per_gas is None\n    ):\n        updated_values[\"base_fee_per_gas\"] = DEFAULT_BASE_FEE\n\n    if fork.header_zero_difficulty_required(number, timestamp):\n        updated_values[\"difficulty\"] = 0\n    elif self.difficulty is None and self.parent_difficulty is None:\n        updated_values[\"difficulty\"] = 0x20000\n\n    if (\n        fork.header_excess_blob_gas_required(number, timestamp)\n        and self.excess_blob_gas is None\n        and self.parent_excess_blob_gas is None\n    ):\n        updated_values[\"excess_blob_gas\"] = 0\n\n    if (\n        fork.header_blob_gas_used_required(number, timestamp)\n        and self.blob_gas_used is None\n        and self.parent_blob_gas_used is None\n    ):\n        updated_values[\"blob_gas_used\"] = 0\n\n    if (\n        fork.header_beacon_root_required(number, timestamp)\n        and self.parent_beacon_block_root is None\n    ):\n        updated_values[\"parent_beacon_block_root\"] = 0\n\n    return self.copy(**updated_values)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Removable","title":"Removable","text":"

    Sentinel class to detect if a parameter should be removed. (None normally means \"do not modify\")

    Source code in src/ethereum_test_types/types.py
    class Removable:\n    \"\"\"\n    Sentinel class to detect if a parameter should be removed.\n    (`None` normally means \"do not modify\")\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Requests","title":"Requests","text":"

    Bases: RootModel[List[DepositRequest | WithdrawalRequest | ConsolidationRequest]]

    Requests for the transition tool.

    Source code in src/ethereum_test_types/types.py
    class Requests(RootModel[List[DepositRequest | WithdrawalRequest | ConsolidationRequest]]):\n    \"\"\"\n    Requests for the transition tool.\n    \"\"\"\n\n    root: List[DepositRequest | WithdrawalRequest | ConsolidationRequest] = Field(\n        default_factory=list\n    )\n\n    def to_serializable_list(self) -> List[Any]:\n        \"\"\"\n        Returns the requests as a list of serializable elements.\n        \"\"\"\n        return [r.type_byte() + eth_rlp.encode(r.to_serializable_list()) for r in self.root]\n\n    @cached_property\n    def trie_root(self) -> Hash:\n        \"\"\"\n        Returns the root hash of the requests.\n        \"\"\"\n        t = HexaryTrie(db={})\n        for i, r in enumerate(self.root):\n            t.set(\n                eth_rlp.encode(Uint(i)),\n                r.type_byte() + eth_rlp.encode(r.to_serializable_list()),\n            )\n        return Hash(t.root_hash)\n\n    def deposit_requests(self) -> List[DepositRequest]:\n        \"\"\"\n        Returns the list of deposit requests.\n        \"\"\"\n        return [d for d in self.root if isinstance(d, DepositRequest)]\n\n    def withdrawal_requests(self) -> List[WithdrawalRequest]:\n        \"\"\"\n        Returns the list of withdrawal requests.\n        \"\"\"\n        return [w for w in self.root if isinstance(w, WithdrawalRequest)]\n\n    def consolidation_requests(self) -> List[ConsolidationRequest]:\n        \"\"\"\n        Returns the list of consolidation requests.\n        \"\"\"\n        return [c for c in self.root if isinstance(c, ConsolidationRequest)]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Requests.to_serializable_list","title":"to_serializable_list()","text":"

    Returns the requests as a list of serializable elements.

    Source code in src/ethereum_test_types/types.py
    def to_serializable_list(self) -> List[Any]:\n    \"\"\"\n    Returns the requests as a list of serializable elements.\n    \"\"\"\n    return [r.type_byte() + eth_rlp.encode(r.to_serializable_list()) for r in self.root]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Requests.trie_root","title":"trie_root: Hash cached property","text":"

    Returns the root hash of the requests.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Requests.deposit_requests","title":"deposit_requests()","text":"

    Returns the list of deposit requests.

    Source code in src/ethereum_test_types/types.py
    def deposit_requests(self) -> List[DepositRequest]:\n    \"\"\"\n    Returns the list of deposit requests.\n    \"\"\"\n    return [d for d in self.root if isinstance(d, DepositRequest)]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Requests.withdrawal_requests","title":"withdrawal_requests()","text":"

    Returns the list of withdrawal requests.

    Source code in src/ethereum_test_types/types.py
    def withdrawal_requests(self) -> List[WithdrawalRequest]:\n    \"\"\"\n    Returns the list of withdrawal requests.\n    \"\"\"\n    return [w for w in self.root if isinstance(w, WithdrawalRequest)]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Requests.consolidation_requests","title":"consolidation_requests()","text":"

    Returns the list of consolidation requests.

    Source code in src/ethereum_test_types/types.py
    def consolidation_requests(self) -> List[ConsolidationRequest]:\n    \"\"\"\n    Returns the list of consolidation requests.\n    \"\"\"\n    return [c for c in self.root if isinstance(c, ConsolidationRequest)]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage","title":"Storage","text":"

    Bases: RootModel[Dict[StorageKeyValueType, StorageKeyValueType]]

    Definition of a storage in pre or post state of a test

    Source code in src/ethereum_test_base_types/composite_types.py
    class Storage(RootModel[Dict[StorageKeyValueType, StorageKeyValueType]]):\n    \"\"\"\n    Definition of a storage in pre or post state of a test\n    \"\"\"\n\n    root: Dict[StorageKeyValueType, StorageKeyValueType] = Field(default_factory=dict)\n\n    _current_slot: int = PrivateAttr(0)\n\n    StorageDictType: ClassVar[TypeAlias] = Dict[\n        str | int | bytes | SupportsBytes, str | int | bytes | SupportsBytes\n    ]\n    \"\"\"\n    Dictionary type to be used when defining an input to initialize a storage.\n    \"\"\"\n\n    @dataclass(kw_only=True)\n    class InvalidType(Exception):\n        \"\"\"\n        Invalid type used when describing test's expected storage key or value.\n        \"\"\"\n\n        key_or_value: Any\n\n        def __init__(self, key_or_value: Any, *args):\n            super().__init__(args)\n            self.key_or_value = key_or_value\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            return f\"invalid type for key/value: {self.key_or_value}\"\n\n    @dataclass(kw_only=True)\n    class InvalidValue(Exception):\n        \"\"\"\n        Invalid value used when describing test's expected storage key or\n        value.\n        \"\"\"\n\n        key_or_value: Any\n\n        def __init__(self, key_or_value: Any, *args):\n            super().__init__(args)\n            self.key_or_value = key_or_value\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            return f\"invalid value for key/value: {self.key_or_value}\"\n\n    @dataclass(kw_only=True)\n    class MissingKey(Exception):\n        \"\"\"\n        Test expected to find a storage key set but key was missing.\n        \"\"\"\n\n        key: int\n\n        def __init__(self, key: int, *args):\n            super().__init__(args)\n            self.key = key\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            return \"key {0} not found in storage\".format(Hash(self.key))\n\n    @dataclass(kw_only=True)\n    class KeyValueMismatch(Exception):\n        \"\"\"\n        Test expected a certain value in a storage key but value found\n        was different.\n        \"\"\"\n\n        address: Address\n        key: int\n        want: int\n        got: int\n\n        def __init__(self, address: Address, key: int, want: int, got: int, *args):\n            super().__init__(args)\n            self.address = address\n            self.key = key\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"incorrect value in address {self.address}{label_str} for \"\n                + f\"key {Hash(self.key)}:\"\n                + f\" want {HexNumber(self.want)} (dec:{int(self.want)}),\"\n                + f\" got {HexNumber(self.got)} (dec:{int(self.got)})\"\n            )\n\n    def __contains__(self, key: StorageKeyValueTypeConvertible | StorageKeyValueType) -> bool:\n        \"\"\"Checks for an item in the storage\"\"\"\n        return StorageKeyValueTypeAdapter.validate_python(key) in self.root\n\n    def __getitem__(\n        self, key: StorageKeyValueTypeConvertible | StorageKeyValueType\n    ) -> StorageKeyValueType:\n        \"\"\"Returns an item from the storage\"\"\"\n        return self.root[StorageKeyValueTypeAdapter.validate_python(key)]\n\n    def __setitem__(\n        self,\n        key: StorageKeyValueTypeConvertible | StorageKeyValueType,\n        value: StorageKeyValueTypeConvertible | StorageKeyValueType,\n    ):  # noqa: SC200\n        \"\"\"Sets an item in the storage\"\"\"\n        self.root[\n            StorageKeyValueTypeAdapter.validate_python(key)\n        ] = StorageKeyValueTypeAdapter.validate_python(value)\n\n    def __delitem__(self, key: StorageKeyValueTypeConvertible | StorageKeyValueType):\n        \"\"\"Deletes an item from the storage\"\"\"\n        del self.root[StorageKeyValueTypeAdapter.validate_python(key)]\n\n    def __iter__(self):\n        \"\"\"Returns an iterator over the storage\"\"\"\n        return iter(self.root)\n\n    def __eq__(self, other) -> bool:\n        \"\"\"\n        Returns True if both storages are equal.\n        \"\"\"\n        if not isinstance(other, Storage):\n            return False\n        return self.root == other.root\n\n    def __ne__(self, other) -> bool:\n        \"\"\"\n        Returns True if both storages are not equal.\n        \"\"\"\n        if not isinstance(other, Storage):\n            return False\n        return self.root != other.root\n\n    def __bool__(self) -> bool:\n        \"\"\"Returns True if the storage is not empty\"\"\"\n        return any(v for v in self.root.values())\n\n    def __add__(self, other: \"Storage\") -> \"Storage\":\n        \"\"\"\n        Returns a new storage that is the sum of two storages.\n        \"\"\"\n        return Storage({**self.root, **other.root})\n\n    def keys(self) -> set[StorageKeyValueType]:\n        \"\"\"Returns the keys of the storage\"\"\"\n        return set(self.root.keys())\n\n    def set_next_slot(self, slot: int) -> \"Storage\":\n        \"\"\"\n        Sets the next slot to be used by `store_next`.\n        \"\"\"\n        self._current_slot = slot\n        return self\n\n    def store_next(\n        self, value: StorageKeyValueTypeConvertible | StorageKeyValueType | bool\n    ) -> StorageKeyValueType:\n        \"\"\"\n        Stores a value in the storage and returns the key where the value is stored.\n\n        Increments the key counter so the next time this function is called,\n        the next key is used.\n        \"\"\"\n        slot = StorageKeyValueTypeAdapter.validate_python(self._current_slot)\n        self._current_slot += 1\n        self[slot] = StorageKeyValueTypeAdapter.validate_python(value)\n        return slot\n\n    def peek_slot(self) -> int:\n        \"\"\"\n        Peeks the next slot that will be used by `store_next`.\n        \"\"\"\n        return self._current_slot\n\n    def contains(self, other: \"Storage\") -> bool:\n        \"\"\"\n        Returns True if self contains all keys with equal value as\n        contained by second storage.\n        Used for comparison with test expected post state and alloc returned\n        by the transition tool.\n        \"\"\"\n        for key in other.keys():\n            if key not in self:\n                return False\n            if self[key] != other[key]:\n                return False\n        return True\n\n    def must_contain(self, address: Address, other: \"Storage\"):\n        \"\"\"\n        Succeeds only if self contains all keys with equal value as\n        contained by second storage.\n        Used for comparison with test expected post state and alloc returned\n        by the transition tool.\n        Raises detailed exception when a difference is found.\n        \"\"\"\n        for key in other.keys():\n            if key not in self:\n                # storage[key]==0 is equal to missing storage\n                if other[key] != 0:\n                    raise Storage.MissingKey(key=key)\n            elif self[key] != other[key]:\n                raise Storage.KeyValueMismatch(\n                    address=address, key=key, want=self[key], got=other[key]\n                )\n\n    def must_be_equal(self, address: Address, other: \"Storage | None\"):\n        \"\"\"\n        Succeeds only if \"self\" is equal to \"other\" storage.\n        \"\"\"\n        # Test keys contained in both storage objects\n        if other is None:\n            other = Storage({})\n        for key in self.keys() & other.keys():\n            if self[key] != other[key]:\n                raise Storage.KeyValueMismatch(\n                    address=address, key=key, want=self[key], got=other[key]\n                )\n\n        # Test keys contained in either one of the storage objects\n        for key in self.keys() ^ other.keys():\n            if key in self:\n                if self[key] != 0:\n                    raise Storage.KeyValueMismatch(address=address, key=key, want=self[key], got=0)\n\n            elif other[key] != 0:\n                raise Storage.KeyValueMismatch(address=address, key=key, want=0, got=other[key])\n\n    def canary(self) -> \"Storage\":\n        \"\"\"\n        Returns a canary storage filled with non-zero values where the current storage expects\n        zero values, to guarantee that the test overwrites the storage.\n        \"\"\"\n        return Storage({key: HashInt(0xBA5E) for key in self.keys() if self[key] == 0})\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.StorageDictType","title":"StorageDictType: TypeAlias = Dict[str | int | bytes | SupportsBytes, str | int | bytes | SupportsBytes] class-attribute","text":"

    Dictionary type to be used when defining an input to initialize a storage.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.InvalidType","title":"InvalidType dataclass","text":"

    Bases: Exception

    Invalid type used when describing test's expected storage key or value.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass InvalidType(Exception):\n    \"\"\"\n    Invalid type used when describing test's expected storage key or value.\n    \"\"\"\n\n    key_or_value: Any\n\n    def __init__(self, key_or_value: Any, *args):\n        super().__init__(args)\n        self.key_or_value = key_or_value\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        return f\"invalid type for key/value: {self.key_or_value}\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.InvalidType.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    return f\"invalid type for key/value: {self.key_or_value}\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.InvalidValue","title":"InvalidValue dataclass","text":"

    Bases: Exception

    Invalid value used when describing test's expected storage key or value.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass InvalidValue(Exception):\n    \"\"\"\n    Invalid value used when describing test's expected storage key or\n    value.\n    \"\"\"\n\n    key_or_value: Any\n\n    def __init__(self, key_or_value: Any, *args):\n        super().__init__(args)\n        self.key_or_value = key_or_value\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        return f\"invalid value for key/value: {self.key_or_value}\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.InvalidValue.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    return f\"invalid value for key/value: {self.key_or_value}\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.MissingKey","title":"MissingKey dataclass","text":"

    Bases: Exception

    Test expected to find a storage key set but key was missing.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass MissingKey(Exception):\n    \"\"\"\n    Test expected to find a storage key set but key was missing.\n    \"\"\"\n\n    key: int\n\n    def __init__(self, key: int, *args):\n        super().__init__(args)\n        self.key = key\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        return \"key {0} not found in storage\".format(Hash(self.key))\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.MissingKey.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    return \"key {0} not found in storage\".format(Hash(self.key))\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.KeyValueMismatch","title":"KeyValueMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain value in a storage key but value found was different.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass KeyValueMismatch(Exception):\n    \"\"\"\n    Test expected a certain value in a storage key but value found\n    was different.\n    \"\"\"\n\n    address: Address\n    key: int\n    want: int\n    got: int\n\n    def __init__(self, address: Address, key: int, want: int, got: int, *args):\n        super().__init__(args)\n        self.address = address\n        self.key = key\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"incorrect value in address {self.address}{label_str} for \"\n            + f\"key {Hash(self.key)}:\"\n            + f\" want {HexNumber(self.want)} (dec:{int(self.want)}),\"\n            + f\" got {HexNumber(self.got)} (dec:{int(self.got)})\"\n        )\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.KeyValueMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"incorrect value in address {self.address}{label_str} for \"\n        + f\"key {Hash(self.key)}:\"\n        + f\" want {HexNumber(self.want)} (dec:{int(self.want)}),\"\n        + f\" got {HexNumber(self.got)} (dec:{int(self.got)})\"\n    )\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.__contains__","title":"__contains__(key)","text":"

    Checks for an item in the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def __contains__(self, key: StorageKeyValueTypeConvertible | StorageKeyValueType) -> bool:\n    \"\"\"Checks for an item in the storage\"\"\"\n    return StorageKeyValueTypeAdapter.validate_python(key) in self.root\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.__getitem__","title":"__getitem__(key)","text":"

    Returns an item from the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def __getitem__(\n    self, key: StorageKeyValueTypeConvertible | StorageKeyValueType\n) -> StorageKeyValueType:\n    \"\"\"Returns an item from the storage\"\"\"\n    return self.root[StorageKeyValueTypeAdapter.validate_python(key)]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.__setitem__","title":"__setitem__(key, value)","text":"

    Sets an item in the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def __setitem__(\n    self,\n    key: StorageKeyValueTypeConvertible | StorageKeyValueType,\n    value: StorageKeyValueTypeConvertible | StorageKeyValueType,\n):  # noqa: SC200\n    \"\"\"Sets an item in the storage\"\"\"\n    self.root[\n        StorageKeyValueTypeAdapter.validate_python(key)\n    ] = StorageKeyValueTypeAdapter.validate_python(value)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.__delitem__","title":"__delitem__(key)","text":"

    Deletes an item from the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def __delitem__(self, key: StorageKeyValueTypeConvertible | StorageKeyValueType):\n    \"\"\"Deletes an item from the storage\"\"\"\n    del self.root[StorageKeyValueTypeAdapter.validate_python(key)]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.__iter__","title":"__iter__()","text":"

    Returns an iterator over the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def __iter__(self):\n    \"\"\"Returns an iterator over the storage\"\"\"\n    return iter(self.root)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.__eq__","title":"__eq__(other)","text":"

    Returns True if both storages are equal.

    Source code in src/ethereum_test_base_types/composite_types.py
    def __eq__(self, other) -> bool:\n    \"\"\"\n    Returns True if both storages are equal.\n    \"\"\"\n    if not isinstance(other, Storage):\n        return False\n    return self.root == other.root\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.__ne__","title":"__ne__(other)","text":"

    Returns True if both storages are not equal.

    Source code in src/ethereum_test_base_types/composite_types.py
    def __ne__(self, other) -> bool:\n    \"\"\"\n    Returns True if both storages are not equal.\n    \"\"\"\n    if not isinstance(other, Storage):\n        return False\n    return self.root != other.root\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.__bool__","title":"__bool__()","text":"

    Returns True if the storage is not empty

    Source code in src/ethereum_test_base_types/composite_types.py
    def __bool__(self) -> bool:\n    \"\"\"Returns True if the storage is not empty\"\"\"\n    return any(v for v in self.root.values())\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.__add__","title":"__add__(other)","text":"

    Returns a new storage that is the sum of two storages.

    Source code in src/ethereum_test_base_types/composite_types.py
    def __add__(self, other: \"Storage\") -> \"Storage\":\n    \"\"\"\n    Returns a new storage that is the sum of two storages.\n    \"\"\"\n    return Storage({**self.root, **other.root})\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.keys","title":"keys()","text":"

    Returns the keys of the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def keys(self) -> set[StorageKeyValueType]:\n    \"\"\"Returns the keys of the storage\"\"\"\n    return set(self.root.keys())\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.set_next_slot","title":"set_next_slot(slot)","text":"

    Sets the next slot to be used by store_next.

    Source code in src/ethereum_test_base_types/composite_types.py
    def set_next_slot(self, slot: int) -> \"Storage\":\n    \"\"\"\n    Sets the next slot to be used by `store_next`.\n    \"\"\"\n    self._current_slot = slot\n    return self\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.store_next","title":"store_next(value)","text":"

    Stores a value in the storage and returns the key where the value is stored.

    Increments the key counter so the next time this function is called, the next key is used.

    Source code in src/ethereum_test_base_types/composite_types.py
    def store_next(\n    self, value: StorageKeyValueTypeConvertible | StorageKeyValueType | bool\n) -> StorageKeyValueType:\n    \"\"\"\n    Stores a value in the storage and returns the key where the value is stored.\n\n    Increments the key counter so the next time this function is called,\n    the next key is used.\n    \"\"\"\n    slot = StorageKeyValueTypeAdapter.validate_python(self._current_slot)\n    self._current_slot += 1\n    self[slot] = StorageKeyValueTypeAdapter.validate_python(value)\n    return slot\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.peek_slot","title":"peek_slot()","text":"

    Peeks the next slot that will be used by store_next.

    Source code in src/ethereum_test_base_types/composite_types.py
    def peek_slot(self) -> int:\n    \"\"\"\n    Peeks the next slot that will be used by `store_next`.\n    \"\"\"\n    return self._current_slot\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.contains","title":"contains(other)","text":"

    Returns True if self contains all keys with equal value as contained by second storage. Used for comparison with test expected post state and alloc returned by the transition tool.

    Source code in src/ethereum_test_base_types/composite_types.py
    def contains(self, other: \"Storage\") -> bool:\n    \"\"\"\n    Returns True if self contains all keys with equal value as\n    contained by second storage.\n    Used for comparison with test expected post state and alloc returned\n    by the transition tool.\n    \"\"\"\n    for key in other.keys():\n        if key not in self:\n            return False\n        if self[key] != other[key]:\n            return False\n    return True\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.must_contain","title":"must_contain(address, other)","text":"

    Succeeds only if self contains all keys with equal value as contained by second storage. Used for comparison with test expected post state and alloc returned by the transition tool. Raises detailed exception when a difference is found.

    Source code in src/ethereum_test_base_types/composite_types.py
    def must_contain(self, address: Address, other: \"Storage\"):\n    \"\"\"\n    Succeeds only if self contains all keys with equal value as\n    contained by second storage.\n    Used for comparison with test expected post state and alloc returned\n    by the transition tool.\n    Raises detailed exception when a difference is found.\n    \"\"\"\n    for key in other.keys():\n        if key not in self:\n            # storage[key]==0 is equal to missing storage\n            if other[key] != 0:\n                raise Storage.MissingKey(key=key)\n        elif self[key] != other[key]:\n            raise Storage.KeyValueMismatch(\n                address=address, key=key, want=self[key], got=other[key]\n            )\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.must_be_equal","title":"must_be_equal(address, other)","text":"

    Succeeds only if \"self\" is equal to \"other\" storage.

    Source code in src/ethereum_test_base_types/composite_types.py
    def must_be_equal(self, address: Address, other: \"Storage | None\"):\n    \"\"\"\n    Succeeds only if \"self\" is equal to \"other\" storage.\n    \"\"\"\n    # Test keys contained in both storage objects\n    if other is None:\n        other = Storage({})\n    for key in self.keys() & other.keys():\n        if self[key] != other[key]:\n            raise Storage.KeyValueMismatch(\n                address=address, key=key, want=self[key], got=other[key]\n            )\n\n    # Test keys contained in either one of the storage objects\n    for key in self.keys() ^ other.keys():\n        if key in self:\n            if self[key] != 0:\n                raise Storage.KeyValueMismatch(address=address, key=key, want=self[key], got=0)\n\n        elif other[key] != 0:\n            raise Storage.KeyValueMismatch(address=address, key=key, want=0, got=other[key])\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.canary","title":"canary()","text":"

    Returns a canary storage filled with non-zero values where the current storage expects zero values, to guarantee that the test overwrites the storage.

    Source code in src/ethereum_test_base_types/composite_types.py
    def canary(self) -> \"Storage\":\n    \"\"\"\n    Returns a canary storage filled with non-zero values where the current storage expects\n    zero values, to guarantee that the test overwrites the storage.\n    \"\"\"\n    return Storage({key: HashInt(0xBA5E) for key in self.keys() if self[key] == 0})\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction","title":"Transaction","text":"

    Bases: TransactionGeneric[HexNumber], TransactionTransitionToolConverter

    Generic object that can represent all Ethereum transaction types.

    Source code in src/ethereum_test_types/types.py
    class Transaction(TransactionGeneric[HexNumber], TransactionTransitionToolConverter):\n    \"\"\"\n    Generic object that can represent all Ethereum transaction types.\n    \"\"\"\n\n    gas_limit: HexNumber = Field(HexNumber(21_000), serialization_alias=\"gas\")\n    to: Address | None = Field(Address(0xAA))\n    data: Bytes = Field(Bytes(b\"\"), alias=\"input\")\n\n    authorization_list: List[AuthorizationTuple] | None = None\n\n    secret_key: Hash | None = None\n    error: List[TransactionException] | TransactionException | None = Field(None, exclude=True)\n\n    protected: bool = Field(True, exclude=True)\n    rlp_override: bytes | None = Field(None, exclude=True)\n\n    wrapped_blob_transaction: bool = Field(False, exclude=True)\n    blobs: Sequence[Bytes] | None = Field(None, exclude=True)\n    blob_kzg_commitments: Sequence[Bytes] | None = Field(None, exclude=True)\n    blob_kzg_proofs: Sequence[Bytes] | None = Field(None, exclude=True)\n\n    model_config = ConfigDict(validate_assignment=True)\n\n    class InvalidFeePayment(Exception):\n        \"\"\"\n        Transaction described more than one fee payment type.\n        \"\"\"\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            return \"only one type of fee payment field can be used in a single tx\"\n\n    class InvalidSignaturePrivateKey(Exception):\n        \"\"\"\n        Transaction describes both the signature and private key of\n        source account.\n        \"\"\"\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            return \"can't define both 'signature' and 'private_key'\"\n\n    def model_post_init(self, __context):\n        \"\"\"\n        Ensures the transaction has no conflicting properties.\n        \"\"\"\n        super().model_post_init(__context)\n\n        if self.gas_price is not None and (\n            self.max_fee_per_gas is not None\n            or self.max_priority_fee_per_gas is not None\n            or self.max_fee_per_blob_gas is not None\n        ):\n            raise Transaction.InvalidFeePayment()\n\n        if \"ty\" not in self.model_fields_set:\n            # Try to deduce transaction type from included fields\n            if self.authorization_list is not None:\n                self.ty = 4\n            elif self.max_fee_per_blob_gas is not None or self.blob_kzg_commitments is not None:\n                self.ty = 3\n            elif self.max_fee_per_gas is not None or self.max_priority_fee_per_gas is not None:\n                self.ty = 2\n            elif self.access_list is not None:\n                self.ty = 1\n            else:\n                self.ty = 0\n\n        if self.v is not None and self.secret_key is not None:\n            raise Transaction.InvalidSignaturePrivateKey()\n\n        if self.v is None and self.secret_key is None:\n            if self.sender is not None:\n                self.secret_key = self.sender.key\n            else:\n                self.secret_key = Hash(TestPrivateKey)\n                self.sender = EOA(address=TestAddress, key=self.secret_key, nonce=0)\n\n        # Set default values for fields that are required for certain tx types\n        if self.ty <= 1 and self.gas_price is None:\n            self.gas_price = 10\n        if self.ty >= 1 and self.access_list is None:\n            self.access_list = []\n        if self.ty < 1:\n            assert self.access_list is None, \"access_list must be None\"\n\n        if self.ty >= 2 and self.max_fee_per_gas is None:\n            self.max_fee_per_gas = 7\n        if self.ty >= 2 and self.max_priority_fee_per_gas is None:\n            self.max_priority_fee_per_gas = 0\n        if self.ty < 2:\n            assert self.max_fee_per_gas is None, \"max_fee_per_gas must be None\"\n            assert self.max_priority_fee_per_gas is None, \"max_priority_fee_per_gas must be None\"\n\n        if self.ty == 3 and self.max_fee_per_blob_gas is None:\n            self.max_fee_per_blob_gas = 1\n        if self.ty != 3:\n            assert self.blob_versioned_hashes is None, \"blob_versioned_hashes must be None\"\n            assert self.max_fee_per_blob_gas is None, \"max_fee_per_blob_gas must be None\"\n\n        if self.ty == 4 and self.authorization_list is None:\n            self.authorization_list = []\n        if self.ty != 4:\n            assert self.authorization_list is None, \"authorization_list must be None\"\n\n        if \"nonce\" not in self.model_fields_set and self.sender is not None:\n            self.nonce = HexNumber(self.sender.get_nonce())\n\n    def with_error(\n        self, error: List[TransactionException] | TransactionException\n    ) -> \"Transaction\":\n        \"\"\"\n        Create a copy of the transaction with an added error.\n        \"\"\"\n        return self.copy(error=error)\n\n    def with_nonce(self, nonce: int) -> \"Transaction\":\n        \"\"\"\n        Create a copy of the transaction with a modified nonce.\n        \"\"\"\n        return self.copy(nonce=nonce)\n\n    def with_signature_and_sender(self, *, keep_secret_key: bool = False) -> \"Transaction\":\n        \"\"\"\n        Returns a signed version of the transaction using the private key.\n        \"\"\"\n        updated_values: Dict[str, Any] = {}\n\n        if self.v is not None:\n            # Transaction already signed\n            if self.sender is not None:\n                return self\n\n            public_key = PublicKey.from_signature_and_message(\n                self.signature_bytes, keccak256(self.signing_bytes), hasher=None\n            )\n            updated_values[\"sender\"] = Address(\n                keccak256(public_key.format(compressed=False)[1:])[32 - 20 :]\n            )\n            return self.copy(**updated_values)\n\n        if self.secret_key is None:\n            raise ValueError(\"secret_key must be set to sign a transaction\")\n\n        # Get the signing bytes\n        signing_hash = keccak256(self.signing_bytes)\n\n        # Sign the bytes\n        signature_bytes = PrivateKey(secret=self.secret_key).sign_recoverable(\n            signing_hash, hasher=None\n        )\n        public_key = PublicKey.from_signature_and_message(\n            signature_bytes, signing_hash, hasher=None\n        )\n\n        sender = keccak256(public_key.format(compressed=False)[1:])[32 - 20 :]\n        updated_values[\"sender\"] = Address(sender)\n\n        v, r, s = (\n            signature_bytes[64],\n            int.from_bytes(signature_bytes[0:32], byteorder=\"big\"),\n            int.from_bytes(signature_bytes[32:64], byteorder=\"big\"),\n        )\n        if self.ty == 0:\n            if self.protected:\n                v += 35 + (self.chain_id * 2)\n            else:  # not protected\n                v += 27\n\n        updated_values[\"v\"] = HexNumber(v)\n        updated_values[\"r\"] = HexNumber(r)\n        updated_values[\"s\"] = HexNumber(s)\n\n        updated_values[\"secret_key\"] = None\n\n        updated_tx: \"Transaction\" = self.model_copy(update=updated_values)\n\n        # Remove the secret key if requested\n        if keep_secret_key:\n            updated_tx.secret_key = self.secret_key\n        return updated_tx\n\n    @cached_property\n    def signing_envelope(self) -> List[Any]:\n        \"\"\"\n        Returns the list of values included in the envelope used for signing.\n        \"\"\"\n        to = self.to if self.to else bytes()\n        if self.ty == 4:\n            # EIP-7702: https://eips.ethereum.org/EIPS/eip-7702\n            if self.max_priority_fee_per_gas is None:\n                raise ValueError(f\"max_priority_fee_per_gas must be set for type {self.ty} tx\")\n            if self.max_fee_per_gas is None:\n                raise ValueError(f\"max_fee_per_gas must be set for type {self.ty} tx\")\n            if self.access_list is None:\n                raise ValueError(f\"access_list must be set for type {self.ty} tx\")\n            if self.authorization_list is None:\n                raise ValueError(f\"authorization_tuples must be set for type {self.ty} tx\")\n            return [\n                Uint(self.chain_id),\n                Uint(self.nonce),\n                Uint(self.max_priority_fee_per_gas),\n                Uint(self.max_fee_per_gas),\n                Uint(self.gas_limit),\n                to,\n                Uint(self.value),\n                self.data,\n                [a.to_list() for a in self.access_list],\n                [a.to_list() for a in self.authorization_list],\n            ]\n        elif self.ty == 3:\n            # EIP-4844: https://eips.ethereum.org/EIPS/eip-4844\n            if self.max_priority_fee_per_gas is None:\n                raise ValueError(f\"max_priority_fee_per_gas must be set for type {self.ty} tx\")\n            if self.max_fee_per_gas is None:\n                raise ValueError(f\"max_fee_per_gas must be set for type {self.ty} tx\")\n            if self.max_fee_per_blob_gas is None:\n                raise ValueError(f\"max_fee_per_blob_gas must be set for type {self.ty} tx\")\n            if self.blob_versioned_hashes is None:\n                raise ValueError(f\"blob_versioned_hashes must be set for type {self.ty} tx\")\n            if self.access_list is None:\n                raise ValueError(f\"access_list must be set for type {self.ty} tx\")\n            return [\n                Uint(self.chain_id),\n                Uint(self.nonce),\n                Uint(self.max_priority_fee_per_gas),\n                Uint(self.max_fee_per_gas),\n                Uint(self.gas_limit),\n                to,\n                Uint(self.value),\n                self.data,\n                [a.to_list() for a in self.access_list],\n                Uint(self.max_fee_per_blob_gas),\n                list(self.blob_versioned_hashes),\n            ]\n        elif self.ty == 2:\n            # EIP-1559: https://eips.ethereum.org/EIPS/eip-1559\n            if self.max_priority_fee_per_gas is None:\n                raise ValueError(f\"max_priority_fee_per_gas must be set for type {self.ty} tx\")\n            if self.max_fee_per_gas is None:\n                raise ValueError(f\"max_fee_per_gas must be set for type {self.ty} tx\")\n            if self.access_list is None:\n                raise ValueError(f\"access_list must be set for type {self.ty} tx\")\n            return [\n                Uint(self.chain_id),\n                Uint(self.nonce),\n                Uint(self.max_priority_fee_per_gas),\n                Uint(self.max_fee_per_gas),\n                Uint(self.gas_limit),\n                to,\n                Uint(self.value),\n                self.data,\n                [a.to_list() for a in self.access_list],\n            ]\n        elif self.ty == 1:\n            # EIP-2930: https://eips.ethereum.org/EIPS/eip-2930\n            if self.gas_price is None:\n                raise ValueError(f\"gas_price must be set for type {self.ty} tx\")\n            if self.access_list is None:\n                raise ValueError(f\"access_list must be set for type {self.ty} tx\")\n\n            return [\n                Uint(self.chain_id),\n                Uint(self.nonce),\n                Uint(self.gas_price),\n                Uint(self.gas_limit),\n                to,\n                Uint(self.value),\n                self.data,\n                [a.to_list() for a in self.access_list],\n            ]\n        elif self.ty == 0:\n            if self.gas_price is None:\n                raise ValueError(f\"gas_price must be set for type {self.ty} tx\")\n\n            if self.protected:\n                # EIP-155: https://eips.ethereum.org/EIPS/eip-155\n                return [\n                    Uint(self.nonce),\n                    Uint(self.gas_price),\n                    Uint(self.gas_limit),\n                    to,\n                    Uint(self.value),\n                    self.data,\n                    Uint(self.chain_id),\n                    Uint(0),\n                    Uint(0),\n                ]\n            else:\n                return [\n                    Uint(self.nonce),\n                    Uint(self.gas_price),\n                    Uint(self.gas_limit),\n                    to,\n                    Uint(self.value),\n                    self.data,\n                ]\n        raise NotImplementedError(\"signing for transaction type {self.ty} not implemented\")\n\n    @cached_property\n    def payload_body(self) -> List[Any]:\n        \"\"\"\n        Returns the list of values included in the transaction body.\n        \"\"\"\n        if self.v is None or self.r is None or self.s is None:\n            raise ValueError(\"signature must be set before serializing any tx type\")\n\n        signing_envelope = self.signing_envelope\n\n        if self.ty == 0 and self.protected:\n            # Remove the chain_id and the two zeros from the signing envelope\n            signing_envelope = signing_envelope[:-3]\n        elif self.ty == 3 and self.wrapped_blob_transaction:\n            # EIP-4844: https://eips.ethereum.org/EIPS/eip-4844\n            if self.blobs is None:\n                raise ValueError(f\"blobs must be set for type {self.ty} tx\")\n            if self.blob_kzg_commitments is None:\n                raise ValueError(f\"blob_kzg_commitments must be set for type {self.ty} tx\")\n            if self.blob_kzg_proofs is None:\n                raise ValueError(f\"blob_kzg_proofs must be set for type {self.ty} tx\")\n            return [\n                signing_envelope + [Uint(self.v), Uint(self.r), Uint(self.s)],\n                list(self.blobs),\n                list(self.blob_kzg_commitments),\n                list(self.blob_kzg_proofs),\n            ]\n\n        return signing_envelope + [Uint(self.v), Uint(self.r), Uint(self.s)]\n\n    @cached_property\n    def rlp(self) -> bytes:\n        \"\"\"\n        Returns bytes of the serialized representation of the transaction,\n        which is almost always RLP encoding.\n        \"\"\"\n        if self.rlp_override is not None:\n            return self.rlp_override\n        if self.ty > 0:\n            return bytes([self.ty]) + eth_rlp.encode(self.payload_body)\n        else:\n            return eth_rlp.encode(self.payload_body)\n\n    @cached_property\n    def hash(self) -> Hash:\n        \"\"\"\n        Returns hash of the transaction.\n        \"\"\"\n        return Hash(keccak256(self.rlp))\n\n    @cached_property\n    def signing_bytes(self) -> bytes:\n        \"\"\"\n        Returns the serialized bytes of the transaction used for signing.\n        \"\"\"\n        return (\n            bytes([self.ty]) + eth_rlp.encode(self.signing_envelope)\n            if self.ty > 0\n            else eth_rlp.encode(self.signing_envelope)\n        )\n\n    @cached_property\n    def signature_bytes(self) -> bytes:\n        \"\"\"\n        Returns the serialized bytes of the transaction signature.\n        \"\"\"\n        assert self.v is not None and self.r is not None and self.s is not None\n        v = int(self.v)\n        if self.ty == 0:\n            if self.protected:\n                assert self.chain_id is not None\n                v -= 35 + (self.chain_id * 2)\n            else:\n                v -= 27\n        return (\n            self.r.to_bytes(32, byteorder=\"big\")\n            + self.s.to_bytes(32, byteorder=\"big\")\n            + bytes([v])\n        )\n\n    @cached_property\n    def serializable_list(self) -> Any:\n        \"\"\"\n        Returns the list of values included in the transaction as a serializable object.\n        \"\"\"\n        return self.rlp if self.ty > 0 else self.payload_body\n\n    @staticmethod\n    def list_root(input_txs: List[\"Transaction\"]) -> Hash:\n        \"\"\"\n        Returns the transactions root of a list of transactions.\n        \"\"\"\n        t = HexaryTrie(db={})\n        for i, tx in enumerate(input_txs):\n            t.set(eth_rlp.encode(Uint(i)), tx.rlp)\n        return Hash(t.root_hash)\n\n    @staticmethod\n    def list_blob_versioned_hashes(input_txs: List[\"Transaction\"]) -> List[Hash]:\n        \"\"\"\n        Gets a list of ordered blob versioned hashes from a list of transactions.\n        \"\"\"\n        return [\n            blob_versioned_hash\n            for tx in input_txs\n            if tx.blob_versioned_hashes is not None\n            for blob_versioned_hash in tx.blob_versioned_hashes\n        ]\n\n    @cached_property\n    def created_contract(self) -> Address:\n        \"\"\"\n        Returns the address of the contract created by the transaction.\n        \"\"\"\n        if self.to is not None:\n            raise ValueError(\"transaction is not a contract creation\")\n        nonce_bytes = (\n            bytes() if self.nonce == 0 else self.nonce.to_bytes(length=1, byteorder=\"big\")\n        )\n        if self.sender is None:\n            raise ValueError(\"sender address is None\")\n        hash = keccak256(eth_rlp.encode([self.sender, nonce_bytes]))\n        return Address(hash[-20:])\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.InvalidFeePayment","title":"InvalidFeePayment","text":"

    Bases: Exception

    Transaction described more than one fee payment type.

    Source code in src/ethereum_test_types/types.py
    class InvalidFeePayment(Exception):\n    \"\"\"\n    Transaction described more than one fee payment type.\n    \"\"\"\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        return \"only one type of fee payment field can be used in a single tx\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.InvalidFeePayment.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_types/types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    return \"only one type of fee payment field can be used in a single tx\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.InvalidSignaturePrivateKey","title":"InvalidSignaturePrivateKey","text":"

    Bases: Exception

    Transaction describes both the signature and private key of source account.

    Source code in src/ethereum_test_types/types.py
    class InvalidSignaturePrivateKey(Exception):\n    \"\"\"\n    Transaction describes both the signature and private key of\n    source account.\n    \"\"\"\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        return \"can't define both 'signature' and 'private_key'\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.InvalidSignaturePrivateKey.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_types/types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    return \"can't define both 'signature' and 'private_key'\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.model_post_init","title":"model_post_init(__context)","text":"

    Ensures the transaction has no conflicting properties.

    Source code in src/ethereum_test_types/types.py
    def model_post_init(self, __context):\n    \"\"\"\n    Ensures the transaction has no conflicting properties.\n    \"\"\"\n    super().model_post_init(__context)\n\n    if self.gas_price is not None and (\n        self.max_fee_per_gas is not None\n        or self.max_priority_fee_per_gas is not None\n        or self.max_fee_per_blob_gas is not None\n    ):\n        raise Transaction.InvalidFeePayment()\n\n    if \"ty\" not in self.model_fields_set:\n        # Try to deduce transaction type from included fields\n        if self.authorization_list is not None:\n            self.ty = 4\n        elif self.max_fee_per_blob_gas is not None or self.blob_kzg_commitments is not None:\n            self.ty = 3\n        elif self.max_fee_per_gas is not None or self.max_priority_fee_per_gas is not None:\n            self.ty = 2\n        elif self.access_list is not None:\n            self.ty = 1\n        else:\n            self.ty = 0\n\n    if self.v is not None and self.secret_key is not None:\n        raise Transaction.InvalidSignaturePrivateKey()\n\n    if self.v is None and self.secret_key is None:\n        if self.sender is not None:\n            self.secret_key = self.sender.key\n        else:\n            self.secret_key = Hash(TestPrivateKey)\n            self.sender = EOA(address=TestAddress, key=self.secret_key, nonce=0)\n\n    # Set default values for fields that are required for certain tx types\n    if self.ty <= 1 and self.gas_price is None:\n        self.gas_price = 10\n    if self.ty >= 1 and self.access_list is None:\n        self.access_list = []\n    if self.ty < 1:\n        assert self.access_list is None, \"access_list must be None\"\n\n    if self.ty >= 2 and self.max_fee_per_gas is None:\n        self.max_fee_per_gas = 7\n    if self.ty >= 2 and self.max_priority_fee_per_gas is None:\n        self.max_priority_fee_per_gas = 0\n    if self.ty < 2:\n        assert self.max_fee_per_gas is None, \"max_fee_per_gas must be None\"\n        assert self.max_priority_fee_per_gas is None, \"max_priority_fee_per_gas must be None\"\n\n    if self.ty == 3 and self.max_fee_per_blob_gas is None:\n        self.max_fee_per_blob_gas = 1\n    if self.ty != 3:\n        assert self.blob_versioned_hashes is None, \"blob_versioned_hashes must be None\"\n        assert self.max_fee_per_blob_gas is None, \"max_fee_per_blob_gas must be None\"\n\n    if self.ty == 4 and self.authorization_list is None:\n        self.authorization_list = []\n    if self.ty != 4:\n        assert self.authorization_list is None, \"authorization_list must be None\"\n\n    if \"nonce\" not in self.model_fields_set and self.sender is not None:\n        self.nonce = HexNumber(self.sender.get_nonce())\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.with_error","title":"with_error(error)","text":"

    Create a copy of the transaction with an added error.

    Source code in src/ethereum_test_types/types.py
    def with_error(\n    self, error: List[TransactionException] | TransactionException\n) -> \"Transaction\":\n    \"\"\"\n    Create a copy of the transaction with an added error.\n    \"\"\"\n    return self.copy(error=error)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.with_nonce","title":"with_nonce(nonce)","text":"

    Create a copy of the transaction with a modified nonce.

    Source code in src/ethereum_test_types/types.py
    def with_nonce(self, nonce: int) -> \"Transaction\":\n    \"\"\"\n    Create a copy of the transaction with a modified nonce.\n    \"\"\"\n    return self.copy(nonce=nonce)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.with_signature_and_sender","title":"with_signature_and_sender(*, keep_secret_key=False)","text":"

    Returns a signed version of the transaction using the private key.

    Source code in src/ethereum_test_types/types.py
    def with_signature_and_sender(self, *, keep_secret_key: bool = False) -> \"Transaction\":\n    \"\"\"\n    Returns a signed version of the transaction using the private key.\n    \"\"\"\n    updated_values: Dict[str, Any] = {}\n\n    if self.v is not None:\n        # Transaction already signed\n        if self.sender is not None:\n            return self\n\n        public_key = PublicKey.from_signature_and_message(\n            self.signature_bytes, keccak256(self.signing_bytes), hasher=None\n        )\n        updated_values[\"sender\"] = Address(\n            keccak256(public_key.format(compressed=False)[1:])[32 - 20 :]\n        )\n        return self.copy(**updated_values)\n\n    if self.secret_key is None:\n        raise ValueError(\"secret_key must be set to sign a transaction\")\n\n    # Get the signing bytes\n    signing_hash = keccak256(self.signing_bytes)\n\n    # Sign the bytes\n    signature_bytes = PrivateKey(secret=self.secret_key).sign_recoverable(\n        signing_hash, hasher=None\n    )\n    public_key = PublicKey.from_signature_and_message(\n        signature_bytes, signing_hash, hasher=None\n    )\n\n    sender = keccak256(public_key.format(compressed=False)[1:])[32 - 20 :]\n    updated_values[\"sender\"] = Address(sender)\n\n    v, r, s = (\n        signature_bytes[64],\n        int.from_bytes(signature_bytes[0:32], byteorder=\"big\"),\n        int.from_bytes(signature_bytes[32:64], byteorder=\"big\"),\n    )\n    if self.ty == 0:\n        if self.protected:\n            v += 35 + (self.chain_id * 2)\n        else:  # not protected\n            v += 27\n\n    updated_values[\"v\"] = HexNumber(v)\n    updated_values[\"r\"] = HexNumber(r)\n    updated_values[\"s\"] = HexNumber(s)\n\n    updated_values[\"secret_key\"] = None\n\n    updated_tx: \"Transaction\" = self.model_copy(update=updated_values)\n\n    # Remove the secret key if requested\n    if keep_secret_key:\n        updated_tx.secret_key = self.secret_key\n    return updated_tx\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.signing_envelope","title":"signing_envelope: List[Any] cached property","text":"

    Returns the list of values included in the envelope used for signing.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.payload_body","title":"payload_body: List[Any] cached property","text":"

    Returns the list of values included in the transaction body.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.rlp","title":"rlp: bytes cached property","text":"

    Returns bytes of the serialized representation of the transaction, which is almost always RLP encoding.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.hash","title":"hash: Hash cached property","text":"

    Returns hash of the transaction.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.signing_bytes","title":"signing_bytes: bytes cached property","text":"

    Returns the serialized bytes of the transaction used for signing.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.signature_bytes","title":"signature_bytes: bytes cached property","text":"

    Returns the serialized bytes of the transaction signature.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.serializable_list","title":"serializable_list: Any cached property","text":"

    Returns the list of values included in the transaction as a serializable object.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.list_root","title":"list_root(input_txs) staticmethod","text":"

    Returns the transactions root of a list of transactions.

    Source code in src/ethereum_test_types/types.py
    @staticmethod\ndef list_root(input_txs: List[\"Transaction\"]) -> Hash:\n    \"\"\"\n    Returns the transactions root of a list of transactions.\n    \"\"\"\n    t = HexaryTrie(db={})\n    for i, tx in enumerate(input_txs):\n        t.set(eth_rlp.encode(Uint(i)), tx.rlp)\n    return Hash(t.root_hash)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.list_blob_versioned_hashes","title":"list_blob_versioned_hashes(input_txs) staticmethod","text":"

    Gets a list of ordered blob versioned hashes from a list of transactions.

    Source code in src/ethereum_test_types/types.py
    @staticmethod\ndef list_blob_versioned_hashes(input_txs: List[\"Transaction\"]) -> List[Hash]:\n    \"\"\"\n    Gets a list of ordered blob versioned hashes from a list of transactions.\n    \"\"\"\n    return [\n        blob_versioned_hash\n        for tx in input_txs\n        if tx.blob_versioned_hashes is not None\n        for blob_versioned_hash in tx.blob_versioned_hashes\n    ]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.created_contract","title":"created_contract: Address cached property","text":"

    Returns the address of the contract created by the transaction.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Withdrawal","title":"Withdrawal","text":"

    Bases: WithdrawalGeneric[HexNumber]

    Withdrawal type

    Source code in src/ethereum_test_types/types.py
    class Withdrawal(WithdrawalGeneric[HexNumber]):\n    \"\"\"\n    Withdrawal type\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.WithdrawalRequest","title":"WithdrawalRequest","text":"

    Bases: WithdrawalRequestGeneric[HexNumber]

    Withdrawal Request type

    Source code in src/ethereum_test_types/types.py
    class WithdrawalRequest(WithdrawalRequestGeneric[HexNumber]):\n    \"\"\"\n    Withdrawal Request type\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_vm/","title":"Ethereum Test VM package","text":"

    Ethereum Virtual Machine related definitions and utilities.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode","title":"Bytecode","text":"

    Base class to represent EVM bytecode.

    Stack calculations are automatically done after an addition operation between two bytecode objects. The stack height is not guaranteed to be correct, so the user must take this into consideration.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode--parameters","title":"Parameters","text":"
    • popped_stack_items: number of items the bytecode pops from the stack
    • pushed_stack_items: number of items the bytecode pushes to the stack
    • min_stack_height: minimum stack height required by the bytecode
    • max_stack_height: maximum stack height reached by the bytecode
    Source code in src/ethereum_test_vm/bytecode.py
    class Bytecode:\n    \"\"\"\n    Base class to represent EVM bytecode.\n\n    Stack calculations are automatically done after an addition operation between two bytecode\n    objects. The stack height is not guaranteed to be correct, so the user must take this into\n    consideration.\n\n    Parameters\n    ----------\n    - popped_stack_items: number of items the bytecode pops from the stack\n    - pushed_stack_items: number of items the bytecode pushes to the stack\n    - min_stack_height: minimum stack height required by the bytecode\n    - max_stack_height: maximum stack height reached by the bytecode\n    \"\"\"\n\n    _name_: str = \"\"\n    _bytes_: bytes\n\n    popped_stack_items: int\n    pushed_stack_items: int\n    max_stack_height: int\n    min_stack_height: int\n\n    terminating: bool\n\n    def __new__(\n        cls,\n        bytes_or_byte_code_base: \"bytes | Bytecode | None\" = None,\n        *,\n        popped_stack_items: int | None = None,\n        pushed_stack_items: int | None = None,\n        max_stack_height: int | None = None,\n        min_stack_height: int | None = None,\n        terminating: bool = False,\n        name: str = \"\",\n    ):\n        \"\"\"\n        Creates a new opcode instance.\n        \"\"\"\n        if bytes_or_byte_code_base is None:\n            instance = super().__new__(cls)\n            instance._bytes_ = b\"\"\n            instance.popped_stack_items = 0\n            instance.pushed_stack_items = 0\n            instance.min_stack_height = 0\n            instance.max_stack_height = 0\n            instance.terminating = False\n            instance._name_ = name\n            return instance\n\n        if type(bytes_or_byte_code_base) is Bytecode:\n            # Required because Enum class calls the base class with the instantiated object as\n            # parameter.\n            obj = super().__new__(cls)\n            obj._bytes_ = bytes_or_byte_code_base._bytes_\n            obj.popped_stack_items = bytes_or_byte_code_base.popped_stack_items\n            obj.pushed_stack_items = bytes_or_byte_code_base.pushed_stack_items\n            obj.min_stack_height = bytes_or_byte_code_base.min_stack_height\n            obj.max_stack_height = bytes_or_byte_code_base.max_stack_height\n            obj.terminating = bytes_or_byte_code_base.terminating\n            obj._name_ = bytes_or_byte_code_base._name_\n            return obj\n\n        if isinstance(bytes_or_byte_code_base, bytes):\n            obj = super().__new__(cls)\n            obj._bytes_ = bytes_or_byte_code_base\n            assert popped_stack_items is not None\n            assert pushed_stack_items is not None\n            obj.popped_stack_items = popped_stack_items\n            obj.pushed_stack_items = pushed_stack_items\n            if min_stack_height is None:\n                obj.min_stack_height = obj.popped_stack_items\n            else:\n                obj.min_stack_height = min_stack_height\n            if max_stack_height is None:\n                obj.max_stack_height = max(obj.popped_stack_items, obj.pushed_stack_items)\n            else:\n                obj.max_stack_height = max_stack_height\n            obj.terminating = terminating\n            obj._name_ = name\n            return obj\n\n        raise TypeError(\"Bytecode constructor '__new__' didn't return an instance!\")\n\n    def __bytes__(self) -> bytes:\n        \"\"\"\n        Return the opcode byte representation.\n        \"\"\"\n        return self._bytes_\n\n    def __len__(self) -> int:\n        \"\"\"\n        Return the length of the opcode byte representation.\n        \"\"\"\n        return len(self._bytes_)\n\n    def __str__(self) -> str:\n        \"\"\"\n        Return the name of the opcode, assigned at Enum creation.\n        \"\"\"\n        return self._name_\n\n    def __eq__(self, other):\n        \"\"\"\n        Allows comparison between Bytecode instances and bytes objects.\n\n        Raises:\n        - NotImplementedError: if the comparison is not between an Bytecode\n            or a bytes object.\n        \"\"\"\n        if isinstance(other, SupportsBytes):\n            return bytes(self) == bytes(other)\n        raise NotImplementedError(f\"Unsupported type for comparison f{type(other)}\")\n\n    def __hash__(self):\n        \"\"\"\n        Return the hash of the bytecode representation.\n        \"\"\"\n        return hash(\n            (\n                bytes(self),\n                self.popped_stack_items,\n                self.pushed_stack_items,\n                self.max_stack_height,\n                self.min_stack_height,\n            )\n        )\n\n    def __add__(self, other: \"Bytecode | int | None\") -> \"Bytecode\":\n        \"\"\"\n        Concatenate the bytecode representation with another bytecode object.\n        \"\"\"\n        if other is None or (isinstance(other, int) and other == 0):\n            # Edge case for sum() function\n            return self\n        assert isinstance(other, Bytecode), \"Can only concatenate Bytecode instances\"\n        # Figure out the stack height after executing the two opcodes.\n        a_pop, a_push = self.popped_stack_items, self.pushed_stack_items\n        a_min, a_max = self.min_stack_height, self.max_stack_height\n        b_pop, b_push = other.popped_stack_items, other.pushed_stack_items\n        b_min, b_max = other.min_stack_height, other.max_stack_height\n        a_out = a_min - a_pop + a_push\n\n        c_pop = max(0, a_pop + (b_pop - a_push))\n        c_push = max(0, a_push + b_push - b_pop)\n        c_min = a_min if a_out >= b_min else (b_min - a_out) + a_min\n        c_max = max(a_max + max(0, b_min - a_out), b_max + max(0, a_out - b_min))\n\n        return Bytecode(\n            bytes(self) + bytes(other),\n            popped_stack_items=c_pop,\n            pushed_stack_items=c_push,\n            min_stack_height=c_min,\n            max_stack_height=c_max,\n            terminating=other.terminating,\n        )\n\n    def __radd__(self, other: \"Bytecode | int | None\") -> \"Bytecode\":\n        \"\"\"\n        Concatenate the opcode byte representation with another bytes object.\n        \"\"\"\n        if other is None or (isinstance(other, int) and other == 0):\n            # Edge case for sum() function\n            return self\n        assert isinstance(other, Bytecode), \"Can only concatenate Bytecode instances\"\n        return other.__add__(self)\n\n    def __mul__(self, other: int) -> \"Bytecode\":\n        \"\"\"\n        Concatenate another bytes object with the opcode byte representation.\n        \"\"\"\n        if other < 0:\n            raise ValueError(\"Cannot multiply by a negative number\")\n        if other == 0:\n            return Bytecode()\n        output = self\n        for _ in range(other - 1):\n            output += self\n        return output\n\n    def hex(self) -> str:\n        \"\"\"\n        Return the hexadecimal representation of the opcode byte representation.\n        \"\"\"\n        return bytes(self).hex()\n\n    def keccak256(self) -> bytes:\n        \"\"\"\n        Return the keccak256 hash of the opcode byte representation.\n        \"\"\"\n        return keccak256(self._bytes_)\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.__new__","title":"__new__(bytes_or_byte_code_base=None, *, popped_stack_items=None, pushed_stack_items=None, max_stack_height=None, min_stack_height=None, terminating=False, name='')","text":"

    Creates a new opcode instance.

    Source code in src/ethereum_test_vm/bytecode.py
    def __new__(\n    cls,\n    bytes_or_byte_code_base: \"bytes | Bytecode | None\" = None,\n    *,\n    popped_stack_items: int | None = None,\n    pushed_stack_items: int | None = None,\n    max_stack_height: int | None = None,\n    min_stack_height: int | None = None,\n    terminating: bool = False,\n    name: str = \"\",\n):\n    \"\"\"\n    Creates a new opcode instance.\n    \"\"\"\n    if bytes_or_byte_code_base is None:\n        instance = super().__new__(cls)\n        instance._bytes_ = b\"\"\n        instance.popped_stack_items = 0\n        instance.pushed_stack_items = 0\n        instance.min_stack_height = 0\n        instance.max_stack_height = 0\n        instance.terminating = False\n        instance._name_ = name\n        return instance\n\n    if type(bytes_or_byte_code_base) is Bytecode:\n        # Required because Enum class calls the base class with the instantiated object as\n        # parameter.\n        obj = super().__new__(cls)\n        obj._bytes_ = bytes_or_byte_code_base._bytes_\n        obj.popped_stack_items = bytes_or_byte_code_base.popped_stack_items\n        obj.pushed_stack_items = bytes_or_byte_code_base.pushed_stack_items\n        obj.min_stack_height = bytes_or_byte_code_base.min_stack_height\n        obj.max_stack_height = bytes_or_byte_code_base.max_stack_height\n        obj.terminating = bytes_or_byte_code_base.terminating\n        obj._name_ = bytes_or_byte_code_base._name_\n        return obj\n\n    if isinstance(bytes_or_byte_code_base, bytes):\n        obj = super().__new__(cls)\n        obj._bytes_ = bytes_or_byte_code_base\n        assert popped_stack_items is not None\n        assert pushed_stack_items is not None\n        obj.popped_stack_items = popped_stack_items\n        obj.pushed_stack_items = pushed_stack_items\n        if min_stack_height is None:\n            obj.min_stack_height = obj.popped_stack_items\n        else:\n            obj.min_stack_height = min_stack_height\n        if max_stack_height is None:\n            obj.max_stack_height = max(obj.popped_stack_items, obj.pushed_stack_items)\n        else:\n            obj.max_stack_height = max_stack_height\n        obj.terminating = terminating\n        obj._name_ = name\n        return obj\n\n    raise TypeError(\"Bytecode constructor '__new__' didn't return an instance!\")\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.__bytes__","title":"__bytes__()","text":"

    Return the opcode byte representation.

    Source code in src/ethereum_test_vm/bytecode.py
    def __bytes__(self) -> bytes:\n    \"\"\"\n    Return the opcode byte representation.\n    \"\"\"\n    return self._bytes_\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.__len__","title":"__len__()","text":"

    Return the length of the opcode byte representation.

    Source code in src/ethereum_test_vm/bytecode.py
    def __len__(self) -> int:\n    \"\"\"\n    Return the length of the opcode byte representation.\n    \"\"\"\n    return len(self._bytes_)\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.__str__","title":"__str__()","text":"

    Return the name of the opcode, assigned at Enum creation.

    Source code in src/ethereum_test_vm/bytecode.py
    def __str__(self) -> str:\n    \"\"\"\n    Return the name of the opcode, assigned at Enum creation.\n    \"\"\"\n    return self._name_\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.__eq__","title":"__eq__(other)","text":"

    Allows comparison between Bytecode instances and bytes objects.

    • NotImplementedError: if the comparison is not between an Bytecode or a bytes object.
    Source code in src/ethereum_test_vm/bytecode.py
    def __eq__(self, other):\n    \"\"\"\n    Allows comparison between Bytecode instances and bytes objects.\n\n    Raises:\n    - NotImplementedError: if the comparison is not between an Bytecode\n        or a bytes object.\n    \"\"\"\n    if isinstance(other, SupportsBytes):\n        return bytes(self) == bytes(other)\n    raise NotImplementedError(f\"Unsupported type for comparison f{type(other)}\")\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.__hash__","title":"__hash__()","text":"

    Return the hash of the bytecode representation.

    Source code in src/ethereum_test_vm/bytecode.py
    def __hash__(self):\n    \"\"\"\n    Return the hash of the bytecode representation.\n    \"\"\"\n    return hash(\n        (\n            bytes(self),\n            self.popped_stack_items,\n            self.pushed_stack_items,\n            self.max_stack_height,\n            self.min_stack_height,\n        )\n    )\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.__add__","title":"__add__(other)","text":"

    Concatenate the bytecode representation with another bytecode object.

    Source code in src/ethereum_test_vm/bytecode.py
    def __add__(self, other: \"Bytecode | int | None\") -> \"Bytecode\":\n    \"\"\"\n    Concatenate the bytecode representation with another bytecode object.\n    \"\"\"\n    if other is None or (isinstance(other, int) and other == 0):\n        # Edge case for sum() function\n        return self\n    assert isinstance(other, Bytecode), \"Can only concatenate Bytecode instances\"\n    # Figure out the stack height after executing the two opcodes.\n    a_pop, a_push = self.popped_stack_items, self.pushed_stack_items\n    a_min, a_max = self.min_stack_height, self.max_stack_height\n    b_pop, b_push = other.popped_stack_items, other.pushed_stack_items\n    b_min, b_max = other.min_stack_height, other.max_stack_height\n    a_out = a_min - a_pop + a_push\n\n    c_pop = max(0, a_pop + (b_pop - a_push))\n    c_push = max(0, a_push + b_push - b_pop)\n    c_min = a_min if a_out >= b_min else (b_min - a_out) + a_min\n    c_max = max(a_max + max(0, b_min - a_out), b_max + max(0, a_out - b_min))\n\n    return Bytecode(\n        bytes(self) + bytes(other),\n        popped_stack_items=c_pop,\n        pushed_stack_items=c_push,\n        min_stack_height=c_min,\n        max_stack_height=c_max,\n        terminating=other.terminating,\n    )\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.__radd__","title":"__radd__(other)","text":"

    Concatenate the opcode byte representation with another bytes object.

    Source code in src/ethereum_test_vm/bytecode.py
    def __radd__(self, other: \"Bytecode | int | None\") -> \"Bytecode\":\n    \"\"\"\n    Concatenate the opcode byte representation with another bytes object.\n    \"\"\"\n    if other is None or (isinstance(other, int) and other == 0):\n        # Edge case for sum() function\n        return self\n    assert isinstance(other, Bytecode), \"Can only concatenate Bytecode instances\"\n    return other.__add__(self)\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.__mul__","title":"__mul__(other)","text":"

    Concatenate another bytes object with the opcode byte representation.

    Source code in src/ethereum_test_vm/bytecode.py
    def __mul__(self, other: int) -> \"Bytecode\":\n    \"\"\"\n    Concatenate another bytes object with the opcode byte representation.\n    \"\"\"\n    if other < 0:\n        raise ValueError(\"Cannot multiply by a negative number\")\n    if other == 0:\n        return Bytecode()\n    output = self\n    for _ in range(other - 1):\n        output += self\n    return output\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.hex","title":"hex()","text":"

    Return the hexadecimal representation of the opcode byte representation.

    Source code in src/ethereum_test_vm/bytecode.py
    def hex(self) -> str:\n    \"\"\"\n    Return the hexadecimal representation of the opcode byte representation.\n    \"\"\"\n    return bytes(self).hex()\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.keccak256","title":"keccak256()","text":"

    Return the keccak256 hash of the opcode byte representation.

    Source code in src/ethereum_test_vm/bytecode.py
    def keccak256(self) -> bytes:\n    \"\"\"\n    Return the keccak256 hash of the opcode byte representation.\n    \"\"\"\n    return keccak256(self._bytes_)\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.EVMCodeType","title":"EVMCodeType","text":"

    Bases: str, Enum

    Enum representing the type of EVM code that is supported in a given fork.

    Source code in src/ethereum_test_vm/evm_types.py
    class EVMCodeType(str, Enum):\n    \"\"\"\n    Enum representing the type of EVM code that is supported in a given fork.\n    \"\"\"\n\n    LEGACY = \"legacy\"\n    EOF_V1 = \"eof_v1\"\n\n    def __str__(self) -> str:\n        \"\"\"\n        Return the name of the EVM code type.\n        \"\"\"\n        return self.name\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.EVMCodeType.__str__","title":"__str__()","text":"

    Return the name of the EVM code type.

    Source code in src/ethereum_test_vm/evm_types.py
    def __str__(self) -> str:\n    \"\"\"\n    Return the name of the EVM code type.\n    \"\"\"\n    return self.name\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.call_return_code","title":"call_return_code(opcode, success, *, revert=False)","text":"

    Returns the return code for a CALL operation.

    Source code in src/ethereum_test_vm/helpers.py
    def call_return_code(opcode: Op, success: bool, *, revert: bool = False) -> int:\n    \"\"\"\n    Returns the return code for a CALL operation.\n    \"\"\"\n    if opcode in [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL]:\n        return int(success)\n    elif opcode in [Op.EXTCALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL]:\n        if success:\n            return 0\n        if revert:\n            return 1\n        return 2\n    raise ValueError(f\"Not a call opcode: {opcode}\")\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macro","title":"Macro","text":"

    Bases: Bytecode

    Represents opcode macro replacement, basically holds bytes

    Source code in src/ethereum_test_vm/opcode.py
    class Macro(Bytecode):\n    \"\"\"\n    Represents opcode macro replacement, basically holds bytes\n    \"\"\"\n\n    lambda_operation: Callable[..., Bytecode] | None\n\n    def __new__(\n        cls,\n        macro_or_bytes: \"Bytecode | Macro\" = Bytecode(),\n        *,\n        lambda_operation: Callable[..., Bytecode] | None = None,\n    ):\n        \"\"\"\n        Creates a new opcode macro instance.\n        \"\"\"\n        if isinstance(macro_or_bytes, Macro):\n            # Required because Enum class calls the base class with the instantiated object as\n            # parameter.\n            return macro_or_bytes\n        else:\n            instance = super().__new__(cls, macro_or_bytes)\n            instance.lambda_operation = lambda_operation\n            return instance\n\n    def __call__(self, *args_t: OpcodeCallArg) -> Bytecode:\n        \"\"\"\n        Performs the macro operation if any.\n        Otherwise is a no-op.\n        \"\"\"\n        if self.lambda_operation is not None:\n            return self.lambda_operation(*args_t)\n\n        pre_opcode_bytecode = Bytecode()\n        for arg in args_t:\n            pre_opcode_bytecode += _stack_argument_to_bytecode(arg)\n        return pre_opcode_bytecode + self\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macro.__new__","title":"__new__(macro_or_bytes=Bytecode(), *, lambda_operation=None)","text":"

    Creates a new opcode macro instance.

    Source code in src/ethereum_test_vm/opcode.py
    def __new__(\n    cls,\n    macro_or_bytes: \"Bytecode | Macro\" = Bytecode(),\n    *,\n    lambda_operation: Callable[..., Bytecode] | None = None,\n):\n    \"\"\"\n    Creates a new opcode macro instance.\n    \"\"\"\n    if isinstance(macro_or_bytes, Macro):\n        # Required because Enum class calls the base class with the instantiated object as\n        # parameter.\n        return macro_or_bytes\n    else:\n        instance = super().__new__(cls, macro_or_bytes)\n        instance.lambda_operation = lambda_operation\n        return instance\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macro.__call__","title":"__call__(*args_t)","text":"

    Performs the macro operation if any. Otherwise is a no-op.

    Source code in src/ethereum_test_vm/opcode.py
    def __call__(self, *args_t: OpcodeCallArg) -> Bytecode:\n    \"\"\"\n    Performs the macro operation if any.\n    Otherwise is a no-op.\n    \"\"\"\n    if self.lambda_operation is not None:\n        return self.lambda_operation(*args_t)\n\n    pre_opcode_bytecode = Bytecode()\n    for arg in args_t:\n        pre_opcode_bytecode += _stack_argument_to_bytecode(arg)\n    return pre_opcode_bytecode + self\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros","title":"Macros","text":"

    Bases: Macro, Enum

    Enum containing all macros.

    Source code in src/ethereum_test_vm/opcode.py
    class Macros(Macro, Enum):\n    \"\"\"\n    Enum containing all macros.\n    \"\"\"\n\n    OOG = Macro(Opcodes.SHA3(0, 100000000000))\n    \"\"\"\n    OOG()\n    ----\n\n    Halt execution by consuming all available gas.\n\n    Inputs\n    ----\n    - None. Any input arguments are ignored.\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    `SHA3(0, 100000000000)` results in 19073514453125027 gas used and an OOG\n    exception.\n\n    Note:\n    If a value > `100000000000` is used as second argument, the resulting geth\n     trace reports gas `30` and an OOG exception.\n    `SHA3(0, SUB(0, 1))` causes a gas > u64 exception and an OOG exception.\n\n    Bytecode\n    ----\n    SHA3(0, 100000000000)\n    \"\"\"\n\n    MSTORE = Macro(lambda_operation=_mstore_operation)\n    \"\"\"\n    MSTORE(data, offset)\n    ----\n\n    Place data of arbitrary length into memory at a given offset.\n\n    Inputs\n    ----\n    - data: The data to store in memory. Can be an integer or bytes.\n    - offset: The offset in memory to store the data.\n\n    Outputs\n    ----\n    - None\n    \"\"\"\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.OOG","title":"OOG = Macro(Opcodes.SHA3(0, 100000000000)) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.OOG--oog","title":"OOG()","text":"

    Halt execution by consuming all available gas.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.OOG--inputs","title":"Inputs","text":"
    • None. Any input arguments are ignored.
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.OOG--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.OOG--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.OOG--gas","title":"Gas","text":"

    SHA3(0, 100000000000) results in 19073514453125027 gas used and an OOG exception.

    Note: If a value > 100000000000 is used as second argument, the resulting geth trace reports gas 30 and an OOG exception. SHA3(0, SUB(0, 1)) causes a gas > u64 exception and an OOG exception.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.OOG--bytecode","title":"Bytecode","text":"

    SHA3(0, 100000000000)

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.MSTORE","title":"MSTORE = Macro(lambda_operation=_mstore_operation) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.MSTORE--mstoredata-offset","title":"MSTORE(data, offset)","text":"

    Place data of arbitrary length into memory at a given offset.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.MSTORE--inputs","title":"Inputs","text":"
    • data: The data to store in memory. Can be an integer or bytes.
    • offset: The offset in memory to store the data.
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.MSTORE--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcode","title":"Opcode","text":"

    Bases: Bytecode

    Represents a single Opcode instruction in the EVM, with extra metadata useful to parametrize tests.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcode--parameters","title":"Parameters","text":"
    • data_portion_length: number of bytes after the opcode in the bytecode that represent data
    • data_portion_formatter: function to format the data portion of the opcode, if any
    • stack_properties_modifier: function to modify the stack properties of the opcode after the data portion has been processed
    • kwargs: list of keyword arguments that can be passed to the opcode, in the order they are meant to be placed in the stack
    • kwargs_defaults: default values for the keyword arguments if any, otherwise 0
    • unchecked_stack: whether the bytecode should ignore stack checks when being called
    Source code in src/ethereum_test_vm/opcode.py
    class Opcode(Bytecode):\n    \"\"\"\n    Represents a single Opcode instruction in the EVM, with extra metadata useful to parametrize\n    tests.\n\n    Parameters\n    ----------\n    - data_portion_length: number of bytes after the opcode in the bytecode\n        that represent data\n    - data_portion_formatter: function to format the data portion of the opcode, if any\n    - stack_properties_modifier: function to modify the stack properties of the opcode after the\n        data portion has been processed\n    - kwargs: list of keyword arguments that can be passed to the opcode, in the order they are\n        meant to be placed in the stack\n    - kwargs_defaults: default values for the keyword arguments if any, otherwise 0\n    - unchecked_stack: whether the bytecode should ignore stack checks when being called\n    \"\"\"\n\n    data_portion_length: int\n    data_portion_formatter: Optional[Callable[[Any], bytes]]\n    stack_properties_modifier: Optional[Callable[[Any], tuple[int, int, int, int]]]\n    kwargs: List[str] | None\n    kwargs_defaults: KW_ARGS_DEFAULTS_TYPE\n    unchecked_stack: bool = False\n\n    def __new__(\n        cls,\n        opcode_or_byte: \"int | bytes | Opcode\",\n        *,\n        popped_stack_items: int = 0,\n        pushed_stack_items: int = 0,\n        max_stack_height: int | None = None,\n        min_stack_height: int | None = None,\n        data_portion_length: int = 0,\n        data_portion_formatter=None,\n        stack_properties_modifier=None,\n        unchecked_stack=False,\n        terminating: bool = False,\n        kwargs: List[str] | None = None,\n        kwargs_defaults: KW_ARGS_DEFAULTS_TYPE = {},\n    ):\n        \"\"\"\n        Creates a new opcode instance.\n        \"\"\"\n        if type(opcode_or_byte) is Opcode:\n            # Required because Enum class calls the base class with the instantiated object as\n            # parameter.\n            return opcode_or_byte\n        elif isinstance(opcode_or_byte, int) or isinstance(opcode_or_byte, bytes):\n\n            obj_bytes = (\n                bytes([opcode_or_byte]) if isinstance(opcode_or_byte, int) else opcode_or_byte\n            )\n            if min_stack_height is None:\n                min_stack_height = popped_stack_items\n            if max_stack_height is None:\n                max_stack_height = max(\n                    min_stack_height - popped_stack_items + pushed_stack_items, min_stack_height\n                )\n            obj = super().__new__(\n                cls,\n                obj_bytes,\n                popped_stack_items=popped_stack_items,\n                pushed_stack_items=pushed_stack_items,\n                max_stack_height=max_stack_height,\n                min_stack_height=min_stack_height,\n                terminating=terminating,\n            )\n            obj.data_portion_length = data_portion_length\n            obj.data_portion_formatter = data_portion_formatter\n            obj.stack_properties_modifier = stack_properties_modifier\n            obj.unchecked_stack = unchecked_stack\n            obj.kwargs = kwargs\n            obj.kwargs_defaults = kwargs_defaults\n            return obj\n        raise TypeError(\"Opcode constructor '__new__' didn't return an instance!\")\n\n    def __getitem__(self, *args: \"int | bytes | str | Iterable[int]\") -> \"Opcode\":\n        \"\"\"\n        Initialize a new instance of the opcode with the data portion set, and also clear\n        the data portion variables to avoid reusing them.\n        \"\"\"\n        if self.data_portion_formatter is None and self.data_portion_length == 0:\n            raise ValueError(\"Opcode does not have a data portion or has already been set\")\n        data_portion = bytes()\n\n        if self.data_portion_formatter is not None:\n            if len(args) == 1 and isinstance(args[0], Iterable) and not isinstance(args[0], bytes):\n                data_portion = self.data_portion_formatter(*args[0])\n            else:\n                data_portion = self.data_portion_formatter(*args)\n        elif self.data_portion_length > 0:\n            # For opcodes with a data portion, the first argument is the data and the rest of the\n            # arguments form the stack.\n            assert len(args) == 1, \"Opcode with data portion requires exactly one argument\"\n            data = args[0]\n            if isinstance(data, bytes) or isinstance(data, SupportsBytes) or isinstance(data, str):\n                if isinstance(data, str):\n                    if data.startswith(\"0x\"):\n                        data = data[2:]\n                    data = bytes.fromhex(data)\n                elif isinstance(data, SupportsBytes):\n                    data = bytes(data)\n                assert len(data) <= self.data_portion_length\n                data_portion = data.rjust(self.data_portion_length, b\"\\x00\")\n            elif isinstance(data, int):\n                signed = data < 0\n                data_portion = data.to_bytes(\n                    length=self.data_portion_length,\n                    byteorder=\"big\",\n                    signed=signed,\n                )\n            else:\n                raise TypeError(\"Opcode data portion must be either an int or bytes/hex string\")\n        popped_stack_items = self.popped_stack_items\n        pushed_stack_items = self.pushed_stack_items\n        min_stack_height = self.min_stack_height\n        max_stack_height = self.max_stack_height\n        assert (\n            popped_stack_items is not None\n            and pushed_stack_items is not None\n            and min_stack_height is not None\n        )\n        if self.stack_properties_modifier is not None:\n            (\n                popped_stack_items,\n                pushed_stack_items,\n                min_stack_height,\n                max_stack_height,\n            ) = self.stack_properties_modifier(data_portion)\n\n        new_opcode = Opcode(\n            bytes(self) + data_portion,\n            popped_stack_items=popped_stack_items,\n            pushed_stack_items=pushed_stack_items,\n            min_stack_height=min_stack_height,\n            max_stack_height=max_stack_height,\n            data_portion_length=0,\n            data_portion_formatter=None,\n            unchecked_stack=self.unchecked_stack,\n            terminating=self.terminating,\n            kwargs=self.kwargs,\n            kwargs_defaults=self.kwargs_defaults,\n        )\n        new_opcode._name_ = f\"{self._name_}_0x{data_portion.hex()}\"\n        return new_opcode\n\n    def __call__(\n        self,\n        *args_t: \"int | bytes | str | Opcode | Bytecode | Iterable[int]\",\n        unchecked: bool = False,\n        **kwargs: \"int | bytes | str | Opcode | Bytecode\",\n    ) -> Bytecode:\n        \"\"\"\n        Makes all opcode instances callable to return formatted bytecode, which constitutes a data\n        portion, that is located after the opcode byte, and pre-opcode bytecode, which is normally\n        used to set up the stack.\n\n        This useful to automatically format, e.g., call opcodes and their stack arguments as\n        `Opcodes.CALL(Opcodes.GAS, 0x1234, 0x0, 0x0, 0x0, 0x0, 0x0)`.\n\n        Data sign is automatically detected but for this reason the range of the input must be:\n        `[-2^(data_portion_bits-1), 2^(data_portion_bits)]` where: `data_portion_bits ==\n        data_portion_length * 8`\n\n        For the stack, the arguments are set up in the opposite order they are given, so the first\n        argument is the last item pushed to the stack.\n\n        The resulting stack arrangement does not take into account opcode stack element\n        consumption, so the stack height is not guaranteed to be correct and the user must take\n        this into consideration.\n\n        Integers can also be used as stack elements, in which case they are automatically converted\n        to PUSH operations, and negative numbers always use a PUSH32 operation.\n\n        Hex-strings will be automatically converted to bytes.\n        \"\"\"\n        args: List[\"int | bytes | str | Opcode | Bytecode | Iterable[int]\"] = list(args_t)\n\n        if self.has_data_portion():\n            if len(args) == 0:\n                raise ValueError(\"Opcode with data portion requires at least one argument\")\n            assert type(self) is Opcode\n            get_item_arg = args.pop()\n            assert not isinstance(get_item_arg, Bytecode)\n            return self[get_item_arg](*args)\n\n        if self.kwargs is not None and len(kwargs) > 0:\n            assert len(args) == 0, f\"Cannot mix positional and keyword arguments {args} {kwargs}\"\n            for kw in self.kwargs:\n                args.append(kwargs[kw] if kw in kwargs else self.kwargs_defaults.get(kw, 0))\n\n        # The rest of the arguments form the stack.\n        if len(args) != self.popped_stack_items and not (unchecked or self.unchecked_stack):\n            raise ValueError(\n                f\"Opcode {self._name_} requires {self.popped_stack_items} stack elements, but \"\n                f\"{len(args)} were provided. Use 'unchecked=True' parameter to ignore this check.\"\n            )\n\n        pre_opcode_bytecode = Bytecode()\n        while len(args) > 0:\n            pre_opcode_bytecode += _stack_argument_to_bytecode(args.pop())\n        return pre_opcode_bytecode + self\n\n    def __lt__(self, other: \"Opcode\") -> bool:\n        \"\"\"\n        Compares two opcodes by their integer value.\n        \"\"\"\n        return self.int() < other.int()\n\n    def __gt__(self, other: \"Opcode\") -> bool:\n        \"\"\"\n        Compares two opcodes by their integer value.\n        \"\"\"\n        return self.int() > other.int()\n\n    def int(self) -> int:\n        \"\"\"\n        Returns the integer representation of the opcode.\n        \"\"\"\n        return int.from_bytes(self, byteorder=\"big\")\n\n    def has_data_portion(self) -> bool:\n        \"\"\"\n        Returns whether the opcode has a data portion.\n        \"\"\"\n        return self.data_portion_length > 0 or self.data_portion_formatter is not None\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcode.__new__","title":"__new__(opcode_or_byte, *, popped_stack_items=0, pushed_stack_items=0, max_stack_height=None, min_stack_height=None, data_portion_length=0, data_portion_formatter=None, stack_properties_modifier=None, unchecked_stack=False, terminating=False, kwargs=None, kwargs_defaults={})","text":"

    Creates a new opcode instance.

    Source code in src/ethereum_test_vm/opcode.py
    def __new__(\n    cls,\n    opcode_or_byte: \"int | bytes | Opcode\",\n    *,\n    popped_stack_items: int = 0,\n    pushed_stack_items: int = 0,\n    max_stack_height: int | None = None,\n    min_stack_height: int | None = None,\n    data_portion_length: int = 0,\n    data_portion_formatter=None,\n    stack_properties_modifier=None,\n    unchecked_stack=False,\n    terminating: bool = False,\n    kwargs: List[str] | None = None,\n    kwargs_defaults: KW_ARGS_DEFAULTS_TYPE = {},\n):\n    \"\"\"\n    Creates a new opcode instance.\n    \"\"\"\n    if type(opcode_or_byte) is Opcode:\n        # Required because Enum class calls the base class with the instantiated object as\n        # parameter.\n        return opcode_or_byte\n    elif isinstance(opcode_or_byte, int) or isinstance(opcode_or_byte, bytes):\n\n        obj_bytes = (\n            bytes([opcode_or_byte]) if isinstance(opcode_or_byte, int) else opcode_or_byte\n        )\n        if min_stack_height is None:\n            min_stack_height = popped_stack_items\n        if max_stack_height is None:\n            max_stack_height = max(\n                min_stack_height - popped_stack_items + pushed_stack_items, min_stack_height\n            )\n        obj = super().__new__(\n            cls,\n            obj_bytes,\n            popped_stack_items=popped_stack_items,\n            pushed_stack_items=pushed_stack_items,\n            max_stack_height=max_stack_height,\n            min_stack_height=min_stack_height,\n            terminating=terminating,\n        )\n        obj.data_portion_length = data_portion_length\n        obj.data_portion_formatter = data_portion_formatter\n        obj.stack_properties_modifier = stack_properties_modifier\n        obj.unchecked_stack = unchecked_stack\n        obj.kwargs = kwargs\n        obj.kwargs_defaults = kwargs_defaults\n        return obj\n    raise TypeError(\"Opcode constructor '__new__' didn't return an instance!\")\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcode.__getitem__","title":"__getitem__(*args)","text":"

    Initialize a new instance of the opcode with the data portion set, and also clear the data portion variables to avoid reusing them.

    Source code in src/ethereum_test_vm/opcode.py
    def __getitem__(self, *args: \"int | bytes | str | Iterable[int]\") -> \"Opcode\":\n    \"\"\"\n    Initialize a new instance of the opcode with the data portion set, and also clear\n    the data portion variables to avoid reusing them.\n    \"\"\"\n    if self.data_portion_formatter is None and self.data_portion_length == 0:\n        raise ValueError(\"Opcode does not have a data portion or has already been set\")\n    data_portion = bytes()\n\n    if self.data_portion_formatter is not None:\n        if len(args) == 1 and isinstance(args[0], Iterable) and not isinstance(args[0], bytes):\n            data_portion = self.data_portion_formatter(*args[0])\n        else:\n            data_portion = self.data_portion_formatter(*args)\n    elif self.data_portion_length > 0:\n        # For opcodes with a data portion, the first argument is the data and the rest of the\n        # arguments form the stack.\n        assert len(args) == 1, \"Opcode with data portion requires exactly one argument\"\n        data = args[0]\n        if isinstance(data, bytes) or isinstance(data, SupportsBytes) or isinstance(data, str):\n            if isinstance(data, str):\n                if data.startswith(\"0x\"):\n                    data = data[2:]\n                data = bytes.fromhex(data)\n            elif isinstance(data, SupportsBytes):\n                data = bytes(data)\n            assert len(data) <= self.data_portion_length\n            data_portion = data.rjust(self.data_portion_length, b\"\\x00\")\n        elif isinstance(data, int):\n            signed = data < 0\n            data_portion = data.to_bytes(\n                length=self.data_portion_length,\n                byteorder=\"big\",\n                signed=signed,\n            )\n        else:\n            raise TypeError(\"Opcode data portion must be either an int or bytes/hex string\")\n    popped_stack_items = self.popped_stack_items\n    pushed_stack_items = self.pushed_stack_items\n    min_stack_height = self.min_stack_height\n    max_stack_height = self.max_stack_height\n    assert (\n        popped_stack_items is not None\n        and pushed_stack_items is not None\n        and min_stack_height is not None\n    )\n    if self.stack_properties_modifier is not None:\n        (\n            popped_stack_items,\n            pushed_stack_items,\n            min_stack_height,\n            max_stack_height,\n        ) = self.stack_properties_modifier(data_portion)\n\n    new_opcode = Opcode(\n        bytes(self) + data_portion,\n        popped_stack_items=popped_stack_items,\n        pushed_stack_items=pushed_stack_items,\n        min_stack_height=min_stack_height,\n        max_stack_height=max_stack_height,\n        data_portion_length=0,\n        data_portion_formatter=None,\n        unchecked_stack=self.unchecked_stack,\n        terminating=self.terminating,\n        kwargs=self.kwargs,\n        kwargs_defaults=self.kwargs_defaults,\n    )\n    new_opcode._name_ = f\"{self._name_}_0x{data_portion.hex()}\"\n    return new_opcode\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcode.__call__","title":"__call__(*args_t, unchecked=False, **kwargs)","text":"

    Makes all opcode instances callable to return formatted bytecode, which constitutes a data portion, that is located after the opcode byte, and pre-opcode bytecode, which is normally used to set up the stack.

    This useful to automatically format, e.g., call opcodes and their stack arguments as Opcodes.CALL(Opcodes.GAS, 0x1234, 0x0, 0x0, 0x0, 0x0, 0x0).

    Data sign is automatically detected but for this reason the range of the input must be: [-2^(data_portion_bits-1), 2^(data_portion_bits)] where: data_portion_bits == data_portion_length * 8

    For the stack, the arguments are set up in the opposite order they are given, so the first argument is the last item pushed to the stack.

    The resulting stack arrangement does not take into account opcode stack element consumption, so the stack height is not guaranteed to be correct and the user must take this into consideration.

    Integers can also be used as stack elements, in which case they are automatically converted to PUSH operations, and negative numbers always use a PUSH32 operation.

    Hex-strings will be automatically converted to bytes.

    Source code in src/ethereum_test_vm/opcode.py
    def __call__(\n    self,\n    *args_t: \"int | bytes | str | Opcode | Bytecode | Iterable[int]\",\n    unchecked: bool = False,\n    **kwargs: \"int | bytes | str | Opcode | Bytecode\",\n) -> Bytecode:\n    \"\"\"\n    Makes all opcode instances callable to return formatted bytecode, which constitutes a data\n    portion, that is located after the opcode byte, and pre-opcode bytecode, which is normally\n    used to set up the stack.\n\n    This useful to automatically format, e.g., call opcodes and their stack arguments as\n    `Opcodes.CALL(Opcodes.GAS, 0x1234, 0x0, 0x0, 0x0, 0x0, 0x0)`.\n\n    Data sign is automatically detected but for this reason the range of the input must be:\n    `[-2^(data_portion_bits-1), 2^(data_portion_bits)]` where: `data_portion_bits ==\n    data_portion_length * 8`\n\n    For the stack, the arguments are set up in the opposite order they are given, so the first\n    argument is the last item pushed to the stack.\n\n    The resulting stack arrangement does not take into account opcode stack element\n    consumption, so the stack height is not guaranteed to be correct and the user must take\n    this into consideration.\n\n    Integers can also be used as stack elements, in which case they are automatically converted\n    to PUSH operations, and negative numbers always use a PUSH32 operation.\n\n    Hex-strings will be automatically converted to bytes.\n    \"\"\"\n    args: List[\"int | bytes | str | Opcode | Bytecode | Iterable[int]\"] = list(args_t)\n\n    if self.has_data_portion():\n        if len(args) == 0:\n            raise ValueError(\"Opcode with data portion requires at least one argument\")\n        assert type(self) is Opcode\n        get_item_arg = args.pop()\n        assert not isinstance(get_item_arg, Bytecode)\n        return self[get_item_arg](*args)\n\n    if self.kwargs is not None and len(kwargs) > 0:\n        assert len(args) == 0, f\"Cannot mix positional and keyword arguments {args} {kwargs}\"\n        for kw in self.kwargs:\n            args.append(kwargs[kw] if kw in kwargs else self.kwargs_defaults.get(kw, 0))\n\n    # The rest of the arguments form the stack.\n    if len(args) != self.popped_stack_items and not (unchecked or self.unchecked_stack):\n        raise ValueError(\n            f\"Opcode {self._name_} requires {self.popped_stack_items} stack elements, but \"\n            f\"{len(args)} were provided. Use 'unchecked=True' parameter to ignore this check.\"\n        )\n\n    pre_opcode_bytecode = Bytecode()\n    while len(args) > 0:\n        pre_opcode_bytecode += _stack_argument_to_bytecode(args.pop())\n    return pre_opcode_bytecode + self\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcode.__lt__","title":"__lt__(other)","text":"

    Compares two opcodes by their integer value.

    Source code in src/ethereum_test_vm/opcode.py
    def __lt__(self, other: \"Opcode\") -> bool:\n    \"\"\"\n    Compares two opcodes by their integer value.\n    \"\"\"\n    return self.int() < other.int()\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcode.__gt__","title":"__gt__(other)","text":"

    Compares two opcodes by their integer value.

    Source code in src/ethereum_test_vm/opcode.py
    def __gt__(self, other: \"Opcode\") -> bool:\n    \"\"\"\n    Compares two opcodes by their integer value.\n    \"\"\"\n    return self.int() > other.int()\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcode.int","title":"int()","text":"

    Returns the integer representation of the opcode.

    Source code in src/ethereum_test_vm/opcode.py
    def int(self) -> int:\n    \"\"\"\n    Returns the integer representation of the opcode.\n    \"\"\"\n    return int.from_bytes(self, byteorder=\"big\")\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcode.has_data_portion","title":"has_data_portion()","text":"

    Returns whether the opcode has a data portion.

    Source code in src/ethereum_test_vm/opcode.py
    def has_data_portion(self) -> bool:\n    \"\"\"\n    Returns whether the opcode has a data portion.\n    \"\"\"\n    return self.data_portion_length > 0 or self.data_portion_formatter is not None\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes","title":"Opcodes","text":"

    Bases: Opcode, Enum

    Enum containing all known opcodes.

    Contains deprecated and not yet implemented opcodes.

    This enum is !! NOT !! meant to be iterated over by the tests. Instead, create a list with cherry-picked opcodes from this Enum within the test if iteration is needed.

    Do !! NOT !! remove or modify existing opcodes from this list.

    Source code in src/ethereum_test_vm/opcode.py
    class Opcodes(Opcode, Enum):\n    \"\"\"\n    Enum containing all known opcodes.\n\n    Contains deprecated and not yet implemented opcodes.\n\n    This enum is !! NOT !! meant to be iterated over by the tests. Instead, create a list with\n    cherry-picked opcodes from this Enum within the test if iteration is needed.\n\n    Do !! NOT !! remove or modify existing opcodes from this list.\n    \"\"\"\n\n    STOP = Opcode(0x00, terminating=True)\n    \"\"\"\n    STOP()\n    ----\n\n    Description\n    ----\n    Stop execution\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    0\n\n    Source: [evm.codes/#00](https://www.evm.codes/#00)\n    \"\"\"\n\n    ADD = Opcode(0x01, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    ADD(a, b) = c\n    ----\n\n    Description\n    ----\n    Addition operation\n\n    Inputs\n    ----\n    - a: first integer value to add\n    - b: second integer value to add\n\n    Outputs\n    ----\n    - c: integer result of the addition modulo 2**256\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#01](https://www.evm.codes/#01)\n    \"\"\"\n\n    MUL = Opcode(0x02, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    MUL(a, b) = c\n    ----\n\n    Description\n    ----\n    Multiplication operation\n\n    Inputs\n    ----\n    - a: first integer value to multiply\n    - b: second integer value to multiply\n\n    Outputs\n    ----\n    - c: integer result of the multiplication modulo 2**256\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    5\n\n    Source: [evm.codes/#02](https://www.evm.codes/#02)\n    \"\"\"\n\n    SUB = Opcode(0x03, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    SUB(a, b) = c\n    ----\n\n    Description\n    ----\n    Subtraction operation\n\n    Inputs\n    ----\n    - a: first integer value\n    - b: second integer value\n\n    Outputs\n    ----\n    - c: integer result of the subtraction modulo 2**256\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#03](https://www.evm.codes/#03)\n    \"\"\"\n\n    DIV = Opcode(0x04, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    DIV(a, b) = c\n    ----\n\n    Description\n    ----\n    Division operation\n\n    Inputs\n    ----\n    - a: numerator\n    - b: denominator (must be non-zero)\n\n    Outputs\n    ----\n    - c: integer result of the division\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    5\n\n    Source: [evm.codes/#04](https://www.evm.codes/#04)\n    \"\"\"\n\n    SDIV = Opcode(0x05, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    SDIV(a, b) = c\n    ----\n\n    Description\n    ----\n    Signed division operation\n\n    Inputs\n    ----\n    - a: signed numerator\n    - b: signed denominator\n\n    Outputs\n    ----\n    - c: signed integer result of the division. If the denominator is 0, the result will be 0\n    ----\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    5\n\n    Source: [evm.codes/#05](https://www.evm.codes/#05)\n    \"\"\"\n\n    MOD = Opcode(0x06, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    MOD(a, b) = c\n    ----\n\n    Description\n    ----\n    Modulo operation\n\n    Inputs\n    ----\n    - a: integer numerator\n    - b: integer denominator\n\n    Outputs\n    ----\n    - a % b: integer result of the integer modulo. If the denominator is 0, the result will be 0\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    5\n\n    Source: [evm.codes/#06](https://www.evm.codes/#06)\n    \"\"\"\n\n    SMOD = Opcode(0x07, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    SMOD(a, b) = c\n    ----\n\n    Description\n    ----\n    Signed modulo remainder operation\n\n    Inputs\n    ----\n    - a: integer numerator\n    - b: integer denominator\n\n    Outputs\n    ----\n    - a % b: integer result of the signed integer modulo. If the denominator is 0, the result will\n        be 0\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    5\n\n    Source: [evm.codes/#07](https://www.evm.codes/#07)\n    \"\"\"\n\n    ADDMOD = Opcode(0x08, popped_stack_items=3, pushed_stack_items=1)\n    \"\"\"\n    ADDMOD(a, b, c) = d\n    ----\n\n    Description\n    ----\n    Modular addition operation with overflow check\n\n    Inputs\n    ----\n    - a: first integer value\n    - b: second integer value\n    - c: integer denominator\n\n    Outputs\n    ----\n    - (a + b) % N: integer result of the addition followed by a modulo. If the denominator is 0,\n        the result will be 0\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    8\n\n    Source: [evm.codes/#08](https://www.evm.codes/#08)\n    \"\"\"\n\n    MULMOD = Opcode(0x09, popped_stack_items=3, pushed_stack_items=1)\n    \"\"\"\n    MULMOD(a, b, N) = d\n    ----\n\n    Description\n    ----\n    Modulo multiplication operation\n\n    Inputs\n    ----\n    - a: first integer value to multiply\n    - b: second integer value to multiply\n    - N: integer denominator\n\n    Outputs\n    ----\n    - (a * b) % N: integer result of the multiplication followed by a modulo. If the denominator\n        is 0, the result will be 0\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    8\n\n    Source: [evm.codes/#09](https://www.evm.codes/#09)\n    \"\"\"\n\n    EXP = Opcode(0x0A, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    EXP(a, exponent) = a ** exponent\n    ----\n\n    Description\n    ----\n    Exponential operation\n\n    Inputs\n    ----\n    - a: integer base\n    - exponent: integer exponent\n\n    Outputs\n    ----\n    - a ** exponent: integer result of the exponential operation modulo 2**256\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 10\n    - dynamic_gas = 50 * exponent_byte_size\n\n    Source: [evm.codes/#0A](https://www.evm.codes/#0A)\n    \"\"\"\n\n    SIGNEXTEND = Opcode(0x0B, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    SIGNEXTEND(b, x) = y\n    ----\n\n    Description\n    ----\n    Sign extension operation\n\n    Inputs\n    ----\n    - b: size in byte - 1 of the integer to sign extend\n    - x: integer value to sign extend\n\n    Outputs\n    ----\n    - y: integer result of the sign extend\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    5\n\n    Source: [evm.codes/#0B](https://www.evm.codes/#0B)\n    \"\"\"\n\n    LT = Opcode(0x10, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    LT(a, b) = a < b\n    ----\n\n    Description\n    ----\n    Less-than comparison\n\n    Inputs\n    ----\n    - a: left side integer value\n    - b: right side integer value\n\n    Outputs\n    ----\n    - a < b: 1 if the left side is smaller, 0 otherwise\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#10](https://www.evm.codes/#10)\n    \"\"\"\n\n    GT = Opcode(0x11, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    GT(a, b) = a > b\n    ----\n\n    Description\n    ----\n    Greater-than comparison\n\n    Inputs\n    ----\n    - a: left side integer\n    - b: right side integer\n\n    Outputs\n    ----\n    - a > b: 1 if the left side is bigger, 0 otherwise\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#11](https://www.evm.codes/#11)\n    \"\"\"\n\n    SLT = Opcode(0x12, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    SLT(a, b) = a < b\n    ----\n\n    Description\n    ----\n    Signed less-than comparison\n\n    Inputs\n    ----\n    - a: left side signed integer\n    - b: right side signed integer\n\n    Outputs\n    ----\n    - a < b: 1 if the left side is smaller, 0 otherwise\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#12](https://www.evm.codes/#12)\n    \"\"\"\n\n    SGT = Opcode(0x13, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    SGT(a, b) = a > b\n    ----\n\n    Description\n    ----\n    Signed greater-than comparison\n\n    Inputs\n    ----\n    - a: left side signed integer\n    - b: right side signed integer\n\n    Outputs\n    ----\n    - a > b: 1 if the left side is bigger, 0 otherwise\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#13](https://www.evm.codes/#13)\n    \"\"\"\n\n    EQ = Opcode(0x14, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    EQ(a, b) = a == b\n    ----\n\n    Description\n    ----\n    Equality comparison\n\n    Inputs\n    ----\n    - a: left side integer\n    - b: right side integer\n\n    Outputs\n    ----\n    - a == b: 1 if the left side is equal to the right side, 0 otherwise\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#14](https://www.evm.codes/#14)\n    \"\"\"\n\n    ISZERO = Opcode(0x15, popped_stack_items=1, pushed_stack_items=1)\n    \"\"\"\n    ISZERO(a) = a == 0\n    ----\n\n    Description\n    ----\n    Is-zero comparison\n\n    Inputs\n    ----\n    - a: integer\n\n    Outputs\n    ----\n    - a == 0: 1 if a is 0, 0 otherwise\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#15](https://www.evm.codes/#15)\n    \"\"\"\n\n    AND = Opcode(0x16, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    AND(a, b) = a & b\n    ----\n\n    Description\n    ----\n    Bitwise AND operation\n\n    Inputs\n    ----\n    - a: first binary value\n    - b: second binary value\n\n    Outputs\n    ----\n    - a & b: the bitwise AND result\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#16](https://www.evm.codes/#16)\n    \"\"\"\n\n    OR = Opcode(0x17, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    OR(a, b) = a | b\n    ----\n\n    Description\n    ----\n    Bitwise OR operation\n\n    Inputs\n    ----\n    - a: first binary value\n    - b: second binary value\n\n    Outputs\n    ----\n    - a | b: the bitwise OR result\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#17](https://www.evm.codes/#17)\n    \"\"\"\n\n    XOR = Opcode(0x18, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    XOR(a, b) = a ^ b\n    ----\n\n    Description\n    ----\n    Bitwise XOR operation\n\n    Inputs\n    ----\n    - a: first binary value\n    - b: second binary value\n\n    Outputs\n    ----\n    - a ^ b: the bitwise XOR result\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#18](https://www.evm.codes/#18)\n    \"\"\"\n\n    NOT = Opcode(0x19, popped_stack_items=1, pushed_stack_items=1)\n    \"\"\"\n    NOT(a) = ~a\n    ----\n\n    Description\n    ----\n    Bitwise NOT operation\n\n    Inputs\n    ----\n    - a: binary value\n\n    Outputs\n    ----\n    - ~a: the bitwise NOT result\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#19](https://www.evm.codes/#19)\n    \"\"\"\n\n    BYTE = Opcode(0x1A, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    BYTE(i, x) = y\n    ----\n\n    Description\n    ----\n    Extract a byte from the given position in the value\n\n    Inputs\n    ----\n    - i: byte offset starting from the most significant byte\n    - x: 32-byte value\n\n    Outputs\n    ----\n    - y: the indicated byte at the least significant position. If the byte offset is out of range,\n        the result is 0\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#1A](https://www.evm.codes/#1A)\n    \"\"\"\n\n    SHL = Opcode(0x1B, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    SHL(shift, value) = value << shift\n    ----\n\n    Description\n    ----\n    Shift left operation\n\n    Inputs\n    ----\n    - shift: number of bits to shift to the left\n    - value: 32 bytes to shift\n\n    Outputs\n    ----\n    - value << shift: the shifted value. If shift is bigger than 255, returns 0\n\n    Fork\n    ----\n    Constantinople\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#1B](https://www.evm.codes/#1B)\n    \"\"\"\n\n    SHR = Opcode(0x1C, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    SHR(shift, value) = value >> shift\n    ----\n\n    Description\n    ----\n    Logical shift right operation\n\n    Inputs\n    ----\n    - shift: number of bits to shift to the right.\n    - value: 32 bytes to shift\n\n    Outputs\n    ----\n    - value >> shift: the shifted value. If shift is bigger than 255, returns 0\n\n    Fork\n    ----\n    Constantinople\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#1C](https://www.evm.codes/#1C)\n    \"\"\"\n\n    SAR = Opcode(0x1D, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    SAR(shift, value) = value >> shift\n    ----\n\n    Description\n    ----\n    Arithmetic shift right operation\n\n    Inputs\n    ----\n    - shift: number of bits to shift to the right\n    - value: integer to shift\n\n    Outputs\n    ----\n    - value >> shift: the shifted value\n\n    Fork\n    ----\n    Constantinople\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#1D](https://www.evm.codes/#1D)\n    \"\"\"\n\n    SHA3 = Opcode(0x20, popped_stack_items=2, pushed_stack_items=1, kwargs=[\"offset\", \"size\"])\n    \"\"\"\n    SHA3(offset, size) = hash\n    ----\n\n    Description\n    ----\n    Compute Keccak-256 hash\n\n    Inputs\n    ----\n    - offset: byte offset in the memory\n    - size: byte size to read in the memory\n\n    Outputs\n    ----\n    - hash: Keccak-256 hash of the given data in memory\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - minimum_word_size = (size + 31) / 32\n    - static_gas = 30\n    - dynamic_gas = 6 * minimum_word_size + memory_expansion_cost\n\n    Source: [evm.codes/#20](https://www.evm.codes/#20)\n    \"\"\"\n\n    ADDRESS = Opcode(0x30, pushed_stack_items=1)\n    \"\"\"\n    ADDRESS() = address\n    ----\n\n    Description\n    ----\n    Get address of currently executing account\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - address: the 20-byte address of the current account\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#30](https://www.evm.codes/#30)\n    \"\"\"\n\n    BALANCE = Opcode(0x31, popped_stack_items=1, pushed_stack_items=1, kwargs=[\"address\"])\n    \"\"\"\n    BALANCE(address) = balance\n    ----\n\n    Description\n    ----\n    Get the balance of the specified account\n\n    Inputs\n    ----\n    - address: 20-byte address of the account to check\n\n    Outputs\n    ----\n    - balance: balance of the given account in wei. Returns 0 if the account doesn't exist\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 0\n    - dynamic_gas = 100 if warm_address, 2600 if cold_address\n\n    Source: [evm.codes/#31](https://www.evm.codes/#31)\n    \"\"\"\n\n    ORIGIN = Opcode(0x32, pushed_stack_items=1)\n    \"\"\"\n    ORIGIN() = address\n    ----\n\n    Description\n    ----\n    Get execution origination address\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - address: the 20-byte address of the sender of the transaction. It can only be an account\n        without code\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#32](https://www.evm.codes/#32)\n    \"\"\"\n\n    CALLER = Opcode(0x33, pushed_stack_items=1)\n    \"\"\"\n    CALLER() = address\n    ----\n\n    Description\n    ----\n    Get caller address\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - address: the 20-byte address of the caller account. This is the account that did the last\n        call (except delegate call)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#33](https://www.evm.codes/#33)\n    \"\"\"\n\n    CALLVALUE = Opcode(0x34, pushed_stack_items=1)\n    \"\"\"\n    CALLVALUE() = value\n    ----\n\n    Description\n    ----\n    Get deposited value by the instruction/transaction responsible for this execution\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: the value of the current call in wei\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#34](https://www.evm.codes/#34)\n    \"\"\"\n\n    CALLDATALOAD = Opcode(0x35, popped_stack_items=1, pushed_stack_items=1, kwargs=[\"offset\"])\n    \"\"\"\n    CALLDATALOAD(offset) = data[offset]\n    ----\n\n    Description\n    ----\n    Get input data of current environment\n\n    Inputs\n    ----\n    - offset: byte offset in the calldata\n\n    Outputs\n    ----\n    - data[offset]: 32-byte value starting from the given offset of the calldata. All bytes after\n        the end of the calldata are set to 0\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#35](https://www.evm.codes/#35)\n    \"\"\"\n\n    CALLDATASIZE = Opcode(0x36, pushed_stack_items=1)\n    \"\"\"\n    CALLDATASIZE() = size\n    ----\n\n    Description\n    ----\n    Get size of input data in current environment\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - size: byte size of the calldata\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#36](https://www.evm.codes/#36)\n    \"\"\"\n\n    CALLDATACOPY = Opcode(0x37, popped_stack_items=3, kwargs=[\"dest_offset\", \"offset\", \"size\"])\n    \"\"\"\n    CALLDATACOPY(dest_offset, offset, size)\n    ----\n\n    Description\n    ----\n    Copy input data in current environment to memory\n\n    Inputs\n    ----\n    - dest_offset: byte offset in the memory where the result will be copied\n    - offset: byte offset in the calldata to copy\n    - size: byte size to copy\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - minimum_word_size = (size + 31) / 32\n    - static_gas = 3\n    - dynamic_gas = 3 * minimum_word_size + memory_expansion_cost\n\n    Source: [evm.codes/#37](https://www.evm.codes/#37)\n    \"\"\"\n\n    CODESIZE = Opcode(0x38, pushed_stack_items=1)\n    \"\"\"\n    CODESIZE() = size\n    ----\n\n    Description\n    ----\n    Get size of code running in current environment\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - size: byte size of the code\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#38](https://www.evm.codes/#38)\n    \"\"\"\n\n    CODECOPY = Opcode(0x39, popped_stack_items=3, kwargs=[\"dest_offset\", \"offset\", \"size\"])\n    \"\"\"\n    CODECOPY(dest_offset, offset, size)\n    ----\n\n    Description\n    ----\n    Copy code running in current environment to memory\n\n    Inputs\n    ----\n    - dest_offset: byte offset in the memory where the result will be copied.\n    - offset: byte offset in the code to copy.\n    - size: byte size to copy\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - minimum_word_size = (size + 31) / 32\n    - static_gas = 3\n    - dynamic_gas = 3 * minimum_word_size + memory_expansion_cost\n\n    Source: [evm.codes/#39](https://www.evm.codes/#39)\n    \"\"\"\n\n    GASPRICE = Opcode(0x3A, pushed_stack_items=1)\n    \"\"\"\n    GASPRICE() = price\n    ----\n\n    Description\n    ----\n    Get price of gas in current environment\n\n    Outputs\n    ----\n    - price: gas price in wei per gas\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#3A](https://www.evm.codes/#3A)\n    \"\"\"\n\n    EXTCODESIZE = Opcode(0x3B, popped_stack_items=1, pushed_stack_items=1, kwargs=[\"address\"])\n    \"\"\"\n    EXTCODESIZE(address) = size\n    ----\n\n    Description\n    ----\n    Get size of an account's code\n\n    Inputs\n    ----\n    - address: 20-byte address of the contract to query\n\n    Outputs\n    ----\n    - size: byte size of the code\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 0\n    - dynamic_gas = 100 if warm_address, 2600 if cold_address\n\n    Source: [evm.codes/#3B](https://www.evm.codes/#3B)\n    \"\"\"\n\n    EXTCODECOPY = Opcode(\n        0x3C, popped_stack_items=4, kwargs=[\"address\", \"dest_offset\", \"offset\", \"size\"]\n    )\n    \"\"\"\n    EXTCODECOPY(address, dest_offset, offset, size)\n    ----\n\n    Description\n    ----\n    Copy an account's code to memory\n\n    Inputs\n    ----\n    - address: 20-byte address of the contract to query\n    - dest_offset: byte offset in the memory where the result will be copied\n    - offset: byte offset in the code to copy\n    - size: byte size to copy\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - minimum_word_size = (size + 31) / 32\n    - static_gas = 0\n    - dynamic_gas = 3 * minimum_word_size + memory_expansion_cost + address_access_cost\n\n    Source: [evm.codes/#3C](https://www.evm.codes/#3C)\n    \"\"\"\n\n    RETURNDATASIZE = Opcode(0x3D, pushed_stack_items=1)\n    \"\"\"\n    RETURNDATASIZE() = size\n    ----\n\n    Description\n    ----\n    Get size of output data from the previous call from the current environment\n\n    Outputs\n    ----\n    - size: byte size of the return data from the last executed sub context\n\n    Fork\n    ----\n    Byzantium\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#3D](https://www.evm.codes/#3D)\n    \"\"\"\n\n    RETURNDATACOPY = Opcode(0x3E, popped_stack_items=3, kwargs=[\"dest_offset\", \"offset\", \"size\"])\n    \"\"\"\n    RETURNDATACOPY(dest_offset, offset, size)\n    ----\n\n    Description\n    ----\n    Copy output data from the previous call to memory\n\n    Inputs\n    ----\n    - dest_offset: byte offset in the memory where the result will be copied\n    - offset: byte offset in the return data from the last executed sub context to copy\n    - size: byte size to copy\n\n    Fork\n    ----\n    Byzantium\n\n    Gas\n    ----\n    - minimum_word_size = (size + 31) / 32\n    - static_gas = 3\n    - dynamic_gas = 3 * minimum_word_size + memory_expansion_cost\n\n    Source: [evm.codes/#3E](https://www.evm.codes/#3E)\n    \"\"\"\n\n    EXTCODEHASH = Opcode(0x3F, popped_stack_items=1, pushed_stack_items=1, kwargs=[\"address\"])\n    \"\"\"\n    EXTCODEHASH(address) = hash\n    ----\n\n    Description\n    ----\n    Get hash of an account's code\n\n    Inputs\n    ----\n    - address: 20-byte address of the account\n\n    Outputs\n    ----\n    - hash: hash of the chosen account's code, the empty hash (0xc5d24601...) if the account has no\n        code, or 0 if the account does not exist or has been destroyed\n\n    Fork\n    ----\n    Constantinople\n\n    Gas\n    ----\n    - static_gas = 0\n    - dynamic_gas = 100 if warm_address, 2600 if cold_address\n\n    Source: [evm.codes/#3F](https://www.evm.codes/#3F)\n    \"\"\"\n\n    BLOCKHASH = Opcode(0x40, popped_stack_items=1, pushed_stack_items=1, kwargs=[\"block_number\"])\n    \"\"\"\n    BLOCKHASH(block_number) = hash\n    ----\n\n    Description\n    ----\n    Get the hash of one of the 256 most recent complete blocks\n\n    Inputs\n    ----\n    - blockNumber: block number to get the hash from. Valid range is the last 256 blocks (not\n        including the current one). Current block number can be queried with NUMBER\n\n    Outputs\n    ----\n    - hash: hash of the chosen block, or 0 if the block number is not in the valid range\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    20\n\n    Source: [evm.codes/#40](https://www.evm.codes/#40)\n    \"\"\"\n\n    COINBASE = Opcode(0x41, pushed_stack_items=1)\n    \"\"\"\n    COINBASE() = address\n    ----\n\n    Description\n    ----\n    Get the block's beneficiary address\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - address: miner's 20-byte address\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#41](https://www.evm.codes/#41)\n    \"\"\"\n\n    TIMESTAMP = Opcode(0x42, pushed_stack_items=1)\n    \"\"\"\n    TIMESTAMP() = timestamp\n    ----\n\n    Description\n    ----\n    Get the block's timestamp\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - timestamp: unix timestamp of the current block\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#42](https://www.evm.codes/#42)\n    \"\"\"\n\n    NUMBER = Opcode(0x43, pushed_stack_items=1)\n    \"\"\"\n    NUMBER() = blockNumber\n    ----\n\n    Description\n    ----\n    Get the block's number\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - blockNumber: current block number\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#43](https://www.evm.codes/#43)\n    \"\"\"\n\n    PREVRANDAO = Opcode(0x44, pushed_stack_items=1)\n    \"\"\"\n    PREVRANDAO() = prevRandao\n    ----\n\n    Description\n    ----\n    Get the previous block's RANDAO mix\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - prevRandao: previous block's RANDAO mix\n\n    Fork\n    ----\n    Merge\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#44](https://www.evm.codes/#44)\n    \"\"\"\n\n    GASLIMIT = Opcode(0x45, pushed_stack_items=1)\n    \"\"\"\n    GASLIMIT() = gasLimit\n    ----\n\n    Description\n    ----\n    Get the block's gas limit\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - gasLimit: gas limit\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#45](https://www.evm.codes/#45)\n    \"\"\"\n\n    CHAINID = Opcode(0x46, pushed_stack_items=1)\n    \"\"\"\n    CHAINID() = chainId\n    ----\n\n    Description\n    ----\n    Get the chain ID\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - chainId: chain id of the network\n\n    Fork\n    ----\n    Istanbul\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#46](https://www.evm.codes/#46)\n    \"\"\"\n\n    SELFBALANCE = Opcode(0x47, pushed_stack_items=1)\n    \"\"\"\n    SELFBALANCE() = balance\n    ----\n\n    Description\n    ----\n    Get balance of currently executing account\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - balance: balance of the current account in wei\n\n    Fork\n    ----\n    Istanbul\n\n    Gas\n    ----\n    5\n\n    Source: [evm.codes/#47](https://www.evm.codes/#47)\n    \"\"\"\n\n    BASEFEE = Opcode(0x48, pushed_stack_items=1)\n    \"\"\"\n    BASEFEE() = baseFee\n    ----\n\n    Description\n    ----\n    Get the base fee\n\n    Outputs\n    ----\n    - baseFee: base fee in wei\n\n    Fork\n    ----\n    London\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#48](https://www.evm.codes/#48)\n    \"\"\"\n\n    BLOBHASH = Opcode(0x49, popped_stack_items=1, pushed_stack_items=1, kwargs=[\"index\"])\n    \"\"\"\n    BLOBHASH(index) = versionedHash\n    ----\n\n    Description\n    ----\n    Returns the versioned hash of a single blob contained in the type-3 transaction\n\n    Inputs\n    ----\n    - index: index of the blob\n\n    Outputs\n    ----\n    - versionedHash: versioned hash of the blob\n\n    Fork\n    ----\n    Cancun\n\n    Gas\n    ----\n    3\n\n    Source: [eips.ethereum.org/EIPS/eip-4844](https://eips.ethereum.org/EIPS/eip-4844)\n    \"\"\"\n\n    BLOBBASEFEE = Opcode(0x4A, popped_stack_items=0, pushed_stack_items=1)\n    \"\"\"\n    BLOBBASEFEE() = fee\n    ----\n\n    Description\n    ----\n    Returns the value of the blob base fee of the block it is executing in\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - baseFeePerBlobGas: base fee for the blob gas in wei\n\n    Fork\n    ----\n    Cancun\n\n    Gas\n    ----\n    2\n\n    Source: [eips.ethereum.org/EIPS/eip-7516](https://eips.ethereum.org/EIPS/eip-7516)\n    \"\"\"\n\n    POP = Opcode(0x50, popped_stack_items=1)\n    \"\"\"\n    POP()\n    ----\n\n    Description\n    ----\n    Remove item from stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#50](https://www.evm.codes/#50)\n    \"\"\"\n\n    MLOAD = Opcode(0x51, popped_stack_items=1, pushed_stack_items=1, kwargs=[\"offset\"])\n    \"\"\"\n    MLOAD(offset) = value\n    ----\n\n    Description\n    ----\n    Load word from memory\n\n    Inputs\n    ----\n    - offset: offset in the memory in bytes\n\n    Outputs\n    ----\n    - value: the 32 bytes in memory starting at that offset. If it goes beyond its current size\n        (see MSIZE), writes 0s\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 3\n    - dynamic_gas = memory_expansion_cost\n\n    Source: [evm.codes/#51](https://www.evm.codes/#51)\n    \"\"\"\n\n    MSTORE = Opcode(0x52, popped_stack_items=2, kwargs=[\"offset\", \"value\"])\n    \"\"\"\n    MSTORE(offset, value)\n    ----\n\n    Description\n    ----\n    Save word to memory\n\n    Inputs\n    ----\n    - offset: offset in the memory in bytes\n    - value: 32-byte value to write in the memory\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 3\n    - dynamic_gas = memory_expansion_cost\n\n    Source: [evm.codes/#52](https://www.evm.codes/#52)\n    \"\"\"\n\n    MSTORE8 = Opcode(0x53, popped_stack_items=2, kwargs=[\"offset\", \"value\"])\n    \"\"\"\n    MSTORE8(offset, value)\n    ----\n\n    Description\n    ----\n    Save byte to memory\n\n    Inputs\n    ----\n    - offset: offset in the memory in bytes\n    - value: 1-byte value to write in the memory (the least significant byte of the 32-byte stack\n        value)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 3\n    - dynamic_gas = memory_expansion_cost\n\n    Source: [evm.codes/#53](https://www.evm.codes/#53)\n    \"\"\"\n\n    SLOAD = Opcode(0x54, popped_stack_items=1, pushed_stack_items=1, kwargs=[\"key\"])\n    \"\"\"\n    SLOAD(key) = value\n    ----\n\n    Description\n    ----\n    Load word from storage\n\n    Inputs\n    ----\n    - key: 32-byte key in storage\n\n    Outputs\n    ----\n    - value: 32-byte value corresponding to that key. 0 if that key was never written before\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 0\n    - dynamic_gas = 100 if warm_address, 2600 if cold_address\n\n    Source: [evm.codes/#54](https://www.evm.codes/#54)\n    \"\"\"\n\n    SSTORE = Opcode(0x55, popped_stack_items=2, kwargs=[\"key\", \"value\"])\n    \"\"\"\n    SSTORE(key, value)\n    ----\n\n    Description\n    ----\n    Save word to storage\n\n    Inputs\n    ----\n    - key: 32-byte key in storage\n    - value: 32-byte value to store\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    ```\n    static_gas = 0\n\n    if value == current_value\n        if key is warm\n            base_dynamic_gas = 100\n        else\n            base_dynamic_gas = 100\n    else if current_value == original_value\n        if original_value == 0\n            base_dynamic_gas = 20000\n        else\n            base_dynamic_gas = 2900\n    else\n        base_dynamic_gas = 100\n\n    if key is cold:\n        base_dynamic_gas += 2100\n    ```\n\n    Source: [evm.codes/#55](https://www.evm.codes/#55)\n    \"\"\"\n\n    JUMP = Opcode(0x56, popped_stack_items=1, kwargs=[\"pc\"])\n    \"\"\"\n    JUMP(pc)\n    ----\n\n    Description\n    ----\n    Alter the program counter\n\n    Inputs\n    ----\n    - pc: byte offset in the deployed code where execution will continue from. Must be a\n        JUMPDEST instruction\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    8\n\n    Source: [evm.codes/#56](https://www.evm.codes/#56)\n    \"\"\"\n\n    JUMPI = Opcode(0x57, popped_stack_items=2, kwargs=[\"pc\", \"condition\"])\n    \"\"\"\n    JUMPI(pc, condition)\n    ----\n\n    Description\n    ----\n    Conditionally alter the program counter\n\n    Inputs\n    ----\n    - pc: byte offset in the deployed code where execution will continue from. Must be a\n        JUMPDEST instruction\n    - condition: the program counter will be altered with the new value only if this value is\n        different from 0. Otherwise, the program counter is simply incremented and the next\n        instruction will be executed\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    10\n\n    Source: [evm.codes/#57](https://www.evm.codes/#57)\n    \"\"\"\n\n    PC = Opcode(0x58, pushed_stack_items=1)\n    \"\"\"\n    PC() = counter\n    ----\n\n    Description\n    ----\n    Get the value of the program counter prior to the increment corresponding to this instruction\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - counter: PC of this instruction in the current program.\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#58](https://www.evm.codes/#58)\n    \"\"\"\n\n    MSIZE = Opcode(0x59, pushed_stack_items=1)\n    \"\"\"\n    MSIZE() = size\n    ----\n\n    Description\n    ----\n    Get the size of active memory in bytes\n\n    Outputs\n    ----\n    - size: current memory size in bytes (higher offset accessed until now + 1)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#59](https://www.evm.codes/#59)\n    \"\"\"\n\n    GAS = Opcode(0x5A, pushed_stack_items=1)\n    \"\"\"\n    GAS() = gas_remaining\n    ----\n\n    Description\n    ----\n    Get the amount of available gas, including the corresponding reduction for the cost of this\n    instruction\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - gas: remaining gas (after this instruction)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#5A](https://www.evm.codes/#5A)\n    \"\"\"\n\n    JUMPDEST = Opcode(0x5B)\n    \"\"\"\n    JUMPDEST()\n    ----\n\n    Description\n    ----\n    Mark a valid destination for jumps\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    1\n\n    Source: [evm.codes/#5B](https://www.evm.codes/#5B)\n    \"\"\"\n\n    NOOP = Opcode(0x5B)\n    \"\"\"\n    NOOP()\n    ----\n\n    Description\n    ----\n    Synonym for JUMPDEST. Performs no operation.\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    1\n\n    Source: [evm.codes/#5B](https://www.evm.codes/#5B)\n    \"\"\"\n\n    TLOAD = Opcode(0x5C, popped_stack_items=1, pushed_stack_items=1, kwargs=[\"key\"])\n    \"\"\"\n    TLOAD(key) = value\n    ----\n\n    Description\n    ----\n    Load word from transient storage\n\n    Inputs\n    ----\n    - key: 32-byte key in transient storage\n\n    Outputs\n    ----\n    - value: 32-byte value corresponding to that key. 0 if that key was never written\n\n    Fork\n    ----\n    Cancun\n\n    Gas\n    ----\n    100\n\n    Source: [eips.ethereum.org/EIPS/eip-1153](https://eips.ethereum.org/EIPS/eip-1153)\n    \"\"\"\n\n    TSTORE = Opcode(0x5D, popped_stack_items=2, kwargs=[\"key\", \"value\"])\n    \"\"\"\n    TSTORE(key, value)\n    ----\n\n    Description\n    ----\n    Save word to transient storage\n\n    Inputs\n    ----\n    - key: 32-byte key in transient storage\n    - value: 32-byte value to store\n\n    Fork\n    ----\n    Cancun\n\n    Gas\n    ----\n    100\n\n    Source: [eips.ethereum.org/EIPS/eip-1153](https://eips.ethereum.org/EIPS/eip-1153)\n    \"\"\"\n\n    MCOPY = Opcode(0x5E, popped_stack_items=3, kwargs=[\"dest_offset\", \"offset\", \"size\"])\n    \"\"\"\n    MCOPY(dest_offset, offset, size)\n    ----\n\n    Description\n    ----\n    Copies areas in memory\n\n    Inputs\n    ----\n    - dest_offset: byte offset in the memory where the result will be copied\n    - offset: byte offset in the calldata to copy\n    - size: byte size to copy\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Cancun\n\n    Gas\n    ----\n    - minimum_word_size = (size + 31) / 32\n    - static_gas = 3\n    - dynamic_gas = 3 * minimum_word_size + memory_expansion_cost\n\n    Source: [eips.ethereum.org/EIPS/eip-5656](https://eips.ethereum.org/EIPS/eip-5656)\n    \"\"\"\n\n    PUSH0 = Opcode(0x5F, pushed_stack_items=1)\n    \"\"\"\n    PUSH0() = value\n    ----\n\n    Description\n    ----\n    Place value 0 on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, equal to 0\n\n    Fork\n    ----\n    Shanghai\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#5F](https://www.evm.codes/#5F)\n    \"\"\"\n\n    PUSH1 = Opcode(0x60, pushed_stack_items=1, data_portion_length=1)\n    \"\"\"\n    PUSH1() = value\n    ----\n\n    Description\n    ----\n    Place 1 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#60](https://www.evm.codes/#60)\n    \"\"\"\n\n    PUSH2 = Opcode(0x61, pushed_stack_items=1, data_portion_length=2)\n    \"\"\"\n    PUSH2() = value\n    ----\n\n    Description\n    ----\n    Place 2 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#61](https://www.evm.codes/#61)\n    \"\"\"\n\n    PUSH3 = Opcode(0x62, pushed_stack_items=1, data_portion_length=3)\n    \"\"\"\n    PUSH3() = value\n    ----\n\n    Description\n    ----\n    Place 3 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#62](https://www.evm.codes/#62)\n    \"\"\"\n\n    PUSH4 = Opcode(0x63, pushed_stack_items=1, data_portion_length=4)\n    \"\"\"\n    PUSH4() = value\n    ----\n\n    Description\n    ----\n    Place 4 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#63](https://www.evm.codes/#63)\n    \"\"\"\n\n    PUSH5 = Opcode(0x64, pushed_stack_items=1, data_portion_length=5)\n    \"\"\"\n    PUSH5() = value\n    ----\n\n    Description\n    ----\n    Place 5 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#64](https://www.evm.codes/#64)\n    \"\"\"\n\n    PUSH6 = Opcode(0x65, pushed_stack_items=1, data_portion_length=6)\n    \"\"\"\n    PUSH6() = value\n    ----\n\n    Description\n    ----\n    Place 6 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#65](https://www.evm.codes/#65)\n    \"\"\"\n\n    PUSH7 = Opcode(0x66, pushed_stack_items=1, data_portion_length=7)\n    \"\"\"\n    PUSH7() = value\n    ----\n\n    Description\n    ----\n    Place 7 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#66](https://www.evm.codes/#66)\n    \"\"\"\n\n    PUSH8 = Opcode(0x67, pushed_stack_items=1, data_portion_length=8)\n    \"\"\"\n    PUSH8() = value\n    ----\n\n    Description\n    ----\n    Place 8 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#67](https://www.evm.codes/#67)\n    \"\"\"\n\n    PUSH9 = Opcode(0x68, pushed_stack_items=1, data_portion_length=9)\n    \"\"\"\n    PUSH9() = value\n    ----\n\n    Description\n    ----\n    Place 9 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#68](https://www.evm.codes/#68)\n    \"\"\"\n\n    PUSH10 = Opcode(0x69, pushed_stack_items=1, data_portion_length=10)\n    \"\"\"\n    PUSH10() = value\n    ----\n\n    Description\n    ----\n    Place 10 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#69](https://www.evm.codes/#69)\n    \"\"\"\n\n    PUSH11 = Opcode(0x6A, pushed_stack_items=1, data_portion_length=11)\n    \"\"\"\n    PUSH11() = value\n    ----\n\n    Description\n    ----\n    Place 11 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#6A](https://www.evm.codes/#6A)\n    \"\"\"\n\n    PUSH12 = Opcode(0x6B, pushed_stack_items=1, data_portion_length=12)\n    \"\"\"\n    PUSH12() = value\n    ----\n\n    Description\n    ----\n    Place 12 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#6B](https://www.evm.codes/#6B)\n    \"\"\"\n\n    PUSH13 = Opcode(0x6C, pushed_stack_items=1, data_portion_length=13)\n    \"\"\"\n    PUSH13() = value\n    ----\n\n    Description\n    ----\n    Place 13 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#6C](https://www.evm.codes/#6C)\n    \"\"\"\n\n    PUSH14 = Opcode(0x6D, pushed_stack_items=1, data_portion_length=14)\n    \"\"\"\n    PUSH14() = value\n    ----\n\n    Description\n    ----\n    Place 14 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#6D](https://www.evm.codes/#6D)\n    \"\"\"\n\n    PUSH15 = Opcode(0x6E, pushed_stack_items=1, data_portion_length=15)\n    \"\"\"\n    PUSH15() = value\n    ----\n\n    Description\n    ----\n    Place 15 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#6E](https://www.evm.codes/#6E)\n    \"\"\"\n\n    PUSH16 = Opcode(0x6F, pushed_stack_items=1, data_portion_length=16)\n    \"\"\"\n    PUSH16() = value\n    ----\n\n    Description\n    ----\n    Place 16 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#6F](https://www.evm.codes/#6F)\n    \"\"\"\n\n    PUSH17 = Opcode(0x70, pushed_stack_items=1, data_portion_length=17)\n    \"\"\"\n    PUSH17() = value\n    ----\n\n    Description\n    ----\n    Place 17 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#70](https://www.evm.codes/#70)\n    \"\"\"\n\n    PUSH18 = Opcode(0x71, pushed_stack_items=1, data_portion_length=18)\n    \"\"\"\n    PUSH18() = value\n    ----\n\n    Description\n    ----\n    Place 18 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#71](https://www.evm.codes/#71)\n    \"\"\"\n\n    PUSH19 = Opcode(0x72, pushed_stack_items=1, data_portion_length=19)\n    \"\"\"\n    PUSH19() = value\n    ----\n\n    Description\n    ----\n    Place 19 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#72](https://www.evm.codes/#72)\n    \"\"\"\n\n    PUSH20 = Opcode(0x73, pushed_stack_items=1, data_portion_length=20)\n    \"\"\"\n    PUSH20() = value\n    ----\n\n    Description\n    ----\n    Place 20 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#73](https://www.evm.codes/#73)\n    \"\"\"\n\n    PUSH21 = Opcode(0x74, pushed_stack_items=1, data_portion_length=21)\n    \"\"\"\n    PUSH21() = value\n    ----\n\n    Description\n    ----\n    Place 21 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#74](https://www.evm.codes/#74)\n    \"\"\"\n\n    PUSH22 = Opcode(0x75, pushed_stack_items=1, data_portion_length=22)\n    \"\"\"\n    PUSH22() = value\n    ----\n\n    Description\n    ----\n    Place 22 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#75](https://www.evm.codes/#75)\n    \"\"\"\n\n    PUSH23 = Opcode(0x76, pushed_stack_items=1, data_portion_length=23)\n    \"\"\"\n    PUSH23() = value\n    ----\n\n    Description\n    ----\n    Place 23 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#76](https://www.evm.codes/#76)\n    \"\"\"\n\n    PUSH24 = Opcode(0x77, pushed_stack_items=1, data_portion_length=24)\n    \"\"\"\n    PUSH24() = value\n    ----\n\n    Description\n    ----\n    Place 24 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#77](https://www.evm.codes/#77)\n    \"\"\"\n\n    PUSH25 = Opcode(0x78, pushed_stack_items=1, data_portion_length=25)\n    \"\"\"\n    PUSH25() = value\n    ----\n\n    Description\n    ----\n    Place 25 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#78](https://www.evm.codes/#78)\n    \"\"\"\n\n    PUSH26 = Opcode(0x79, pushed_stack_items=1, data_portion_length=26)\n    \"\"\"\n    PUSH26() = value\n    ----\n\n    Description\n    ----\n    Place 26 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#79](https://www.evm.codes/#79)\n    \"\"\"\n\n    PUSH27 = Opcode(0x7A, pushed_stack_items=1, data_portion_length=27)\n    \"\"\"\n    PUSH27() = value\n    ----\n\n    Description\n    ----\n    Place 27 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#7A](https://www.evm.codes/#7A)\n    \"\"\"\n\n    PUSH28 = Opcode(0x7B, pushed_stack_items=1, data_portion_length=28)\n    \"\"\"\n    PUSH28() = value\n    ----\n\n    Description\n    ----\n    Place 28 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#7B](https://www.evm.codes/#7B)\n    \"\"\"\n\n    PUSH29 = Opcode(0x7C, pushed_stack_items=1, data_portion_length=29)\n    \"\"\"\n    PUSH29() = value\n    ----\n\n    Description\n    ----\n    Place 29 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#7C](https://www.evm.codes/#7C)\n    \"\"\"\n\n    PUSH30 = Opcode(0x7D, pushed_stack_items=1, data_portion_length=30)\n    \"\"\"\n    PUSH30() = value\n    ----\n\n    Description\n    ----\n    Place 30 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#7D](https://www.evm.codes/#7D)\n    \"\"\"\n\n    PUSH31 = Opcode(0x7E, pushed_stack_items=1, data_portion_length=31)\n    \"\"\"\n    PUSH31() = value\n    ----\n\n    Description\n    ----\n    Place 31 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#7E](https://www.evm.codes/#7E)\n    \"\"\"\n\n    PUSH32 = Opcode(0x7F, pushed_stack_items=1, data_portion_length=32)\n    \"\"\"\n    PUSH32() = value\n    ----\n\n    Description\n    ----\n    Place 32 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#7F](https://www.evm.codes/#7F)\n    \"\"\"\n\n    DUP1 = Opcode(0x80, pushed_stack_items=1, min_stack_height=1)\n    \"\"\"\n    DUP1(value) = value, value\n    ----\n\n    Description\n    ----\n    Duplicate 1st stack item\n\n    Inputs\n    ----\n    - value: value to duplicate\n\n    Outputs\n    ----\n    - value: duplicated value\n    - value: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#80](https://www.evm.codes/#80)\n    \"\"\"\n\n    DUP2 = Opcode(0x81, pushed_stack_items=1, min_stack_height=2)\n    \"\"\"\n    DUP2(v1, v2) = v2, v1, v2\n    ----\n\n    Description\n    ----\n    Duplicate 2nd stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: value to duplicate\n\n    Outputs\n    ----\n    - v2: duplicated value\n    - v1: ignored value\n    - v2: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#81](https://www.evm.codes/#81)\n    \"\"\"\n\n    DUP3 = Opcode(0x82, pushed_stack_items=1, min_stack_height=3)\n    \"\"\"\n    DUP3(v1, v2, v3) = v3, v1, v2, v3\n    ----\n\n    Description\n    ----\n    Duplicate 3rd stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - v3: value to duplicate\n\n    Outputs\n    ----\n    - v3: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - v3: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#82](https://www.evm.codes/#82)\n    \"\"\"\n\n    DUP4 = Opcode(0x83, pushed_stack_items=1, min_stack_height=4)\n    \"\"\"\n    DUP4(v1, v2, v3, v4) = v4, v1, v2, v3, v4\n    ----\n\n    Description\n    ----\n    Duplicate 4th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - v3: ignored value\n    - v4: value to duplicate\n\n    Outputs\n    ----\n    - v4: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - v3: ignored value\n    - v4: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#83](https://www.evm.codes/#83)\n    \"\"\"\n\n    DUP5 = Opcode(0x84, pushed_stack_items=1, min_stack_height=5)\n    \"\"\"\n    DUP5(v1, v2, v3, v4, v5) = v5, v1, v2, v3, v4, v5\n    ----\n\n    Description\n    ----\n    Duplicate 5th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - v3: ignored value\n    - v4: ignored value\n    - v5: value to duplicate\n\n    Outputs\n    ----\n    - v5: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - v3: ignored value\n    - v4: ignored value\n    - v5: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#84](https://www.evm.codes/#84)\n    \"\"\"\n\n    DUP6 = Opcode(0x85, pushed_stack_items=1, min_stack_height=6)\n    \"\"\"\n    DUP6(v1, v2, ..., v5, v6) = v6, v1, v2, ..., v5, v6\n    ----\n\n    Description\n    ----\n    Duplicate 6th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v5: ignored value\n    - v6: value to duplicate\n\n    Outputs\n    ----\n    - v6: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v5: ignored value\n    - v6: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#85](https://www.evm.codes/#85)\n    \"\"\"\n\n    DUP7 = Opcode(0x86, pushed_stack_items=1, min_stack_height=7)\n    \"\"\"\n    DUP7(v1, v2, ..., v6, v7) = v7, v1, v2, ..., v6, v7\n    ----\n\n    Description\n    ----\n    Duplicate 7th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v6: ignored value\n    - v7: value to duplicate\n\n    Outputs\n    ----\n    - v7: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v6: ignored value\n    - v7: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#86](https://www.evm.codes/#86)\n    \"\"\"\n\n    DUP8 = Opcode(0x87, pushed_stack_items=1, min_stack_height=8)\n    \"\"\"\n    DUP8(v1, v2, ..., v7, v8) = v8, v1, v2, ..., v7, v8\n    ----\n\n    Description\n    ----\n    Duplicate 8th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v7: ignored value\n    - v8: value to duplicate\n\n    Outputs\n    ----\n    - v8: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v7: ignored value\n    - v8: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#87](https://www.evm.codes/#87)\n    \"\"\"\n\n    DUP9 = Opcode(0x88, pushed_stack_items=1, min_stack_height=9)\n    \"\"\"\n    DUP9(v1, v2, ..., v8, v9) = v9, v1, v2, ..., v8, v9\n    ----\n\n    Description\n    ----\n    Duplicate 9th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v8: ignored value\n    - v9: value to duplicate\n\n    Outputs\n    ----\n    - v9: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v8: ignored value\n    - v9: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#88](https://www.evm.codes/#88)\n    \"\"\"\n    DUP10 = Opcode(0x89, pushed_stack_items=1, min_stack_height=10)\n    \"\"\"\n    DUP10(v1, v2, ..., v9, v10) = v10, v1, v2, ..., v9, v10\n    ----\n\n    Description\n    ----\n    Duplicate 10th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v9: ignored value\n    - v10: value to duplicate\n\n    Outputs\n    ----\n    - v10: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v9: ignored value\n    - v10: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#89](https://www.evm.codes/#89)\n    \"\"\"\n\n    DUP11 = Opcode(0x8A, pushed_stack_items=1, min_stack_height=11)\n    \"\"\"\n    DUP11(v1, v2, ..., v10, v11) = v11, v1, v2, ..., v10, v11\n    ----\n\n    Description\n    ----\n    Duplicate 11th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v10: ignored value\n    - v11: value to duplicate\n\n    Outputs\n    ----\n    - v11: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v10: ignored value\n    - v11: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#8A](https://www.evm.codes/#8A)\n    \"\"\"\n\n    DUP12 = Opcode(0x8B, pushed_stack_items=1, min_stack_height=12)\n    \"\"\"\n    DUP12(v1, v2, ..., v11, v12) = v12, v1, v2, ..., v11, v12\n    ----\n\n    Description\n    ----\n    Duplicate 12th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v11: ignored value\n    - v12: value to duplicate\n\n    Outputs\n    ----\n    - v12: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v11: ignored value\n    - v12: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#8B](https://www.evm.codes/#8B)\n    \"\"\"\n\n    DUP13 = Opcode(0x8C, pushed_stack_items=1, min_stack_height=13)\n    \"\"\"\n    DUP13(v1, v2, ..., v12, v13) = v13, v1, v2, ..., v12, v13\n    ----\n\n    Description\n    ----\n    Duplicate 13th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v12: ignored value\n    - v13: value to duplicate\n\n    Outputs\n    ----\n    - v13: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v12: ignored value\n    - v13: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#8C](https://www.evm.codes/#8C)\n    \"\"\"\n\n    DUP14 = Opcode(0x8D, pushed_stack_items=1, min_stack_height=14)\n    \"\"\"\n    DUP14(v1, v2, ..., v13, v14) = v14, v1, v2, ..., v13, v14\n    ----\n\n    Description\n    ----\n    Duplicate 14th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v13: ignored value\n    - v14: value to duplicate\n\n    Outputs\n    ----\n    - v14: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v13: ignored value\n    - v14: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#8D](https://www.evm.codes/#8D)\n    \"\"\"\n\n    DUP15 = Opcode(0x8E, pushed_stack_items=1, min_stack_height=15)\n    \"\"\"\n    DUP15(v1, v2, ..., v14, v15) = v15, v1, v2, ..., v14, v15\n    ----\n\n    Description\n    ----\n    Duplicate 15th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v14: ignored value\n    - v15: value to duplicate\n\n    Outputs\n    ----\n    - v15: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v14: ignored value\n    - v15: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#8E](https://www.evm.codes/#8E)\n    \"\"\"\n\n    DUP16 = Opcode(0x8F, pushed_stack_items=1, min_stack_height=16)\n    \"\"\"\n    DUP16(v1, v2, ..., v15, v16) = v16, v1, v2, ..., v15, v16\n    ----\n\n    Description\n    ----\n    Duplicate 16th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v15: ignored value\n    - v16: value to duplicate\n\n    Outputs\n    ----\n    - v16: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v15: ignored value\n    - v16: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#8F](https://www.evm.codes/#8F)\n    \"\"\"\n\n    SWAP1 = Opcode(0x90, min_stack_height=2)\n    \"\"\"\n    SWAP1(v1, v2) = v2, v1\n    ----\n\n    Description\n    ----\n    Exchange the top stack item with the second stack item.\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: value to swap\n\n    Outputs\n    ----\n    - v1: swapped value\n    - v2: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#90](https://www.evm.codes/#90)\n    \"\"\"\n\n    SWAP2 = Opcode(0x91, min_stack_height=3)\n    \"\"\"\n    SWAP2(v1, v2, v3) = v3, v2, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 3rd stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - v3: value to swap\n\n    Outputs\n    ----\n    - v3: swapped value\n    - v2: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#91](https://www.evm.codes/#91)\n    \"\"\"\n\n    SWAP3 = Opcode(0x92, min_stack_height=4)\n    \"\"\"\n    SWAP3(v1, v2, v3, v4) = v4, v2, v3, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 4th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - v3: ignored value\n    - v4: value to swap\n\n    Outputs\n    ----\n    - v4: swapped value\n    - v2: ignored value\n    - v3: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#92](https://www.evm.codes/#92)\n    \"\"\"\n\n    SWAP4 = Opcode(0x93, min_stack_height=5)\n    \"\"\"\n    SWAP4(v1, v2, ..., v4, v5) = v5, v2, ..., v4, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 5th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v4: ignored value\n    - v5: value to swap\n\n    Outputs\n    ----\n    - v5: swapped value\n    - v2: ignored value\n    - ...\n    - v4: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#93](https://www.evm.codes/#93)\n    \"\"\"\n\n    SWAP5 = Opcode(0x94, min_stack_height=6)\n    \"\"\"\n    SWAP5(v1, v2, ..., v5, v6) = v6, v2, ..., v5, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 6th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v5: ignored value\n    - v6: value to swap\n\n    Outputs\n    ----\n    - v6: swapped value\n    - v2: ignored value\n    - ...\n    - v5: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#94](https://www.evm.codes/#94)\n    \"\"\"\n\n    SWAP6 = Opcode(0x95, min_stack_height=7)\n    \"\"\"\n    SWAP6(v1, v2, ..., v6, v7) = v7, v2, ..., v6, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 7th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v6: ignored value\n    - v7: value to swap\n\n    Outputs\n    ----\n    - v7: swapped value\n    - v2: ignored value\n    - ...\n    - v6: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#95](https://www.evm.codes/#95)\n    \"\"\"\n\n    SWAP7 = Opcode(0x96, min_stack_height=8)\n    \"\"\"\n    SWAP7(v1, v2, ..., v7, v8) = v8, v2, ..., v7, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 8th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v7: ignored value\n    - v8: value to swap\n\n    Outputs\n    ----\n    - v8: swapped value\n    - v2: ignored value\n    - ...\n    - v7: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#96](https://www.evm.codes/#96)\n    \"\"\"\n\n    SWAP8 = Opcode(0x97, min_stack_height=9)\n    \"\"\"\n    SWAP8(v1, v2, ..., v8, v9) = v9, v2, ..., v8, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 9th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v8: ignored value\n    - v9: value to swap\n\n    Outputs\n    ----\n    - v9: swapped value\n    - v2: ignored value\n    - ...\n    - v8: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#97](https://www.evm.codes/#97)\n    \"\"\"\n\n    SWAP9 = Opcode(0x98, min_stack_height=10)\n    \"\"\"\n    SWAP9(v1, v2, ..., v9, v10) = v10, v2, ..., v9, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 10th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v9: ignored value\n    - v10: value to swap\n\n    Outputs\n    ----\n    - v10: swapped value\n    - v2: ignored value\n    - ...\n    - v9: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#98](https://www.evm.codes/#98)\n    \"\"\"\n\n    SWAP10 = Opcode(0x99, min_stack_height=11)\n    \"\"\"\n    SWAP10(v1, v2, ..., v10, v11) = v11, v2, ..., v10, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 11th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v10: ignored value\n    - v11: value to swap\n\n    Outputs\n    ----\n    - v11: swapped value\n    - v2: ignored value\n    - ...\n    - v10: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#99](https://www.evm.codes/#99)\n    \"\"\"\n\n    SWAP11 = Opcode(0x9A, min_stack_height=12)\n    \"\"\"\n    SWAP11(v1, v2, ..., v11, v12) = v12, v2, ..., v11, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 12th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v11: ignored value\n    - v12: value to swap\n\n    Outputs\n    ----\n    - v12: swapped value\n    - v2: ignored value\n    - ...\n    - v11: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#9A](https://www.evm.codes/#9A)\n    \"\"\"\n\n    SWAP12 = Opcode(0x9B, min_stack_height=13)\n    \"\"\"\n    SWAP12(v1, v2, ..., v12, v13) = v13, v2, ..., v12, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 13th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v12: ignored value\n    - v13: value to swap\n\n    Outputs\n    ----\n    - v13: swapped value\n    - v2: ignored value\n    - ...\n    - v12: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#9B](https://www.evm.codes/#9B)\n    \"\"\"\n\n    SWAP13 = Opcode(0x9C, min_stack_height=14)\n    \"\"\"\n    SWAP13(v1, v2, ..., v13, v14) = v14, v2, ..., v13, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 14th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v13: ignored value\n    - v14: value to swap\n\n    Outputs\n    ----\n    - v14: swapped value\n    - v2: ignored value\n    - ...\n    - v13: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#9C](https://www.evm.codes/#9C)\n    \"\"\"\n\n    SWAP14 = Opcode(0x9D, min_stack_height=15)\n    \"\"\"\n    SWAP14(v1, v2, ..., v14, v15) = v15, v2, ..., v14, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 15th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v14: ignored value\n    - v15: value to swap\n\n    Outputs\n    ----\n    - v15: swapped value\n    - v2: ignored value\n    - ...\n    - v14: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#9D](https://www.evm.codes/#9D)\n    \"\"\"\n\n    SWAP15 = Opcode(0x9E, min_stack_height=16)\n    \"\"\"\n    SWAP15(v1, v2, ..., v15, v16) = v16, v2, ..., v15, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 16th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v15: ignored value\n    - v16: value to swap\n\n    Outputs\n    ----\n    - v16: swapped value\n    - v2: ignored value\n    - ...\n    - v15: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#9E](https://www.evm.codes/#9E)\n    \"\"\"\n\n    SWAP16 = Opcode(0x9F, min_stack_height=17)\n    \"\"\"\n    SWAP16(v1, v2, ..., v16, v17) = v17, v2, ..., v16, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 17th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v16: ignored value\n    - v17: value to swap\n\n    Outputs\n    ----\n    - v17: swapped value\n    - v2: ignored value\n    - ...\n    - v16: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#9F](https://www.evm.codes/#9F)\n    \"\"\"\n\n    LOG0 = Opcode(0xA0, popped_stack_items=2, kwargs=[\"offset\", \"size\"])\n    \"\"\"\n    LOG0(offset, size)\n    ----\n\n    Description\n    ----\n    Append log record with no topics\n\n    Inputs\n    ----\n    - offset: byte offset in the memory in bytes\n    - size: byte size to copy\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 375\n    - dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost\n\n    Source: [evm.codes/#A0](https://www.evm.codes/#A0)\n    \"\"\"\n\n    LOG1 = Opcode(0xA1, popped_stack_items=3, kwargs=[\"offset\", \"size\", \"topic_1\"])\n    \"\"\"\n    LOG1(offset, size, topic_1)\n    ----\n\n    Description\n    ----\n    Append log record with one topic\n\n    Inputs\n    ----\n    - offset: byte offset in the memory in bytes\n    - size: byte size to copy\n    - topic_1: 32-byte value\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 375\n    - dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost\n\n    Source: [evm.codes/#A1](https://www.evm.codes/#A1)\n    \"\"\"\n\n    LOG2 = Opcode(0xA2, popped_stack_items=4, kwargs=[\"offset\", \"size\", \"topic_1\", \"topic_2\"])\n    \"\"\"\n    LOG2(offset, size, topic_1, topic_2)\n    ----\n\n    Description\n    ----\n    Append log record with two topics\n\n    Inputs\n    ----\n    - offset: byte offset in the memory in bytes\n    - size: byte size to copy\n    - topic_1: 32-byte value\n    - topic_2: 32-byte value\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 375\n    - dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost\n\n    Source: [evm.codes/#A2](https://www.evm.codes/#A2)\n    \"\"\"\n\n    LOG3 = Opcode(\n        0xA3, popped_stack_items=5, kwargs=[\"offset\", \"size\", \"topic_1\", \"topic_2\", \"topic_3\"]\n    )\n    \"\"\"\n    LOG3(offset, size, topic_1, topic_2, topic_3)\n    ----\n\n    Description\n    ----\n    Append log record with three topics\n\n    Inputs\n    ----\n    - offset: byte offset in the memory in bytes\n    - size: byte size to copy\n    - topic_1: 32-byte value\n    - topic_2: 32-byte value\n    - topic_3: 32-byte value\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 375\n    - dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost\n\n    Source: [evm.codes/#A3](https://www.evm.codes/#A3)\n    \"\"\"\n\n    LOG4 = Opcode(\n        0xA4,\n        popped_stack_items=6,\n        kwargs=[\"offset\", \"size\", \"topic_1\", \"topic_2\", \"topic_3\", \"topic_4\"],\n    )\n    \"\"\"\n    LOG4(offset, size, topic_1, topic_2, topic_3, topic_4)\n    ----\n\n    Description\n    ----\n    Append log record with four topics\n\n    Inputs\n    ----\n    - offset: byte offset in the memory in bytes\n    - size: byte size to copy\n    - topic_1: 32-byte value\n    - topic_2: 32-byte value\n    - topic_3: 32-byte value\n    - topic_4: 32-byte value\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 375\n    - dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost\n\n    Source: [evm.codes/#A4](https://www.evm.codes/#A4)\n    \"\"\"\n\n    RJUMP = Opcode(0xE0, data_portion_length=2)\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    RJUMP()\n    ----\n\n    Description\n    ----\n\n    Inputs\n    ----\n\n    Outputs\n    ----\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n\n    Source: [eips.ethereum.org/EIPS/eip-4200](https://eips.ethereum.org/EIPS/eip-4200)\n    \"\"\"\n\n    DATALOAD = Opcode(0xD0, popped_stack_items=1, kwargs=[\"offset\"])\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    DATALOAD(offset)\n    ----\n\n    Description\n    ----\n    Reads 32 bytes of data at offset onto the stack\n\n    Inputs\n    ----\n    - offset: offset within the data section to start copying\n\n    Outputs\n    ----\n    none\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n    4\n\n    Source: [eips.ethereum.org/EIPS/eip-7480](https://eips.ethereum.org/EIPS/eip-7480)\n    \"\"\"\n\n    DATALOADN = Opcode(0xD1, pushed_stack_items=1, data_portion_length=2)\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    DATALOADN()\n    ----\n\n    Description\n    ----\n    Reads 32 bytes of data at offset onto the stack\n\n    Immediates\n    ----\n    2 bytes forming a UInt16, which is the offset into the data section.\n\n    Inputs\n    ----\n    none\n\n    Outputs\n    ----\n    none\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n    3\n\n    Source: [eips.ethereum.org/EIPS/eip-7480](https://eips.ethereum.org/EIPS/eip-7480)\n    \"\"\"\n\n    DATASIZE = Opcode(0xD2, pushed_stack_items=1)\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    DATASIZE()\n    ----\n\n    Description\n    ----\n    Returns the size of the data section\n\n    Inputs\n    ----\n\n    Outputs\n    ----\n    The size of the data section. If there is no data section, returns 0.\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n    2\n\n    Source: [eips.ethereum.org/EIPS/eip-7480](https://eips.ethereum.org/EIPS/eip-7480)\n    \"\"\"\n\n    DATACOPY = Opcode(0xD3, popped_stack_items=3, kwargs=[\"dest_offset\", \"offset\", \"size\"])\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    DATACOPY(dest_offset, offset, size)\n    ----\n\n    Description\n    ----\n    Copies data from the data section into call frame memory\n\n    Inputs\n    ----\n    - dest_offset: The offset within the memory section to start copying to\n    - offset: The offset within the data section to start copying from\n    - size: The number of bytes to copy\n\n    Outputs\n    ----\n    none\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n    - minimum_word_size = (size + 31) / 32\n    - static_gas = 3\n    - dynamic_gas = 3 * minimum_word_size + memory_expansion_cost\n\n    Source: [eips.ethereum.org/EIPS/eip-7480](https://eips.ethereum.org/EIPS/eip-7480)\n    \"\"\"\n\n    RJUMPI = Opcode(0xE1, popped_stack_items=1, data_portion_length=2)\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    RJUMPI()\n    ----\n\n    Description\n    ----\n\n    Inputs\n    ----\n\n    Outputs\n    ----\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n\n    Source: [eips.ethereum.org/EIPS/eip-4200](https://eips.ethereum.org/EIPS/eip-4200)\n    \"\"\"\n\n    RJUMPV = Opcode(\n        0xE2,\n        popped_stack_items=1,\n        data_portion_formatter=_rjumpv_encoder,\n    )\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    RJUMPV()\n    ----\n\n    Description\n    ----\n    Relative jump with variable offset.\n\n    When calling this opcode to generate bytecode, the first argument is used to format the data\n    portion of the opcode, and it can be either of two types:\n    - A bytes type, and in this instance the bytes are used verbatim as the data portion.\n    - An integer iterable, list or tuple or any other iterable, where each element is a\n        jump offset.\n\n    Inputs\n    ----\n\n    Outputs\n    ----\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n\n    Source: [eips.ethereum.org/EIPS/eip-4200](https://eips.ethereum.org/EIPS/eip-4200)\n    \"\"\"\n\n    CALLF = Opcode(0xE3, data_portion_length=2, unchecked_stack=True)\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    CALLF()\n    ----\n\n    Description\n    ----\n\n    - deduct 5 gas\n    - read uint16 operand idx\n    - if 1024 < len(stack) + types[idx].max_stack_height - types[idx].inputs, execution results in\n        an exceptional halt\n    - if 1024 <= len(return_stack), execution results in an exceptional halt\n    - push new element to return_stack (current_code_idx, pc+3)\n    - update current_code_idx to idx and set pc to 0\n\n    Inputs\n    ----\n    Any: The inputs are not checked because we cannot know how many inputs the callee\n    function/section requires\n\n    Outputs\n    ----\n    Any: The outputs are variable because we cannot know how many outputs the callee\n    function/section produces\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n    5\n\n    Source:\n    [ipsilon/eof/blob/main/spec/eof.md](https://github.com/ipsilon/eof/blob/main/spec/eof.md)\n    \"\"\"\n\n    RETF = Opcode(0xE4, terminating=True)\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    RETF()\n    ----\n\n    Description\n    ----\n\n    Inputs\n    ----\n\n    Outputs\n    ----\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n    3\n    \"\"\"\n\n    JUMPF = Opcode(0xE5, data_portion_length=2, terminating=True)\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    JUMPF()\n    ----\n\n    Description\n    ----\n\n    - deduct 5 gas\n    - read uint16 operand idx\n    - if 1024 < len(stack) + types[idx].max_stack_height - types[idx].inputs, execution results in\n        an exceptional halt\n    - set current_code_idx to idx\n    - set pc = 0\n\n\n    Inputs\n    ----\n\n    Outputs\n    ----\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n    5\n\n    \"\"\"\n\n    DUPN = Opcode(\n        0xE6,\n        pushed_stack_items=1,\n        data_portion_length=1,\n        stack_properties_modifier=_dupn_stack_properties_modifier,\n    )\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    DUPN()\n    ----\n\n    Description\n    ----\n\n    - deduct 3 gas\n    - read uint8 operand imm\n    - n = imm + 1\n    - n\u2018th (1-based) stack item is duplicated at the top of the stack\n    - Stack validation: stack_height >= n\n\n\n    Inputs\n    ----\n\n    Outputs\n    ----\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n\n    \"\"\"\n\n    SWAPN = Opcode(\n        0xE7, data_portion_length=1, stack_properties_modifier=_swapn_stack_properties_modifier\n    )\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    SWAPN()\n    ----\n\n    Description\n    ----\n\n    - deduct 3 gas\n    - read uint8 operand imm\n    - n = imm + 1\n    - n + 1th stack item is swapped with the top stack item (1-based).\n    - Stack validation: stack_height >= n + 1\n\n\n    Inputs\n    ----\n\n    Outputs\n    ----\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n\n    \"\"\"\n\n    EXCHANGE = Opcode(\n        0xE8,\n        data_portion_formatter=_exchange_encoder,\n        stack_properties_modifier=_exchange_stack_properties_modifier,\n    )\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    EXCHANGE[x, y]\n    ----\n\n    Description\n    ----\n    Exchanges two stack positions.  Two nybbles, n is high 4 bits + 1, then  m is 4 low bits + 1.\n    Exchanges tne n+1'th item with the n + m + 1 item.\n\n    Inputs x and y when the opcode is used as `EXCHANGE[x, y]`, are equal to:\n    - x = n + 1\n    - y = n + m + 1\n    Which each equals to 1-based stack positions swapped.\n\n    Inputs\n    ----\n    n + m + 1, or ((imm >> 4) + (imm &0x0F) + 3) from the raw immediate,\n\n    Outputs\n    ----\n    n + m + 1, or ((imm >> 4) + (imm &0x0F) + 3) from the raw immediate,\n\n    Fork\n    ----\n    EOF_FORK\n\n    Gas\n    ----\n    3\n\n    \"\"\"\n\n    EOFCREATE = Opcode(\n        0xEC,\n        popped_stack_items=4,\n        pushed_stack_items=1,\n        data_portion_length=1,\n        kwargs=[\"value\", \"salt\", \"input_offset\", \"input_size\"],\n    )\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    EOFCREATE[initcontainer_index](value, salt, input_offset, input_size)\n    ----\n\n    Description\n    ----\n\n    Inputs\n    ----\n\n    Outputs\n    ----\n\n    Fork\n    ----\n\n    Gas\n    ----\n\n    \"\"\"\n\n    RETURNCONTRACT = Opcode(0xEE, popped_stack_items=2, data_portion_length=1, terminating=True)\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    RETURNCONTRACT()\n    ----\n\n    Description\n    ----\n\n    Inputs\n    ----\n\n    Outputs\n    ----\n\n    Fork\n    ----\n\n    Gas\n    ----\n\n    \"\"\"\n\n    CREATE = Opcode(\n        0xF0, popped_stack_items=3, pushed_stack_items=1, kwargs=[\"value\", \"offset\", \"size\"]\n    )\n    \"\"\"\n    CREATE(value, offset, size) = address\n    ----\n\n    Description\n    ----\n    Create a new contract with the given code\n\n    Inputs\n    ----\n    - value: value in wei to send to the new account\n    - offset: byte offset in the memory in bytes, the initialization code for the new account\n    - size: byte size to copy (size of the initialization code)\n\n    Outputs\n    ----\n    - address: the address of the deployed contract, 0 if the deployment failed\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    ```\n    minimum_word_size = (size + 31) / 32\n    init_code_cost = 2 * minimum_word_size\n    code_deposit_cost = 200 * deployed_code_size\n\n    static_gas = 32000\n    dynamic_gas = init_code_cost + memory_expansion_cost + deployment_code_execution_cost\n        + code_deposit_cost\n    ```\n\n    Source: [evm.codes/#F0](https://www.evm.codes/#F0)\n    \"\"\"\n\n    CALL = Opcode(\n        0xF1,\n        popped_stack_items=7,\n        pushed_stack_items=1,\n        kwargs=[\"gas\", \"address\", \"value\", \"args_offset\", \"args_size\", \"ret_offset\", \"ret_size\"],\n        kwargs_defaults={\"gas\": GAS},\n    )\n    \"\"\"\n    CALL(gas, address, value, args_offset, args_size, ret_offset, ret_size) = success\n    ----\n\n    Description\n    ----\n    Message-call into an account\n\n    Inputs\n    ----\n    - gas: amount of gas to send to the sub context to execute. The gas that is not used by the sub\n        context is returned to this one\n    - address: the account which context to execute\n    - value: value in wei to send to the account\n    - args_offset: byte offset in the memory in bytes, the calldata of the sub context\n    - args_size: byte size to copy (size of the calldata)\n    - ret_offset: byte offset in the memory in bytes, where to store the return data of the sub\n        context\n    - ret_size: byte size to copy (size of the return data)\n\n    Outputs\n    ----\n    - success: return 0 if the sub context reverted, 1 otherwise\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    ```\n    static_gas = 0\n    dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost\n        + positive_value_cost + value_to_empty_account_cost\n    ```\n\n    Source: [evm.codes/#F1](https://www.evm.codes/#F1)\n    \"\"\"\n\n    CALLCODE = Opcode(\n        0xF2,\n        popped_stack_items=7,\n        pushed_stack_items=1,\n        kwargs=[\"gas\", \"address\", \"value\", \"args_offset\", \"args_size\", \"ret_offset\", \"ret_size\"],\n        kwargs_defaults={\"gas\": GAS},\n    )\n    \"\"\"\n    CALLCODE(gas, address, value, args_offset, args_size, ret_offset, ret_size) = success\n    ----\n\n    Description\n    ----\n    Message-call into this account with an alternative account's code. Executes code starting at\n    the address to which the call is made.\n\n    Inputs\n    ----\n    - gas: amount of gas to send to the sub context to execute. The gas that is not used by the sub\n        context is returned to this one\n    - address: the account which code to execute\n    - value: value in wei to send to the account\n    - args_offset: byte offset in the memory in bytes, the calldata of the sub context\n    - args_size: byte size to copy (size of the calldata)\n    - ret_offset: byte offset in the memory in bytes, where to store the return data of the sub\n        context\n    - ret_size: byte size to copy (size of the return data)\n\n    Outputs\n    ----\n    - success: return 0 if the sub context reverted, 1 otherwise\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    ```\n    static_gas = 0\n    dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost\n        + positive_value_cost\n    ```\n\n    Source: [evm.codes/#F2](https://www.evm.codes/#F2)\n    \"\"\"\n\n    RETURN = Opcode(0xF3, popped_stack_items=2, kwargs=[\"offset\", \"size\"], terminating=True)\n    \"\"\"\n    RETURN(offset, size)\n    ----\n\n    Description\n    ----\n    Halt execution returning output data\n\n    Inputs\n    ----\n    - offset: byte offset in the memory in bytes, to copy what will be the return data of this\n        context\n    - size: byte size to copy (size of the return data)\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 0\n    - dynamic_gas = memory_expansion_cost\n\n    Source: [evm.codes/#F3](https://www.evm.codes/#F3)\n    \"\"\"\n\n    DELEGATECALL = Opcode(\n        0xF4,\n        popped_stack_items=6,\n        pushed_stack_items=1,\n        kwargs=[\"gas\", \"address\", \"args_offset\", \"args_size\", \"ret_offset\", \"ret_size\"],\n        kwargs_defaults={\"gas\": GAS},\n    )\n    \"\"\"\n    DELEGATECALL(gas, address, args_offset, args_size, ret_offset, ret_size) = success\n    ----\n\n    Description\n    ----\n    Message-call into this account with an alternative account's code, but persisting the current\n    values for sender and value\n\n    Inputs\n    ----\n    - gas: amount of gas to send to the sub context to execute. The gas that is not used by the sub\n        context is returned to this one\n    - address: the account which code to execute\n    - args_offset: byte offset in the memory in bytes, the calldata of the sub context\n    - args_size: byte size to copy (size of the calldata)\n    - ret_offset: byte offset in the memory in bytes, where to store the return data of the sub\n        context\n    - ret_size: byte size to copy (size of the return data)\n\n    Outputs\n    ----\n    - success: return 0 if the sub context reverted, 1 otherwise\n\n    Fork\n    ----\n    Byzantium\n\n    Gas\n    ----\n    - static_gas = 0\n    - dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost\n\n    Source: [evm.codes/#F4](https://www.evm.codes/#F4)\n    \"\"\"\n\n    CREATE2 = Opcode(\n        0xF5,\n        popped_stack_items=4,\n        pushed_stack_items=1,\n        kwargs=[\"value\", \"offset\", \"size\", \"salt\"],\n    )\n    \"\"\"\n    CREATE2(value, offset, size, salt) = address\n    ----\n\n    Description\n    ----\n    Creates a new contract\n\n    Inputs\n    ----\n    - value: value in wei to send to the new account\n    - offset: byte offset in the memory in bytes, the initialization code of the new account\n    - size: byte size to copy (size of the initialization code)\n    - salt: 32-byte value used to create the new account at a deterministic address\n\n    Outputs\n    ----\n    - address: the address of the deployed contract, 0 if the deployment failed\n\n    Fork\n    ----\n    Constantinople\n\n    Gas\n    ----\n    ```\n    minimum_word_size = (size + 31) / 32\n    init_code_cost = 2 * minimum_word_size\n    hash_cost = 6 * minimum_word_size\n    code_deposit_cost = 200 * deployed_code_size\n\n    static_gas = 32000\n    dynamic_gas = init_code_cost + hash_cost + memory_expansion_cost\n        + deployment_code_execution_cost + code_deposit_cost\n    ```\n\n    Source: [evm.codes/#F5](https://www.evm.codes/#F5)\n    \"\"\"\n\n    EXTCALL = Opcode(\n        0xF8,\n        popped_stack_items=4,\n        pushed_stack_items=1,\n        kwargs=[\"address\", \"args_offset\", \"args_size\", \"value\"],\n    )\n    \"\"\"\n    EXTCALL(address, args_offset, args_size, value) = address\n    ----\n\n    Description\n    ----\n    Message-call into an account\n\n    Inputs\n    ----\n    - address: the account which context to execute\n    - args_offset: byte offset in the memory in bytes, the calldata of the sub context\n    - args_size: byte size to copy (size of the calldata)\n    - value: value in wei to send to the account\n\n    Outputs\n    ----\n    - success:\n        - `0` if the call was successful.\n        - `1` if the call has reverted (also can be pushed earlier in a light failure scenario).\n        - `2` if the call has failed.\n\n    Fork\n    ----\n    Prague\n\n    Gas\n    ----\n    ```\n    static_gas = 0\n    dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost\n        + positive_value_cost + value_to_empty_account_cost\n    ```\n\n    Source: [EIP-7069](https://eips.ethereum.org/EIPS/eip-7069)\n    \"\"\"\n\n    EXTDELEGATECALL = Opcode(\n        0xF9,\n        popped_stack_items=3,\n        pushed_stack_items=1,\n        kwargs=[\"address\", \"args_offset\", \"args_size\"],\n    )\n    \"\"\"\n    EXTDELEGATECALL(address, args_offset, args_size) = address\n    ----\n\n    Description\n    ----\n    Message-call into this account with an alternative account's code, but persisting the current\n    values for sender and value\n\n    Inputs\n    ----\n    - address: the account which context to execute\n    - args_offset: byte offset in the memory in bytes, the calldata of the sub context\n    - args_size: byte size to copy (size of the calldata)\n\n    Outputs\n    ----\n    - success:\n        - `0` if the call was successful.\n        - `1` if the call has reverted (also can be pushed earlier in a light failure scenario).\n        - `2` if the call has failed.\n\n    Fork\n    ----\n    Prague\n\n    Gas\n    ----\n    - static_gas = 0\n    - dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost\n\n    Source: [EIP-7069](https://eips.ethereum.org/EIPS/eip-7069)\n    \"\"\"\n\n    STATICCALL = Opcode(\n        0xFA,\n        popped_stack_items=6,\n        pushed_stack_items=1,\n        kwargs=[\"gas\", \"address\", \"args_offset\", \"args_size\", \"ret_offset\", \"ret_size\"],\n        kwargs_defaults={\"gas\": GAS},\n    )\n    \"\"\"\n    STATICCALL(gas, address, args_offset, args_size, ret_offset, ret_size) = success\n    ----\n\n    Description\n    ----\n    Static message-call into an account\n\n    Inputs\n    ----\n    - gas: amount of gas to send to the sub context to execute. The gas that is not used by the sub\n        context is returned to this one\n    - address: the account which context to execute\n    - args_offset: byte offset in the memory in bytes, the calldata of the sub context\n    - args_size: byte size to copy (size of the calldata)\n    - ret_offset: byte offset in the memory in bytes, where to store the return data of the sub\n        context\n    - ret_size: byte size to copy (size of the return data)\n\n    Outputs\n    ----\n    - success: return 0 if the sub context reverted, 1 otherwise\n\n    Fork\n    ----\n    Byzantium\n\n    Gas\n    ----\n    - static_gas = 0\n    - dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost\n\n    Source: [evm.codes/#FA](https://www.evm.codes/#FA)\n    \"\"\"\n\n    EXTSTATICCALL = Opcode(\n        0xFB,\n        popped_stack_items=3,\n        pushed_stack_items=1,\n        kwargs=[\"address\", \"args_offset\", \"args_size\"],\n    )\n    \"\"\"\n    EXTSTATICCALL(address, args_offset, args_size) = address\n    ----\n\n    Description\n    ----\n    Static message-call into an account\n\n    Inputs\n    ----\n    - address: the account which context to execute\n    - args_offset: byte offset in the memory in bytes, the calldata of the sub context\n    - args_size: byte size to copy (size of the calldata)\n\n    Outputs\n    ----\n    - success:\n        - `0` if the call was successful.\n        - `1` if the call has reverted (also can be pushed earlier in a light failure scenario).\n        - `2` if the call has failed.\n\n    Fork\n    ----\n    Prague\n\n    Gas\n    ----\n    - static_gas = 0\n    - dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost\n\n    Source: [EIP-7069](https://eips.ethereum.org/EIPS/eip-7069)\n    \"\"\"\n\n    RETURNDATALOAD = Opcode(0xF7, popped_stack_items=1, pushed_stack_items=1, kwargs=[\"offset\"])\n    \"\"\"\n    RETURNDATALOAD(offset)\n    ----\n\n    Description\n    ----\n    Copy 32 bytes from returndata at offset onto the stack\n\n    Inputs\n    ----\n    - offset: byte offset in the return data from the last executed sub context to copy\n\n    Fork\n    ----\n    EOF\n\n    Gas\n    ----\n    3\n    \"\"\"\n\n    REVERT = Opcode(0xFD, popped_stack_items=2, kwargs=[\"offset\", \"size\"], terminating=True)\n    \"\"\"\n    REVERT(offset, size)\n    ----\n\n    Description\n    ----\n    Halt execution reverting state changes but returning data and remaining gas\n\n    Inputs\n    ----\n    - offset: byte offset in the memory in bytes. The return data of the calling context\n    - size: byte size to copy (size of the return data)\n\n    Fork\n    ----\n    Byzantium\n\n    Gas\n    ----\n    static_gas = 0\n    dynamic_gas = memory_expansion_cost\n\n    Source: [evm.codes/#FD](https://www.evm.codes/#FD)\n    \"\"\"\n\n    INVALID = Opcode(0xFE, terminating=True)\n    \"\"\"\n    INVALID()\n    ----\n\n    Description\n    ----\n    Designated invalid instruction\n\n    Inputs\n    ----\n    None\n\n    Outputs\n    ----\n    None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    All the remaining gas in this context is consumed\n\n    Source: [evm.codes/#FE](https://www.evm.codes/#FE)\n    \"\"\"\n\n    SELFDESTRUCT = Opcode(0xFF, popped_stack_items=1, kwargs=[\"address\"])\n    \"\"\"\n    SELFDESTRUCT(address)\n    ----\n\n    Description\n    ----\n    Halt execution and register the account for later deletion\n\n    Inputs\n    ----\n    - address: account to send the current balance to\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    5000\n\n    Source: [evm.codes/#FF](https://www.evm.codes/#FF)\n    \"\"\"\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STOP","title":"STOP = Opcode(0, terminating=True) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STOP--stop","title":"STOP()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STOP--description","title":"Description","text":"

    Stop execution

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STOP--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STOP--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STOP--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STOP--gas","title":"Gas","text":"

    0

    Source: evm.codes/#00

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADD","title":"ADD = Opcode(1, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADD--adda-b-c","title":"ADD(a, b) = c","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADD--description","title":"Description","text":"

    Addition operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADD--inputs","title":"Inputs","text":"
    • a: first integer value to add
    • b: second integer value to add
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADD--outputs","title":"Outputs","text":"
    • c: integer result of the addition modulo 2**256
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADD--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADD--gas","title":"Gas","text":"

    3

    Source: evm.codes/#01

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MUL","title":"MUL = Opcode(2, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MUL--mula-b-c","title":"MUL(a, b) = c","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MUL--description","title":"Description","text":"

    Multiplication operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MUL--inputs","title":"Inputs","text":"
    • a: first integer value to multiply
    • b: second integer value to multiply
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MUL--outputs","title":"Outputs","text":"
    • c: integer result of the multiplication modulo 2**256
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MUL--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MUL--gas","title":"Gas","text":"

    5

    Source: evm.codes/#02

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SUB","title":"SUB = Opcode(3, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SUB--suba-b-c","title":"SUB(a, b) = c","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SUB--description","title":"Description","text":"

    Subtraction operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SUB--inputs","title":"Inputs","text":"
    • a: first integer value
    • b: second integer value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SUB--outputs","title":"Outputs","text":"
    • c: integer result of the subtraction modulo 2**256
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SUB--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SUB--gas","title":"Gas","text":"

    3

    Source: evm.codes/#03

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DIV","title":"DIV = Opcode(4, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DIV--diva-b-c","title":"DIV(a, b) = c","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DIV--description","title":"Description","text":"

    Division operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DIV--inputs","title":"Inputs","text":"
    • a: numerator
    • b: denominator (must be non-zero)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DIV--outputs","title":"Outputs","text":"
    • c: integer result of the division
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DIV--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DIV--gas","title":"Gas","text":"

    5

    Source: evm.codes/#04

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SDIV","title":"SDIV = Opcode(5, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SDIV--sdiva-b-c","title":"SDIV(a, b) = c","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SDIV--description","title":"Description","text":"

    Signed division operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SDIV--inputs","title":"Inputs","text":"
    • a: signed numerator
    • b: signed denominator
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SDIV--outputs","title":"Outputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SDIV---c-signed-integer-result-of-the-division-if-the-denominator-is-0-the-result-will-be-0","title":"- c: signed integer result of the division. If the denominator is 0, the result will be 0","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SDIV--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SDIV--gas","title":"Gas","text":"

    5

    Source: evm.codes/#05

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MOD","title":"MOD = Opcode(6, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MOD--moda-b-c","title":"MOD(a, b) = c","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MOD--description","title":"Description","text":"

    Modulo operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MOD--inputs","title":"Inputs","text":"
    • a: integer numerator
    • b: integer denominator
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MOD--outputs","title":"Outputs","text":"
    • a % b: integer result of the integer modulo. If the denominator is 0, the result will be 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MOD--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MOD--gas","title":"Gas","text":"

    5

    Source: evm.codes/#06

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SMOD","title":"SMOD = Opcode(7, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SMOD--smoda-b-c","title":"SMOD(a, b) = c","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SMOD--description","title":"Description","text":"

    Signed modulo remainder operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SMOD--inputs","title":"Inputs","text":"
    • a: integer numerator
    • b: integer denominator
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SMOD--outputs","title":"Outputs","text":"
    • a % b: integer result of the signed integer modulo. If the denominator is 0, the result will be 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SMOD--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SMOD--gas","title":"Gas","text":"

    5

    Source: evm.codes/#07

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDMOD","title":"ADDMOD = Opcode(8, popped_stack_items=3, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDMOD--addmoda-b-c-d","title":"ADDMOD(a, b, c) = d","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDMOD--description","title":"Description","text":"

    Modular addition operation with overflow check

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDMOD--inputs","title":"Inputs","text":"
    • a: first integer value
    • b: second integer value
    • c: integer denominator
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDMOD--outputs","title":"Outputs","text":"
    • (a + b) % N: integer result of the addition followed by a modulo. If the denominator is 0, the result will be 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDMOD--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDMOD--gas","title":"Gas","text":"

    8

    Source: evm.codes/#08

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MULMOD","title":"MULMOD = Opcode(9, popped_stack_items=3, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MULMOD--mulmoda-b-n-d","title":"MULMOD(a, b, N) = d","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MULMOD--description","title":"Description","text":"

    Modulo multiplication operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MULMOD--inputs","title":"Inputs","text":"
    • a: first integer value to multiply
    • b: second integer value to multiply
    • N: integer denominator
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MULMOD--outputs","title":"Outputs","text":"
    • (a * b) % N: integer result of the multiplication followed by a modulo. If the denominator is 0, the result will be 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MULMOD--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MULMOD--gas","title":"Gas","text":"

    8

    Source: evm.codes/#09

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXP","title":"EXP = Opcode(10, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXP--expa-exponent-a-exponent","title":"EXP(a, exponent) = a ** exponent","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXP--description","title":"Description","text":"

    Exponential operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXP--inputs","title":"Inputs","text":"
    • a: integer base
    • exponent: integer exponent
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXP--outputs","title":"Outputs","text":"
    • a ** exponent: integer result of the exponential operation modulo 2**256
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXP--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXP--gas","title":"Gas","text":"
    • static_gas = 10
    • dynamic_gas = 50 * exponent_byte_size

    Source: evm.codes/#0A

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SIGNEXTEND","title":"SIGNEXTEND = Opcode(11, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SIGNEXTEND--signextendb-x-y","title":"SIGNEXTEND(b, x) = y","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SIGNEXTEND--description","title":"Description","text":"

    Sign extension operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SIGNEXTEND--inputs","title":"Inputs","text":"
    • b: size in byte - 1 of the integer to sign extend
    • x: integer value to sign extend
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SIGNEXTEND--outputs","title":"Outputs","text":"
    • y: integer result of the sign extend
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SIGNEXTEND--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SIGNEXTEND--gas","title":"Gas","text":"

    5

    Source: evm.codes/#0B

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LT","title":"LT = Opcode(16, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LT--lta-b-a-b","title":"LT(a, b) = a < b","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LT--description","title":"Description","text":"

    Less-than comparison

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LT--inputs","title":"Inputs","text":"
    • a: left side integer value
    • b: right side integer value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LT--outputs","title":"Outputs","text":"
    • a < b: 1 if the left side is smaller, 0 otherwise
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LT--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LT--gas","title":"Gas","text":"

    3

    Source: evm.codes/#10

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GT","title":"GT = Opcode(17, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GT--gta-b-a-b","title":"GT(a, b) = a > b","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GT--description","title":"Description","text":"

    Greater-than comparison

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GT--inputs","title":"Inputs","text":"
    • a: left side integer
    • b: right side integer
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GT--outputs","title":"Outputs","text":"
    • a > b: 1 if the left side is bigger, 0 otherwise
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GT--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GT--gas","title":"Gas","text":"

    3

    Source: evm.codes/#11

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLT","title":"SLT = Opcode(18, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLT--slta-b-a-b","title":"SLT(a, b) = a < b","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLT--description","title":"Description","text":"

    Signed less-than comparison

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLT--inputs","title":"Inputs","text":"
    • a: left side signed integer
    • b: right side signed integer
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLT--outputs","title":"Outputs","text":"
    • a < b: 1 if the left side is smaller, 0 otherwise
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLT--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLT--gas","title":"Gas","text":"

    3

    Source: evm.codes/#12

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SGT","title":"SGT = Opcode(19, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SGT--sgta-b-a-b","title":"SGT(a, b) = a > b","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SGT--description","title":"Description","text":"

    Signed greater-than comparison

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SGT--inputs","title":"Inputs","text":"
    • a: left side signed integer
    • b: right side signed integer
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SGT--outputs","title":"Outputs","text":"
    • a > b: 1 if the left side is bigger, 0 otherwise
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SGT--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SGT--gas","title":"Gas","text":"

    3

    Source: evm.codes/#13

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EQ","title":"EQ = Opcode(20, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EQ--eqa-b-a-b","title":"EQ(a, b) = a == b","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EQ--description","title":"Description","text":"

    Equality comparison

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EQ--inputs","title":"Inputs","text":"
    • a: left side integer
    • b: right side integer
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EQ--outputs","title":"Outputs","text":"
    • a == b: 1 if the left side is equal to the right side, 0 otherwise
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EQ--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EQ--gas","title":"Gas","text":"

    3

    Source: evm.codes/#14

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ISZERO","title":"ISZERO = Opcode(21, popped_stack_items=1, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ISZERO--iszeroa-a-0","title":"ISZERO(a) = a == 0","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ISZERO--description","title":"Description","text":"

    Is-zero comparison

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ISZERO--inputs","title":"Inputs","text":"
    • a: integer
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ISZERO--outputs","title":"Outputs","text":"
    • a == 0: 1 if a is 0, 0 otherwise
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ISZERO--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ISZERO--gas","title":"Gas","text":"

    3

    Source: evm.codes/#15

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.AND","title":"AND = Opcode(22, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.AND--anda-b-a-b","title":"AND(a, b) = a & b","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.AND--description","title":"Description","text":"

    Bitwise AND operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.AND--inputs","title":"Inputs","text":"
    • a: first binary value
    • b: second binary value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.AND--outputs","title":"Outputs","text":"
    • a & b: the bitwise AND result
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.AND--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.AND--gas","title":"Gas","text":"

    3

    Source: evm.codes/#16

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.OR","title":"OR = Opcode(23, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.OR--ora-b-a-b","title":"OR(a, b) = a | b","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.OR--description","title":"Description","text":"

    Bitwise OR operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.OR--inputs","title":"Inputs","text":"
    • a: first binary value
    • b: second binary value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.OR--outputs","title":"Outputs","text":"
    • a | b: the bitwise OR result
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.OR--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.OR--gas","title":"Gas","text":"

    3

    Source: evm.codes/#17

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.XOR","title":"XOR = Opcode(24, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.XOR--xora-b-a-b","title":"XOR(a, b) = a ^ b","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.XOR--description","title":"Description","text":"

    Bitwise XOR operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.XOR--inputs","title":"Inputs","text":"
    • a: first binary value
    • b: second binary value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.XOR--outputs","title":"Outputs","text":"
    • a ^ b: the bitwise XOR result
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.XOR--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.XOR--gas","title":"Gas","text":"

    3

    Source: evm.codes/#18

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOT","title":"NOT = Opcode(25, popped_stack_items=1, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOT--nota-a","title":"NOT(a) = ~a","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOT--description","title":"Description","text":"

    Bitwise NOT operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOT--inputs","title":"Inputs","text":"
    • a: binary value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOT--outputs","title":"Outputs","text":"
    • ~a: the bitwise NOT result
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOT--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOT--gas","title":"Gas","text":"

    3

    Source: evm.codes/#19

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BYTE","title":"BYTE = Opcode(26, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BYTE--bytei-x-y","title":"BYTE(i, x) = y","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BYTE--description","title":"Description","text":"

    Extract a byte from the given position in the value

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BYTE--inputs","title":"Inputs","text":"
    • i: byte offset starting from the most significant byte
    • x: 32-byte value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BYTE--outputs","title":"Outputs","text":"
    • y: the indicated byte at the least significant position. If the byte offset is out of range, the result is 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BYTE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BYTE--gas","title":"Gas","text":"

    3

    Source: evm.codes/#1A

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHL","title":"SHL = Opcode(27, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHL--shlshift-value-value-shift","title":"SHL(shift, value) = value << shift","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHL--description","title":"Description","text":"

    Shift left operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHL--inputs","title":"Inputs","text":"
    • shift: number of bits to shift to the left
    • value: 32 bytes to shift
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHL--outputs","title":"Outputs","text":"
    • value << shift: the shifted value. If shift is bigger than 255, returns 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHL--fork","title":"Fork","text":"

    Constantinople

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHL--gas","title":"Gas","text":"

    3

    Source: evm.codes/#1B

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHR","title":"SHR = Opcode(28, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHR--shrshift-value-value-shift","title":"SHR(shift, value) = value >> shift","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHR--description","title":"Description","text":"

    Logical shift right operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHR--inputs","title":"Inputs","text":"
    • shift: number of bits to shift to the right.
    • value: 32 bytes to shift
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHR--outputs","title":"Outputs","text":"
    • value >> shift: the shifted value. If shift is bigger than 255, returns 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHR--fork","title":"Fork","text":"

    Constantinople

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHR--gas","title":"Gas","text":"

    3

    Source: evm.codes/#1C

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SAR","title":"SAR = Opcode(29, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SAR--sarshift-value-value-shift","title":"SAR(shift, value) = value >> shift","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SAR--description","title":"Description","text":"

    Arithmetic shift right operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SAR--inputs","title":"Inputs","text":"
    • shift: number of bits to shift to the right
    • value: integer to shift
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SAR--outputs","title":"Outputs","text":"
    • value >> shift: the shifted value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SAR--fork","title":"Fork","text":"

    Constantinople

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SAR--gas","title":"Gas","text":"

    3

    Source: evm.codes/#1D

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHA3","title":"SHA3 = Opcode(32, popped_stack_items=2, pushed_stack_items=1, kwargs=['offset', 'size']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHA3--sha3offset-size-hash","title":"SHA3(offset, size) = hash","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHA3--description","title":"Description","text":"

    Compute Keccak-256 hash

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHA3--inputs","title":"Inputs","text":"
    • offset: byte offset in the memory
    • size: byte size to read in the memory
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHA3--outputs","title":"Outputs","text":"
    • hash: Keccak-256 hash of the given data in memory
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHA3--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHA3--gas","title":"Gas","text":"
    • minimum_word_size = (size + 31) / 32
    • static_gas = 30
    • dynamic_gas = 6 * minimum_word_size + memory_expansion_cost

    Source: evm.codes/#20

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDRESS","title":"ADDRESS = Opcode(48, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDRESS--address-address","title":"ADDRESS() = address","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDRESS--description","title":"Description","text":"

    Get address of currently executing account

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDRESS--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDRESS--outputs","title":"Outputs","text":"
    • address: the 20-byte address of the current account
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDRESS--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDRESS--gas","title":"Gas","text":"

    2

    Source: evm.codes/#30

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BALANCE","title":"BALANCE = Opcode(49, popped_stack_items=1, pushed_stack_items=1, kwargs=['address']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BALANCE--balanceaddress-balance","title":"BALANCE(address) = balance","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BALANCE--description","title":"Description","text":"

    Get the balance of the specified account

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BALANCE--inputs","title":"Inputs","text":"
    • address: 20-byte address of the account to check
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BALANCE--outputs","title":"Outputs","text":"
    • balance: balance of the given account in wei. Returns 0 if the account doesn't exist
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BALANCE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BALANCE--gas","title":"Gas","text":"
    • static_gas = 0
    • dynamic_gas = 100 if warm_address, 2600 if cold_address

    Source: evm.codes/#31

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ORIGIN","title":"ORIGIN = Opcode(50, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ORIGIN--origin-address","title":"ORIGIN() = address","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ORIGIN--description","title":"Description","text":"

    Get execution origination address

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ORIGIN--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ORIGIN--outputs","title":"Outputs","text":"
    • address: the 20-byte address of the sender of the transaction. It can only be an account without code
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ORIGIN--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ORIGIN--gas","title":"Gas","text":"

    2

    Source: evm.codes/#32

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLER","title":"CALLER = Opcode(51, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLER--caller-address","title":"CALLER() = address","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLER--description","title":"Description","text":"

    Get caller address

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLER--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLER--outputs","title":"Outputs","text":"
    • address: the 20-byte address of the caller account. This is the account that did the last call (except delegate call)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLER--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLER--gas","title":"Gas","text":"

    2

    Source: evm.codes/#33

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLVALUE","title":"CALLVALUE = Opcode(52, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLVALUE--callvalue-value","title":"CALLVALUE() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLVALUE--description","title":"Description","text":"

    Get deposited value by the instruction/transaction responsible for this execution

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLVALUE--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLVALUE--outputs","title":"Outputs","text":"
    • value: the value of the current call in wei
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLVALUE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLVALUE--gas","title":"Gas","text":"

    2

    Source: evm.codes/#34

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATALOAD","title":"CALLDATALOAD = Opcode(53, popped_stack_items=1, pushed_stack_items=1, kwargs=['offset']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATALOAD--calldataloadoffset-dataoffset","title":"CALLDATALOAD(offset) = data[offset]","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATALOAD--description","title":"Description","text":"

    Get input data of current environment

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATALOAD--inputs","title":"Inputs","text":"
    • offset: byte offset in the calldata
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATALOAD--outputs","title":"Outputs","text":"
    • data[offset]: 32-byte value starting from the given offset of the calldata. All bytes after the end of the calldata are set to 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATALOAD--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATALOAD--gas","title":"Gas","text":"

    3

    Source: evm.codes/#35

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATASIZE","title":"CALLDATASIZE = Opcode(54, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATASIZE--calldatasize-size","title":"CALLDATASIZE() = size","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATASIZE--description","title":"Description","text":"

    Get size of input data in current environment

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATASIZE--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATASIZE--outputs","title":"Outputs","text":"
    • size: byte size of the calldata
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATASIZE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATASIZE--gas","title":"Gas","text":"

    2

    Source: evm.codes/#36

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATACOPY","title":"CALLDATACOPY = Opcode(55, popped_stack_items=3, kwargs=['dest_offset', 'offset', 'size']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATACOPY--calldatacopydest_offset-offset-size","title":"CALLDATACOPY(dest_offset, offset, size)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATACOPY--description","title":"Description","text":"

    Copy input data in current environment to memory

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATACOPY--inputs","title":"Inputs","text":"
    • dest_offset: byte offset in the memory where the result will be copied
    • offset: byte offset in the calldata to copy
    • size: byte size to copy
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATACOPY--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATACOPY--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATACOPY--gas","title":"Gas","text":"
    • minimum_word_size = (size + 31) / 32
    • static_gas = 3
    • dynamic_gas = 3 * minimum_word_size + memory_expansion_cost

    Source: evm.codes/#37

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODESIZE","title":"CODESIZE = Opcode(56, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODESIZE--codesize-size","title":"CODESIZE() = size","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODESIZE--description","title":"Description","text":"

    Get size of code running in current environment

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODESIZE--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODESIZE--outputs","title":"Outputs","text":"
    • size: byte size of the code
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODESIZE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODESIZE--gas","title":"Gas","text":"

    2

    Source: evm.codes/#38

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODECOPY","title":"CODECOPY = Opcode(57, popped_stack_items=3, kwargs=['dest_offset', 'offset', 'size']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODECOPY--codecopydest_offset-offset-size","title":"CODECOPY(dest_offset, offset, size)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODECOPY--description","title":"Description","text":"

    Copy code running in current environment to memory

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODECOPY--inputs","title":"Inputs","text":"
    • dest_offset: byte offset in the memory where the result will be copied.
    • offset: byte offset in the code to copy.
    • size: byte size to copy
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODECOPY--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODECOPY--gas","title":"Gas","text":"
    • minimum_word_size = (size + 31) / 32
    • static_gas = 3
    • dynamic_gas = 3 * minimum_word_size + memory_expansion_cost

    Source: evm.codes/#39

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASPRICE","title":"GASPRICE = Opcode(58, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASPRICE--gasprice-price","title":"GASPRICE() = price","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASPRICE--description","title":"Description","text":"

    Get price of gas in current environment

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASPRICE--outputs","title":"Outputs","text":"
    • price: gas price in wei per gas
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASPRICE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASPRICE--gas","title":"Gas","text":"

    2

    Source: evm.codes/#3A

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODESIZE","title":"EXTCODESIZE = Opcode(59, popped_stack_items=1, pushed_stack_items=1, kwargs=['address']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODESIZE--extcodesizeaddress-size","title":"EXTCODESIZE(address) = size","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODESIZE--description","title":"Description","text":"

    Get size of an account's code

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODESIZE--inputs","title":"Inputs","text":"
    • address: 20-byte address of the contract to query
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODESIZE--outputs","title":"Outputs","text":"
    • size: byte size of the code
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODESIZE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODESIZE--gas","title":"Gas","text":"
    • static_gas = 0
    • dynamic_gas = 100 if warm_address, 2600 if cold_address

    Source: evm.codes/#3B

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODECOPY","title":"EXTCODECOPY = Opcode(60, popped_stack_items=4, kwargs=['address', 'dest_offset', 'offset', 'size']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODECOPY--extcodecopyaddress-dest_offset-offset-size","title":"EXTCODECOPY(address, dest_offset, offset, size)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODECOPY--description","title":"Description","text":"

    Copy an account's code to memory

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODECOPY--inputs","title":"Inputs","text":"
    • address: 20-byte address of the contract to query
    • dest_offset: byte offset in the memory where the result will be copied
    • offset: byte offset in the code to copy
    • size: byte size to copy
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODECOPY--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODECOPY--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODECOPY--gas","title":"Gas","text":"
    • minimum_word_size = (size + 31) / 32
    • static_gas = 0
    • dynamic_gas = 3 * minimum_word_size + memory_expansion_cost + address_access_cost

    Source: evm.codes/#3C

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATASIZE","title":"RETURNDATASIZE = Opcode(61, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATASIZE--returndatasize-size","title":"RETURNDATASIZE() = size","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATASIZE--description","title":"Description","text":"

    Get size of output data from the previous call from the current environment

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATASIZE--outputs","title":"Outputs","text":"
    • size: byte size of the return data from the last executed sub context
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATASIZE--fork","title":"Fork","text":"

    Byzantium

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATASIZE--gas","title":"Gas","text":"

    2

    Source: evm.codes/#3D

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATACOPY","title":"RETURNDATACOPY = Opcode(62, popped_stack_items=3, kwargs=['dest_offset', 'offset', 'size']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATACOPY--returndatacopydest_offset-offset-size","title":"RETURNDATACOPY(dest_offset, offset, size)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATACOPY--description","title":"Description","text":"

    Copy output data from the previous call to memory

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATACOPY--inputs","title":"Inputs","text":"
    • dest_offset: byte offset in the memory where the result will be copied
    • offset: byte offset in the return data from the last executed sub context to copy
    • size: byte size to copy
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATACOPY--fork","title":"Fork","text":"

    Byzantium

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATACOPY--gas","title":"Gas","text":"
    • minimum_word_size = (size + 31) / 32
    • static_gas = 3
    • dynamic_gas = 3 * minimum_word_size + memory_expansion_cost

    Source: evm.codes/#3E

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODEHASH","title":"EXTCODEHASH = Opcode(63, popped_stack_items=1, pushed_stack_items=1, kwargs=['address']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODEHASH--extcodehashaddress-hash","title":"EXTCODEHASH(address) = hash","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODEHASH--description","title":"Description","text":"

    Get hash of an account's code

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODEHASH--inputs","title":"Inputs","text":"
    • address: 20-byte address of the account
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODEHASH--outputs","title":"Outputs","text":"
    • hash: hash of the chosen account's code, the empty hash (0xc5d24601...) if the account has no code, or 0 if the account does not exist or has been destroyed
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODEHASH--fork","title":"Fork","text":"

    Constantinople

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODEHASH--gas","title":"Gas","text":"
    • static_gas = 0
    • dynamic_gas = 100 if warm_address, 2600 if cold_address

    Source: evm.codes/#3F

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOCKHASH","title":"BLOCKHASH = Opcode(64, popped_stack_items=1, pushed_stack_items=1, kwargs=['block_number']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOCKHASH--blockhashblock_number-hash","title":"BLOCKHASH(block_number) = hash","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOCKHASH--description","title":"Description","text":"

    Get the hash of one of the 256 most recent complete blocks

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOCKHASH--inputs","title":"Inputs","text":"
    • blockNumber: block number to get the hash from. Valid range is the last 256 blocks (not including the current one). Current block number can be queried with NUMBER
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOCKHASH--outputs","title":"Outputs","text":"
    • hash: hash of the chosen block, or 0 if the block number is not in the valid range
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOCKHASH--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOCKHASH--gas","title":"Gas","text":"

    20

    Source: evm.codes/#40

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.COINBASE","title":"COINBASE = Opcode(65, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.COINBASE--coinbase-address","title":"COINBASE() = address","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.COINBASE--description","title":"Description","text":"

    Get the block's beneficiary address

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.COINBASE--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.COINBASE--outputs","title":"Outputs","text":"
    • address: miner's 20-byte address
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.COINBASE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.COINBASE--gas","title":"Gas","text":"

    2

    Source: evm.codes/#41

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TIMESTAMP","title":"TIMESTAMP = Opcode(66, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TIMESTAMP--timestamp-timestamp","title":"TIMESTAMP() = timestamp","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TIMESTAMP--description","title":"Description","text":"

    Get the block's timestamp

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TIMESTAMP--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TIMESTAMP--outputs","title":"Outputs","text":"
    • timestamp: unix timestamp of the current block
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TIMESTAMP--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TIMESTAMP--gas","title":"Gas","text":"

    2

    Source: evm.codes/#42

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NUMBER","title":"NUMBER = Opcode(67, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NUMBER--number-blocknumber","title":"NUMBER() = blockNumber","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NUMBER--description","title":"Description","text":"

    Get the block's number

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NUMBER--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NUMBER--outputs","title":"Outputs","text":"
    • blockNumber: current block number
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NUMBER--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NUMBER--gas","title":"Gas","text":"

    2

    Source: evm.codes/#43

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PREVRANDAO","title":"PREVRANDAO = Opcode(68, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PREVRANDAO--prevrandao-prevrandao","title":"PREVRANDAO() = prevRandao","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PREVRANDAO--description","title":"Description","text":"

    Get the previous block's RANDAO mix

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PREVRANDAO--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PREVRANDAO--outputs","title":"Outputs","text":"
    • prevRandao: previous block's RANDAO mix
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PREVRANDAO--fork","title":"Fork","text":"

    Merge

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PREVRANDAO--gas","title":"Gas","text":"

    2

    Source: evm.codes/#44

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASLIMIT","title":"GASLIMIT = Opcode(69, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASLIMIT--gaslimit-gaslimit","title":"GASLIMIT() = gasLimit","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASLIMIT--description","title":"Description","text":"

    Get the block's gas limit

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASLIMIT--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASLIMIT--outputs","title":"Outputs","text":"
    • gasLimit: gas limit
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASLIMIT--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASLIMIT--gas","title":"Gas","text":"

    2

    Source: evm.codes/#45

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CHAINID","title":"CHAINID = Opcode(70, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CHAINID--chainid-chainid","title":"CHAINID() = chainId","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CHAINID--description","title":"Description","text":"

    Get the chain ID

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CHAINID--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CHAINID--outputs","title":"Outputs","text":"
    • chainId: chain id of the network
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CHAINID--fork","title":"Fork","text":"

    Istanbul

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CHAINID--gas","title":"Gas","text":"

    2

    Source: evm.codes/#46

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFBALANCE","title":"SELFBALANCE = Opcode(71, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFBALANCE--selfbalance-balance","title":"SELFBALANCE() = balance","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFBALANCE--description","title":"Description","text":"

    Get balance of currently executing account

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFBALANCE--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFBALANCE--outputs","title":"Outputs","text":"
    • balance: balance of the current account in wei
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFBALANCE--fork","title":"Fork","text":"

    Istanbul

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFBALANCE--gas","title":"Gas","text":"

    5

    Source: evm.codes/#47

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BASEFEE","title":"BASEFEE = Opcode(72, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BASEFEE--basefee-basefee","title":"BASEFEE() = baseFee","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BASEFEE--description","title":"Description","text":"

    Get the base fee

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BASEFEE--outputs","title":"Outputs","text":"
    • baseFee: base fee in wei
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BASEFEE--fork","title":"Fork","text":"

    London

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BASEFEE--gas","title":"Gas","text":"

    2

    Source: evm.codes/#48

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBHASH","title":"BLOBHASH = Opcode(73, popped_stack_items=1, pushed_stack_items=1, kwargs=['index']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBHASH--blobhashindex-versionedhash","title":"BLOBHASH(index) = versionedHash","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBHASH--description","title":"Description","text":"

    Returns the versioned hash of a single blob contained in the type-3 transaction

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBHASH--inputs","title":"Inputs","text":"
    • index: index of the blob
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBHASH--outputs","title":"Outputs","text":"
    • versionedHash: versioned hash of the blob
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBHASH--fork","title":"Fork","text":"

    Cancun

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBHASH--gas","title":"Gas","text":"

    3

    Source: eips.ethereum.org/EIPS/eip-4844

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBBASEFEE","title":"BLOBBASEFEE = Opcode(74, popped_stack_items=0, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBBASEFEE--blobbasefee-fee","title":"BLOBBASEFEE() = fee","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBBASEFEE--description","title":"Description","text":"

    Returns the value of the blob base fee of the block it is executing in

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBBASEFEE--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBBASEFEE--outputs","title":"Outputs","text":"
    • baseFeePerBlobGas: base fee for the blob gas in wei
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBBASEFEE--fork","title":"Fork","text":"

    Cancun

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBBASEFEE--gas","title":"Gas","text":"

    2

    Source: eips.ethereum.org/EIPS/eip-7516

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.POP","title":"POP = Opcode(80, popped_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.POP--pop","title":"POP()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.POP--description","title":"Description","text":"

    Remove item from stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.POP--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.POP--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.POP--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.POP--gas","title":"Gas","text":"

    2

    Source: evm.codes/#50

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MLOAD","title":"MLOAD = Opcode(81, popped_stack_items=1, pushed_stack_items=1, kwargs=['offset']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MLOAD--mloadoffset-value","title":"MLOAD(offset) = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MLOAD--description","title":"Description","text":"

    Load word from memory

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MLOAD--inputs","title":"Inputs","text":"
    • offset: offset in the memory in bytes
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MLOAD--outputs","title":"Outputs","text":"
    • value: the 32 bytes in memory starting at that offset. If it goes beyond its current size (see MSIZE), writes 0s
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MLOAD--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MLOAD--gas","title":"Gas","text":"
    • static_gas = 3
    • dynamic_gas = memory_expansion_cost

    Source: evm.codes/#51

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE","title":"MSTORE = Opcode(82, popped_stack_items=2, kwargs=['offset', 'value']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE--mstoreoffset-value","title":"MSTORE(offset, value)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE--description","title":"Description","text":"

    Save word to memory

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE--inputs","title":"Inputs","text":"
    • offset: offset in the memory in bytes
    • value: 32-byte value to write in the memory
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE--gas","title":"Gas","text":"
    • static_gas = 3
    • dynamic_gas = memory_expansion_cost

    Source: evm.codes/#52

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE8","title":"MSTORE8 = Opcode(83, popped_stack_items=2, kwargs=['offset', 'value']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE8--mstore8offset-value","title":"MSTORE8(offset, value)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE8--description","title":"Description","text":"

    Save byte to memory

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE8--inputs","title":"Inputs","text":"
    • offset: offset in the memory in bytes
    • value: 1-byte value to write in the memory (the least significant byte of the 32-byte stack value)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE8--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE8--gas","title":"Gas","text":"
    • static_gas = 3
    • dynamic_gas = memory_expansion_cost

    Source: evm.codes/#53

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLOAD","title":"SLOAD = Opcode(84, popped_stack_items=1, pushed_stack_items=1, kwargs=['key']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLOAD--sloadkey-value","title":"SLOAD(key) = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLOAD--description","title":"Description","text":"

    Load word from storage

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLOAD--inputs","title":"Inputs","text":"
    • key: 32-byte key in storage
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLOAD--outputs","title":"Outputs","text":"
    • value: 32-byte value corresponding to that key. 0 if that key was never written before
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLOAD--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLOAD--gas","title":"Gas","text":"
    • static_gas = 0
    • dynamic_gas = 100 if warm_address, 2600 if cold_address

    Source: evm.codes/#54

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SSTORE","title":"SSTORE = Opcode(85, popped_stack_items=2, kwargs=['key', 'value']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SSTORE--sstorekey-value","title":"SSTORE(key, value)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SSTORE--description","title":"Description","text":"

    Save word to storage

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SSTORE--inputs","title":"Inputs","text":"
    • key: 32-byte key in storage
    • value: 32-byte value to store
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SSTORE--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SSTORE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SSTORE--gas","title":"Gas","text":"
    static_gas = 0\n\nif value == current_value\n    if key is warm\n        base_dynamic_gas = 100\n    else\n        base_dynamic_gas = 100\nelse if current_value == original_value\n    if original_value == 0\n        base_dynamic_gas = 20000\n    else\n        base_dynamic_gas = 2900\nelse\n    base_dynamic_gas = 100\n\nif key is cold:\n    base_dynamic_gas += 2100\n

    Source: evm.codes/#55

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMP","title":"JUMP = Opcode(86, popped_stack_items=1, kwargs=['pc']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMP--jumppc","title":"JUMP(pc)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMP--description","title":"Description","text":"

    Alter the program counter

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMP--inputs","title":"Inputs","text":"
    • pc: byte offset in the deployed code where execution will continue from. Must be a JUMPDEST instruction
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMP--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMP--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMP--gas","title":"Gas","text":"

    8

    Source: evm.codes/#56

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPI","title":"JUMPI = Opcode(87, popped_stack_items=2, kwargs=['pc', 'condition']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPI--jumpipc-condition","title":"JUMPI(pc, condition)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPI--description","title":"Description","text":"

    Conditionally alter the program counter

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPI--inputs","title":"Inputs","text":"
    • pc: byte offset in the deployed code where execution will continue from. Must be a JUMPDEST instruction
    • condition: the program counter will be altered with the new value only if this value is different from 0. Otherwise, the program counter is simply incremented and the next instruction will be executed
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPI--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPI--gas","title":"Gas","text":"

    10

    Source: evm.codes/#57

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PC","title":"PC = Opcode(88, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PC--pc-counter","title":"PC() = counter","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PC--description","title":"Description","text":"

    Get the value of the program counter prior to the increment corresponding to this instruction

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PC--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PC--outputs","title":"Outputs","text":"
    • counter: PC of this instruction in the current program.
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PC--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PC--gas","title":"Gas","text":"

    2

    Source: evm.codes/#58

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSIZE","title":"MSIZE = Opcode(89, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSIZE--msize-size","title":"MSIZE() = size","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSIZE--description","title":"Description","text":"

    Get the size of active memory in bytes

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSIZE--outputs","title":"Outputs","text":"
    • size: current memory size in bytes (higher offset accessed until now + 1)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSIZE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSIZE--gas","title":"Gas","text":"

    2

    Source: evm.codes/#59

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GAS","title":"GAS = Opcode(90, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GAS--gas-gas_remaining","title":"GAS() = gas_remaining","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GAS--description","title":"Description","text":"

    Get the amount of available gas, including the corresponding reduction for the cost of this instruction

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GAS--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GAS--outputs","title":"Outputs","text":"
    • gas: remaining gas (after this instruction)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GAS--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GAS--gas","title":"Gas","text":"

    2

    Source: evm.codes/#5A

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPDEST","title":"JUMPDEST = Opcode(91) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPDEST--jumpdest","title":"JUMPDEST()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPDEST--description","title":"Description","text":"

    Mark a valid destination for jumps

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPDEST--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPDEST--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPDEST--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPDEST--gas","title":"Gas","text":"

    1

    Source: evm.codes/#5B

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOOP","title":"NOOP = Opcode(91) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOOP--noop","title":"NOOP()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOOP--description","title":"Description","text":"

    Synonym for JUMPDEST. Performs no operation.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOOP--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOOP--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOOP--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOOP--gas","title":"Gas","text":"

    1

    Source: evm.codes/#5B

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TLOAD","title":"TLOAD = Opcode(92, popped_stack_items=1, pushed_stack_items=1, kwargs=['key']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TLOAD--tloadkey-value","title":"TLOAD(key) = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TLOAD--description","title":"Description","text":"

    Load word from transient storage

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TLOAD--inputs","title":"Inputs","text":"
    • key: 32-byte key in transient storage
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TLOAD--outputs","title":"Outputs","text":"
    • value: 32-byte value corresponding to that key. 0 if that key was never written
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TLOAD--fork","title":"Fork","text":"

    Cancun

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TLOAD--gas","title":"Gas","text":"

    100

    Source: eips.ethereum.org/EIPS/eip-1153

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TSTORE","title":"TSTORE = Opcode(93, popped_stack_items=2, kwargs=['key', 'value']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TSTORE--tstorekey-value","title":"TSTORE(key, value)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TSTORE--description","title":"Description","text":"

    Save word to transient storage

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TSTORE--inputs","title":"Inputs","text":"
    • key: 32-byte key in transient storage
    • value: 32-byte value to store
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TSTORE--fork","title":"Fork","text":"

    Cancun

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TSTORE--gas","title":"Gas","text":"

    100

    Source: eips.ethereum.org/EIPS/eip-1153

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MCOPY","title":"MCOPY = Opcode(94, popped_stack_items=3, kwargs=['dest_offset', 'offset', 'size']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MCOPY--mcopydest_offset-offset-size","title":"MCOPY(dest_offset, offset, size)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MCOPY--description","title":"Description","text":"

    Copies areas in memory

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MCOPY--inputs","title":"Inputs","text":"
    • dest_offset: byte offset in the memory where the result will be copied
    • offset: byte offset in the calldata to copy
    • size: byte size to copy
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MCOPY--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MCOPY--fork","title":"Fork","text":"

    Cancun

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MCOPY--gas","title":"Gas","text":"
    • minimum_word_size = (size + 31) / 32
    • static_gas = 3
    • dynamic_gas = 3 * minimum_word_size + memory_expansion_cost

    Source: eips.ethereum.org/EIPS/eip-5656

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH0","title":"PUSH0 = Opcode(95, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH0--push0-value","title":"PUSH0() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH0--description","title":"Description","text":"

    Place value 0 on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH0--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH0--outputs","title":"Outputs","text":"
    • value: pushed value, equal to 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH0--fork","title":"Fork","text":"

    Shanghai

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH0--gas","title":"Gas","text":"

    2

    Source: evm.codes/#5F

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH1","title":"PUSH1 = Opcode(96, pushed_stack_items=1, data_portion_length=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH1--push1-value","title":"PUSH1() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH1--description","title":"Description","text":"

    Place 1 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH1--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH1--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH1--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH1--gas","title":"Gas","text":"

    3

    Source: evm.codes/#60

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH2","title":"PUSH2 = Opcode(97, pushed_stack_items=1, data_portion_length=2) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH2--push2-value","title":"PUSH2() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH2--description","title":"Description","text":"

    Place 2 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH2--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH2--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH2--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH2--gas","title":"Gas","text":"

    3

    Source: evm.codes/#61

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH3","title":"PUSH3 = Opcode(98, pushed_stack_items=1, data_portion_length=3) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH3--push3-value","title":"PUSH3() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH3--description","title":"Description","text":"

    Place 3 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH3--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH3--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH3--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH3--gas","title":"Gas","text":"

    3

    Source: evm.codes/#62

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH4","title":"PUSH4 = Opcode(99, pushed_stack_items=1, data_portion_length=4) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH4--push4-value","title":"PUSH4() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH4--description","title":"Description","text":"

    Place 4 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH4--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH4--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH4--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH4--gas","title":"Gas","text":"

    3

    Source: evm.codes/#63

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH5","title":"PUSH5 = Opcode(100, pushed_stack_items=1, data_portion_length=5) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH5--push5-value","title":"PUSH5() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH5--description","title":"Description","text":"

    Place 5 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH5--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH5--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH5--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH5--gas","title":"Gas","text":"

    3

    Source: evm.codes/#64

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH6","title":"PUSH6 = Opcode(101, pushed_stack_items=1, data_portion_length=6) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH6--push6-value","title":"PUSH6() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH6--description","title":"Description","text":"

    Place 6 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH6--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH6--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH6--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH6--gas","title":"Gas","text":"

    3

    Source: evm.codes/#65

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH7","title":"PUSH7 = Opcode(102, pushed_stack_items=1, data_portion_length=7) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH7--push7-value","title":"PUSH7() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH7--description","title":"Description","text":"

    Place 7 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH7--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH7--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH7--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH7--gas","title":"Gas","text":"

    3

    Source: evm.codes/#66

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH8","title":"PUSH8 = Opcode(103, pushed_stack_items=1, data_portion_length=8) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH8--push8-value","title":"PUSH8() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH8--description","title":"Description","text":"

    Place 8 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH8--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH8--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH8--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH8--gas","title":"Gas","text":"

    3

    Source: evm.codes/#67

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH9","title":"PUSH9 = Opcode(104, pushed_stack_items=1, data_portion_length=9) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH9--push9-value","title":"PUSH9() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH9--description","title":"Description","text":"

    Place 9 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH9--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH9--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH9--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH9--gas","title":"Gas","text":"

    3

    Source: evm.codes/#68

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH10","title":"PUSH10 = Opcode(105, pushed_stack_items=1, data_portion_length=10) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH10--push10-value","title":"PUSH10() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH10--description","title":"Description","text":"

    Place 10 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH10--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH10--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH10--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH10--gas","title":"Gas","text":"

    3

    Source: evm.codes/#69

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH11","title":"PUSH11 = Opcode(106, pushed_stack_items=1, data_portion_length=11) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH11--push11-value","title":"PUSH11() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH11--description","title":"Description","text":"

    Place 11 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH11--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH11--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH11--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH11--gas","title":"Gas","text":"

    3

    Source: evm.codes/#6A

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH12","title":"PUSH12 = Opcode(107, pushed_stack_items=1, data_portion_length=12) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH12--push12-value","title":"PUSH12() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH12--description","title":"Description","text":"

    Place 12 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH12--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH12--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH12--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH12--gas","title":"Gas","text":"

    3

    Source: evm.codes/#6B

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH13","title":"PUSH13 = Opcode(108, pushed_stack_items=1, data_portion_length=13) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH13--push13-value","title":"PUSH13() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH13--description","title":"Description","text":"

    Place 13 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH13--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH13--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH13--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH13--gas","title":"Gas","text":"

    3

    Source: evm.codes/#6C

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH14","title":"PUSH14 = Opcode(109, pushed_stack_items=1, data_portion_length=14) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH14--push14-value","title":"PUSH14() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH14--description","title":"Description","text":"

    Place 14 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH14--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH14--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH14--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH14--gas","title":"Gas","text":"

    3

    Source: evm.codes/#6D

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH15","title":"PUSH15 = Opcode(110, pushed_stack_items=1, data_portion_length=15) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH15--push15-value","title":"PUSH15() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH15--description","title":"Description","text":"

    Place 15 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH15--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH15--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH15--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH15--gas","title":"Gas","text":"

    3

    Source: evm.codes/#6E

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH16","title":"PUSH16 = Opcode(111, pushed_stack_items=1, data_portion_length=16) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH16--push16-value","title":"PUSH16() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH16--description","title":"Description","text":"

    Place 16 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH16--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH16--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH16--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH16--gas","title":"Gas","text":"

    3

    Source: evm.codes/#6F

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH17","title":"PUSH17 = Opcode(112, pushed_stack_items=1, data_portion_length=17) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH17--push17-value","title":"PUSH17() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH17--description","title":"Description","text":"

    Place 17 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH17--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH17--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH17--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH17--gas","title":"Gas","text":"

    3

    Source: evm.codes/#70

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH18","title":"PUSH18 = Opcode(113, pushed_stack_items=1, data_portion_length=18) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH18--push18-value","title":"PUSH18() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH18--description","title":"Description","text":"

    Place 18 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH18--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH18--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH18--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH18--gas","title":"Gas","text":"

    3

    Source: evm.codes/#71

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH19","title":"PUSH19 = Opcode(114, pushed_stack_items=1, data_portion_length=19) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH19--push19-value","title":"PUSH19() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH19--description","title":"Description","text":"

    Place 19 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH19--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH19--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH19--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH19--gas","title":"Gas","text":"

    3

    Source: evm.codes/#72

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH20","title":"PUSH20 = Opcode(115, pushed_stack_items=1, data_portion_length=20) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH20--push20-value","title":"PUSH20() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH20--description","title":"Description","text":"

    Place 20 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH20--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH20--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH20--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH20--gas","title":"Gas","text":"

    3

    Source: evm.codes/#73

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH21","title":"PUSH21 = Opcode(116, pushed_stack_items=1, data_portion_length=21) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH21--push21-value","title":"PUSH21() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH21--description","title":"Description","text":"

    Place 21 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH21--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH21--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH21--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH21--gas","title":"Gas","text":"

    3

    Source: evm.codes/#74

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH22","title":"PUSH22 = Opcode(117, pushed_stack_items=1, data_portion_length=22) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH22--push22-value","title":"PUSH22() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH22--description","title":"Description","text":"

    Place 22 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH22--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH22--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH22--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH22--gas","title":"Gas","text":"

    3

    Source: evm.codes/#75

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH23","title":"PUSH23 = Opcode(118, pushed_stack_items=1, data_portion_length=23) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH23--push23-value","title":"PUSH23() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH23--description","title":"Description","text":"

    Place 23 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH23--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH23--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH23--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH23--gas","title":"Gas","text":"

    3

    Source: evm.codes/#76

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH24","title":"PUSH24 = Opcode(119, pushed_stack_items=1, data_portion_length=24) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH24--push24-value","title":"PUSH24() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH24--description","title":"Description","text":"

    Place 24 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH24--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH24--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH24--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH24--gas","title":"Gas","text":"

    3

    Source: evm.codes/#77

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH25","title":"PUSH25 = Opcode(120, pushed_stack_items=1, data_portion_length=25) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH25--push25-value","title":"PUSH25() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH25--description","title":"Description","text":"

    Place 25 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH25--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH25--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH25--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH25--gas","title":"Gas","text":"

    3

    Source: evm.codes/#78

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH26","title":"PUSH26 = Opcode(121, pushed_stack_items=1, data_portion_length=26) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH26--push26-value","title":"PUSH26() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH26--description","title":"Description","text":"

    Place 26 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH26--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH26--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH26--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH26--gas","title":"Gas","text":"

    3

    Source: evm.codes/#79

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH27","title":"PUSH27 = Opcode(122, pushed_stack_items=1, data_portion_length=27) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH27--push27-value","title":"PUSH27() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH27--description","title":"Description","text":"

    Place 27 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH27--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH27--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH27--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH27--gas","title":"Gas","text":"

    3

    Source: evm.codes/#7A

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH28","title":"PUSH28 = Opcode(123, pushed_stack_items=1, data_portion_length=28) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH28--push28-value","title":"PUSH28() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH28--description","title":"Description","text":"

    Place 28 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH28--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH28--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH28--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH28--gas","title":"Gas","text":"

    3

    Source: evm.codes/#7B

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH29","title":"PUSH29 = Opcode(124, pushed_stack_items=1, data_portion_length=29) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH29--push29-value","title":"PUSH29() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH29--description","title":"Description","text":"

    Place 29 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH29--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH29--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH29--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH29--gas","title":"Gas","text":"

    3

    Source: evm.codes/#7C

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH30","title":"PUSH30 = Opcode(125, pushed_stack_items=1, data_portion_length=30) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH30--push30-value","title":"PUSH30() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH30--description","title":"Description","text":"

    Place 30 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH30--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH30--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH30--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH30--gas","title":"Gas","text":"

    3

    Source: evm.codes/#7D

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH31","title":"PUSH31 = Opcode(126, pushed_stack_items=1, data_portion_length=31) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH31--push31-value","title":"PUSH31() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH31--description","title":"Description","text":"

    Place 31 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH31--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH31--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH31--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH31--gas","title":"Gas","text":"

    3

    Source: evm.codes/#7E

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH32","title":"PUSH32 = Opcode(127, pushed_stack_items=1, data_portion_length=32) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH32--push32-value","title":"PUSH32() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH32--description","title":"Description","text":"

    Place 32 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH32--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH32--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH32--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH32--gas","title":"Gas","text":"

    3

    Source: evm.codes/#7F

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP1","title":"DUP1 = Opcode(128, pushed_stack_items=1, min_stack_height=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP1--dup1value-value-value","title":"DUP1(value) = value, value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP1--description","title":"Description","text":"

    Duplicate 1st stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP1--inputs","title":"Inputs","text":"
    • value: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP1--outputs","title":"Outputs","text":"
    • value: duplicated value
    • value: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP1--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP1--gas","title":"Gas","text":"

    3

    Source: evm.codes/#80

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP2","title":"DUP2 = Opcode(129, pushed_stack_items=1, min_stack_height=2) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP2--dup2v1-v2-v2-v1-v2","title":"DUP2(v1, v2) = v2, v1, v2","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP2--description","title":"Description","text":"

    Duplicate 2nd stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP2--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP2--outputs","title":"Outputs","text":"
    • v2: duplicated value
    • v1: ignored value
    • v2: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP2--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP2--gas","title":"Gas","text":"

    3

    Source: evm.codes/#81

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP3","title":"DUP3 = Opcode(130, pushed_stack_items=1, min_stack_height=3) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP3--dup3v1-v2-v3-v3-v1-v2-v3","title":"DUP3(v1, v2, v3) = v3, v1, v2, v3","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP3--description","title":"Description","text":"

    Duplicate 3rd stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP3--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • v3: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP3--outputs","title":"Outputs","text":"
    • v3: duplicated value
    • v1: ignored value
    • v2: ignored value
    • v3: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP3--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP3--gas","title":"Gas","text":"

    3

    Source: evm.codes/#82

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP4","title":"DUP4 = Opcode(131, pushed_stack_items=1, min_stack_height=4) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP4--dup4v1-v2-v3-v4-v4-v1-v2-v3-v4","title":"DUP4(v1, v2, v3, v4) = v4, v1, v2, v3, v4","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP4--description","title":"Description","text":"

    Duplicate 4th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP4--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • v3: ignored value
    • v4: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP4--outputs","title":"Outputs","text":"
    • v4: duplicated value
    • v1: ignored value
    • v2: ignored value
    • v3: ignored value
    • v4: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP4--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP4--gas","title":"Gas","text":"

    3

    Source: evm.codes/#83

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP5","title":"DUP5 = Opcode(132, pushed_stack_items=1, min_stack_height=5) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP5--dup5v1-v2-v3-v4-v5-v5-v1-v2-v3-v4-v5","title":"DUP5(v1, v2, v3, v4, v5) = v5, v1, v2, v3, v4, v5","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP5--description","title":"Description","text":"

    Duplicate 5th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP5--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • v3: ignored value
    • v4: ignored value
    • v5: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP5--outputs","title":"Outputs","text":"
    • v5: duplicated value
    • v1: ignored value
    • v2: ignored value
    • v3: ignored value
    • v4: ignored value
    • v5: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP5--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP5--gas","title":"Gas","text":"

    3

    Source: evm.codes/#84

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP6","title":"DUP6 = Opcode(133, pushed_stack_items=1, min_stack_height=6) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP6--dup6v1-v2-v5-v6-v6-v1-v2-v5-v6","title":"DUP6(v1, v2, ..., v5, v6) = v6, v1, v2, ..., v5, v6","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP6--description","title":"Description","text":"

    Duplicate 6th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP6--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v5: ignored value
    • v6: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP6--outputs","title":"Outputs","text":"
    • v6: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v5: ignored value
    • v6: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP6--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP6--gas","title":"Gas","text":"

    3

    Source: evm.codes/#85

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP7","title":"DUP7 = Opcode(134, pushed_stack_items=1, min_stack_height=7) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP7--dup7v1-v2-v6-v7-v7-v1-v2-v6-v7","title":"DUP7(v1, v2, ..., v6, v7) = v7, v1, v2, ..., v6, v7","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP7--description","title":"Description","text":"

    Duplicate 7th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP7--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v6: ignored value
    • v7: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP7--outputs","title":"Outputs","text":"
    • v7: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v6: ignored value
    • v7: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP7--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP7--gas","title":"Gas","text":"

    3

    Source: evm.codes/#86

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP8","title":"DUP8 = Opcode(135, pushed_stack_items=1, min_stack_height=8) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP8--dup8v1-v2-v7-v8-v8-v1-v2-v7-v8","title":"DUP8(v1, v2, ..., v7, v8) = v8, v1, v2, ..., v7, v8","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP8--description","title":"Description","text":"

    Duplicate 8th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP8--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v7: ignored value
    • v8: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP8--outputs","title":"Outputs","text":"
    • v8: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v7: ignored value
    • v8: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP8--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP8--gas","title":"Gas","text":"

    3

    Source: evm.codes/#87

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP9","title":"DUP9 = Opcode(136, pushed_stack_items=1, min_stack_height=9) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP9--dup9v1-v2-v8-v9-v9-v1-v2-v8-v9","title":"DUP9(v1, v2, ..., v8, v9) = v9, v1, v2, ..., v8, v9","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP9--description","title":"Description","text":"

    Duplicate 9th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP9--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v8: ignored value
    • v9: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP9--outputs","title":"Outputs","text":"
    • v9: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v8: ignored value
    • v9: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP9--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP9--gas","title":"Gas","text":"

    3

    Source: evm.codes/#88

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP10","title":"DUP10 = Opcode(137, pushed_stack_items=1, min_stack_height=10) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP10--dup10v1-v2-v9-v10-v10-v1-v2-v9-v10","title":"DUP10(v1, v2, ..., v9, v10) = v10, v1, v2, ..., v9, v10","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP10--description","title":"Description","text":"

    Duplicate 10th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP10--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v9: ignored value
    • v10: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP10--outputs","title":"Outputs","text":"
    • v10: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v9: ignored value
    • v10: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP10--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP10--gas","title":"Gas","text":"

    3

    Source: evm.codes/#89

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP11","title":"DUP11 = Opcode(138, pushed_stack_items=1, min_stack_height=11) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP11--dup11v1-v2-v10-v11-v11-v1-v2-v10-v11","title":"DUP11(v1, v2, ..., v10, v11) = v11, v1, v2, ..., v10, v11","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP11--description","title":"Description","text":"

    Duplicate 11th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP11--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v10: ignored value
    • v11: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP11--outputs","title":"Outputs","text":"
    • v11: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v10: ignored value
    • v11: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP11--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP11--gas","title":"Gas","text":"

    3

    Source: evm.codes/#8A

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP12","title":"DUP12 = Opcode(139, pushed_stack_items=1, min_stack_height=12) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP12--dup12v1-v2-v11-v12-v12-v1-v2-v11-v12","title":"DUP12(v1, v2, ..., v11, v12) = v12, v1, v2, ..., v11, v12","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP12--description","title":"Description","text":"

    Duplicate 12th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP12--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v11: ignored value
    • v12: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP12--outputs","title":"Outputs","text":"
    • v12: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v11: ignored value
    • v12: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP12--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP12--gas","title":"Gas","text":"

    3

    Source: evm.codes/#8B

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP13","title":"DUP13 = Opcode(140, pushed_stack_items=1, min_stack_height=13) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP13--dup13v1-v2-v12-v13-v13-v1-v2-v12-v13","title":"DUP13(v1, v2, ..., v12, v13) = v13, v1, v2, ..., v12, v13","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP13--description","title":"Description","text":"

    Duplicate 13th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP13--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v12: ignored value
    • v13: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP13--outputs","title":"Outputs","text":"
    • v13: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v12: ignored value
    • v13: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP13--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP13--gas","title":"Gas","text":"

    3

    Source: evm.codes/#8C

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP14","title":"DUP14 = Opcode(141, pushed_stack_items=1, min_stack_height=14) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP14--dup14v1-v2-v13-v14-v14-v1-v2-v13-v14","title":"DUP14(v1, v2, ..., v13, v14) = v14, v1, v2, ..., v13, v14","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP14--description","title":"Description","text":"

    Duplicate 14th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP14--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v13: ignored value
    • v14: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP14--outputs","title":"Outputs","text":"
    • v14: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v13: ignored value
    • v14: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP14--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP14--gas","title":"Gas","text":"

    3

    Source: evm.codes/#8D

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP15","title":"DUP15 = Opcode(142, pushed_stack_items=1, min_stack_height=15) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP15--dup15v1-v2-v14-v15-v15-v1-v2-v14-v15","title":"DUP15(v1, v2, ..., v14, v15) = v15, v1, v2, ..., v14, v15","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP15--description","title":"Description","text":"

    Duplicate 15th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP15--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v14: ignored value
    • v15: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP15--outputs","title":"Outputs","text":"
    • v15: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v14: ignored value
    • v15: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP15--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP15--gas","title":"Gas","text":"

    3

    Source: evm.codes/#8E

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP16","title":"DUP16 = Opcode(143, pushed_stack_items=1, min_stack_height=16) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP16--dup16v1-v2-v15-v16-v16-v1-v2-v15-v16","title":"DUP16(v1, v2, ..., v15, v16) = v16, v1, v2, ..., v15, v16","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP16--description","title":"Description","text":"

    Duplicate 16th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP16--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v15: ignored value
    • v16: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP16--outputs","title":"Outputs","text":"
    • v16: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v15: ignored value
    • v16: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP16--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP16--gas","title":"Gas","text":"

    3

    Source: evm.codes/#8F

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP1","title":"SWAP1 = Opcode(144, min_stack_height=2) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP1--swap1v1-v2-v2-v1","title":"SWAP1(v1, v2) = v2, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP1--description","title":"Description","text":"

    Exchange the top stack item with the second stack item.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP1--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP1--outputs","title":"Outputs","text":"
    • v1: swapped value
    • v2: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP1--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP1--gas","title":"Gas","text":"

    3

    Source: evm.codes/#90

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP2","title":"SWAP2 = Opcode(145, min_stack_height=3) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP2--swap2v1-v2-v3-v3-v2-v1","title":"SWAP2(v1, v2, v3) = v3, v2, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP2--description","title":"Description","text":"

    Exchange 1st and 3rd stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP2--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • v3: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP2--outputs","title":"Outputs","text":"
    • v3: swapped value
    • v2: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP2--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP2--gas","title":"Gas","text":"

    3

    Source: evm.codes/#91

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP3","title":"SWAP3 = Opcode(146, min_stack_height=4) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP3--swap3v1-v2-v3-v4-v4-v2-v3-v1","title":"SWAP3(v1, v2, v3, v4) = v4, v2, v3, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP3--description","title":"Description","text":"

    Exchange 1st and 4th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP3--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • v3: ignored value
    • v4: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP3--outputs","title":"Outputs","text":"
    • v4: swapped value
    • v2: ignored value
    • v3: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP3--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP3--gas","title":"Gas","text":"

    3

    Source: evm.codes/#92

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP4","title":"SWAP4 = Opcode(147, min_stack_height=5) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP4--swap4v1-v2-v4-v5-v5-v2-v4-v1","title":"SWAP4(v1, v2, ..., v4, v5) = v5, v2, ..., v4, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP4--description","title":"Description","text":"

    Exchange 1st and 5th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP4--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v4: ignored value
    • v5: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP4--outputs","title":"Outputs","text":"
    • v5: swapped value
    • v2: ignored value
    • ...
    • v4: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP4--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP4--gas","title":"Gas","text":"

    3

    Source: evm.codes/#93

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP5","title":"SWAP5 = Opcode(148, min_stack_height=6) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP5--swap5v1-v2-v5-v6-v6-v2-v5-v1","title":"SWAP5(v1, v2, ..., v5, v6) = v6, v2, ..., v5, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP5--description","title":"Description","text":"

    Exchange 1st and 6th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP5--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v5: ignored value
    • v6: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP5--outputs","title":"Outputs","text":"
    • v6: swapped value
    • v2: ignored value
    • ...
    • v5: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP5--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP5--gas","title":"Gas","text":"

    3

    Source: evm.codes/#94

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP6","title":"SWAP6 = Opcode(149, min_stack_height=7) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP6--swap6v1-v2-v6-v7-v7-v2-v6-v1","title":"SWAP6(v1, v2, ..., v6, v7) = v7, v2, ..., v6, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP6--description","title":"Description","text":"

    Exchange 1st and 7th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP6--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v6: ignored value
    • v7: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP6--outputs","title":"Outputs","text":"
    • v7: swapped value
    • v2: ignored value
    • ...
    • v6: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP6--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP6--gas","title":"Gas","text":"

    3

    Source: evm.codes/#95

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP7","title":"SWAP7 = Opcode(150, min_stack_height=8) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP7--swap7v1-v2-v7-v8-v8-v2-v7-v1","title":"SWAP7(v1, v2, ..., v7, v8) = v8, v2, ..., v7, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP7--description","title":"Description","text":"

    Exchange 1st and 8th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP7--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v7: ignored value
    • v8: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP7--outputs","title":"Outputs","text":"
    • v8: swapped value
    • v2: ignored value
    • ...
    • v7: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP7--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP7--gas","title":"Gas","text":"

    3

    Source: evm.codes/#96

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP8","title":"SWAP8 = Opcode(151, min_stack_height=9) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP8--swap8v1-v2-v8-v9-v9-v2-v8-v1","title":"SWAP8(v1, v2, ..., v8, v9) = v9, v2, ..., v8, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP8--description","title":"Description","text":"

    Exchange 1st and 9th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP8--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v8: ignored value
    • v9: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP8--outputs","title":"Outputs","text":"
    • v9: swapped value
    • v2: ignored value
    • ...
    • v8: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP8--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP8--gas","title":"Gas","text":"

    3

    Source: evm.codes/#97

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP9","title":"SWAP9 = Opcode(152, min_stack_height=10) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP9--swap9v1-v2-v9-v10-v10-v2-v9-v1","title":"SWAP9(v1, v2, ..., v9, v10) = v10, v2, ..., v9, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP9--description","title":"Description","text":"

    Exchange 1st and 10th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP9--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v9: ignored value
    • v10: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP9--outputs","title":"Outputs","text":"
    • v10: swapped value
    • v2: ignored value
    • ...
    • v9: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP9--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP9--gas","title":"Gas","text":"

    3

    Source: evm.codes/#98

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP10","title":"SWAP10 = Opcode(153, min_stack_height=11) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP10--swap10v1-v2-v10-v11-v11-v2-v10-v1","title":"SWAP10(v1, v2, ..., v10, v11) = v11, v2, ..., v10, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP10--description","title":"Description","text":"

    Exchange 1st and 11th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP10--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v10: ignored value
    • v11: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP10--outputs","title":"Outputs","text":"
    • v11: swapped value
    • v2: ignored value
    • ...
    • v10: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP10--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP10--gas","title":"Gas","text":"

    3

    Source: evm.codes/#99

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP11","title":"SWAP11 = Opcode(154, min_stack_height=12) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP11--swap11v1-v2-v11-v12-v12-v2-v11-v1","title":"SWAP11(v1, v2, ..., v11, v12) = v12, v2, ..., v11, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP11--description","title":"Description","text":"

    Exchange 1st and 12th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP11--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v11: ignored value
    • v12: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP11--outputs","title":"Outputs","text":"
    • v12: swapped value
    • v2: ignored value
    • ...
    • v11: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP11--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP11--gas","title":"Gas","text":"

    3

    Source: evm.codes/#9A

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP12","title":"SWAP12 = Opcode(155, min_stack_height=13) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP12--swap12v1-v2-v12-v13-v13-v2-v12-v1","title":"SWAP12(v1, v2, ..., v12, v13) = v13, v2, ..., v12, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP12--description","title":"Description","text":"

    Exchange 1st and 13th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP12--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v12: ignored value
    • v13: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP12--outputs","title":"Outputs","text":"
    • v13: swapped value
    • v2: ignored value
    • ...
    • v12: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP12--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP12--gas","title":"Gas","text":"

    3

    Source: evm.codes/#9B

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP13","title":"SWAP13 = Opcode(156, min_stack_height=14) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP13--swap13v1-v2-v13-v14-v14-v2-v13-v1","title":"SWAP13(v1, v2, ..., v13, v14) = v14, v2, ..., v13, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP13--description","title":"Description","text":"

    Exchange 1st and 14th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP13--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v13: ignored value
    • v14: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP13--outputs","title":"Outputs","text":"
    • v14: swapped value
    • v2: ignored value
    • ...
    • v13: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP13--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP13--gas","title":"Gas","text":"

    3

    Source: evm.codes/#9C

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP14","title":"SWAP14 = Opcode(157, min_stack_height=15) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP14--swap14v1-v2-v14-v15-v15-v2-v14-v1","title":"SWAP14(v1, v2, ..., v14, v15) = v15, v2, ..., v14, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP14--description","title":"Description","text":"

    Exchange 1st and 15th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP14--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v14: ignored value
    • v15: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP14--outputs","title":"Outputs","text":"
    • v15: swapped value
    • v2: ignored value
    • ...
    • v14: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP14--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP14--gas","title":"Gas","text":"

    3

    Source: evm.codes/#9D

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP15","title":"SWAP15 = Opcode(158, min_stack_height=16) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP15--swap15v1-v2-v15-v16-v16-v2-v15-v1","title":"SWAP15(v1, v2, ..., v15, v16) = v16, v2, ..., v15, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP15--description","title":"Description","text":"

    Exchange 1st and 16th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP15--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v15: ignored value
    • v16: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP15--outputs","title":"Outputs","text":"
    • v16: swapped value
    • v2: ignored value
    • ...
    • v15: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP15--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP15--gas","title":"Gas","text":"

    3

    Source: evm.codes/#9E

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP16","title":"SWAP16 = Opcode(159, min_stack_height=17) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP16--swap16v1-v2-v16-v17-v17-v2-v16-v1","title":"SWAP16(v1, v2, ..., v16, v17) = v17, v2, ..., v16, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP16--description","title":"Description","text":"

    Exchange 1st and 17th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP16--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v16: ignored value
    • v17: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP16--outputs","title":"Outputs","text":"
    • v17: swapped value
    • v2: ignored value
    • ...
    • v16: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP16--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP16--gas","title":"Gas","text":"

    3

    Source: evm.codes/#9F

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG0","title":"LOG0 = Opcode(160, popped_stack_items=2, kwargs=['offset', 'size']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG0--log0offset-size","title":"LOG0(offset, size)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG0--description","title":"Description","text":"

    Append log record with no topics

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG0--inputs","title":"Inputs","text":"
    • offset: byte offset in the memory in bytes
    • size: byte size to copy
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG0--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG0--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG0--gas","title":"Gas","text":"
    • static_gas = 375
    • dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost

    Source: evm.codes/#A0

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG1","title":"LOG1 = Opcode(161, popped_stack_items=3, kwargs=['offset', 'size', 'topic_1']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG1--log1offset-size-topic_1","title":"LOG1(offset, size, topic_1)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG1--description","title":"Description","text":"

    Append log record with one topic

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG1--inputs","title":"Inputs","text":"
    • offset: byte offset in the memory in bytes
    • size: byte size to copy
    • topic_1: 32-byte value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG1--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG1--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG1--gas","title":"Gas","text":"
    • static_gas = 375
    • dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost

    Source: evm.codes/#A1

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG2","title":"LOG2 = Opcode(162, popped_stack_items=4, kwargs=['offset', 'size', 'topic_1', 'topic_2']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG2--log2offset-size-topic_1-topic_2","title":"LOG2(offset, size, topic_1, topic_2)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG2--description","title":"Description","text":"

    Append log record with two topics

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG2--inputs","title":"Inputs","text":"
    • offset: byte offset in the memory in bytes
    • size: byte size to copy
    • topic_1: 32-byte value
    • topic_2: 32-byte value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG2--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG2--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG2--gas","title":"Gas","text":"
    • static_gas = 375
    • dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost

    Source: evm.codes/#A2

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG3","title":"LOG3 = Opcode(163, popped_stack_items=5, kwargs=['offset', 'size', 'topic_1', 'topic_2', 'topic_3']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG3--log3offset-size-topic_1-topic_2-topic_3","title":"LOG3(offset, size, topic_1, topic_2, topic_3)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG3--description","title":"Description","text":"

    Append log record with three topics

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG3--inputs","title":"Inputs","text":"
    • offset: byte offset in the memory in bytes
    • size: byte size to copy
    • topic_1: 32-byte value
    • topic_2: 32-byte value
    • topic_3: 32-byte value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG3--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG3--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG3--gas","title":"Gas","text":"
    • static_gas = 375
    • dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost

    Source: evm.codes/#A3

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG4","title":"LOG4 = Opcode(164, popped_stack_items=6, kwargs=['offset', 'size', 'topic_1', 'topic_2', 'topic_3', 'topic_4']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG4--log4offset-size-topic_1-topic_2-topic_3-topic_4","title":"LOG4(offset, size, topic_1, topic_2, topic_3, topic_4)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG4--description","title":"Description","text":"

    Append log record with four topics

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG4--inputs","title":"Inputs","text":"
    • offset: byte offset in the memory in bytes
    • size: byte size to copy
    • topic_1: 32-byte value
    • topic_2: 32-byte value
    • topic_3: 32-byte value
    • topic_4: 32-byte value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG4--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG4--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG4--gas","title":"Gas","text":"
    • static_gas = 375
    • dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost

    Source: evm.codes/#A4

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMP","title":"RJUMP = Opcode(224, data_portion_length=2) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMP--rjump","title":"RJUMP()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMP--description","title":"Description","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMP--inputs","title":"Inputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMP--outputs","title":"Outputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMP--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMP--gas","title":"Gas","text":"

    Source: eips.ethereum.org/EIPS/eip-4200

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOAD","title":"DATALOAD = Opcode(208, popped_stack_items=1, kwargs=['offset']) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOAD--dataloadoffset","title":"DATALOAD(offset)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOAD--description","title":"Description","text":"

    Reads 32 bytes of data at offset onto the stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOAD--inputs","title":"Inputs","text":"
    • offset: offset within the data section to start copying
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOAD--outputs","title":"Outputs","text":"

    none

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOAD--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOAD--gas","title":"Gas","text":"

    4

    Source: eips.ethereum.org/EIPS/eip-7480

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOADN","title":"DATALOADN = Opcode(209, pushed_stack_items=1, data_portion_length=2) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOADN--dataloadn","title":"DATALOADN()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOADN--description","title":"Description","text":"

    Reads 32 bytes of data at offset onto the stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOADN--immediates","title":"Immediates","text":"

    2 bytes forming a UInt16, which is the offset into the data section.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOADN--inputs","title":"Inputs","text":"

    none

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOADN--outputs","title":"Outputs","text":"

    none

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOADN--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOADN--gas","title":"Gas","text":"

    3

    Source: eips.ethereum.org/EIPS/eip-7480

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATASIZE","title":"DATASIZE = Opcode(210, pushed_stack_items=1) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATASIZE--datasize","title":"DATASIZE()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATASIZE--description","title":"Description","text":"

    Returns the size of the data section

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATASIZE--inputs","title":"Inputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATASIZE--outputs","title":"Outputs","text":"

    The size of the data section. If there is no data section, returns 0.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATASIZE--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATASIZE--gas","title":"Gas","text":"

    2

    Source: eips.ethereum.org/EIPS/eip-7480

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATACOPY","title":"DATACOPY = Opcode(211, popped_stack_items=3, kwargs=['dest_offset', 'offset', 'size']) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATACOPY--datacopydest_offset-offset-size","title":"DATACOPY(dest_offset, offset, size)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATACOPY--description","title":"Description","text":"

    Copies data from the data section into call frame memory

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATACOPY--inputs","title":"Inputs","text":"
    • dest_offset: The offset within the memory section to start copying to
    • offset: The offset within the data section to start copying from
    • size: The number of bytes to copy
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATACOPY--outputs","title":"Outputs","text":"

    none

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATACOPY--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATACOPY--gas","title":"Gas","text":"
    • minimum_word_size = (size + 31) / 32
    • static_gas = 3
    • dynamic_gas = 3 * minimum_word_size + memory_expansion_cost

    Source: eips.ethereum.org/EIPS/eip-7480

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPI","title":"RJUMPI = Opcode(225, popped_stack_items=1, data_portion_length=2) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPI--rjumpi","title":"RJUMPI()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPI--description","title":"Description","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPI--inputs","title":"Inputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPI--outputs","title":"Outputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPI--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPI--gas","title":"Gas","text":"

    Source: eips.ethereum.org/EIPS/eip-4200

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPV","title":"RJUMPV = Opcode(226, popped_stack_items=1, data_portion_formatter=_rjumpv_encoder) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPV--rjumpv","title":"RJUMPV()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPV--description","title":"Description","text":"

    Relative jump with variable offset.

    When calling this opcode to generate bytecode, the first argument is used to format the data portion of the opcode, and it can be either of two types: - A bytes type, and in this instance the bytes are used verbatim as the data portion. - An integer iterable, list or tuple or any other iterable, where each element is a jump offset.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPV--inputs","title":"Inputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPV--outputs","title":"Outputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPV--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPV--gas","title":"Gas","text":"

    Source: eips.ethereum.org/EIPS/eip-4200

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLF","title":"CALLF = Opcode(227, data_portion_length=2, unchecked_stack=True) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLF--callf","title":"CALLF()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLF--description","title":"Description","text":"
    • deduct 5 gas
    • read uint16 operand idx
    • if 1024 < len(stack) + types[idx].max_stack_height - types[idx].inputs, execution results in an exceptional halt
    • if 1024 <= len(return_stack), execution results in an exceptional halt
    • push new element to return_stack (current_code_idx, pc+3)
    • update current_code_idx to idx and set pc to 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLF--inputs","title":"Inputs","text":"

    Any: The inputs are not checked because we cannot know how many inputs the callee function/section requires

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLF--outputs","title":"Outputs","text":"

    Any: The outputs are variable because we cannot know how many outputs the callee function/section produces

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLF--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLF--gas","title":"Gas","text":"

    5

    Source: ipsilon/eof/blob/main/spec/eof.md

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETF","title":"RETF = Opcode(228, terminating=True) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETF--retf","title":"RETF()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETF--description","title":"Description","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETF--inputs","title":"Inputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETF--outputs","title":"Outputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETF--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETF--gas","title":"Gas","text":"

    3

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPF","title":"JUMPF = Opcode(229, data_portion_length=2, terminating=True) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPF--jumpf","title":"JUMPF()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPF--description","title":"Description","text":"
    • deduct 5 gas
    • read uint16 operand idx
    • if 1024 < len(stack) + types[idx].max_stack_height - types[idx].inputs, execution results in an exceptional halt
    • set current_code_idx to idx
    • set pc = 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPF--inputs","title":"Inputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPF--outputs","title":"Outputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPF--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPF--gas","title":"Gas","text":"

    5

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUPN","title":"DUPN = Opcode(230, pushed_stack_items=1, data_portion_length=1, stack_properties_modifier=_dupn_stack_properties_modifier) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUPN--dupn","title":"DUPN()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUPN--description","title":"Description","text":"
    • deduct 3 gas
    • read uint8 operand imm
    • n = imm + 1
    • n\u2018th (1-based) stack item is duplicated at the top of the stack
    • Stack validation: stack_height >= n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUPN--inputs","title":"Inputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUPN--outputs","title":"Outputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUPN--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUPN--gas","title":"Gas","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAPN","title":"SWAPN = Opcode(231, data_portion_length=1, stack_properties_modifier=_swapn_stack_properties_modifier) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAPN--swapn","title":"SWAPN()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAPN--description","title":"Description","text":"
    • deduct 3 gas
    • read uint8 operand imm
    • n = imm + 1
    • n + 1th stack item is swapped with the top stack item (1-based).
    • Stack validation: stack_height >= n + 1
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAPN--inputs","title":"Inputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAPN--outputs","title":"Outputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAPN--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAPN--gas","title":"Gas","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXCHANGE","title":"EXCHANGE = Opcode(232, data_portion_formatter=_exchange_encoder, stack_properties_modifier=_exchange_stack_properties_modifier) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXCHANGE--exchangex-y","title":"EXCHANGE[x, y]","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXCHANGE--description","title":"Description","text":"

    Exchanges two stack positions. Two nybbles, n is high 4 bits + 1, then m is 4 low bits + 1. Exchanges tne n+1'th item with the n + m + 1 item.

    Inputs x and y when the opcode is used as EXCHANGE[x, y], are equal to: - x = n + 1 - y = n + m + 1 Which each equals to 1-based stack positions swapped.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXCHANGE--inputs","title":"Inputs","text":"

    n + m + 1, or ((imm >> 4) + (imm &0x0F) + 3) from the raw immediate,

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXCHANGE--outputs","title":"Outputs","text":"

    n + m + 1, or ((imm >> 4) + (imm &0x0F) + 3) from the raw immediate,

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXCHANGE--fork","title":"Fork","text":"

    EOF_FORK

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXCHANGE--gas","title":"Gas","text":"

    3

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EOFCREATE","title":"EOFCREATE = Opcode(236, popped_stack_items=4, pushed_stack_items=1, data_portion_length=1, kwargs=['value', 'salt', 'input_offset', 'input_size']) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EOFCREATE--eofcreateinitcontainer_index","title":"EOFCREATEinitcontainer_index","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EOFCREATE--description","title":"Description","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EOFCREATE--inputs","title":"Inputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EOFCREATE--outputs","title":"Outputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EOFCREATE--fork","title":"Fork","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EOFCREATE--gas","title":"Gas","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNCONTRACT","title":"RETURNCONTRACT = Opcode(238, popped_stack_items=2, data_portion_length=1, terminating=True) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNCONTRACT--returncontract","title":"RETURNCONTRACT()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNCONTRACT--description","title":"Description","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNCONTRACT--inputs","title":"Inputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNCONTRACT--outputs","title":"Outputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNCONTRACT--fork","title":"Fork","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNCONTRACT--gas","title":"Gas","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE","title":"CREATE = Opcode(240, popped_stack_items=3, pushed_stack_items=1, kwargs=['value', 'offset', 'size']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE--createvalue-offset-size-address","title":"CREATE(value, offset, size) = address","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE--description","title":"Description","text":"

    Create a new contract with the given code

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE--inputs","title":"Inputs","text":"
    • value: value in wei to send to the new account
    • offset: byte offset in the memory in bytes, the initialization code for the new account
    • size: byte size to copy (size of the initialization code)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE--outputs","title":"Outputs","text":"
    • address: the address of the deployed contract, 0 if the deployment failed
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE--gas","title":"Gas","text":"
    minimum_word_size = (size + 31) / 32\ninit_code_cost = 2 * minimum_word_size\ncode_deposit_cost = 200 * deployed_code_size\n\nstatic_gas = 32000\ndynamic_gas = init_code_cost + memory_expansion_cost + deployment_code_execution_cost\n    + code_deposit_cost\n

    Source: evm.codes/#F0

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALL","title":"CALL = Opcode(241, popped_stack_items=7, pushed_stack_items=1, kwargs=['gas', 'address', 'value', 'args_offset', 'args_size', 'ret_offset', 'ret_size'], kwargs_defaults={'gas': GAS}) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALL--callgas-address-value-args_offset-args_size-ret_offset-ret_size-success","title":"CALL(gas, address, value, args_offset, args_size, ret_offset, ret_size) = success","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALL--description","title":"Description","text":"

    Message-call into an account

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALL--inputs","title":"Inputs","text":"
    • gas: amount of gas to send to the sub context to execute. The gas that is not used by the sub context is returned to this one
    • address: the account which context to execute
    • value: value in wei to send to the account
    • args_offset: byte offset in the memory in bytes, the calldata of the sub context
    • args_size: byte size to copy (size of the calldata)
    • ret_offset: byte offset in the memory in bytes, where to store the return data of the sub context
    • ret_size: byte size to copy (size of the return data)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALL--outputs","title":"Outputs","text":"
    • success: return 0 if the sub context reverted, 1 otherwise
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALL--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALL--gas","title":"Gas","text":"
    static_gas = 0\ndynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost\n    + positive_value_cost + value_to_empty_account_cost\n

    Source: evm.codes/#F1

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLCODE","title":"CALLCODE = Opcode(242, popped_stack_items=7, pushed_stack_items=1, kwargs=['gas', 'address', 'value', 'args_offset', 'args_size', 'ret_offset', 'ret_size'], kwargs_defaults={'gas': GAS}) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLCODE--callcodegas-address-value-args_offset-args_size-ret_offset-ret_size-success","title":"CALLCODE(gas, address, value, args_offset, args_size, ret_offset, ret_size) = success","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLCODE--description","title":"Description","text":"

    Message-call into this account with an alternative account's code. Executes code starting at the address to which the call is made.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLCODE--inputs","title":"Inputs","text":"
    • gas: amount of gas to send to the sub context to execute. The gas that is not used by the sub context is returned to this one
    • address: the account which code to execute
    • value: value in wei to send to the account
    • args_offset: byte offset in the memory in bytes, the calldata of the sub context
    • args_size: byte size to copy (size of the calldata)
    • ret_offset: byte offset in the memory in bytes, where to store the return data of the sub context
    • ret_size: byte size to copy (size of the return data)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLCODE--outputs","title":"Outputs","text":"
    • success: return 0 if the sub context reverted, 1 otherwise
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLCODE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLCODE--gas","title":"Gas","text":"
    static_gas = 0\ndynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost\n    + positive_value_cost\n

    Source: evm.codes/#F2

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURN","title":"RETURN = Opcode(243, popped_stack_items=2, kwargs=['offset', 'size'], terminating=True) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURN--returnoffset-size","title":"RETURN(offset, size)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURN--description","title":"Description","text":"

    Halt execution returning output data

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURN--inputs","title":"Inputs","text":"
    • offset: byte offset in the memory in bytes, to copy what will be the return data of this context
    • size: byte size to copy (size of the return data)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURN--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURN--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURN--gas","title":"Gas","text":"
    • static_gas = 0
    • dynamic_gas = memory_expansion_cost

    Source: evm.codes/#F3

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DELEGATECALL","title":"DELEGATECALL = Opcode(244, popped_stack_items=6, pushed_stack_items=1, kwargs=['gas', 'address', 'args_offset', 'args_size', 'ret_offset', 'ret_size'], kwargs_defaults={'gas': GAS}) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DELEGATECALL--delegatecallgas-address-args_offset-args_size-ret_offset-ret_size-success","title":"DELEGATECALL(gas, address, args_offset, args_size, ret_offset, ret_size) = success","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DELEGATECALL--description","title":"Description","text":"

    Message-call into this account with an alternative account's code, but persisting the current values for sender and value

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DELEGATECALL--inputs","title":"Inputs","text":"
    • gas: amount of gas to send to the sub context to execute. The gas that is not used by the sub context is returned to this one
    • address: the account which code to execute
    • args_offset: byte offset in the memory in bytes, the calldata of the sub context
    • args_size: byte size to copy (size of the calldata)
    • ret_offset: byte offset in the memory in bytes, where to store the return data of the sub context
    • ret_size: byte size to copy (size of the return data)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DELEGATECALL--outputs","title":"Outputs","text":"
    • success: return 0 if the sub context reverted, 1 otherwise
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DELEGATECALL--fork","title":"Fork","text":"

    Byzantium

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DELEGATECALL--gas","title":"Gas","text":"
    • static_gas = 0
    • dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost

    Source: evm.codes/#F4

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE2","title":"CREATE2 = Opcode(245, popped_stack_items=4, pushed_stack_items=1, kwargs=['value', 'offset', 'size', 'salt']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE2--create2value-offset-size-salt-address","title":"CREATE2(value, offset, size, salt) = address","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE2--description","title":"Description","text":"

    Creates a new contract

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE2--inputs","title":"Inputs","text":"
    • value: value in wei to send to the new account
    • offset: byte offset in the memory in bytes, the initialization code of the new account
    • size: byte size to copy (size of the initialization code)
    • salt: 32-byte value used to create the new account at a deterministic address
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE2--outputs","title":"Outputs","text":"
    • address: the address of the deployed contract, 0 if the deployment failed
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE2--fork","title":"Fork","text":"

    Constantinople

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE2--gas","title":"Gas","text":"
    minimum_word_size = (size + 31) / 32\ninit_code_cost = 2 * minimum_word_size\nhash_cost = 6 * minimum_word_size\ncode_deposit_cost = 200 * deployed_code_size\n\nstatic_gas = 32000\ndynamic_gas = init_code_cost + hash_cost + memory_expansion_cost\n    + deployment_code_execution_cost + code_deposit_cost\n

    Source: evm.codes/#F5

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCALL","title":"EXTCALL = Opcode(248, popped_stack_items=4, pushed_stack_items=1, kwargs=['address', 'args_offset', 'args_size', 'value']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCALL--extcalladdress-args_offset-args_size-value-address","title":"EXTCALL(address, args_offset, args_size, value) = address","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCALL--description","title":"Description","text":"

    Message-call into an account

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCALL--inputs","title":"Inputs","text":"
    • address: the account which context to execute
    • args_offset: byte offset in the memory in bytes, the calldata of the sub context
    • args_size: byte size to copy (size of the calldata)
    • value: value in wei to send to the account
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCALL--outputs","title":"Outputs","text":"
    • success:
      • 0 if the call was successful.
      • 1 if the call has reverted (also can be pushed earlier in a light failure scenario).
      • 2 if the call has failed.
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCALL--fork","title":"Fork","text":"

    Prague

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCALL--gas","title":"Gas","text":"
    static_gas = 0\ndynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost\n    + positive_value_cost + value_to_empty_account_cost\n

    Source: EIP-7069

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTDELEGATECALL","title":"EXTDELEGATECALL = Opcode(249, popped_stack_items=3, pushed_stack_items=1, kwargs=['address', 'args_offset', 'args_size']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTDELEGATECALL--extdelegatecalladdress-args_offset-args_size-address","title":"EXTDELEGATECALL(address, args_offset, args_size) = address","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTDELEGATECALL--description","title":"Description","text":"

    Message-call into this account with an alternative account's code, but persisting the current values for sender and value

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTDELEGATECALL--inputs","title":"Inputs","text":"
    • address: the account which context to execute
    • args_offset: byte offset in the memory in bytes, the calldata of the sub context
    • args_size: byte size to copy (size of the calldata)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTDELEGATECALL--outputs","title":"Outputs","text":"
    • success:
      • 0 if the call was successful.
      • 1 if the call has reverted (also can be pushed earlier in a light failure scenario).
      • 2 if the call has failed.
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTDELEGATECALL--fork","title":"Fork","text":"

    Prague

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTDELEGATECALL--gas","title":"Gas","text":"
    • static_gas = 0
    • dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost

    Source: EIP-7069

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STATICCALL","title":"STATICCALL = Opcode(250, popped_stack_items=6, pushed_stack_items=1, kwargs=['gas', 'address', 'args_offset', 'args_size', 'ret_offset', 'ret_size'], kwargs_defaults={'gas': GAS}) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STATICCALL--staticcallgas-address-args_offset-args_size-ret_offset-ret_size-success","title":"STATICCALL(gas, address, args_offset, args_size, ret_offset, ret_size) = success","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STATICCALL--description","title":"Description","text":"

    Static message-call into an account

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STATICCALL--inputs","title":"Inputs","text":"
    • gas: amount of gas to send to the sub context to execute. The gas that is not used by the sub context is returned to this one
    • address: the account which context to execute
    • args_offset: byte offset in the memory in bytes, the calldata of the sub context
    • args_size: byte size to copy (size of the calldata)
    • ret_offset: byte offset in the memory in bytes, where to store the return data of the sub context
    • ret_size: byte size to copy (size of the return data)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STATICCALL--outputs","title":"Outputs","text":"
    • success: return 0 if the sub context reverted, 1 otherwise
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STATICCALL--fork","title":"Fork","text":"

    Byzantium

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STATICCALL--gas","title":"Gas","text":"
    • static_gas = 0
    • dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost

    Source: evm.codes/#FA

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTSTATICCALL","title":"EXTSTATICCALL = Opcode(251, popped_stack_items=3, pushed_stack_items=1, kwargs=['address', 'args_offset', 'args_size']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTSTATICCALL--extstaticcalladdress-args_offset-args_size-address","title":"EXTSTATICCALL(address, args_offset, args_size) = address","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTSTATICCALL--description","title":"Description","text":"

    Static message-call into an account

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTSTATICCALL--inputs","title":"Inputs","text":"
    • address: the account which context to execute
    • args_offset: byte offset in the memory in bytes, the calldata of the sub context
    • args_size: byte size to copy (size of the calldata)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTSTATICCALL--outputs","title":"Outputs","text":"
    • success:
      • 0 if the call was successful.
      • 1 if the call has reverted (also can be pushed earlier in a light failure scenario).
      • 2 if the call has failed.
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTSTATICCALL--fork","title":"Fork","text":"

    Prague

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTSTATICCALL--gas","title":"Gas","text":"
    • static_gas = 0
    • dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost

    Source: EIP-7069

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATALOAD","title":"RETURNDATALOAD = Opcode(247, popped_stack_items=1, pushed_stack_items=1, kwargs=['offset']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATALOAD--returndataloadoffset","title":"RETURNDATALOAD(offset)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATALOAD--description","title":"Description","text":"

    Copy 32 bytes from returndata at offset onto the stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATALOAD--inputs","title":"Inputs","text":"
    • offset: byte offset in the return data from the last executed sub context to copy
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATALOAD--fork","title":"Fork","text":"

    EOF

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATALOAD--gas","title":"Gas","text":"

    3

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.REVERT","title":"REVERT = Opcode(253, popped_stack_items=2, kwargs=['offset', 'size'], terminating=True) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.REVERT--revertoffset-size","title":"REVERT(offset, size)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.REVERT--description","title":"Description","text":"

    Halt execution reverting state changes but returning data and remaining gas

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.REVERT--inputs","title":"Inputs","text":"
    • offset: byte offset in the memory in bytes. The return data of the calling context
    • size: byte size to copy (size of the return data)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.REVERT--fork","title":"Fork","text":"

    Byzantium

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.REVERT--gas","title":"Gas","text":"

    static_gas = 0 dynamic_gas = memory_expansion_cost

    Source: evm.codes/#FD

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.INVALID","title":"INVALID = Opcode(254, terminating=True) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.INVALID--invalid","title":"INVALID()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.INVALID--description","title":"Description","text":"

    Designated invalid instruction

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.INVALID--inputs","title":"Inputs","text":"

    None

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.INVALID--outputs","title":"Outputs","text":"

    None

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.INVALID--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.INVALID--gas","title":"Gas","text":"

    All the remaining gas in this context is consumed

    Source: evm.codes/#FE

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFDESTRUCT","title":"SELFDESTRUCT = Opcode(255, popped_stack_items=1, kwargs=['address']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFDESTRUCT--selfdestructaddress","title":"SELFDESTRUCT(address)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFDESTRUCT--description","title":"Description","text":"

    Halt execution and register the account for later deletion

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFDESTRUCT--inputs","title":"Inputs","text":"
    • address: account to send the current balance to
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFDESTRUCT--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFDESTRUCT--gas","title":"Gas","text":"

    5000

    Source: evm.codes/#FF

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.UndefinedOpcodes","title":"UndefinedOpcodes","text":"

    Bases: Opcode, Enum

    Enum containing all unknown opcodes (88 at the moment).

    Source code in src/ethereum_test_vm/opcode.py
    class UndefinedOpcodes(Opcode, Enum):\n    \"\"\"\n    Enum containing all unknown opcodes (88 at the moment).\n    \"\"\"\n\n    OPCODE_0C = Opcode(0x0C)\n    OPCODE_0D = Opcode(0x0D)\n    OPCODE_0E = Opcode(0x0E)\n    OPCODE_0F = Opcode(0x0F)\n    OPCODE_1E = Opcode(0x1E)\n    OPCODE_1F = Opcode(0x1F)\n    OPCODE_21 = Opcode(0x21)\n    OPCODE_22 = Opcode(0x22)\n    OPCODE_23 = Opcode(0x23)\n    OPCODE_24 = Opcode(0x24)\n    OPCODE_25 = Opcode(0x25)\n    OPCODE_26 = Opcode(0x26)\n    OPCODE_27 = Opcode(0x27)\n    OPCODE_28 = Opcode(0x28)\n    OPCODE_29 = Opcode(0x29)\n    OPCODE_2A = Opcode(0x2A)\n    OPCODE_2B = Opcode(0x2B)\n    OPCODE_2C = Opcode(0x2C)\n    OPCODE_2D = Opcode(0x2D)\n    OPCODE_2E = Opcode(0x2E)\n    OPCODE_2F = Opcode(0x2F)\n    OPCODE_4B = Opcode(0x4B)\n    OPCODE_4C = Opcode(0x4C)\n    OPCODE_4D = Opcode(0x4D)\n    OPCODE_4E = Opcode(0x4E)\n    OPCODE_4F = Opcode(0x4F)\n    OPCODE_A5 = Opcode(0xA5)\n    OPCODE_A6 = Opcode(0xA6)\n    OPCODE_A7 = Opcode(0xA7)\n    OPCODE_A8 = Opcode(0xA8)\n    OPCODE_A9 = Opcode(0xA9)\n    OPCODE_AA = Opcode(0xAA)\n    OPCODE_AB = Opcode(0xAB)\n    OPCODE_AC = Opcode(0xAC)\n    OPCODE_AD = Opcode(0xAD)\n    OPCODE_AE = Opcode(0xAE)\n    OPCODE_AF = Opcode(0xAF)\n    OPCODE_B0 = Opcode(0xB0)\n    OPCODE_B1 = Opcode(0xB1)\n    OPCODE_B2 = Opcode(0xB2)\n    OPCODE_B3 = Opcode(0xB3)\n    OPCODE_B4 = Opcode(0xB4)\n    OPCODE_B5 = Opcode(0xB5)\n    OPCODE_B6 = Opcode(0xB6)\n    OPCODE_B7 = Opcode(0xB7)\n    OPCODE_B8 = Opcode(0xB8)\n    OPCODE_B9 = Opcode(0xB9)\n    OPCODE_BA = Opcode(0xBA)\n    OPCODE_BB = Opcode(0xBB)\n    OPCODE_BC = Opcode(0xBC)\n    OPCODE_BD = Opcode(0xBD)\n    OPCODE_BE = Opcode(0xBE)\n    OPCODE_BF = Opcode(0xBF)\n    OPCODE_C0 = Opcode(0xC0)\n    OPCODE_C1 = Opcode(0xC1)\n    OPCODE_C2 = Opcode(0xC2)\n    OPCODE_C3 = Opcode(0xC3)\n    OPCODE_C4 = Opcode(0xC4)\n    OPCODE_C5 = Opcode(0xC5)\n    OPCODE_C6 = Opcode(0xC6)\n    OPCODE_C7 = Opcode(0xC7)\n    OPCODE_C8 = Opcode(0xC8)\n    OPCODE_C9 = Opcode(0xC9)\n    OPCODE_CA = Opcode(0xCA)\n    OPCODE_CB = Opcode(0xCB)\n    OPCODE_CC = Opcode(0xCC)\n    OPCODE_CD = Opcode(0xCD)\n    OPCODE_CE = Opcode(0xCE)\n    OPCODE_CF = Opcode(0xCF)\n    OPCODE_D4 = Opcode(0xD4)\n    OPCODE_D5 = Opcode(0xD5)\n    OPCODE_D6 = Opcode(0xD6)\n    OPCODE_D7 = Opcode(0xD7)\n    OPCODE_D8 = Opcode(0xD8)\n    OPCODE_D9 = Opcode(0xD9)\n    OPCODE_DA = Opcode(0xDA)\n    OPCODE_DB = Opcode(0xDB)\n    OPCODE_DC = Opcode(0xDC)\n    OPCODE_DD = Opcode(0xDD)\n    OPCODE_DE = Opcode(0xDE)\n    OPCODE_DF = Opcode(0xDF)\n    OPCODE_E9 = Opcode(0xE9)\n    OPCODE_EA = Opcode(0xEA)\n    OPCODE_EB = Opcode(0xEB)\n    OPCODE_ED = Opcode(0xED)\n    OPCODE_EF = Opcode(0xEF)\n    OPCODE_F6 = Opcode(0xF6)\n    OPCODE_FC = Opcode(0xFC)\n
    "},{"location":"library/evm_transition_tool/","title":"EVM Transition Tool Package","text":"

    Library of Python wrappers for the different implementations of transition tools.

    "},{"location":"library/evm_transition_tool/#evm_transition_tool.BesuTransitionTool","title":"BesuTransitionTool","text":"

    Bases: TransitionTool

    Besu EvmTool Transition tool frontend wrapper class.

    Source code in src/evm_transition_tool/besu.py
    class BesuTransitionTool(TransitionTool):\n    \"\"\"\n    Besu EvmTool Transition tool frontend wrapper class.\n    \"\"\"\n\n    default_binary = Path(\"evm\")\n    detect_binary_pattern = compile(r\"^Hyperledger Besu evm .*$\")\n\n    binary: Path\n    cached_version: Optional[str] = None\n    trace: bool\n    process: Optional[subprocess.Popen] = None\n    server_url: str\n    besu_trace_dir: Optional[tempfile.TemporaryDirectory]\n\n    def __init__(\n        self,\n        *,\n        binary: Optional[Path] = None,\n        trace: bool = False,\n    ):\n        super().__init__(binary=binary, trace=trace)\n        args = [str(self.binary), \"t8n\", \"--help\"]\n        try:\n            result = subprocess.run(args, capture_output=True, text=True)\n        except subprocess.CalledProcessError as e:\n            raise Exception(\"evm process unexpectedly returned a non-zero status code: \" f\"{e}.\")\n        except Exception as e:\n            raise Exception(f\"Unexpected exception calling evm tool: {e}.\")\n        self.help_string = result.stdout\n        self.besu_trace_dir = tempfile.TemporaryDirectory() if self.trace else None\n\n    def start_server(self):\n        \"\"\"\n        Starts the t8n-server process, extracts the port, and leaves it running for future re-use.\n        \"\"\"\n        args = [\n            str(self.binary),\n            \"t8n-server\",\n            \"--port=0\",  # OS assigned server port\n        ]\n\n        if self.trace:\n            args.append(\"--trace\")\n            args.append(f\"--output.basedir={self.besu_trace_dir.name}\")\n\n        self.process = subprocess.Popen(\n            args=args,\n            stdout=subprocess.PIPE,\n            stderr=subprocess.STDOUT,\n        )\n\n        while True:\n            line = str(self.process.stdout.readline())\n\n            if not line or \"Failed to start transition server\" in line:\n                raise Exception(\"Failed starting Besu subprocess\\n\" + line)\n            if \"Transition server listening on\" in line:\n                port = re.search(\"Transition server listening on (\\\\d+)\", line).group(1)\n                self.server_url = f\"http://localhost:{port}/\"\n                break\n\n    def shutdown(self):\n        \"\"\"\n        Stops the t8n-server process if it was started\n        \"\"\"\n        if self.process:\n            self.process.kill()\n        if self.besu_trace_dir:\n            self.besu_trace_dir.cleanup()\n\n    def evaluate(\n        self,\n        *,\n        alloc: Alloc,\n        txs: List[Transaction],\n        env: Environment,\n        fork: Fork,\n        chain_id: int = 1,\n        reward: int = 0,\n        eips: Optional[List[int]] = None,\n        debug_output_path: str = \"\",\n    ) -> TransitionToolOutput:\n        \"\"\"\n        Executes `evm t8n` with the specified arguments.\n        \"\"\"\n        if not self.process:\n            self.start_server()\n\n        fork_name = fork.transition_tool_name(\n            block_number=env.number,\n            timestamp=env.timestamp,\n        )\n        if eips is not None:\n            fork_name = \"+\".join([fork_name] + [str(eip) for eip in eips])\n\n        input_json = TransitionToolInput(\n            alloc=alloc,\n            txs=txs,\n            env=env,\n        ).model_dump(mode=\"json\", **model_dump_config)\n\n        state_json = {\n            \"fork\": fork_name,\n            \"chainid\": chain_id,\n            \"reward\": reward,\n        }\n\n        post_data = {\"state\": state_json, \"input\": input_json}\n\n        if debug_output_path:\n            post_data_string = json.dumps(post_data, indent=4)\n            additional_indent = \" \" * 16  # for pretty indentation in t8n.sh\n            indented_post_data_string = \"{\\n\" + \"\\n\".join(\n                additional_indent + line for line in post_data_string[1:].splitlines()\n            )\n            t8n_script = textwrap.dedent(\n                f\"\"\"\\\n                #!/bin/bash\n                # Use $1 as t8n-server port if provided, else default to 3000\n                PORT=${{1:-3000}}\n                curl http://localhost:${{PORT}}/ -X POST -H \"Content-Type: application/json\" \\\\\n                --data '{indented_post_data_string}'\n                \"\"\"  # noqa: E221\n            )\n            dump_files_to_directory(\n                debug_output_path,\n                {\n                    \"state.json\": state_json,\n                    \"input/alloc.json\": input_json[\"alloc\"],\n                    \"input/env.json\": input_json[\"env\"],\n                    \"input/txs.json\": input_json[\"txs\"],\n                    \"t8n.sh+x\": t8n_script,\n                },\n            )\n\n        response = requests.post(self.server_url, json=post_data, timeout=5)\n        response.raise_for_status()  # exception visible in pytest failure output\n        output: TransitionToolOutput = TransitionToolOutput.model_validate(response.json())\n\n        if debug_output_path:\n            dump_files_to_directory(\n                debug_output_path,\n                {\n                    \"response.txt\": response.text,\n                    \"status_code.txt\": response.status_code,\n                    \"time_elapsed_seconds.txt\": response.elapsed.total_seconds(),\n                },\n            )\n\n        if response.status_code != 200:\n            raise Exception(\n                f\"t8n-server returned status code {response.status_code}, \"\n                f\"response: {response.text}\"\n            )\n\n        if debug_output_path:\n            dump_files_to_directory(\n                debug_output_path,\n                {\n                    \"output/alloc.json\": output.alloc.model_dump(mode=\"json\", **model_dump_config),\n                    \"output/result.json\": output.result.model_dump(\n                        mode=\"json\", **model_dump_config\n                    ),\n                    \"output/txs.rlp\": str(output.body),\n                },\n            )\n\n        if self.trace and self.besu_trace_dir:\n            self.collect_traces(output.result.receipts, self.besu_trace_dir, debug_output_path)\n            for i, r in enumerate(output.result.receipts):\n                trace_file_name = f\"trace-{i}-{r.transaction_hash}.jsonl\"\n                os.remove(os.path.join(self.besu_trace_dir.name, trace_file_name))\n\n        return output\n\n    def is_fork_supported(self, fork: Fork) -> bool:\n        \"\"\"\n        Returns True if the fork is supported by the tool\n        \"\"\"\n        return fork.transition_tool_name() in self.help_string\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.BesuTransitionTool.start_server","title":"start_server()","text":"

    Starts the t8n-server process, extracts the port, and leaves it running for future re-use.

    Source code in src/evm_transition_tool/besu.py
    def start_server(self):\n    \"\"\"\n    Starts the t8n-server process, extracts the port, and leaves it running for future re-use.\n    \"\"\"\n    args = [\n        str(self.binary),\n        \"t8n-server\",\n        \"--port=0\",  # OS assigned server port\n    ]\n\n    if self.trace:\n        args.append(\"--trace\")\n        args.append(f\"--output.basedir={self.besu_trace_dir.name}\")\n\n    self.process = subprocess.Popen(\n        args=args,\n        stdout=subprocess.PIPE,\n        stderr=subprocess.STDOUT,\n    )\n\n    while True:\n        line = str(self.process.stdout.readline())\n\n        if not line or \"Failed to start transition server\" in line:\n            raise Exception(\"Failed starting Besu subprocess\\n\" + line)\n        if \"Transition server listening on\" in line:\n            port = re.search(\"Transition server listening on (\\\\d+)\", line).group(1)\n            self.server_url = f\"http://localhost:{port}/\"\n            break\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.BesuTransitionTool.shutdown","title":"shutdown()","text":"

    Stops the t8n-server process if it was started

    Source code in src/evm_transition_tool/besu.py
    def shutdown(self):\n    \"\"\"\n    Stops the t8n-server process if it was started\n    \"\"\"\n    if self.process:\n        self.process.kill()\n    if self.besu_trace_dir:\n        self.besu_trace_dir.cleanup()\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.BesuTransitionTool.evaluate","title":"evaluate(*, alloc, txs, env, fork, chain_id=1, reward=0, eips=None, debug_output_path='')","text":"

    Executes evm t8n with the specified arguments.

    Source code in src/evm_transition_tool/besu.py
    def evaluate(\n    self,\n    *,\n    alloc: Alloc,\n    txs: List[Transaction],\n    env: Environment,\n    fork: Fork,\n    chain_id: int = 1,\n    reward: int = 0,\n    eips: Optional[List[int]] = None,\n    debug_output_path: str = \"\",\n) -> TransitionToolOutput:\n    \"\"\"\n    Executes `evm t8n` with the specified arguments.\n    \"\"\"\n    if not self.process:\n        self.start_server()\n\n    fork_name = fork.transition_tool_name(\n        block_number=env.number,\n        timestamp=env.timestamp,\n    )\n    if eips is not None:\n        fork_name = \"+\".join([fork_name] + [str(eip) for eip in eips])\n\n    input_json = TransitionToolInput(\n        alloc=alloc,\n        txs=txs,\n        env=env,\n    ).model_dump(mode=\"json\", **model_dump_config)\n\n    state_json = {\n        \"fork\": fork_name,\n        \"chainid\": chain_id,\n        \"reward\": reward,\n    }\n\n    post_data = {\"state\": state_json, \"input\": input_json}\n\n    if debug_output_path:\n        post_data_string = json.dumps(post_data, indent=4)\n        additional_indent = \" \" * 16  # for pretty indentation in t8n.sh\n        indented_post_data_string = \"{\\n\" + \"\\n\".join(\n            additional_indent + line for line in post_data_string[1:].splitlines()\n        )\n        t8n_script = textwrap.dedent(\n            f\"\"\"\\\n            #!/bin/bash\n            # Use $1 as t8n-server port if provided, else default to 3000\n            PORT=${{1:-3000}}\n            curl http://localhost:${{PORT}}/ -X POST -H \"Content-Type: application/json\" \\\\\n            --data '{indented_post_data_string}'\n            \"\"\"  # noqa: E221\n        )\n        dump_files_to_directory(\n            debug_output_path,\n            {\n                \"state.json\": state_json,\n                \"input/alloc.json\": input_json[\"alloc\"],\n                \"input/env.json\": input_json[\"env\"],\n                \"input/txs.json\": input_json[\"txs\"],\n                \"t8n.sh+x\": t8n_script,\n            },\n        )\n\n    response = requests.post(self.server_url, json=post_data, timeout=5)\n    response.raise_for_status()  # exception visible in pytest failure output\n    output: TransitionToolOutput = TransitionToolOutput.model_validate(response.json())\n\n    if debug_output_path:\n        dump_files_to_directory(\n            debug_output_path,\n            {\n                \"response.txt\": response.text,\n                \"status_code.txt\": response.status_code,\n                \"time_elapsed_seconds.txt\": response.elapsed.total_seconds(),\n            },\n        )\n\n    if response.status_code != 200:\n        raise Exception(\n            f\"t8n-server returned status code {response.status_code}, \"\n            f\"response: {response.text}\"\n        )\n\n    if debug_output_path:\n        dump_files_to_directory(\n            debug_output_path,\n            {\n                \"output/alloc.json\": output.alloc.model_dump(mode=\"json\", **model_dump_config),\n                \"output/result.json\": output.result.model_dump(\n                    mode=\"json\", **model_dump_config\n                ),\n                \"output/txs.rlp\": str(output.body),\n            },\n        )\n\n    if self.trace and self.besu_trace_dir:\n        self.collect_traces(output.result.receipts, self.besu_trace_dir, debug_output_path)\n        for i, r in enumerate(output.result.receipts):\n            trace_file_name = f\"trace-{i}-{r.transaction_hash}.jsonl\"\n            os.remove(os.path.join(self.besu_trace_dir.name, trace_file_name))\n\n    return output\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.BesuTransitionTool.is_fork_supported","title":"is_fork_supported(fork)","text":"

    Returns True if the fork is supported by the tool

    Source code in src/evm_transition_tool/besu.py
    def is_fork_supported(self, fork: Fork) -> bool:\n    \"\"\"\n    Returns True if the fork is supported by the tool\n    \"\"\"\n    return fork.transition_tool_name() in self.help_string\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.EvmOneTransitionTool","title":"EvmOneTransitionTool","text":"

    Bases: TransitionTool

    Evmone evmone-t8n Transition tool interface wrapper class.

    Source code in src/evm_transition_tool/evmone.py
    class EvmOneTransitionTool(TransitionTool):\n    \"\"\"\n    Evmone `evmone-t8n` Transition tool interface wrapper class.\n    \"\"\"\n\n    default_binary = Path(\"evmone-t8n\")\n    detect_binary_pattern = compile(r\"^evmone-t8n\\b\")\n    t8n_use_stream = False\n\n    binary: Path\n    cached_version: Optional[str] = None\n    trace: bool\n\n    def __init__(\n        self,\n        *,\n        binary: Optional[Path] = None,\n        trace: bool = False,\n    ):\n        super().__init__(binary=binary, trace=trace)\n\n    def is_fork_supported(self, fork: Fork) -> bool:\n        \"\"\"\n        Returns True if the fork is supported by the tool.\n        Currently, evmone-t8n provides no way to determine supported forks.\n        \"\"\"\n        return True\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.EvmOneTransitionTool.is_fork_supported","title":"is_fork_supported(fork)","text":"

    Returns True if the fork is supported by the tool. Currently, evmone-t8n provides no way to determine supported forks.

    Source code in src/evm_transition_tool/evmone.py
    def is_fork_supported(self, fork: Fork) -> bool:\n    \"\"\"\n    Returns True if the fork is supported by the tool.\n    Currently, evmone-t8n provides no way to determine supported forks.\n    \"\"\"\n    return True\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.ExecutionSpecsTransitionTool","title":"ExecutionSpecsTransitionTool","text":"

    Bases: GethTransitionTool

    Ethereum Specs ethereum-spec-evm Transition tool interface wrapper class.

    The behavior of this tool is almost identical to go-ethereum's evm t8n command.

    note: Using the latest version of the ethereum-spec-evm tool:

    As the `ethereum` package provided by `execution-specs` is a requirement of\n`execution-spec-tests`, the `ethereum-spec-evm` is already installed in the\nvirtual environment where `execution-spec-tests` is installed\n(via `pip install -e .`). Therefore, the `ethereum-spec-evm` transition tool\ncan be used to fill tests via:\n\n```console\n    fill --evm-bin=ethereum-spec-evm\n```\n\nTo ensure you're using the latest version of `ethereum-spec-evm` you can run:\n\n```\npip install --force-reinstall -e .\n```\n\nor\n\n```\npip install --force-reinstall -e .[docs,lint,tests]\n```\n\nas appropriate.\n

    note: Using a specific version of the ethereum-spec-evm tool:

    1. Create a virtual environment and activate it:\n    ```\n    python -m venv venv-execution-specs\n    source venv-execution-specs/bin/activate\n    ```\n2. Clone the ethereum/execution-specs repository, change working directory to it and\n    retrieve the desired version of the repository:\n    ```\n    git clone git@github.com:ethereum/execution-specs.git\n    cd execution-specs\n    git checkout <version>\n    ```\n3. Install the packages provided by the repository:\n    ```\n    pip install -e .\n    ```\n    Check that the `ethereum-spec-evm` command is available:\n    ```\n    ethereum-spec-evm --help\n    ```\n4. Clone the ethereum/execution-specs-tests repository and change working directory to it:\n    ```\n    cd ..\n    git clone git@github.com:ethereum/execution-spec-tests.git\n    cd execution-spec-tests\n    ```\n5. Install the packages provided by the ethereum/execution-spec-tests repository:\n    ```\n    pip install -e .\n    ```\n6. Run the tests, specifying the `ethereum-spec-evm` command as the transition tool:\n    ```\n    fill --evm-bin=path/to/venv-execution-specs/ethereum-spec-evm\n    ```\n
    Source code in src/evm_transition_tool/execution_specs.py
    class ExecutionSpecsTransitionTool(GethTransitionTool):\n    \"\"\"\n    Ethereum Specs `ethereum-spec-evm` Transition tool interface wrapper class.\n\n    The behavior of this tool is almost identical to go-ethereum's `evm t8n` command.\n\n    note: Using the latest version of the `ethereum-spec-evm` tool:\n\n        As the `ethereum` package provided by `execution-specs` is a requirement of\n        `execution-spec-tests`, the `ethereum-spec-evm` is already installed in the\n        virtual environment where `execution-spec-tests` is installed\n        (via `pip install -e .`). Therefore, the `ethereum-spec-evm` transition tool\n        can be used to fill tests via:\n\n        ```console\n            fill --evm-bin=ethereum-spec-evm\n        ```\n\n        To ensure you're using the latest version of `ethereum-spec-evm` you can run:\n\n        ```\n        pip install --force-reinstall -e .\n        ```\n\n        or\n\n        ```\n        pip install --force-reinstall -e .[docs,lint,tests]\n        ```\n\n        as appropriate.\n\n    note: Using a specific version of the `ethereum-spec-evm` tool:\n\n        1. Create a virtual environment and activate it:\n            ```\n            python -m venv venv-execution-specs\n            source venv-execution-specs/bin/activate\n            ```\n        2. Clone the ethereum/execution-specs repository, change working directory to it and\n            retrieve the desired version of the repository:\n            ```\n            git clone git@github.com:ethereum/execution-specs.git\n            cd execution-specs\n            git checkout <version>\n            ```\n        3. Install the packages provided by the repository:\n            ```\n            pip install -e .\n            ```\n            Check that the `ethereum-spec-evm` command is available:\n            ```\n            ethereum-spec-evm --help\n            ```\n        4. Clone the ethereum/execution-specs-tests repository and change working directory to it:\n            ```\n            cd ..\n            git clone git@github.com:ethereum/execution-spec-tests.git\n            cd execution-spec-tests\n            ```\n        5. Install the packages provided by the ethereum/execution-spec-tests repository:\n            ```\n            pip install -e .\n            ```\n        6. Run the tests, specifying the `ethereum-spec-evm` command as the transition tool:\n            ```\n            fill --evm-bin=path/to/venv-execution-specs/ethereum-spec-evm\n            ```\n    \"\"\"\n\n    default_binary = Path(\"ethereum-spec-evm\")\n    detect_binary_pattern = compile(r\"^ethereum-spec-evm\\b\")\n    statetest_subcommand: Optional[str] = None\n    blocktest_subcommand: Optional[str] = None\n\n    def is_fork_supported(self, fork: Fork) -> bool:\n        \"\"\"\n        Returns True if the fork is supported by the tool.\n        Currently, ethereum-spec-evm provides no way to determine supported forks.\n        \"\"\"\n        return fork not in UNSUPPORTED_FORKS\n\n    def get_blocktest_help(self) -> str:\n        \"\"\"\n        Return the help string for the blocktest subcommand.\n        \"\"\"\n        raise NotImplementedError(\n            \"The `blocktest` command is not supported by the ethereum-spec-evm. \"\n            \"Use geth's evm tool.\"\n        )\n\n    def verify_fixture(\n        self,\n        fixture_format: FixtureFormats,\n        fixture_path: Path,\n        fixture_name: Optional[str] = None,\n        debug_output_path: Optional[Path] = None,\n    ):\n        \"\"\"\n        Executes `evm [state|block]test` to verify the fixture at `fixture_path`.\n\n        Currently only implemented by geth's evm.\n        \"\"\"\n        raise NotImplementedError(\n            \"The `verify_fixture()` function is not supported by the ethereum-spec-evm. \"\n            \"Use geth's evm tool.\"\n        )\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.ExecutionSpecsTransitionTool.is_fork_supported","title":"is_fork_supported(fork)","text":"

    Returns True if the fork is supported by the tool. Currently, ethereum-spec-evm provides no way to determine supported forks.

    Source code in src/evm_transition_tool/execution_specs.py
    def is_fork_supported(self, fork: Fork) -> bool:\n    \"\"\"\n    Returns True if the fork is supported by the tool.\n    Currently, ethereum-spec-evm provides no way to determine supported forks.\n    \"\"\"\n    return fork not in UNSUPPORTED_FORKS\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.ExecutionSpecsTransitionTool.get_blocktest_help","title":"get_blocktest_help()","text":"

    Return the help string for the blocktest subcommand.

    Source code in src/evm_transition_tool/execution_specs.py
    def get_blocktest_help(self) -> str:\n    \"\"\"\n    Return the help string for the blocktest subcommand.\n    \"\"\"\n    raise NotImplementedError(\n        \"The `blocktest` command is not supported by the ethereum-spec-evm. \"\n        \"Use geth's evm tool.\"\n    )\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.ExecutionSpecsTransitionTool.verify_fixture","title":"verify_fixture(fixture_format, fixture_path, fixture_name=None, debug_output_path=None)","text":"

    Executes evm [state|block]test to verify the fixture at fixture_path.

    Currently only implemented by geth's evm.

    Source code in src/evm_transition_tool/execution_specs.py
    def verify_fixture(\n    self,\n    fixture_format: FixtureFormats,\n    fixture_path: Path,\n    fixture_name: Optional[str] = None,\n    debug_output_path: Optional[Path] = None,\n):\n    \"\"\"\n    Executes `evm [state|block]test` to verify the fixture at `fixture_path`.\n\n    Currently only implemented by geth's evm.\n    \"\"\"\n    raise NotImplementedError(\n        \"The `verify_fixture()` function is not supported by the ethereum-spec-evm. \"\n        \"Use geth's evm tool.\"\n    )\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.GethTransitionTool","title":"GethTransitionTool","text":"

    Bases: TransitionTool

    Go-ethereum evm Transition tool interface wrapper class.

    Source code in src/evm_transition_tool/geth.py
    class GethTransitionTool(TransitionTool):\n    \"\"\"\n    Go-ethereum `evm` Transition tool interface wrapper class.\n    \"\"\"\n\n    default_binary = Path(\"evm\")\n    detect_binary_pattern = compile(r\"^evm(.exe)? version\\b\")\n    t8n_subcommand: Optional[str] = \"t8n\"\n    statetest_subcommand: Optional[str] = \"statetest\"\n    blocktest_subcommand: Optional[str] = \"blocktest\"\n\n    binary: Path\n    cached_version: Optional[str] = None\n    trace: bool\n\n    def __init__(\n        self,\n        *,\n        binary: Optional[Path] = None,\n        trace: bool = False,\n    ):\n        super().__init__(binary=binary, trace=trace)\n        args = [str(self.binary), str(self.t8n_subcommand), \"--help\"]\n        try:\n            result = subprocess.run(args, capture_output=True, text=True)\n        except subprocess.CalledProcessError as e:\n            raise Exception(\"evm process unexpectedly returned a non-zero status code: \" f\"{e}.\")\n        except Exception as e:\n            raise Exception(f\"Unexpected exception calling evm tool: {e}.\")\n        self.help_string = result.stdout\n\n    def is_fork_supported(self, fork: Fork) -> bool:\n        \"\"\"\n        Returns True if the fork is supported by the tool.\n\n        If the fork is a transition fork, we want to check the fork it transitions to.\n        \"\"\"\n        return fork.transition_tool_name() in self.help_string\n\n    def get_blocktest_help(self) -> str:\n        \"\"\"\n        Return the help string for the blocktest subcommand.\n        \"\"\"\n        args = [str(self.binary), \"blocktest\", \"--help\"]\n        try:\n            result = subprocess.run(args, capture_output=True, text=True)\n        except subprocess.CalledProcessError as e:\n            raise Exception(\"evm process unexpectedly returned a non-zero status code: \" f\"{e}.\")\n        except Exception as e:\n            raise Exception(f\"Unexpected exception calling evm tool: {e}.\")\n        return result.stdout\n\n    def verify_fixture(\n        self,\n        fixture_format: FixtureFormats,\n        fixture_path: Path,\n        fixture_name: Optional[str] = None,\n        debug_output_path: Optional[Path] = None,\n    ):\n        \"\"\"\n        Executes `evm [state|block]test` to verify the fixture at `fixture_path`.\n        \"\"\"\n        command: list[str] = [str(self.binary)]\n\n        if debug_output_path:\n            command += [\"--debug\", \"--json\", \"--verbosity\", \"100\"]\n\n        if FixtureFormats.is_state_test(fixture_format):\n            assert self.statetest_subcommand, \"statetest subcommand not set\"\n            command.append(self.statetest_subcommand)\n        elif FixtureFormats.is_blockchain_test(fixture_format):\n            assert self.blocktest_subcommand, \"blocktest subcommand not set\"\n            command.append(self.blocktest_subcommand)\n        else:\n            raise Exception(f\"Invalid test fixture format: {fixture_format}\")\n\n        if fixture_name and fixture_format == FixtureFormats.BLOCKCHAIN_TEST:\n            assert isinstance(fixture_name, str), \"fixture_name must be a string\"\n            command.append(\"--run\")\n            command.append(fixture_name)\n        command.append(str(fixture_path))\n\n        result = subprocess.run(\n            command,\n            stdout=subprocess.PIPE,\n            stderr=subprocess.PIPE,\n        )\n\n        if debug_output_path:\n            debug_fixture_path = debug_output_path / \"fixtures.json\"\n            # Use the local copy of the fixture in the debug directory\n            verify_fixtures_call = \" \".join(command[:-1]) + f\" {debug_fixture_path}\"\n            verify_fixtures_script = textwrap.dedent(\n                f\"\"\"\\\n                #!/bin/bash\n                {verify_fixtures_call}\n                \"\"\"\n            )\n            dump_files_to_directory(\n                str(debug_output_path),\n                {\n                    \"verify_fixtures_args.py\": command,\n                    \"verify_fixtures_returncode.txt\": result.returncode,\n                    \"verify_fixtures_stdout.txt\": result.stdout.decode(),\n                    \"verify_fixtures_stderr.txt\": result.stderr.decode(),\n                    \"verify_fixtures.sh+x\": verify_fixtures_script,\n                },\n            )\n            shutil.copyfile(fixture_path, debug_fixture_path)\n\n        if result.returncode != 0:\n            raise Exception(\n                f\"EVM test failed.\\n{' '.join(command)}\\n\\n Error:\\n{result.stderr.decode()}\"\n            )\n\n        if FixtureFormats.is_state_test(fixture_format):\n            result_json = json.loads(result.stdout.decode())\n            if not isinstance(result_json, list):\n                raise Exception(f\"Unexpected result from evm statetest: {result_json}\")\n        else:\n            result_json = []  # there is no parseable format for blocktest output\n        return result_json\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.GethTransitionTool.is_fork_supported","title":"is_fork_supported(fork)","text":"

    Returns True if the fork is supported by the tool.

    If the fork is a transition fork, we want to check the fork it transitions to.

    Source code in src/evm_transition_tool/geth.py
    def is_fork_supported(self, fork: Fork) -> bool:\n    \"\"\"\n    Returns True if the fork is supported by the tool.\n\n    If the fork is a transition fork, we want to check the fork it transitions to.\n    \"\"\"\n    return fork.transition_tool_name() in self.help_string\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.GethTransitionTool.get_blocktest_help","title":"get_blocktest_help()","text":"

    Return the help string for the blocktest subcommand.

    Source code in src/evm_transition_tool/geth.py
    def get_blocktest_help(self) -> str:\n    \"\"\"\n    Return the help string for the blocktest subcommand.\n    \"\"\"\n    args = [str(self.binary), \"blocktest\", \"--help\"]\n    try:\n        result = subprocess.run(args, capture_output=True, text=True)\n    except subprocess.CalledProcessError as e:\n        raise Exception(\"evm process unexpectedly returned a non-zero status code: \" f\"{e}.\")\n    except Exception as e:\n        raise Exception(f\"Unexpected exception calling evm tool: {e}.\")\n    return result.stdout\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.GethTransitionTool.verify_fixture","title":"verify_fixture(fixture_format, fixture_path, fixture_name=None, debug_output_path=None)","text":"

    Executes evm [state|block]test to verify the fixture at fixture_path.

    Source code in src/evm_transition_tool/geth.py
    def verify_fixture(\n    self,\n    fixture_format: FixtureFormats,\n    fixture_path: Path,\n    fixture_name: Optional[str] = None,\n    debug_output_path: Optional[Path] = None,\n):\n    \"\"\"\n    Executes `evm [state|block]test` to verify the fixture at `fixture_path`.\n    \"\"\"\n    command: list[str] = [str(self.binary)]\n\n    if debug_output_path:\n        command += [\"--debug\", \"--json\", \"--verbosity\", \"100\"]\n\n    if FixtureFormats.is_state_test(fixture_format):\n        assert self.statetest_subcommand, \"statetest subcommand not set\"\n        command.append(self.statetest_subcommand)\n    elif FixtureFormats.is_blockchain_test(fixture_format):\n        assert self.blocktest_subcommand, \"blocktest subcommand not set\"\n        command.append(self.blocktest_subcommand)\n    else:\n        raise Exception(f\"Invalid test fixture format: {fixture_format}\")\n\n    if fixture_name and fixture_format == FixtureFormats.BLOCKCHAIN_TEST:\n        assert isinstance(fixture_name, str), \"fixture_name must be a string\"\n        command.append(\"--run\")\n        command.append(fixture_name)\n    command.append(str(fixture_path))\n\n    result = subprocess.run(\n        command,\n        stdout=subprocess.PIPE,\n        stderr=subprocess.PIPE,\n    )\n\n    if debug_output_path:\n        debug_fixture_path = debug_output_path / \"fixtures.json\"\n        # Use the local copy of the fixture in the debug directory\n        verify_fixtures_call = \" \".join(command[:-1]) + f\" {debug_fixture_path}\"\n        verify_fixtures_script = textwrap.dedent(\n            f\"\"\"\\\n            #!/bin/bash\n            {verify_fixtures_call}\n            \"\"\"\n        )\n        dump_files_to_directory(\n            str(debug_output_path),\n            {\n                \"verify_fixtures_args.py\": command,\n                \"verify_fixtures_returncode.txt\": result.returncode,\n                \"verify_fixtures_stdout.txt\": result.stdout.decode(),\n                \"verify_fixtures_stderr.txt\": result.stderr.decode(),\n                \"verify_fixtures.sh+x\": verify_fixtures_script,\n            },\n        )\n        shutil.copyfile(fixture_path, debug_fixture_path)\n\n    if result.returncode != 0:\n        raise Exception(\n            f\"EVM test failed.\\n{' '.join(command)}\\n\\n Error:\\n{result.stderr.decode()}\"\n        )\n\n    if FixtureFormats.is_state_test(fixture_format):\n        result_json = json.loads(result.stdout.decode())\n        if not isinstance(result_json, list):\n            raise Exception(f\"Unexpected result from evm statetest: {result_json}\")\n    else:\n        result_json = []  # there is no parseable format for blocktest output\n    return result_json\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.NimbusTransitionTool","title":"NimbusTransitionTool","text":"

    Bases: TransitionTool

    Nimbus evm Transition tool interface wrapper class.

    Source code in src/evm_transition_tool/nimbus.py
    class NimbusTransitionTool(TransitionTool):\n    \"\"\"\n    Nimbus `evm` Transition tool interface wrapper class.\n    \"\"\"\n\n    default_binary = Path(\"t8n\")\n    detect_binary_pattern = compile(r\"^Nimbus-t8n\\b\")\n    version_flag: str = \"--version\"\n\n    binary: Path\n    cached_version: Optional[str] = None\n    trace: bool\n\n    def __init__(\n        self,\n        *,\n        binary: Optional[Path] = None,\n        trace: bool = False,\n    ):\n        super().__init__(binary=binary, trace=trace)\n        args = [str(self.binary), \"--help\"]\n        try:\n            result = subprocess.run(args, capture_output=True, text=True)\n        except subprocess.CalledProcessError as e:\n            raise Exception(\"evm process unexpectedly returned a non-zero status code: \" f\"{e}.\")\n        except Exception as e:\n            raise Exception(f\"Unexpected exception calling evm tool: {e}.\")\n        self.help_string = result.stdout\n\n    def version(self) -> str:\n        \"\"\"\n        Gets `evm` binary version.\n        \"\"\"\n        if self.cached_version is None:\n            self.cached_version = re.sub(r\"\\x1b\\[0m\", \"\", super().version()).strip()\n\n        return self.cached_version\n\n    def is_fork_supported(self, fork: Fork) -> bool:\n        \"\"\"\n        Returns True if the fork is supported by the tool.\n\n        If the fork is a transition fork, we want to check the fork it transitions to.\n        \"\"\"\n        return fork.transition_tool_name() in self.help_string\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.NimbusTransitionTool.version","title":"version()","text":"

    Gets evm binary version.

    Source code in src/evm_transition_tool/nimbus.py
    def version(self) -> str:\n    \"\"\"\n    Gets `evm` binary version.\n    \"\"\"\n    if self.cached_version is None:\n        self.cached_version = re.sub(r\"\\x1b\\[0m\", \"\", super().version()).strip()\n\n    return self.cached_version\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.NimbusTransitionTool.is_fork_supported","title":"is_fork_supported(fork)","text":"

    Returns True if the fork is supported by the tool.

    If the fork is a transition fork, we want to check the fork it transitions to.

    Source code in src/evm_transition_tool/nimbus.py
    def is_fork_supported(self, fork: Fork) -> bool:\n    \"\"\"\n    Returns True if the fork is supported by the tool.\n\n    If the fork is a transition fork, we want to check the fork it transitions to.\n    \"\"\"\n    return fork.transition_tool_name() in self.help_string\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool","title":"TransitionTool","text":"

    Bases: FixtureVerifier

    Transition tool abstract base class which should be inherited by all transition tool implementations.

    Source code in src/evm_transition_tool/transition_tool.py
    class TransitionTool(FixtureVerifier):\n    \"\"\"\n    Transition tool abstract base class which should be inherited by all transition tool\n    implementations.\n    \"\"\"\n\n    traces: List[List[List[Dict]]] | None = None\n\n    registered_tools: List[Type[\"TransitionTool\"]] = []\n    default_tool: Optional[Type[\"TransitionTool\"]] = None\n    default_binary: Path\n    detect_binary_pattern: Pattern\n    version_flag: str = \"-v\"\n    t8n_subcommand: Optional[str] = None\n    statetest_subcommand: Optional[str] = None\n    blocktest_subcommand: Optional[str] = None\n    cached_version: Optional[str] = None\n    t8n_use_stream: bool = True\n\n    # Abstract methods that each tool must implement\n\n    @abstractmethod\n    def __init__(\n        self,\n        *,\n        binary: Optional[Path] = None,\n        trace: bool = False,\n    ):\n        \"\"\"\n        Abstract initialization method that all subclasses must implement.\n        \"\"\"\n        if binary is None:\n            binary = self.default_binary\n        else:\n            # improve behavior of which by resolving the path: ~/relative paths don't work\n            resolved_path = Path(os.path.expanduser(binary)).resolve()\n            if resolved_path.exists():\n                binary = resolved_path\n        binary = shutil.which(binary)  # type: ignore\n        if not binary:\n            raise TransitionToolNotFoundInPath(binary=binary)\n        self.binary = Path(binary)\n        self.trace = trace\n\n    def __init_subclass__(cls):\n        \"\"\"\n        Registers all subclasses of TransitionTool as possible tools.\n        \"\"\"\n        TransitionTool.register_tool(cls)\n\n    @classmethod\n    def register_tool(cls, tool_subclass: Type[\"TransitionTool\"]):\n        \"\"\"\n        Registers a given subclass as tool option.\n        \"\"\"\n        cls.registered_tools.append(tool_subclass)\n\n    @classmethod\n    def set_default_tool(cls, tool_subclass: Type[\"TransitionTool\"]):\n        \"\"\"\n        Registers the default tool subclass.\n        \"\"\"\n        cls.default_tool = tool_subclass\n\n    @classmethod\n    def from_binary_path(cls, *, binary_path: Optional[Path], **kwargs) -> \"TransitionTool\":\n        \"\"\"\n        Instantiates the appropriate TransitionTool subclass derived from the\n        tool's binary path.\n        \"\"\"\n        assert cls.default_tool is not None, \"default transition tool was never set\"\n\n        if binary_path is None:\n            return cls.default_tool(binary=binary_path, **kwargs)\n\n        resolved_path = Path(os.path.expanduser(binary_path)).resolve()\n        if resolved_path.exists():\n            binary_path = resolved_path\n        binary = shutil.which(binary_path)  # type: ignore\n\n        if not binary:\n            raise TransitionToolNotFoundInPath(binary=binary)\n\n        binary = Path(binary)\n\n        # Group the tools by version flag, so we only have to call the tool once for all the\n        # classes that share the same version flag\n        for version_flag, subclasses in groupby(\n            cls.registered_tools, key=lambda x: x.version_flag\n        ):\n            try:\n                result = subprocess.run(\n                    [binary, version_flag], stdout=subprocess.PIPE, stderr=subprocess.PIPE\n                )\n                if result.returncode != 0:\n                    raise Exception(f\"Non-zero return code: {result.returncode}\")\n\n                if result.stderr:\n                    raise Exception(f\"Tool wrote to stderr: {result.stderr.decode()}\")\n\n                binary_output = \"\"\n                if result.stdout:\n                    binary_output = result.stdout.decode().strip()\n            except Exception:\n                # If the tool doesn't support the version flag,\n                # we'll get an non-zero exit code.\n                continue\n            for subclass in subclasses:\n                if subclass.detect_binary(binary_output):\n                    return subclass(binary=binary, **kwargs)\n\n        raise UnknownTransitionTool(f\"Unknown transition tool binary: {binary_path}\")\n\n    @classmethod\n    def detect_binary(cls, binary_output: str) -> bool:\n        \"\"\"\n        Returns True if the binary matches the tool\n        \"\"\"\n        assert cls.detect_binary_pattern is not None\n\n        return cls.detect_binary_pattern.match(binary_output) is not None\n\n    def version(self) -> str:\n        \"\"\"\n        Return name and version of tool used to state transition\n        \"\"\"\n        if self.cached_version is None:\n            result = subprocess.run(\n                [str(self.binary), self.version_flag],\n                stdout=subprocess.PIPE,\n            )\n\n            if result.returncode != 0:\n                raise Exception(\"failed to evaluate: \" + result.stderr.decode())\n\n            self.cached_version = result.stdout.decode().strip()\n\n        return self.cached_version\n\n    @abstractmethod\n    def is_fork_supported(self, fork: Fork) -> bool:\n        \"\"\"\n        Returns True if the fork is supported by the tool\n        \"\"\"\n        pass\n\n    def shutdown(self):\n        \"\"\"\n        Perform any cleanup tasks related to the tested tool.\n        \"\"\"\n        pass\n\n    def reset_traces(self):\n        \"\"\"\n        Resets the internal trace storage for a new test to begin\n        \"\"\"\n        self.traces = None\n\n    def append_traces(self, new_traces: List[List[Dict]]):\n        \"\"\"\n        Appends a list of traces of a state transition to the current list\n        \"\"\"\n        if self.traces is None:\n            self.traces = []\n        self.traces.append(new_traces)\n\n    def get_traces(self) -> List[List[List[Dict]]] | None:\n        \"\"\"\n        Returns the accumulated traces\n        \"\"\"\n        return self.traces\n\n    def collect_traces(\n        self,\n        receipts: List[TransactionReceipt],\n        temp_dir: tempfile.TemporaryDirectory,\n        debug_output_path: str = \"\",\n    ) -> None:\n        \"\"\"\n        Collect the traces from the t8n tool output and store them in the traces list.\n        \"\"\"\n        traces: List[List[Dict]] = []\n        for i, r in enumerate(receipts):\n            trace_file_name = f\"trace-{i}-{r.transaction_hash}.jsonl\"\n            if debug_output_path:\n                shutil.copy(\n                    os.path.join(temp_dir.name, trace_file_name),\n                    os.path.join(debug_output_path, trace_file_name),\n                )\n            with open(os.path.join(temp_dir.name, trace_file_name), \"r\") as trace_file:\n                tx_traces: List[Dict] = []\n                for trace_line in trace_file.readlines():\n                    tx_traces.append(json.loads(trace_line))\n                traces.append(tx_traces)\n        self.append_traces(traces)\n\n    @dataclass\n    class TransitionToolData:\n        \"\"\"\n        Transition tool files and data to pass between methods\n        \"\"\"\n\n        alloc: Alloc\n        txs: List[Transaction]\n        env: Environment\n        fork_name: str\n        chain_id: int = field(default=1)\n        reward: int = field(default=0)\n\n        def to_input(self) -> TransitionToolInput:\n            \"\"\"\n            Convert the data to a TransactionToolInput object\n            \"\"\"\n            return TransitionToolInput(\n                alloc=self.alloc,\n                txs=self.txs,\n                env=self.env,\n            )\n\n    def _evaluate_filesystem(\n        self,\n        *,\n        t8n_data: TransitionToolData,\n        debug_output_path: str = \"\",\n    ) -> TransitionToolOutput:\n        \"\"\"\n        Executes a transition tool using the filesystem for its inputs and outputs.\n        \"\"\"\n        temp_dir = tempfile.TemporaryDirectory()\n        os.mkdir(os.path.join(temp_dir.name, \"input\"))\n        os.mkdir(os.path.join(temp_dir.name, \"output\"))\n\n        input_contents = t8n_data.to_input().model_dump(mode=\"json\", **model_dump_config)\n\n        input_paths = {\n            k: os.path.join(temp_dir.name, \"input\", f\"{k}.json\") for k in input_contents.keys()\n        }\n        for key, file_path in input_paths.items():\n            write_json_file(input_contents[key], file_path)\n\n        output_paths = {\n            output: os.path.join(\"output\", f\"{output}.json\") for output in [\"alloc\", \"result\"]\n        }\n        output_paths[\"body\"] = os.path.join(\"output\", \"txs.rlp\")\n\n        # Construct args for evmone-t8n binary\n        args = [\n            str(self.binary),\n            \"--state.fork\",\n            t8n_data.fork_name,\n            \"--input.alloc\",\n            input_paths[\"alloc\"],\n            \"--input.env\",\n            input_paths[\"env\"],\n            \"--input.txs\",\n            input_paths[\"txs\"],\n            \"--output.basedir\",\n            temp_dir.name,\n            \"--output.result\",\n            output_paths[\"result\"],\n            \"--output.alloc\",\n            output_paths[\"alloc\"],\n            \"--output.body\",\n            output_paths[\"body\"],\n            \"--state.reward\",\n            str(t8n_data.reward),\n            \"--state.chainid\",\n            str(t8n_data.chain_id),\n        ]\n\n        if self.trace:\n            args.append(\"--trace\")\n\n        result = subprocess.run(\n            args,\n            stdout=subprocess.PIPE,\n            stderr=subprocess.PIPE,\n        )\n\n        if debug_output_path:\n            if os.path.exists(debug_output_path):\n                shutil.rmtree(debug_output_path)\n            shutil.copytree(temp_dir.name, debug_output_path)\n            t8n_output_base_dir = os.path.join(debug_output_path, \"t8n.sh.out\")\n            t8n_call = \" \".join(args)\n            for file_path in input_paths.values():  # update input paths\n                t8n_call = t8n_call.replace(\n                    os.path.dirname(file_path), os.path.join(debug_output_path, \"input\")\n                )\n            t8n_call = t8n_call.replace(  # use a new output path for basedir and outputs\n                temp_dir.name,\n                t8n_output_base_dir,\n            )\n            t8n_script = textwrap.dedent(\n                f\"\"\"\\\n                #!/bin/bash\n                rm -rf {debug_output_path}/t8n.sh.out  # hard-coded to avoid surprises\n                mkdir -p {debug_output_path}/t8n.sh.out/output\n                {t8n_call}\n                \"\"\"\n            )\n            dump_files_to_directory(\n                debug_output_path,\n                {\n                    \"args.py\": args,\n                    \"returncode.txt\": result.returncode,\n                    \"stdout.txt\": result.stdout.decode(),\n                    \"stderr.txt\": result.stderr.decode(),\n                    \"t8n.sh+x\": t8n_script,\n                },\n            )\n\n        if result.returncode != 0:\n            raise Exception(\"failed to evaluate: \" + result.stderr.decode())\n\n        for key, file_path in output_paths.items():\n            output_paths[key] = os.path.join(temp_dir.name, file_path)\n\n        output_contents = {}\n        for key, file_path in output_paths.items():\n            if \"txs.rlp\" in file_path:\n                continue\n            with open(file_path, \"r+\") as file:\n                output_contents[key] = json.load(file)\n        output = TransitionToolOutput(**output_contents)\n        if self.trace:\n            self.collect_traces(output.result.receipts, temp_dir, debug_output_path)\n\n        temp_dir.cleanup()\n\n        return output\n\n    def _evaluate_stream(\n        self,\n        *,\n        t8n_data: TransitionToolData,\n        debug_output_path: str = \"\",\n    ) -> TransitionToolOutput:\n        \"\"\"\n        Executes a transition tool using stdin and stdout for its inputs and outputs.\n        \"\"\"\n        temp_dir = tempfile.TemporaryDirectory()\n        args = self.construct_args_stream(t8n_data, temp_dir)\n\n        stdin = t8n_data.to_input()\n\n        result = subprocess.run(\n            args,\n            input=stdin.model_dump_json(**model_dump_config).encode(),\n            stdout=subprocess.PIPE,\n            stderr=subprocess.PIPE,\n        )\n\n        self.dump_debug_stream(debug_output_path, temp_dir, stdin, args, result)\n\n        if result.returncode != 0:\n            raise Exception(\"failed to evaluate: \" + result.stderr.decode())\n\n        output: TransitionToolOutput = TransitionToolOutput.model_validate_json(result.stdout)\n\n        if debug_output_path:\n            dump_files_to_directory(\n                debug_output_path,\n                {\n                    \"output/alloc.json\": output.alloc,\n                    \"output/result.json\": output.result,\n                    \"output/txs.rlp\": str(output.body),\n                },\n            )\n\n        if self.trace:\n            self.collect_traces(output.result.receipts, temp_dir, debug_output_path)\n            temp_dir.cleanup()\n\n        return output\n\n    def construct_args_stream(\n        self, t8n_data: TransitionToolData, temp_dir: tempfile.TemporaryDirectory\n    ) -> List[str]:\n        \"\"\"\n        Construct arguments for t8n interaction via streams\n        \"\"\"\n        command: list[str] = [str(self.binary)]\n        if self.t8n_subcommand:\n            command.append(self.t8n_subcommand)\n\n        args = command + [\n            \"--input.alloc=stdin\",\n            \"--input.txs=stdin\",\n            \"--input.env=stdin\",\n            \"--output.result=stdout\",\n            \"--output.alloc=stdout\",\n            \"--output.body=stdout\",\n            f\"--state.fork={t8n_data.fork_name}\",\n            f\"--state.chainid={t8n_data.chain_id}\",\n            f\"--state.reward={t8n_data.reward}\",\n        ]\n\n        if self.trace:\n            args.append(\"--trace\")\n            args.append(f\"--output.basedir={temp_dir.name}\")\n        return args\n\n    def dump_debug_stream(\n        self,\n        debug_output_path: str,\n        temp_dir: tempfile.TemporaryDirectory,\n        stdin: TransitionToolInput,\n        args: List[str],\n        result: subprocess.CompletedProcess,\n    ):\n        \"\"\"\n        Export debug files if requested when interacting with t8n via streams\n        \"\"\"\n        if not debug_output_path:\n            return\n\n        t8n_call = \" \".join(args)\n        t8n_output_base_dir = os.path.join(debug_output_path, \"t8n.sh.out\")\n        if self.trace:\n            t8n_call = t8n_call.replace(temp_dir.name, t8n_output_base_dir)\n        t8n_script = textwrap.dedent(\n            f\"\"\"\\\n            #!/bin/bash\n            rm -rf {debug_output_path}/t8n.sh.out  # hard-coded to avoid surprises\n            mkdir {debug_output_path}/t8n.sh.out  # unused if tracing is not enabled\n            {t8n_call} < {debug_output_path}/stdin.txt\n            \"\"\"\n        )\n        dump_files_to_directory(\n            debug_output_path,\n            {\n                \"args.py\": args,\n                \"input/alloc.json\": stdin.alloc,\n                \"input/env.json\": stdin.env,\n                \"input/txs.json\": [\n                    tx.model_dump(mode=\"json\", **model_dump_config) for tx in stdin.txs\n                ],\n                \"returncode.txt\": result.returncode,\n                \"stdin.txt\": stdin,\n                \"stdout.txt\": result.stdout.decode(),\n                \"stderr.txt\": result.stderr.decode(),\n                \"t8n.sh+x\": t8n_script,\n            },\n        )\n\n    def evaluate(\n        self,\n        *,\n        alloc: Alloc,\n        txs: List[Transaction],\n        env: Environment,\n        fork: Fork,\n        chain_id: int = 1,\n        reward: int = 0,\n        eips: Optional[List[int]] = None,\n        debug_output_path: str = \"\",\n    ) -> TransitionToolOutput:\n        \"\"\"\n        Executes the relevant evaluate method as required by the `t8n` tool.\n\n        If a client's `t8n` tool varies from the default behavior, this method\n        can be overridden.\n        \"\"\"\n        fork_name = fork.transition_tool_name(\n            block_number=env.number,\n            timestamp=env.timestamp,\n        )\n        if eips is not None:\n            fork_name = \"+\".join([fork_name] + [str(eip) for eip in eips])\n        if env.number == 0:\n            reward = -1\n        t8n_data = self.TransitionToolData(\n            alloc=alloc,\n            txs=txs,\n            env=env,\n            fork_name=fork_name,\n            chain_id=chain_id,\n            reward=reward,\n        )\n\n        if self.t8n_use_stream:\n            return self._evaluate_stream(t8n_data=t8n_data, debug_output_path=debug_output_path)\n        else:\n            return self._evaluate_filesystem(\n                t8n_data=t8n_data,\n                debug_output_path=debug_output_path,\n            )\n\n    def verify_fixture(\n        self,\n        fixture_format: FixtureFormats,\n        fixture_path: Path,\n        fixture_name: Optional[str] = None,\n        debug_output_path: Optional[Path] = None,\n    ):\n        \"\"\"\n        Executes `evm [state|block]test` to verify the fixture at `fixture_path`.\n\n        Currently only implemented by geth's evm.\n        \"\"\"\n        raise NotImplementedError(\n            \"The `verify_fixture()` function is not supported by this tool. Use geth's evm tool.\"\n        )\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.__init__","title":"__init__(*, binary=None, trace=False) abstractmethod","text":"

    Abstract initialization method that all subclasses must implement.

    Source code in src/evm_transition_tool/transition_tool.py
    @abstractmethod\ndef __init__(\n    self,\n    *,\n    binary: Optional[Path] = None,\n    trace: bool = False,\n):\n    \"\"\"\n    Abstract initialization method that all subclasses must implement.\n    \"\"\"\n    if binary is None:\n        binary = self.default_binary\n    else:\n        # improve behavior of which by resolving the path: ~/relative paths don't work\n        resolved_path = Path(os.path.expanduser(binary)).resolve()\n        if resolved_path.exists():\n            binary = resolved_path\n    binary = shutil.which(binary)  # type: ignore\n    if not binary:\n        raise TransitionToolNotFoundInPath(binary=binary)\n    self.binary = Path(binary)\n    self.trace = trace\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.__init_subclass__","title":"__init_subclass__()","text":"

    Registers all subclasses of TransitionTool as possible tools.

    Source code in src/evm_transition_tool/transition_tool.py
    def __init_subclass__(cls):\n    \"\"\"\n    Registers all subclasses of TransitionTool as possible tools.\n    \"\"\"\n    TransitionTool.register_tool(cls)\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.register_tool","title":"register_tool(tool_subclass) classmethod","text":"

    Registers a given subclass as tool option.

    Source code in src/evm_transition_tool/transition_tool.py
    @classmethod\ndef register_tool(cls, tool_subclass: Type[\"TransitionTool\"]):\n    \"\"\"\n    Registers a given subclass as tool option.\n    \"\"\"\n    cls.registered_tools.append(tool_subclass)\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.set_default_tool","title":"set_default_tool(tool_subclass) classmethod","text":"

    Registers the default tool subclass.

    Source code in src/evm_transition_tool/transition_tool.py
    @classmethod\ndef set_default_tool(cls, tool_subclass: Type[\"TransitionTool\"]):\n    \"\"\"\n    Registers the default tool subclass.\n    \"\"\"\n    cls.default_tool = tool_subclass\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.from_binary_path","title":"from_binary_path(*, binary_path, **kwargs) classmethod","text":"

    Instantiates the appropriate TransitionTool subclass derived from the tool's binary path.

    Source code in src/evm_transition_tool/transition_tool.py
    @classmethod\ndef from_binary_path(cls, *, binary_path: Optional[Path], **kwargs) -> \"TransitionTool\":\n    \"\"\"\n    Instantiates the appropriate TransitionTool subclass derived from the\n    tool's binary path.\n    \"\"\"\n    assert cls.default_tool is not None, \"default transition tool was never set\"\n\n    if binary_path is None:\n        return cls.default_tool(binary=binary_path, **kwargs)\n\n    resolved_path = Path(os.path.expanduser(binary_path)).resolve()\n    if resolved_path.exists():\n        binary_path = resolved_path\n    binary = shutil.which(binary_path)  # type: ignore\n\n    if not binary:\n        raise TransitionToolNotFoundInPath(binary=binary)\n\n    binary = Path(binary)\n\n    # Group the tools by version flag, so we only have to call the tool once for all the\n    # classes that share the same version flag\n    for version_flag, subclasses in groupby(\n        cls.registered_tools, key=lambda x: x.version_flag\n    ):\n        try:\n            result = subprocess.run(\n                [binary, version_flag], stdout=subprocess.PIPE, stderr=subprocess.PIPE\n            )\n            if result.returncode != 0:\n                raise Exception(f\"Non-zero return code: {result.returncode}\")\n\n            if result.stderr:\n                raise Exception(f\"Tool wrote to stderr: {result.stderr.decode()}\")\n\n            binary_output = \"\"\n            if result.stdout:\n                binary_output = result.stdout.decode().strip()\n        except Exception:\n            # If the tool doesn't support the version flag,\n            # we'll get an non-zero exit code.\n            continue\n        for subclass in subclasses:\n            if subclass.detect_binary(binary_output):\n                return subclass(binary=binary, **kwargs)\n\n    raise UnknownTransitionTool(f\"Unknown transition tool binary: {binary_path}\")\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.detect_binary","title":"detect_binary(binary_output) classmethod","text":"

    Returns True if the binary matches the tool

    Source code in src/evm_transition_tool/transition_tool.py
    @classmethod\ndef detect_binary(cls, binary_output: str) -> bool:\n    \"\"\"\n    Returns True if the binary matches the tool\n    \"\"\"\n    assert cls.detect_binary_pattern is not None\n\n    return cls.detect_binary_pattern.match(binary_output) is not None\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.version","title":"version()","text":"

    Return name and version of tool used to state transition

    Source code in src/evm_transition_tool/transition_tool.py
    def version(self) -> str:\n    \"\"\"\n    Return name and version of tool used to state transition\n    \"\"\"\n    if self.cached_version is None:\n        result = subprocess.run(\n            [str(self.binary), self.version_flag],\n            stdout=subprocess.PIPE,\n        )\n\n        if result.returncode != 0:\n            raise Exception(\"failed to evaluate: \" + result.stderr.decode())\n\n        self.cached_version = result.stdout.decode().strip()\n\n    return self.cached_version\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.is_fork_supported","title":"is_fork_supported(fork) abstractmethod","text":"

    Returns True if the fork is supported by the tool

    Source code in src/evm_transition_tool/transition_tool.py
    @abstractmethod\ndef is_fork_supported(self, fork: Fork) -> bool:\n    \"\"\"\n    Returns True if the fork is supported by the tool\n    \"\"\"\n    pass\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.shutdown","title":"shutdown()","text":"

    Perform any cleanup tasks related to the tested tool.

    Source code in src/evm_transition_tool/transition_tool.py
    def shutdown(self):\n    \"\"\"\n    Perform any cleanup tasks related to the tested tool.\n    \"\"\"\n    pass\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.reset_traces","title":"reset_traces()","text":"

    Resets the internal trace storage for a new test to begin

    Source code in src/evm_transition_tool/transition_tool.py
    def reset_traces(self):\n    \"\"\"\n    Resets the internal trace storage for a new test to begin\n    \"\"\"\n    self.traces = None\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.append_traces","title":"append_traces(new_traces)","text":"

    Appends a list of traces of a state transition to the current list

    Source code in src/evm_transition_tool/transition_tool.py
    def append_traces(self, new_traces: List[List[Dict]]):\n    \"\"\"\n    Appends a list of traces of a state transition to the current list\n    \"\"\"\n    if self.traces is None:\n        self.traces = []\n    self.traces.append(new_traces)\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.get_traces","title":"get_traces()","text":"

    Returns the accumulated traces

    Source code in src/evm_transition_tool/transition_tool.py
    def get_traces(self) -> List[List[List[Dict]]] | None:\n    \"\"\"\n    Returns the accumulated traces\n    \"\"\"\n    return self.traces\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.collect_traces","title":"collect_traces(receipts, temp_dir, debug_output_path='')","text":"

    Collect the traces from the t8n tool output and store them in the traces list.

    Source code in src/evm_transition_tool/transition_tool.py
    def collect_traces(\n    self,\n    receipts: List[TransactionReceipt],\n    temp_dir: tempfile.TemporaryDirectory,\n    debug_output_path: str = \"\",\n) -> None:\n    \"\"\"\n    Collect the traces from the t8n tool output and store them in the traces list.\n    \"\"\"\n    traces: List[List[Dict]] = []\n    for i, r in enumerate(receipts):\n        trace_file_name = f\"trace-{i}-{r.transaction_hash}.jsonl\"\n        if debug_output_path:\n            shutil.copy(\n                os.path.join(temp_dir.name, trace_file_name),\n                os.path.join(debug_output_path, trace_file_name),\n            )\n        with open(os.path.join(temp_dir.name, trace_file_name), \"r\") as trace_file:\n            tx_traces: List[Dict] = []\n            for trace_line in trace_file.readlines():\n                tx_traces.append(json.loads(trace_line))\n            traces.append(tx_traces)\n    self.append_traces(traces)\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.TransitionToolData","title":"TransitionToolData dataclass","text":"

    Transition tool files and data to pass between methods

    Source code in src/evm_transition_tool/transition_tool.py
    @dataclass\nclass TransitionToolData:\n    \"\"\"\n    Transition tool files and data to pass between methods\n    \"\"\"\n\n    alloc: Alloc\n    txs: List[Transaction]\n    env: Environment\n    fork_name: str\n    chain_id: int = field(default=1)\n    reward: int = field(default=0)\n\n    def to_input(self) -> TransitionToolInput:\n        \"\"\"\n        Convert the data to a TransactionToolInput object\n        \"\"\"\n        return TransitionToolInput(\n            alloc=self.alloc,\n            txs=self.txs,\n            env=self.env,\n        )\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.TransitionToolData.to_input","title":"to_input()","text":"

    Convert the data to a TransactionToolInput object

    Source code in src/evm_transition_tool/transition_tool.py
    def to_input(self) -> TransitionToolInput:\n    \"\"\"\n    Convert the data to a TransactionToolInput object\n    \"\"\"\n    return TransitionToolInput(\n        alloc=self.alloc,\n        txs=self.txs,\n        env=self.env,\n    )\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.construct_args_stream","title":"construct_args_stream(t8n_data, temp_dir)","text":"

    Construct arguments for t8n interaction via streams

    Source code in src/evm_transition_tool/transition_tool.py
    def construct_args_stream(\n    self, t8n_data: TransitionToolData, temp_dir: tempfile.TemporaryDirectory\n) -> List[str]:\n    \"\"\"\n    Construct arguments for t8n interaction via streams\n    \"\"\"\n    command: list[str] = [str(self.binary)]\n    if self.t8n_subcommand:\n        command.append(self.t8n_subcommand)\n\n    args = command + [\n        \"--input.alloc=stdin\",\n        \"--input.txs=stdin\",\n        \"--input.env=stdin\",\n        \"--output.result=stdout\",\n        \"--output.alloc=stdout\",\n        \"--output.body=stdout\",\n        f\"--state.fork={t8n_data.fork_name}\",\n        f\"--state.chainid={t8n_data.chain_id}\",\n        f\"--state.reward={t8n_data.reward}\",\n    ]\n\n    if self.trace:\n        args.append(\"--trace\")\n        args.append(f\"--output.basedir={temp_dir.name}\")\n    return args\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.dump_debug_stream","title":"dump_debug_stream(debug_output_path, temp_dir, stdin, args, result)","text":"

    Export debug files if requested when interacting with t8n via streams

    Source code in src/evm_transition_tool/transition_tool.py
    def dump_debug_stream(\n    self,\n    debug_output_path: str,\n    temp_dir: tempfile.TemporaryDirectory,\n    stdin: TransitionToolInput,\n    args: List[str],\n    result: subprocess.CompletedProcess,\n):\n    \"\"\"\n    Export debug files if requested when interacting with t8n via streams\n    \"\"\"\n    if not debug_output_path:\n        return\n\n    t8n_call = \" \".join(args)\n    t8n_output_base_dir = os.path.join(debug_output_path, \"t8n.sh.out\")\n    if self.trace:\n        t8n_call = t8n_call.replace(temp_dir.name, t8n_output_base_dir)\n    t8n_script = textwrap.dedent(\n        f\"\"\"\\\n        #!/bin/bash\n        rm -rf {debug_output_path}/t8n.sh.out  # hard-coded to avoid surprises\n        mkdir {debug_output_path}/t8n.sh.out  # unused if tracing is not enabled\n        {t8n_call} < {debug_output_path}/stdin.txt\n        \"\"\"\n    )\n    dump_files_to_directory(\n        debug_output_path,\n        {\n            \"args.py\": args,\n            \"input/alloc.json\": stdin.alloc,\n            \"input/env.json\": stdin.env,\n            \"input/txs.json\": [\n                tx.model_dump(mode=\"json\", **model_dump_config) for tx in stdin.txs\n            ],\n            \"returncode.txt\": result.returncode,\n            \"stdin.txt\": stdin,\n            \"stdout.txt\": result.stdout.decode(),\n            \"stderr.txt\": result.stderr.decode(),\n            \"t8n.sh+x\": t8n_script,\n        },\n    )\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.evaluate","title":"evaluate(*, alloc, txs, env, fork, chain_id=1, reward=0, eips=None, debug_output_path='')","text":"

    Executes the relevant evaluate method as required by the t8n tool.

    If a client's t8n tool varies from the default behavior, this method can be overridden.

    Source code in src/evm_transition_tool/transition_tool.py
    def evaluate(\n    self,\n    *,\n    alloc: Alloc,\n    txs: List[Transaction],\n    env: Environment,\n    fork: Fork,\n    chain_id: int = 1,\n    reward: int = 0,\n    eips: Optional[List[int]] = None,\n    debug_output_path: str = \"\",\n) -> TransitionToolOutput:\n    \"\"\"\n    Executes the relevant evaluate method as required by the `t8n` tool.\n\n    If a client's `t8n` tool varies from the default behavior, this method\n    can be overridden.\n    \"\"\"\n    fork_name = fork.transition_tool_name(\n        block_number=env.number,\n        timestamp=env.timestamp,\n    )\n    if eips is not None:\n        fork_name = \"+\".join([fork_name] + [str(eip) for eip in eips])\n    if env.number == 0:\n        reward = -1\n    t8n_data = self.TransitionToolData(\n        alloc=alloc,\n        txs=txs,\n        env=env,\n        fork_name=fork_name,\n        chain_id=chain_id,\n        reward=reward,\n    )\n\n    if self.t8n_use_stream:\n        return self._evaluate_stream(t8n_data=t8n_data, debug_output_path=debug_output_path)\n    else:\n        return self._evaluate_filesystem(\n            t8n_data=t8n_data,\n            debug_output_path=debug_output_path,\n        )\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.verify_fixture","title":"verify_fixture(fixture_format, fixture_path, fixture_name=None, debug_output_path=None)","text":"

    Executes evm [state|block]test to verify the fixture at fixture_path.

    Currently only implemented by geth's evm.

    Source code in src/evm_transition_tool/transition_tool.py
    def verify_fixture(\n    self,\n    fixture_format: FixtureFormats,\n    fixture_path: Path,\n    fixture_name: Optional[str] = None,\n    debug_output_path: Optional[Path] = None,\n):\n    \"\"\"\n    Executes `evm [state|block]test` to verify the fixture at `fixture_path`.\n\n    Currently only implemented by geth's evm.\n    \"\"\"\n    raise NotImplementedError(\n        \"The `verify_fixture()` function is not supported by this tool. Use geth's evm tool.\"\n    )\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionToolNotFoundInPath","title":"TransitionToolNotFoundInPath","text":"

    Bases: Exception

    Exception raised if the specified t8n tool is not found in the path

    Source code in src/evm_transition_tool/transition_tool.py
    class TransitionToolNotFoundInPath(Exception):\n    \"\"\"Exception raised if the specified t8n tool is not found in the path\"\"\"\n\n    def __init__(self, message=\"The transition tool was not found in the path\", binary=None):\n        if binary:\n            message = f\"{message} ({binary})\"\n        super().__init__(message)\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.UnknownTransitionTool","title":"UnknownTransitionTool","text":"

    Bases: Exception

    Exception raised if an unknown t8n is encountered

    Source code in src/evm_transition_tool/transition_tool.py
    class UnknownTransitionTool(Exception):\n    \"\"\"Exception raised if an unknown t8n is encountered\"\"\"\n\n    pass\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.Result","title":"Result","text":"

    Bases: CamelModel

    Result of a t8n

    Source code in src/evm_transition_tool/types.py
    class Result(CamelModel):\n    \"\"\"\n    Result of a t8n\n    \"\"\"\n\n    state_root: Hash\n    ommers_hash: Hash | None = Field(None, validation_alias=\"sha3Uncles\")\n    transactions_trie: Hash = Field(..., alias=\"txRoot\")\n    receipts_root: Hash\n    logs_hash: Hash\n    logs_bloom: Bloom\n    receipts: List[TransactionReceipt]\n    rejected_transactions: List[RejectedTransaction] = Field(\n        default_factory=list, alias=\"rejected\"\n    )\n    difficulty: HexNumber | None = Field(None, alias=\"currentDifficulty\")\n    gas_used: HexNumber\n    base_fee_per_gas: HexNumber | None = Field(None, alias=\"currentBaseFee\")\n    withdrawals_root: Hash | None = None\n    excess_blob_gas: HexNumber | None = Field(None, alias=\"currentExcessBlobGas\")\n    blob_gas_used: HexNumber | None = None\n    requests_root: Hash | None = None\n    deposit_requests: List[DepositRequest] | None = None\n    withdrawal_requests: List[WithdrawalRequest] | None = None\n    consolidation_requests: List[ConsolidationRequest] | None = None\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionToolOutput","title":"TransitionToolOutput","text":"

    Bases: CamelModel

    Transition tool output

    Source code in src/evm_transition_tool/types.py
    class TransitionToolOutput(CamelModel):\n    \"\"\"\n    Transition tool output\n    \"\"\"\n\n    alloc: Alloc\n    result: Result\n    body: Bytes | None = None\n
    "},{"location":"library/pytest_plugins/","title":"Pytest Framework and Customizations","text":"

    Package containing pytest plugins related to test filling.

    "},{"location":"library/pytest_plugins/filler/","title":"Filler Plugin","text":"

    A pytest plugin that provides fixtures that fill tests and generate fixtures.

    Top-level pytest configuration file providing: - Command-line options, - Test-fixtures that can be used by all test cases, and that modifies pytest hooks in order to fill test specs for all tests and writes the generated fixtures to file.

    Pre-alloc specifically conditioned for test filling.

    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.default_output_directory","title":"default_output_directory()","text":"

    The default directory to store the generated test fixtures. Defined as a function to allow for easier testing.

    Source code in src/pytest_plugins/filler/filler.py
    def default_output_directory() -> str:\n    \"\"\"\n    The default directory to store the generated test fixtures. Defined as a\n    function to allow for easier testing.\n    \"\"\"\n    return \"./fixtures\"\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.default_html_report_file_path","title":"default_html_report_file_path()","text":"

    The default file path to store the generated HTML test report. Defined as a function to allow for easier testing.

    Source code in src/pytest_plugins/filler/filler.py
    def default_html_report_file_path() -> str:\n    \"\"\"\n    The default file path to store the generated HTML test report. Defined as a\n    function to allow for easier testing.\n    \"\"\"\n    return \".meta/report_fill.html\"\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.strip_output_tarball_suffix","title":"strip_output_tarball_suffix(output)","text":"

    Strip the '.tar.gz' suffix from the output path.

    Source code in src/pytest_plugins/filler/filler.py
    def strip_output_tarball_suffix(output: Path) -> Path:\n    \"\"\"\n    Strip the '.tar.gz' suffix from the output path.\n    \"\"\"\n    if str(output).endswith(\".tar.gz\"):\n        return output.with_suffix(\"\").with_suffix(\"\")\n    return output\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.is_output_stdout","title":"is_output_stdout(output)","text":"

    Returns True if the fixture output is configured to be stdout.

    Source code in src/pytest_plugins/filler/filler.py
    def is_output_stdout(output: Path) -> bool:\n    \"\"\"\n    Returns True if the fixture output is configured to be stdout.\n    \"\"\"\n    return strip_output_tarball_suffix(output).name == \"stdout\"\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_addoption","title":"pytest_addoption(parser)","text":"

    Adds command-line options to pytest.

    Source code in src/pytest_plugins/filler/filler.py
    def pytest_addoption(parser: pytest.Parser):\n    \"\"\"\n    Adds command-line options to pytest.\n    \"\"\"\n    evm_group = parser.getgroup(\"evm\", \"Arguments defining evm executable behavior\")\n    evm_group.addoption(\n        \"--evm-bin\",\n        action=\"store\",\n        dest=\"evm_bin\",\n        type=Path,\n        default=None,\n        help=(\n            \"Path to an evm executable that provides `t8n`. Default: First 'evm' entry in PATH.\"\n        ),\n    )\n    evm_group.addoption(\n        \"--traces\",\n        action=\"store_true\",\n        dest=\"evm_collect_traces\",\n        default=None,\n        help=\"Collect traces of the execution information from the transition tool.\",\n    )\n    evm_group.addoption(\n        \"--verify-fixtures\",\n        action=\"store_true\",\n        dest=\"verify_fixtures\",\n        default=False,\n        help=(\n            \"Verify generated fixture JSON files using geth's evm blocktest command. \"\n            \"By default, the same evm binary as for the t8n tool is used. A different (geth) evm \"\n            \"binary may be specified via --verify-fixtures-bin, this must be specified if filling \"\n            \"with a non-geth t8n tool that does not support blocktest.\"\n        ),\n    )\n    evm_group.addoption(\n        \"--verify-fixtures-bin\",\n        action=\"store\",\n        dest=\"verify_fixtures_bin\",\n        type=Path,\n        default=None,\n        help=(\n            \"Path to an evm executable that provides the `blocktest` command. \"\n            \"Default: The first (geth) 'evm' entry in PATH.\"\n        ),\n    )\n\n    test_group = parser.getgroup(\"tests\", \"Arguments defining filler location and output\")\n    test_group.addoption(\n        \"--filler-path\",\n        action=\"store\",\n        dest=\"filler_path\",\n        default=\"./tests/\",\n        type=Path,\n        help=\"Path to filler directives\",\n    )\n    test_group.addoption(\n        \"--output\",\n        action=\"store\",\n        dest=\"output\",\n        type=Path,\n        default=Path(default_output_directory()),\n        help=(\n            \"Directory path to store the generated test fixtures. \"\n            \"If the specified path ends in '.tar.gz', then the specified tarball is additionally \"\n            \"created (the fixtures are still written to the specified path without the '.tar.gz' \"\n            f\"suffix). Can be deleted. Default: '{default_output_directory()}'.\"\n        ),\n    )\n    test_group.addoption(\n        \"--flat-output\",\n        action=\"store_true\",\n        dest=\"flat_output\",\n        default=False,\n        help=\"Output each test case in the directory without the folder structure.\",\n    )\n    test_group.addoption(\n        \"--single-fixture-per-file\",\n        action=\"store_true\",\n        dest=\"single_fixture_per_file\",\n        default=False,\n        help=(\n            \"Don't group fixtures in JSON files by test function; write each fixture to its own \"\n            \"file. This can be used to increase the granularity of --verify-fixtures.\"\n        ),\n    )\n    test_group.addoption(\n        \"--no-html\",\n        action=\"store_true\",\n        dest=\"disable_html\",\n        default=False,\n        help=(\n            \"Don't generate an HTML test report (in the output directory). \"\n            \"The --html flag can be used to specify a different path.\"\n        ),\n    )\n    test_group.addoption(\n        \"--build-name\",\n        action=\"store\",\n        dest=\"build_name\",\n        default=None,\n        type=str,\n        help=\"Specify a build name for the fixtures.ini file, e.g., 'stable'.\",\n    )\n    test_group.addoption(\n        \"--index\",\n        action=\"store_true\",\n        dest=\"generate_index\",\n        default=False,\n        help=\"Generate an index file for all produced fixtures.\",\n    )\n\n    debug_group = parser.getgroup(\"debug\", \"Arguments defining debug behavior\")\n    debug_group.addoption(\n        \"--evm-dump-dir\",\n        \"--t8n-dump-dir\",\n        action=\"store\",\n        dest=\"base_dump_dir\",\n        default=\"\",\n        help=\"Path to dump the transition tool debug output.\",\n    )\n\n    internal_group = parser.getgroup(\"internal\", \"Internal arguments\")\n    internal_group.addoption(\n        \"--session-temp-folder\",\n        action=\"store\",\n        dest=\"session_temp_folder\",\n        type=Path,\n        default=None,\n        help=argparse.SUPPRESS,\n    )\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_configure","title":"pytest_configure(config)","text":"

    Pytest hook called after command line options have been parsed and before test collection begins.

    Couple of notes: 1. Register the plugin's custom markers and process command-line options.

    Custom marker registration:\nhttps://docs.pytest.org/en/7.1.x/how-to/writing_plugins.html#registering-custom-markers\n
    1. @pytest.hookimpl(tryfirst=True) is applied to ensure that this hook is called before the pytest-html plugin's pytest_configure to ensure that it uses the modified htmlpath option.
    Source code in src/pytest_plugins/filler/filler.py
    @pytest.hookimpl(tryfirst=True)\ndef pytest_configure(config):\n    \"\"\"\n    Pytest hook called after command line options have been parsed and before\n    test collection begins.\n\n    Couple of notes:\n    1. Register the plugin's custom markers and process command-line options.\n\n        Custom marker registration:\n        https://docs.pytest.org/en/7.1.x/how-to/writing_plugins.html#registering-custom-markers\n\n    2. `@pytest.hookimpl(tryfirst=True)` is applied to ensure that this hook is\n        called before the pytest-html plugin's pytest_configure to ensure that\n        it uses the modified `htmlpath` option.\n    \"\"\"\n    for fixture_format in FixtureFormats:\n        config.addinivalue_line(\n            \"markers\",\n            (\n                f\"{fixture_format.name.lower()}: \"\n                f\"{FixtureFormats.get_format_description(fixture_format)}\"\n            ),\n        )\n    config.addinivalue_line(\n        \"markers\",\n        \"yul_test: a test case that compiles Yul code.\",\n    )\n    config.addinivalue_line(\n        \"markers\",\n        \"compile_yul_with(fork): Always compile Yul source using the corresponding evm version.\",\n    )\n    if config.option.collectonly:\n        return\n    if not config.getoption(\"disable_html\") and config.getoption(\"htmlpath\") is None:\n        # generate an html report by default, unless explicitly disabled\n        config.option.htmlpath = (\n            strip_output_tarball_suffix(config.getoption(\"output\"))\n            / default_html_report_file_path()\n        )\n    # Instantiate the transition tool here to check that the binary path/trace option is valid.\n    # This ensures we only raise an error once, if appropriate, instead of for every test.\n    t8n = TransitionTool.from_binary_path(\n        binary_path=config.getoption(\"evm_bin\"), trace=config.getoption(\"evm_collect_traces\")\n    )\n    if (\n        isinstance(config.getoption(\"numprocesses\"), int)\n        and config.getoption(\"numprocesses\") > 0\n        and \"Besu\" in str(t8n.detect_binary_pattern)\n    ):\n        pytest.exit(\n            \"The Besu t8n tool does not work well with the xdist plugin; use -n=0.\",\n            returncode=pytest.ExitCode.USAGE_ERROR,\n        )\n\n    if \"Tools\" not in config.stash[metadata_key]:\n        config.stash[metadata_key][\"Tools\"] = {\n            \"t8n\": t8n.version(),\n        }\n    else:\n        config.stash[metadata_key][\"Tools\"][\"t8n\"] = t8n.version()\n\n    args = [\"fill\"] + [str(arg) for arg in config.invocation_params.args]\n    for i in range(len(args)):\n        if \" \" in args[i]:\n            args[i] = f'\"{args[i]}\"'\n    command_line_args = \" \".join(args)\n    config.stash[metadata_key][\"Command-line args\"] = f\"<code>{command_line_args}</code>\"\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_report_header","title":"pytest_report_header(config)","text":"

    Add lines to pytest's console output header

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.hookimpl(trylast=True)\ndef pytest_report_header(config: pytest.Config):\n    \"\"\"Add lines to pytest's console output header\"\"\"\n    if config.option.collectonly:\n        return\n    t8n_version = config.stash[metadata_key][\"Tools\"][\"t8n\"]\n    solc_version = config.stash[metadata_key][\"Tools\"][\"solc\"]\n    return [(f\"{t8n_version}, {solc_version}\")]\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_report_teststatus","title":"pytest_report_teststatus(report, config)","text":"

    Disable test session progress report if we're writing the JSON fixtures to stdout to be read by a consume command on stdin. I.e., don't write this type of output to the console:

    ...x...\n
    Source code in src/pytest_plugins/filler/filler.py
    def pytest_report_teststatus(report, config: pytest.Config):\n    \"\"\"\n    Disable test session progress report if we're writing the JSON fixtures to\n    stdout to be read by a consume command on stdin. I.e., don't write this\n    type of output to the console:\n\n    ```text\n    ...x...\n    ```\n    \"\"\"\n    if is_output_stdout(config.getoption(\"output\")):\n        return report.outcome, \"\", report.outcome.upper()\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_metadata","title":"pytest_metadata(metadata)","text":"

    Add or remove metadata to/from the pytest report.

    Source code in src/pytest_plugins/filler/filler.py
    def pytest_metadata(metadata):\n    \"\"\"\n    Add or remove metadata to/from the pytest report.\n    \"\"\"\n    metadata.pop(\"JAVA_HOME\", None)\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_html_results_table_header","title":"pytest_html_results_table_header(cells)","text":"

    Customize the table headers of the HTML report table.

    Source code in src/pytest_plugins/filler/filler.py
    def pytest_html_results_table_header(cells):\n    \"\"\"\n    Customize the table headers of the HTML report table.\n    \"\"\"\n    cells.insert(3, '<th class=\"sortable\" data-column-type=\"fixturePath\">JSON Fixture File</th>')\n    cells.insert(4, '<th class=\"sortable\" data-column-type=\"evmDumpDir\">EVM Dump Dir</th>')\n    del cells[-1]  # Remove the \"Links\" column\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_html_results_table_row","title":"pytest_html_results_table_row(report, cells)","text":"

    Customize the table rows of the HTML report table.

    Source code in src/pytest_plugins/filler/filler.py
    def pytest_html_results_table_row(report, cells):\n    \"\"\"\n    Customize the table rows of the HTML report table.\n    \"\"\"\n    if hasattr(report, \"user_properties\"):\n        user_props = dict(report.user_properties)\n        if (\n            report.passed\n            and \"fixture_path_absolute\" in user_props\n            and \"fixture_path_relative\" in user_props\n        ):\n            fixture_path_absolute = user_props[\"fixture_path_absolute\"]\n            fixture_path_relative = user_props[\"fixture_path_relative\"]\n            fixture_path_link = (\n                f'<a href=\"{fixture_path_absolute}\" target=\"_blank\">{fixture_path_relative}</a>'\n            )\n            cells.insert(3, f\"<td>{fixture_path_link}</td>\")\n        elif report.failed:\n            cells.insert(3, \"<td>Fixture unavailable</td>\")\n        if \"evm_dump_dir\" in user_props:\n            if user_props[\"evm_dump_dir\"] is None:\n                cells.insert(\n                    4, \"<td>For t8n debug info use <code>--evm-dump-dir=path --traces</code></td>\"\n                )\n            else:\n                evm_dump_dir = user_props.get(\"evm_dump_dir\")\n                if evm_dump_dir == \"N/A\":\n                    evm_dump_entry = \"N/A\"\n                else:\n                    evm_dump_entry = f'<a href=\"{evm_dump_dir}\" target=\"_blank\">{evm_dump_dir}</a>'\n                cells.insert(4, f\"<td>{evm_dump_entry}</td>\")\n    del cells[-1]  # Remove the \"Links\" column\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_runtest_makereport","title":"pytest_runtest_makereport(item, call)","text":"

    This hook is called when each test is run and a report is being made.

    Make each test's fixture json path available to the test report via user_properties.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.hookimpl(hookwrapper=True)\ndef pytest_runtest_makereport(item, call):\n    \"\"\"\n    This hook is called when each test is run and a report is being made.\n\n    Make each test's fixture json path available to the test report via\n    user_properties.\n    \"\"\"\n    outcome = yield\n    report = outcome.get_result()\n\n    if call.when == \"call\":\n        if hasattr(item.config, \"fixture_path_absolute\") and hasattr(\n            item.config, \"fixture_path_relative\"\n        ):\n            report.user_properties.append(\n                (\"fixture_path_absolute\", item.config.fixture_path_absolute)\n            )\n            report.user_properties.append(\n                (\"fixture_path_relative\", item.config.fixture_path_relative)\n            )\n        if hasattr(item.config, \"evm_dump_dir\") and hasattr(item.config, \"fixture_format\"):\n            if item.config.fixture_format in [\n                \"state_test\",\n                \"blockchain_test\",\n                \"blockchain_test_engine\",\n            ]:\n                report.user_properties.append((\"evm_dump_dir\", item.config.evm_dump_dir))\n            else:\n                report.user_properties.append((\"evm_dump_dir\", \"N/A\"))  # not yet for EOF\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_html_report_title","title":"pytest_html_report_title(report)","text":"

    Set the HTML report title (pytest-html plugin).

    Source code in src/pytest_plugins/filler/filler.py
    def pytest_html_report_title(report):\n    \"\"\"\n    Set the HTML report title (pytest-html plugin).\n    \"\"\"\n    report.title = \"Fill Test Report\"\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.evm_bin","title":"evm_bin(request)","text":"

    Returns the configured evm tool binary path used to run t8n.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(autouse=True, scope=\"session\")\ndef evm_bin(request: pytest.FixtureRequest) -> Path:\n    \"\"\"\n    Returns the configured evm tool binary path used to run t8n.\n    \"\"\"\n    return request.config.getoption(\"evm_bin\")\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.verify_fixtures_bin","title":"verify_fixtures_bin(request)","text":"

    Returns the configured evm tool binary path used to run statetest or blocktest.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(autouse=True, scope=\"session\")\ndef verify_fixtures_bin(request: pytest.FixtureRequest) -> Path | None:\n    \"\"\"\n    Returns the configured evm tool binary path used to run statetest or\n    blocktest.\n    \"\"\"\n    return request.config.getoption(\"verify_fixtures_bin\")\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.t8n","title":"t8n(request, evm_bin)","text":"

    Returns the configured transition tool.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(autouse=True, scope=\"session\")\ndef t8n(request: pytest.FixtureRequest, evm_bin: Path) -> Generator[TransitionTool, None, None]:\n    \"\"\"\n    Returns the configured transition tool.\n    \"\"\"\n    t8n = TransitionTool.from_binary_path(\n        binary_path=evm_bin, trace=request.config.getoption(\"evm_collect_traces\")\n    )\n    yield t8n\n    t8n.shutdown()\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.do_fixture_verification","title":"do_fixture_verification(request, verify_fixtures_bin)","text":"

    Returns True if evm statetest or evm blocktest should be ran on the generated fixture JSON files.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=\"session\")\ndef do_fixture_verification(\n    request: pytest.FixtureRequest, verify_fixtures_bin: Path | None\n) -> bool:\n    \"\"\"\n    Returns True if evm statetest or evm blocktest should be ran on the\n    generated fixture JSON files.\n    \"\"\"\n    do_fixture_verification = False\n    if verify_fixtures_bin:\n        do_fixture_verification = True\n    if request.config.getoption(\"verify_fixtures\"):\n        do_fixture_verification = True\n    return do_fixture_verification\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.evm_fixture_verification","title":"evm_fixture_verification(do_fixture_verification, evm_bin, verify_fixtures_bin)","text":"

    Returns the configured evm binary for executing statetest and blocktest commands used to verify generated JSON fixtures.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(autouse=True, scope=\"session\")\ndef evm_fixture_verification(\n    do_fixture_verification: bool,\n    evm_bin: Path,\n    verify_fixtures_bin: Path | None,\n) -> Generator[TransitionTool | None, None, None]:\n    \"\"\"\n    Returns the configured evm binary for executing statetest and blocktest\n    commands used to verify generated JSON fixtures.\n    \"\"\"\n    if not do_fixture_verification:\n        yield None\n        return\n    if not verify_fixtures_bin and evm_bin:\n        verify_fixtures_bin = evm_bin\n    evm_fixture_verification = TransitionTool.from_binary_path(binary_path=verify_fixtures_bin)\n    if not evm_fixture_verification.blocktest_subcommand:\n        pytest.exit(\n            \"Only geth's evm tool is supported to verify fixtures: \"\n            \"Either remove --verify-fixtures or set --verify-fixtures-bin to a Geth evm binary.\",\n            returncode=pytest.ExitCode.USAGE_ERROR,\n        )\n    yield evm_fixture_verification\n    evm_fixture_verification.shutdown()\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.base_dump_dir","title":"base_dump_dir(request)","text":"

    The base directory to dump the evm debug output.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=\"session\")\ndef base_dump_dir(request: pytest.FixtureRequest) -> Path | None:\n    \"\"\"\n    The base directory to dump the evm debug output.\n    \"\"\"\n    base_dump_dir_str = request.config.getoption(\"base_dump_dir\")\n    if base_dump_dir_str:\n        return Path(base_dump_dir_str)\n    return None\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.is_output_tarball","title":"is_output_tarball(request)","text":"

    Returns True if the output directory is a tarball.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=\"session\")\ndef is_output_tarball(request: pytest.FixtureRequest) -> bool:\n    \"\"\"\n    Returns True if the output directory is a tarball.\n    \"\"\"\n    output: Path = request.config.getoption(\"output\")\n    if output.suffix == \".gz\" and output.with_suffix(\"\").suffix == \".tar\":\n        return True\n    return False\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.output_dir","title":"output_dir(request, is_output_tarball)","text":"

    Returns the directory to store the generated test fixtures.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=\"session\")\ndef output_dir(request: pytest.FixtureRequest, is_output_tarball: bool) -> Path:\n    \"\"\"\n    Returns the directory to store the generated test fixtures.\n    \"\"\"\n    output = request.config.getoption(\"output\")\n    if is_output_tarball:\n        return strip_output_tarball_suffix(output)\n    return output\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.output_metadata_dir","title":"output_metadata_dir(output_dir)","text":"

    Returns the metadata directory to store fixture meta files.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=\"session\")\ndef output_metadata_dir(output_dir: Path) -> Path:\n    \"\"\"\n    Returns the metadata directory to store fixture meta files.\n    \"\"\"\n    return output_dir / \".meta\"\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.create_properties_file","title":"create_properties_file(request, output_dir, output_metadata_dir)","text":"

    Creates an ini file with fixture build properties in the fixture output directory.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=\"session\", autouse=True)\ndef create_properties_file(\n    request: pytest.FixtureRequest, output_dir: Path, output_metadata_dir: Path\n) -> None:\n    \"\"\"\n    Creates an ini file with fixture build properties in the fixture output\n    directory.\n    \"\"\"\n    if is_output_stdout(request.config.getoption(\"output\")):\n        return\n    if not output_dir.exists():\n        output_dir.mkdir(parents=True)\n    if not output_metadata_dir.exists():\n        output_metadata_dir.mkdir(parents=True)\n\n    fixture_properties = {\n        \"timestamp\": datetime.datetime.now().isoformat(),\n    }\n    if build_name := request.config.getoption(\"build_name\"):\n        fixture_properties[\"build\"] = build_name\n    if github_ref := os.getenv(\"GITHUB_REF\"):\n        fixture_properties[\"ref\"] = github_ref\n    if github_sha := os.getenv(\"GITHUB_SHA\"):\n        fixture_properties[\"commit\"] = github_sha\n    command_line_args = request.config.stash[metadata_key][\"Command-line args\"]\n    command_line_args = command_line_args.replace(\"<code>\", \"\").replace(\"</code>\", \"\")\n    fixture_properties[\"command_line_args\"] = command_line_args\n\n    config = configparser.ConfigParser()\n    config[\"fixtures\"] = fixture_properties\n    environment_properties = {}\n    for key, val in request.config.stash[metadata_key].items():\n        if key.lower() == \"command-line args\":\n            continue\n        if key.lower() in [\"ci\", \"python\", \"platform\"]:\n            environment_properties[key] = val\n        elif isinstance(val, dict):\n            config[key.lower()] = val\n        else:\n            warnings.warn(f\"Fixtures ini file: Skipping metadata key {key} with value {val}.\")\n    config[\"environment\"] = environment_properties\n\n    ini_filename = output_metadata_dir / \"fixtures.ini\"\n    with open(ini_filename, \"w\") as f:\n        f.write(\"; This file describes fixture build properties\\n\\n\")\n        config.write(f)\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.create_tarball","title":"create_tarball(request, output_dir, is_output_tarball)","text":"

    Create a tarball of json files the output directory if the configured output ends with '.tar.gz'.

    Only include .json and .ini files in the archive.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=\"session\", autouse=True)\ndef create_tarball(\n    request: pytest.FixtureRequest, output_dir: Path, is_output_tarball: bool\n) -> Generator[None, None, None]:\n    \"\"\"\n    Create a tarball of json files the output directory if the configured\n    output ends with '.tar.gz'.\n\n    Only include .json and .ini files in the archive.\n    \"\"\"\n    yield\n    if is_output_tarball:\n        source_dir = output_dir\n        tarball_filename = request.config.getoption(\"output\")\n        with tarfile.open(tarball_filename, \"w:gz\") as tar:\n            for file in source_dir.rglob(\"*\"):\n                if file.suffix in {\".json\", \".ini\"}:\n                    arcname = Path(\"fixtures\") / file.relative_to(source_dir)\n                    tar.add(file, arcname=arcname)\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.dump_dir_parameter_level","title":"dump_dir_parameter_level(request, base_dump_dir, filler_path)","text":"

    The directory to dump evm transition tool debug output on a test parameter level.

    Example with --evm-dump-dir=/tmp/evm: -> /tmp/evm/shanghai__eip3855_push0__test_push0__test_push0_key_sstore/fork_shanghai/

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=\"function\")\ndef dump_dir_parameter_level(\n    request: pytest.FixtureRequest, base_dump_dir: Path | None, filler_path: Path\n) -> Path | None:\n    \"\"\"\n    The directory to dump evm transition tool debug output on a test parameter\n    level.\n\n    Example with --evm-dump-dir=/tmp/evm:\n    -> /tmp/evm/shanghai__eip3855_push0__test_push0__test_push0_key_sstore/fork_shanghai/\n    \"\"\"\n    evm_dump_dir = node_to_test_info(request.node).get_dump_dir_path(\n        base_dump_dir,\n        filler_path,\n        level=\"test_parameter\",\n    )\n    # NOTE: Use str for compatibility with pytest-dist\n    if evm_dump_dir:\n        request.node.config.evm_dump_dir = str(evm_dump_dir)\n    else:\n        request.node.config.evm_dump_dir = None\n    return evm_dump_dir\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.get_fixture_collection_scope","title":"get_fixture_collection_scope(fixture_name, config)","text":"

    Return the appropriate scope to write fixture JSON files.

    See: https://docs.pytest.org/en/stable/how-to/fixtures.html#dynamic-scope

    Source code in src/pytest_plugins/filler/filler.py
    def get_fixture_collection_scope(fixture_name, config):\n    \"\"\"\n    Return the appropriate scope to write fixture JSON files.\n\n    See: https://docs.pytest.org/en/stable/how-to/fixtures.html#dynamic-scope\n    \"\"\"\n    if is_output_stdout(config.getoption(\"output\")):\n        return \"session\"\n    if config.getoption(\"single_fixture_per_file\"):\n        return \"function\"\n    return \"module\"\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.fixture_collector","title":"fixture_collector(request, do_fixture_verification, evm_fixture_verification, filler_path, base_dump_dir, output_dir, session_temp_folder, generate_index)","text":"

    Returns the configured fixture collector instance used for all tests in one test module.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=get_fixture_collection_scope)\ndef fixture_collector(\n    request: pytest.FixtureRequest,\n    do_fixture_verification: bool,\n    evm_fixture_verification: TransitionTool,\n    filler_path: Path,\n    base_dump_dir: Path | None,\n    output_dir: Path,\n    session_temp_folder: Path | None,\n    generate_index: bool,\n) -> Generator[FixtureCollector, None, None]:\n    \"\"\"\n    Returns the configured fixture collector instance used for all tests\n    in one test module.\n    \"\"\"\n    if session_temp_folder is not None:\n        fixture_collector_count_file_name = \"fixture_collector_count\"\n        fixture_collector_count_file = session_temp_folder / fixture_collector_count_file_name\n        fixture_collector_count_file_lock = (\n            session_temp_folder / f\"{fixture_collector_count_file_name}.lock\"\n        )\n        with FileLock(fixture_collector_count_file_lock):\n            if fixture_collector_count_file.exists():\n                with open(fixture_collector_count_file, \"r\") as f:\n                    fixture_collector_count = int(f.read())\n            else:\n                fixture_collector_count = 0\n            fixture_collector_count += 1\n            with open(fixture_collector_count_file, \"w\") as f:\n                f.write(str(fixture_collector_count))\n\n    fixture_collector = FixtureCollector(\n        output_dir=output_dir,\n        flat_output=request.config.getoption(\"flat_output\"),\n        single_fixture_per_file=request.config.getoption(\"single_fixture_per_file\"),\n        filler_path=filler_path,\n        base_dump_dir=base_dump_dir,\n    )\n    yield fixture_collector\n    fixture_collector.dump_fixtures()\n    if do_fixture_verification:\n        fixture_collector.verify_fixture_files(evm_fixture_verification)\n\n    fixture_collector_count = 0\n    if session_temp_folder is not None:\n        with FileLock(fixture_collector_count_file_lock):\n            with open(fixture_collector_count_file, \"r\") as f:\n                fixture_collector_count = int(f.read())\n            fixture_collector_count -= 1\n            with open(fixture_collector_count_file, \"w\") as f:\n                f.write(str(fixture_collector_count))\n    if generate_index and fixture_collector_count == 0:\n        generate_fixtures_index(\n            output_dir, quiet_mode=True, force_flag=False, disable_infer_format=False\n        )\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.filler_path","title":"filler_path(request)","text":"

    Returns the directory containing the tests to execute.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(autouse=True, scope=\"session\")\ndef filler_path(request: pytest.FixtureRequest) -> Path:\n    \"\"\"\n    Returns the directory containing the tests to execute.\n    \"\"\"\n    return request.config.getoption(\"filler_path\")\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.eips","title":"eips()","text":"

    A fixture specifying that, by default, no EIPs should be activated for tests.

    This fixture (function) may be redefined in test filler modules in order to overwrite this default and return a list of integers specifying which EIPs should be activated for the tests in scope.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(autouse=True)\ndef eips():\n    \"\"\"\n    A fixture specifying that, by default, no EIPs should be activated for\n    tests.\n\n    This fixture (function) may be redefined in test filler modules in order\n    to overwrite this default and return a list of integers specifying which\n    EIPs should be activated for the tests in scope.\n    \"\"\"\n    return []\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.yul","title":"yul(fork, request)","text":"

    A fixture that allows contract code to be defined with Yul code.

    This fixture defines a class that wraps the ::ethereum_test_tools.Yul class so that upon instantiation within the test case, it provides the test case's current fork parameter. The forks is then available for use in solc's arguments for the Yul code compilation.

    Test cases can override the default value by specifying a fixed version with the @pytest.mark.compile_yul_with(FORK) marker.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture\ndef yul(fork: Fork, request):\n    \"\"\"\n    A fixture that allows contract code to be defined with Yul code.\n\n    This fixture defines a class that wraps the ::ethereum_test_tools.Yul\n    class so that upon instantiation within the test case, it provides the\n    test case's current fork parameter. The forks is then available for use\n    in solc's arguments for the Yul code compilation.\n\n    Test cases can override the default value by specifying a fixed version\n    with the @pytest.mark.compile_yul_with(FORK) marker.\n    \"\"\"\n    solc_target_fork: Fork | None\n    marker = request.node.get_closest_marker(\"compile_yul_with\")\n    if marker:\n        if not marker.args[0]:\n            pytest.fail(\n                f\"{request.node.name}: Expected one argument in 'compile_yul_with' marker.\"\n            )\n        for fork in request.config.forks:\n            if fork.name() == marker.args[0]:\n                solc_target_fork = fork\n                break\n        else:\n            pytest.fail(f\"{request.node.name}: Fork {marker.args[0]} not found in forks list.\")\n        assert solc_target_fork in get_forks_with_solc_support(request.config.solc_version)\n    else:\n        solc_target_fork = get_closest_fork_with_solc_support(fork, request.config.solc_version)\n        assert solc_target_fork is not None, \"No fork supports provided solc version.\"\n        if solc_target_fork != fork and request.config.getoption(\"verbose\") >= 1:\n            warnings.warn(f\"Compiling Yul for {solc_target_fork.name()}, not {fork.name()}.\")\n\n    class YulWrapper(Yul):\n        def __new__(cls, *args, **kwargs):\n            return super(YulWrapper, cls).__new__(cls, *args, **kwargs, fork=solc_target_fork)\n\n    return YulWrapper\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.node_to_test_info","title":"node_to_test_info(node)","text":"

    Returns the test info of the current node item.

    Source code in src/pytest_plugins/filler/filler.py
    def node_to_test_info(node: pytest.Item) -> TestInfo:\n    \"\"\"\n    Returns the test info of the current node item.\n    \"\"\"\n    return TestInfo(\n        name=node.name,\n        id=node.nodeid,\n        original_name=node.originalname,  # type: ignore\n        path=Path(node.path),\n    )\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.fixture_source_url","title":"fixture_source_url(request)","text":"

    Returns the URL to the fixture source.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=\"function\")\ndef fixture_source_url(request: pytest.FixtureRequest) -> str:\n    \"\"\"\n    Returns the URL to the fixture source.\n    \"\"\"\n    function_line_number = request.function.__code__.co_firstlineno\n    module_relative_path = os.path.relpath(request.module.__file__)\n    hash_or_tag = get_current_commit_hash_or_tag()\n    github_url = generate_github_url(\n        module_relative_path, branch_or_commit_or_tag=hash_or_tag, line_number=function_line_number\n    )\n    return github_url\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.fixture_description","title":"fixture_description(request)","text":"

    Fixture to extract and combine docstrings from the test class and the test function.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=\"function\")\ndef fixture_description(request: pytest.FixtureRequest) -> str:\n    \"\"\"Fixture to extract and combine docstrings from the test class and the test function.\"\"\"\n    description_unavailable = (\n        \"No description available - add a docstring to the python test class or function.\"\n    )\n    test_class_doc = f\"Test class documentation:\\n{request.cls.__doc__}\" if request.cls else \"\"\n    test_function_doc = (\n        f\"Test function documentation:\\n{request.function.__doc__}\"\n        if request.function.__doc__\n        else \"\"\n    )\n    if not test_class_doc and not test_function_doc:\n        return description_unavailable\n    combined_docstring = f\"{test_class_doc}\\n\\n{test_function_doc}\".strip()\n    return combined_docstring\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.base_test_parametrizer","title":"base_test_parametrizer(cls)","text":"

    Generates a pytest.fixture for a given BaseTest subclass.

    Implementation detail: All spec fixtures must be scoped on test function level to avoid leakage between tests.

    Source code in src/pytest_plugins/filler/filler.py
    def base_test_parametrizer(cls: Type[BaseTest]):\n    \"\"\"\n    Generates a pytest.fixture for a given BaseTest subclass.\n\n    Implementation detail: All spec fixtures must be scoped on test function level to avoid\n    leakage between tests.\n    \"\"\"\n\n    @pytest.fixture(\n        scope=\"function\",\n        name=cls.pytest_parameter_name(),\n    )\n    def base_test_parametrizer_func(\n        request: pytest.FixtureRequest,\n        t8n: TransitionTool,\n        fork: Fork,\n        reference_spec: ReferenceSpec,\n        eips: List[int],\n        pre: Alloc,\n        output_dir: Path,\n        dump_dir_parameter_level: Path | None,\n        fixture_collector: FixtureCollector,\n        fixture_description: str,\n        fixture_source_url: str,\n    ):\n        \"\"\"\n        Fixture used to instantiate an auto-fillable BaseTest object from within\n        a test function.\n\n        Every test that defines a test filler must explicitly specify its parameter name\n        (see `pytest_parameter_name` in each implementation of BaseTest) in its function\n        arguments.\n\n        When parametrize, indirect must be used along with the fixture format as value.\n        \"\"\"\n        fixture_format = request.param\n        assert isinstance(fixture_format, FixtureFormats)\n\n        class BaseTestWrapper(cls):  # type: ignore\n            def __init__(self, *args, **kwargs):\n                kwargs[\"t8n_dump_dir\"] = dump_dir_parameter_level\n                if \"pre\" not in kwargs:\n                    kwargs[\"pre\"] = pre\n                super(BaseTestWrapper, self).__init__(*args, **kwargs)\n                fixture = self.generate(\n                    t8n=t8n,\n                    fork=fork,\n                    fixture_format=fixture_format,\n                    eips=eips,\n                )\n                fixture.fill_info(\n                    t8n.version(),\n                    fixture_description,\n                    fixture_source_url=fixture_source_url,\n                    ref_spec=reference_spec,\n                )\n\n                fixture_path = fixture_collector.add_fixture(\n                    node_to_test_info(request.node),\n                    fixture,\n                )\n\n                # NOTE: Use str for compatibility with pytest-dist\n                request.node.config.fixture_path_absolute = str(fixture_path.absolute())\n                request.node.config.fixture_path_relative = str(\n                    fixture_path.relative_to(output_dir)\n                )\n                request.node.config.fixture_format = fixture_format.value\n\n        return BaseTestWrapper\n\n    return base_test_parametrizer_func\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_generate_tests","title":"pytest_generate_tests(metafunc)","text":"

    Pytest hook used to dynamically generate test cases for each fixture format a given test spec supports.

    Source code in src/pytest_plugins/filler/filler.py
    def pytest_generate_tests(metafunc: pytest.Metafunc):\n    \"\"\"\n    Pytest hook used to dynamically generate test cases for each fixture format a given\n    test spec supports.\n    \"\"\"\n    for test_type in SPEC_TYPES:\n        if test_type.pytest_parameter_name() in metafunc.fixturenames:\n            metafunc.parametrize(\n                [test_type.pytest_parameter_name()],\n                [\n                    pytest.param(\n                        fixture_format,\n                        id=fixture_format.name.lower(),\n                        marks=[getattr(pytest.mark, fixture_format.name.lower())],\n                    )\n                    for fixture_format in test_type.supported_fixture_formats\n                ],\n                scope=\"function\",\n                indirect=True,\n            )\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_collection_modifyitems","title":"pytest_collection_modifyitems(config, items)","text":"

    Remove pre-Paris tests parametrized to generate engine type fixtures; these can't be used in the Hive Pyspec Simulator.

    This can't be handled in this plugins pytest_generate_tests() as the fork parametrization occurs in the forks plugin.

    Source code in src/pytest_plugins/filler/filler.py
    def pytest_collection_modifyitems(config, items):\n    \"\"\"\n    Remove pre-Paris tests parametrized to generate engine type fixtures; these\n    can't be used in the Hive Pyspec Simulator.\n\n    This can't be handled in this plugins pytest_generate_tests() as the fork\n    parametrization occurs in the forks plugin.\n    \"\"\"\n    for item in items[:]:  # use a copy of the list, as we'll be modifying it\n        if isinstance(item, EIPSpecTestItem):\n            continue\n        if \"fork\" not in item.callspec.params or item.callspec.params[\"fork\"] is None:\n            items.remove(item)\n            continue\n        if item.callspec.params[\"fork\"] < Paris:\n            # Even though the `state_test` test spec does not produce an engine STATE_TEST, it does\n            # produce a BLOCKCHAIN_TEST_ENGINE, so we need to remove it here.\n            # TODO: Ideally, the logic could be contained in the `FixtureFormat` class, we create\n            # a `fork_supported` method that returns True if the fork is supported.\n            if (\"state_test\" in item.callspec.params) and item.callspec.params[\n                \"state_test\"\n            ].name.endswith(\"ENGINE\"):\n                items.remove(item)\n            if (\"blockchain_test\" in item.callspec.params) and item.callspec.params[\n                \"blockchain_test\"\n            ].name.endswith(\"ENGINE\"):\n                items.remove(item)\n        if \"yul\" in item.fixturenames:\n            item.add_marker(pytest.mark.yul_test)\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_make_parametrize_id","title":"pytest_make_parametrize_id(config, val, argname)","text":"

    Pytest hook called when generating test ids. We use this to generate more readable test ids for the generated tests.

    Source code in src/pytest_plugins/filler/filler.py
    def pytest_make_parametrize_id(config, val, argname):\n    \"\"\"\n    Pytest hook called when generating test ids. We use this to generate\n    more readable test ids for the generated tests.\n    \"\"\"\n    return f\"{argname}_{val}\"\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_runtest_call","title":"pytest_runtest_call(item)","text":"

    Pytest hook called in the context of test execution.

    Source code in src/pytest_plugins/filler/filler.py
    def pytest_runtest_call(item):\n    \"\"\"\n    Pytest hook called in the context of test execution.\n    \"\"\"\n    if isinstance(item, EIPSpecTestItem):\n        return\n\n    class InvalidFiller(Exception):\n        def __init__(self, message):\n            super().__init__(message)\n\n    if \"state_test\" in item.fixturenames and \"blockchain_test\" in item.fixturenames:\n        raise InvalidFiller(\n            \"A filler should only implement either a state test or \" \"a blockchain test; not both.\"\n        )\n\n    # Check that the test defines either test type as parameter.\n    if not any([i for i in item.funcargs if i in SPEC_TYPES_PARAMETERS]):\n        pytest.fail(\n            \"Test must define either one of the following parameters to \"\n            + \"properly generate a test: \"\n            + \", \".join(SPEC_TYPES_PARAMETERS)\n        )\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.pytest_addoption","title":"pytest_addoption(parser)","text":"

    Adds command-line options to pytest.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    def pytest_addoption(parser: pytest.Parser):\n    \"\"\"\n    Adds command-line options to pytest.\n    \"\"\"\n    pre_alloc_group = parser.getgroup(\"pre_alloc\", \"Arguments defining pre-allocation behavior.\")\n\n    pre_alloc_group.addoption(\n        \"--strict-alloc\",\n        action=\"store_true\",\n        dest=\"strict_alloc\",\n        default=False,\n        help=(\"[DEBUG ONLY] Disallows deploying a contract in a predefined address.\"),\n    )\n    pre_alloc_group.addoption(\n        \"--ca-start\",\n        \"--contract-address-start\",\n        action=\"store\",\n        dest=\"test_contract_start_address\",\n        default=f\"{CONTRACT_START_ADDRESS_DEFAULT}\",\n        type=str,\n        help=\"The starting address from which tests will deploy contracts.\",\n    )\n    pre_alloc_group.addoption(\n        \"--ca-incr\",\n        \"--contract-address-increment\",\n        action=\"store\",\n        dest=\"test_contract_address_increments\",\n        default=f\"{CONTRACT_ADDRESS_INCREMENTS_DEFAULT}\",\n        type=str,\n        help=\"The address increment value to each deployed contract by a test.\",\n    )\n    pre_alloc_group.addoption(\n        \"--evm-code-type\",\n        action=\"store\",\n        dest=\"evm_code_type\",\n        default=None,\n        type=EVMCodeType,\n        choices=list(EVMCodeType),\n        help=\"Type of EVM code to deploy in each test by default.\",\n    )\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.AllocMode","title":"AllocMode","text":"

    Bases: IntEnum

    Allocation mode for the state.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    class AllocMode(IntEnum):\n    \"\"\"\n    Allocation mode for the state.\n    \"\"\"\n\n    PERMISSIVE = 0\n    STRICT = 1\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.Alloc","title":"Alloc","text":"

    Bases: Alloc

    Allocation of accounts in the state, pre and post test execution.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    class Alloc(BaseAlloc):\n    \"\"\"\n    Allocation of accounts in the state, pre and post test execution.\n    \"\"\"\n\n    _alloc_mode: AllocMode = PrivateAttr(...)\n    _contract_address_iterator: Iterator[Address] = PrivateAttr(...)\n    _eoa_iterator: Iterator[EOA] = PrivateAttr(...)\n    _evm_code_type: EVMCodeType | None = PrivateAttr(None)\n\n    def __init__(\n        self,\n        *args,\n        alloc_mode: AllocMode,\n        contract_address_iterator: Iterator[Address],\n        eoa_iterator: Iterator[EOA],\n        evm_code_type: EVMCodeType | None = None,\n        **kwargs,\n    ):\n        \"\"\"\n        Initializes the allocation with the given properties.\n        \"\"\"\n        super().__init__(*args, **kwargs)\n        self._alloc_mode = alloc_mode\n        self._contract_address_iterator = contract_address_iterator\n        self._eoa_iterator = eoa_iterator\n        self._evm_code_type = evm_code_type\n\n    def __setitem__(self, address: Address | FixedSizeBytesConvertible, account: Account | None):\n        \"\"\"\n        Sets the account associated with an address.\n        \"\"\"\n        if self._alloc_mode == AllocMode.STRICT:\n            raise ValueError(\"Cannot set items in strict mode\")\n        super().__setitem__(address, account)\n\n    def code_pre_processor(\n        self, code: BytesConvertible, *, evm_code_type: EVMCodeType | None\n    ) -> BytesConvertible:\n        \"\"\"\n        Pre-processes the code before setting it.\n        \"\"\"\n        if evm_code_type is None:\n            evm_code_type = self._evm_code_type\n        if evm_code_type == EVMCodeType.EOF_V1:\n            if not isinstance(code, Container):\n                if isinstance(code, Bytecode) and not code.terminating:\n                    return Container.Code(code + Opcodes.STOP)\n                return Container.Code(code)\n        return code\n\n    def deploy_contract(\n        self,\n        code: BytesConvertible,\n        *,\n        storage: Storage | StorageRootType = {},\n        balance: NumberConvertible = 0,\n        nonce: NumberConvertible = 1,\n        address: Address | None = None,\n        evm_code_type: EVMCodeType | None = None,\n        label: str | None = None,\n    ) -> Address:\n        \"\"\"\n        Deploy a contract to the allocation.\n\n        Warning: `address` parameter is a temporary solution to allow tests to hard-code the\n        contract address. Do NOT use in new tests as it will be removed in the future!\n        \"\"\"\n        if address is not None:\n            assert self._alloc_mode == AllocMode.PERMISSIVE, \"address parameter is not supported\"\n            assert address not in self, f\"address {address} already in allocation\"\n            contract_address = address\n        else:\n            contract_address = next(self._contract_address_iterator)\n\n        if self._alloc_mode == AllocMode.STRICT:\n            assert Number(nonce) >= 1, \"impossible to deploy contract with nonce lower than one\"\n\n        super().__setitem__(\n            contract_address,\n            Account(\n                nonce=nonce,\n                balance=balance,\n                code=self.code_pre_processor(code, evm_code_type=evm_code_type),\n                storage=storage,\n            ),\n        )\n        if label is None:\n            # Try to deduce the label from the code\n            frame = inspect.currentframe()\n            if frame is not None:\n                caller_frame = frame.f_back\n                if caller_frame is not None:\n                    code_context = inspect.getframeinfo(caller_frame).code_context\n                    if code_context is not None:\n                        line = code_context[0].strip()\n                        if \"=\" in line:\n                            label = line.split(\"=\")[0].strip()\n\n        contract_address.label = label\n        return contract_address\n\n    def fund_eoa(\n        self,\n        amount: NumberConvertible = 10**21,\n        label: str | None = None,\n        storage: Storage | None = None,\n    ) -> EOA:\n        \"\"\"\n        Add a previously unused EOA to the pre-alloc with the balance specified by `amount`.\n\n        If amount is 0, nothing will be added to the pre-alloc but a new and unique EOA will be\n        returned.\n        \"\"\"\n        eoa = next(self._eoa_iterator)\n        if Number(amount) > 0 or storage is not None:\n            if storage is None:\n                account = Account(\n                    nonce=0,\n                    balance=amount,\n                )\n            else:\n                # Type-4 transaction is sent to the EOA to set the storage, so the nonce must be 1\n                account = Account(\n                    nonce=1,\n                    balance=amount,\n                    storage=storage,\n                )\n                eoa.nonce = Number(1)\n\n            super().__setitem__(eoa, account)\n        return eoa\n\n    def fund_address(self, address: Address, amount: NumberConvertible):\n        \"\"\"\n        Fund an address with a given amount.\n\n        If the address is already present in the pre-alloc the amount will be\n        added to its existing balance.\n        \"\"\"\n        if address in self:\n            account = self[address]\n            if account is not None:\n                current_balance = account.balance or 0\n                account.balance = ZeroPaddedHexNumber(current_balance + Number(amount))\n                return\n        super().__setitem__(address, Account(balance=amount))\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.Alloc.__init__","title":"__init__(*args, alloc_mode, contract_address_iterator, eoa_iterator, evm_code_type=None, **kwargs)","text":"

    Initializes the allocation with the given properties.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    def __init__(\n    self,\n    *args,\n    alloc_mode: AllocMode,\n    contract_address_iterator: Iterator[Address],\n    eoa_iterator: Iterator[EOA],\n    evm_code_type: EVMCodeType | None = None,\n    **kwargs,\n):\n    \"\"\"\n    Initializes the allocation with the given properties.\n    \"\"\"\n    super().__init__(*args, **kwargs)\n    self._alloc_mode = alloc_mode\n    self._contract_address_iterator = contract_address_iterator\n    self._eoa_iterator = eoa_iterator\n    self._evm_code_type = evm_code_type\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.Alloc.__setitem__","title":"__setitem__(address, account)","text":"

    Sets the account associated with an address.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    def __setitem__(self, address: Address | FixedSizeBytesConvertible, account: Account | None):\n    \"\"\"\n    Sets the account associated with an address.\n    \"\"\"\n    if self._alloc_mode == AllocMode.STRICT:\n        raise ValueError(\"Cannot set items in strict mode\")\n    super().__setitem__(address, account)\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.Alloc.code_pre_processor","title":"code_pre_processor(code, *, evm_code_type)","text":"

    Pre-processes the code before setting it.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    def code_pre_processor(\n    self, code: BytesConvertible, *, evm_code_type: EVMCodeType | None\n) -> BytesConvertible:\n    \"\"\"\n    Pre-processes the code before setting it.\n    \"\"\"\n    if evm_code_type is None:\n        evm_code_type = self._evm_code_type\n    if evm_code_type == EVMCodeType.EOF_V1:\n        if not isinstance(code, Container):\n            if isinstance(code, Bytecode) and not code.terminating:\n                return Container.Code(code + Opcodes.STOP)\n            return Container.Code(code)\n    return code\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.Alloc.deploy_contract","title":"deploy_contract(code, *, storage={}, balance=0, nonce=1, address=None, evm_code_type=None, label=None)","text":"

    Deploy a contract to the allocation.

    Warning: address parameter is a temporary solution to allow tests to hard-code the contract address. Do NOT use in new tests as it will be removed in the future!

    Source code in src/pytest_plugins/filler/pre_alloc.py
    def deploy_contract(\n    self,\n    code: BytesConvertible,\n    *,\n    storage: Storage | StorageRootType = {},\n    balance: NumberConvertible = 0,\n    nonce: NumberConvertible = 1,\n    address: Address | None = None,\n    evm_code_type: EVMCodeType | None = None,\n    label: str | None = None,\n) -> Address:\n    \"\"\"\n    Deploy a contract to the allocation.\n\n    Warning: `address` parameter is a temporary solution to allow tests to hard-code the\n    contract address. Do NOT use in new tests as it will be removed in the future!\n    \"\"\"\n    if address is not None:\n        assert self._alloc_mode == AllocMode.PERMISSIVE, \"address parameter is not supported\"\n        assert address not in self, f\"address {address} already in allocation\"\n        contract_address = address\n    else:\n        contract_address = next(self._contract_address_iterator)\n\n    if self._alloc_mode == AllocMode.STRICT:\n        assert Number(nonce) >= 1, \"impossible to deploy contract with nonce lower than one\"\n\n    super().__setitem__(\n        contract_address,\n        Account(\n            nonce=nonce,\n            balance=balance,\n            code=self.code_pre_processor(code, evm_code_type=evm_code_type),\n            storage=storage,\n        ),\n    )\n    if label is None:\n        # Try to deduce the label from the code\n        frame = inspect.currentframe()\n        if frame is not None:\n            caller_frame = frame.f_back\n            if caller_frame is not None:\n                code_context = inspect.getframeinfo(caller_frame).code_context\n                if code_context is not None:\n                    line = code_context[0].strip()\n                    if \"=\" in line:\n                        label = line.split(\"=\")[0].strip()\n\n    contract_address.label = label\n    return contract_address\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.Alloc.fund_eoa","title":"fund_eoa(amount=10 ** 21, label=None, storage=None)","text":"

    Add a previously unused EOA to the pre-alloc with the balance specified by amount.

    If amount is 0, nothing will be added to the pre-alloc but a new and unique EOA will be returned.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    def fund_eoa(\n    self,\n    amount: NumberConvertible = 10**21,\n    label: str | None = None,\n    storage: Storage | None = None,\n) -> EOA:\n    \"\"\"\n    Add a previously unused EOA to the pre-alloc with the balance specified by `amount`.\n\n    If amount is 0, nothing will be added to the pre-alloc but a new and unique EOA will be\n    returned.\n    \"\"\"\n    eoa = next(self._eoa_iterator)\n    if Number(amount) > 0 or storage is not None:\n        if storage is None:\n            account = Account(\n                nonce=0,\n                balance=amount,\n            )\n        else:\n            # Type-4 transaction is sent to the EOA to set the storage, so the nonce must be 1\n            account = Account(\n                nonce=1,\n                balance=amount,\n                storage=storage,\n            )\n            eoa.nonce = Number(1)\n\n        super().__setitem__(eoa, account)\n    return eoa\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.Alloc.fund_address","title":"fund_address(address, amount)","text":"

    Fund an address with a given amount.

    If the address is already present in the pre-alloc the amount will be added to its existing balance.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    def fund_address(self, address: Address, amount: NumberConvertible):\n    \"\"\"\n    Fund an address with a given amount.\n\n    If the address is already present in the pre-alloc the amount will be\n    added to its existing balance.\n    \"\"\"\n    if address in self:\n        account = self[address]\n        if account is not None:\n            current_balance = account.balance or 0\n            account.balance = ZeroPaddedHexNumber(current_balance + Number(amount))\n            return\n    super().__setitem__(address, Account(balance=amount))\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.alloc_mode","title":"alloc_mode(request)","text":"

    Returns the allocation mode for the tests.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    @pytest.fixture(scope=\"session\")\ndef alloc_mode(request: pytest.FixtureRequest) -> AllocMode:\n    \"\"\"\n    Returns the allocation mode for the tests.\n    \"\"\"\n    if request.config.getoption(\"strict_alloc\"):\n        return AllocMode.STRICT\n    return AllocMode.PERMISSIVE\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.contract_start_address","title":"contract_start_address(request)","text":"

    Returns the starting address for contract deployment.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    @pytest.fixture(scope=\"session\")\ndef contract_start_address(request: pytest.FixtureRequest) -> int:\n    \"\"\"\n    Returns the starting address for contract deployment.\n    \"\"\"\n    return int(request.config.getoption(\"test_contract_start_address\"), 0)\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.contract_address_increments","title":"contract_address_increments(request)","text":"

    Returns the address increment for contract deployment.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    @pytest.fixture(scope=\"session\")\ndef contract_address_increments(request: pytest.FixtureRequest) -> int:\n    \"\"\"\n    Returns the address increment for contract deployment.\n    \"\"\"\n    return int(request.config.getoption(\"test_contract_address_increments\"), 0)\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.contract_address_iterator","title":"contract_address_iterator(contract_start_address, contract_address_increments)","text":"

    Returns an iterator over contract addresses.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    @pytest.fixture(scope=\"function\")\ndef contract_address_iterator(\n    contract_start_address: int,\n    contract_address_increments: int,\n) -> Iterator[Address]:\n    \"\"\"\n    Returns an iterator over contract addresses.\n    \"\"\"\n    return iter(\n        Address(contract_start_address + (i * contract_address_increments)) for i in count()\n    )\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.eoa_by_index","title":"eoa_by_index(i) cached","text":"

    Returns an EOA by index.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    @cache\ndef eoa_by_index(i: int) -> EOA:\n    \"\"\"\n    Returns an EOA by index.\n    \"\"\"\n    return EOA(key=TestPrivateKey + i if i != 1 else TestPrivateKey2, nonce=0)\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.eoa_iterator","title":"eoa_iterator()","text":"

    Returns an iterator over EOAs copies.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    @pytest.fixture(scope=\"function\")\ndef eoa_iterator() -> Iterator[EOA]:\n    \"\"\"\n    Returns an iterator over EOAs copies.\n    \"\"\"\n    return iter(eoa_by_index(i).copy() for i in count())\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.evm_code_type","title":"evm_code_type(request)","text":"

    Returns the default EVM code type for all tests (LEGACY).

    Source code in src/pytest_plugins/filler/pre_alloc.py
    @pytest.fixture(autouse=True)\ndef evm_code_type(request: pytest.FixtureRequest) -> EVMCodeType:\n    \"\"\"\n    Returns the default EVM code type for all tests (LEGACY).\n    \"\"\"\n    parameter_evm_code_type = request.config.getoption(\"evm_code_type\")\n    if parameter_evm_code_type is not None:\n        assert type(parameter_evm_code_type) is EVMCodeType, \"Invalid EVM code type\"\n        return parameter_evm_code_type\n    return EVMCodeType.LEGACY\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.pre","title":"pre(alloc_mode, contract_address_iterator, eoa_iterator, evm_code_type)","text":"

    Returns the default pre allocation for all tests (Empty alloc).

    Source code in src/pytest_plugins/filler/pre_alloc.py
    @pytest.fixture(scope=\"function\")\ndef pre(\n    alloc_mode: AllocMode,\n    contract_address_iterator: Iterator[Address],\n    eoa_iterator: Iterator[EOA],\n    evm_code_type: EVMCodeType,\n) -> Alloc:\n    \"\"\"\n    Returns the default pre allocation for all tests (Empty alloc).\n    \"\"\"\n    return Alloc(\n        alloc_mode=alloc_mode,\n        contract_address_iterator=contract_address_iterator,\n        eoa_iterator=eoa_iterator,\n        evm_code_type=evm_code_type,\n    )\n
    "},{"location":"library/pytest_plugins/forks/","title":"Forks Plugin","text":"

    A pytest plugin to configure the forks in the test session. It parametrizes tests based on the user-provided fork range the tests' specified validity markers.

    Pytest plugin to enable fork range configuration for the test session.

    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.pytest_addoption","title":"pytest_addoption(parser)","text":"

    Adds command-line options to pytest.

    Source code in src/pytest_plugins/forks/forks.py
    def pytest_addoption(parser):\n    \"\"\"\n    Adds command-line options to pytest.\n    \"\"\"\n    fork_group = parser.getgroup(\"Forks\", \"Specify the fork range to generate fixtures for\")\n    fork_group.addoption(\n        \"--forks\",\n        action=\"store_true\",\n        dest=\"show_fork_help\",\n        default=False,\n        help=\"Display forks supported by the test framework and exit.\",\n    )\n    fork_group.addoption(\n        \"--fork\",\n        action=\"store\",\n        dest=\"single_fork\",\n        default=None,\n        help=\"Only fill tests for the specified fork.\",\n    )\n    fork_group.addoption(\n        \"--from\",\n        action=\"store\",\n        dest=\"forks_from\",\n        default=None,\n        help=\"Fill tests from and including the specified fork.\",\n    )\n    fork_group.addoption(\n        \"--until\",\n        action=\"store\",\n        dest=\"forks_until\",\n        default=None,\n        help=\"Fill tests until and including the specified fork.\",\n    )\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.ForkCovariantParameter","title":"ForkCovariantParameter dataclass","text":"

    Value list for a fork covariant parameter in a given fork.

    Source code in src/pytest_plugins/forks/forks.py
    @dataclass(kw_only=True)\nclass ForkCovariantParameter:\n    \"\"\"\n    Value list for a fork covariant parameter in a given fork.\n    \"\"\"\n\n    name: str\n    values: List[Any]\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.ForkParametrizer","title":"ForkParametrizer dataclass","text":"

    A parametrizer for a test case that is parametrized by the fork.

    Source code in src/pytest_plugins/forks/forks.py
    @dataclass(kw_only=True)\nclass ForkParametrizer:\n    \"\"\"\n    A parametrizer for a test case that is parametrized by the fork.\n    \"\"\"\n\n    fork: Fork\n    mark: pytest.MarkDecorator | None = None\n    fork_covariant_parameters: List[ForkCovariantParameter] = field(default_factory=list)\n\n    def get_parameter_names(self) -> List[str]:\n        \"\"\"\n        Return the parameter names for the test case.\n        \"\"\"\n        parameter_names = [\"fork\"]\n        for p in self.fork_covariant_parameters:\n            if \",\" in p.name:\n                parameter_names.extend(p.name.split(\",\"))\n            else:\n                parameter_names.append(p.name)\n        return parameter_names\n\n    def get_parameter_values(self) -> List[Any]:\n        \"\"\"\n        Return the parameter values for the test case.\n        \"\"\"\n        param_value_combinations = [\n            params\n            for params in itertools.product(\n                [self.fork],\n                *[p.values for p in self.fork_covariant_parameters],\n            )\n        ]\n        for i in range(len(param_value_combinations)):\n            # if the parameter is a tuple, we need to flatten it\n            param_value_combinations[i] = list(\n                itertools.chain.from_iterable(\n                    [v] if not isinstance(v, tuple) else v for v in param_value_combinations[i]\n                )\n            )\n        return [\n            pytest.param(*params, marks=[self.mark] if self.mark else [])\n            for params in param_value_combinations\n        ]\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.ForkParametrizer.get_parameter_names","title":"get_parameter_names()","text":"

    Return the parameter names for the test case.

    Source code in src/pytest_plugins/forks/forks.py
    def get_parameter_names(self) -> List[str]:\n    \"\"\"\n    Return the parameter names for the test case.\n    \"\"\"\n    parameter_names = [\"fork\"]\n    for p in self.fork_covariant_parameters:\n        if \",\" in p.name:\n            parameter_names.extend(p.name.split(\",\"))\n        else:\n            parameter_names.append(p.name)\n    return parameter_names\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.ForkParametrizer.get_parameter_values","title":"get_parameter_values()","text":"

    Return the parameter values for the test case.

    Source code in src/pytest_plugins/forks/forks.py
    def get_parameter_values(self) -> List[Any]:\n    \"\"\"\n    Return the parameter values for the test case.\n    \"\"\"\n    param_value_combinations = [\n        params\n        for params in itertools.product(\n            [self.fork],\n            *[p.values for p in self.fork_covariant_parameters],\n        )\n    ]\n    for i in range(len(param_value_combinations)):\n        # if the parameter is a tuple, we need to flatten it\n        param_value_combinations[i] = list(\n            itertools.chain.from_iterable(\n                [v] if not isinstance(v, tuple) else v for v in param_value_combinations[i]\n            )\n        )\n    return [\n        pytest.param(*params, marks=[self.mark] if self.mark else [])\n        for params in param_value_combinations\n    ]\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.CovariantDescriptor","title":"CovariantDescriptor dataclass","text":"

    A descriptor for a parameter that is covariant with the fork: the parametrized values change depending on the fork.

    Source code in src/pytest_plugins/forks/forks.py
    @dataclass(kw_only=True)\nclass CovariantDescriptor:\n    \"\"\"\n    A descriptor for a parameter that is covariant with the fork:\n    the parametrized values change depending on the fork.\n    \"\"\"\n\n    marker_name: str\n    description: str\n    fork_attribute_name: str\n    parameter_name: str\n\n    def get_marker(self, metafunc: Metafunc) -> pytest.Mark | None:\n        \"\"\"\n        Get the marker for the given test function.\n        \"\"\"\n        m = metafunc.definition.iter_markers(self.marker_name)\n        if m is None:\n            return None\n        marker_list = list(m)\n        assert len(marker_list) <= 1, f\"Multiple markers {self.marker_name} found\"\n        if len(marker_list) == 0:\n            return None\n        return marker_list[0]\n\n    def check_enabled(self, metafunc: Metafunc) -> bool:\n        \"\"\"\n        Check if the marker is enabled for the given test function.\n        \"\"\"\n        return self.get_marker(metafunc) is not None\n\n    def filter_values(self, metafunc: Metafunc, values: List[Any]) -> List[Any]:\n        \"\"\"\n        Filter the values for the covariant parameter.\n\n        I.e. if the marker has an argument, the argument is interpreted as a lambda function\n        that filters the values.\n        \"\"\"\n        marker = self.get_marker(metafunc)\n        assert marker is not None\n        if len(marker.kwargs) == 0:\n            return values\n        kwargs = dict(marker.kwargs)\n        if \"selector\" in kwargs:\n            selector = kwargs.pop(\"selector\")\n            assert isinstance(selector, FunctionType), \"selector must be a function\"\n            filtered_values = []\n            for value in values:\n                if selector(value):\n                    filtered_values.append(value)\n            values = filtered_values\n        if len(kwargs) > 0:\n            raise ValueError(f\"Unknown arguments to {self.marker_name}: {kwargs}\")\n        return values\n\n    def add_values(self, metafunc: Metafunc, fork_parametrizer: ForkParametrizer) -> None:\n        \"\"\"\n        Add the values for the covariant parameter to the parametrizer.\n        \"\"\"\n        if not self.check_enabled(metafunc=metafunc):\n            return\n        fork = fork_parametrizer.fork\n        get_fork_covariant_values: ForkAttribute = getattr(fork, self.fork_attribute_name)\n        values = get_fork_covariant_values(block_number=0, timestamp=0)\n        assert isinstance(values, list)\n        assert len(values) > 0\n        values = self.filter_values(metafunc, values)\n        fork_parametrizer.fork_covariant_parameters.append(\n            ForkCovariantParameter(name=self.parameter_name, values=values)\n        )\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.CovariantDescriptor.get_marker","title":"get_marker(metafunc)","text":"

    Get the marker for the given test function.

    Source code in src/pytest_plugins/forks/forks.py
    def get_marker(self, metafunc: Metafunc) -> pytest.Mark | None:\n    \"\"\"\n    Get the marker for the given test function.\n    \"\"\"\n    m = metafunc.definition.iter_markers(self.marker_name)\n    if m is None:\n        return None\n    marker_list = list(m)\n    assert len(marker_list) <= 1, f\"Multiple markers {self.marker_name} found\"\n    if len(marker_list) == 0:\n        return None\n    return marker_list[0]\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.CovariantDescriptor.check_enabled","title":"check_enabled(metafunc)","text":"

    Check if the marker is enabled for the given test function.

    Source code in src/pytest_plugins/forks/forks.py
    def check_enabled(self, metafunc: Metafunc) -> bool:\n    \"\"\"\n    Check if the marker is enabled for the given test function.\n    \"\"\"\n    return self.get_marker(metafunc) is not None\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.CovariantDescriptor.filter_values","title":"filter_values(metafunc, values)","text":"

    Filter the values for the covariant parameter.

    I.e. if the marker has an argument, the argument is interpreted as a lambda function that filters the values.

    Source code in src/pytest_plugins/forks/forks.py
    def filter_values(self, metafunc: Metafunc, values: List[Any]) -> List[Any]:\n    \"\"\"\n    Filter the values for the covariant parameter.\n\n    I.e. if the marker has an argument, the argument is interpreted as a lambda function\n    that filters the values.\n    \"\"\"\n    marker = self.get_marker(metafunc)\n    assert marker is not None\n    if len(marker.kwargs) == 0:\n        return values\n    kwargs = dict(marker.kwargs)\n    if \"selector\" in kwargs:\n        selector = kwargs.pop(\"selector\")\n        assert isinstance(selector, FunctionType), \"selector must be a function\"\n        filtered_values = []\n        for value in values:\n            if selector(value):\n                filtered_values.append(value)\n        values = filtered_values\n    if len(kwargs) > 0:\n        raise ValueError(f\"Unknown arguments to {self.marker_name}: {kwargs}\")\n    return values\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.CovariantDescriptor.add_values","title":"add_values(metafunc, fork_parametrizer)","text":"

    Add the values for the covariant parameter to the parametrizer.

    Source code in src/pytest_plugins/forks/forks.py
    def add_values(self, metafunc: Metafunc, fork_parametrizer: ForkParametrizer) -> None:\n    \"\"\"\n    Add the values for the covariant parameter to the parametrizer.\n    \"\"\"\n    if not self.check_enabled(metafunc=metafunc):\n        return\n    fork = fork_parametrizer.fork\n    get_fork_covariant_values: ForkAttribute = getattr(fork, self.fork_attribute_name)\n    values = get_fork_covariant_values(block_number=0, timestamp=0)\n    assert isinstance(values, list)\n    assert len(values) > 0\n    values = self.filter_values(metafunc, values)\n    fork_parametrizer.fork_covariant_parameters.append(\n        ForkCovariantParameter(name=self.parameter_name, values=values)\n    )\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.get_from_until_fork_set","title":"get_from_until_fork_set(forks, forks_from, forks_until)","text":"

    Get the fork range from forks_from to forks_until.

    Source code in src/pytest_plugins/forks/forks.py
    def get_from_until_fork_set(\n    forks: Set[Fork], forks_from: Set[Fork], forks_until: Set[Fork]\n) -> Set[Fork]:\n    \"\"\"\n    Get the fork range from forks_from to forks_until.\n    \"\"\"\n    resulting_set = set()\n    for fork_from in forks_from:\n        for fork_until in forks_until:\n            for fork in forks:\n                if fork <= fork_until and fork >= fork_from:\n                    resulting_set.add(fork)\n    return resulting_set\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.get_forks_with_no_parents","title":"get_forks_with_no_parents(forks)","text":"

    Get the forks with no parents in the inheritance hierarchy.

    Source code in src/pytest_plugins/forks/forks.py
    def get_forks_with_no_parents(forks: Set[Fork]) -> Set[Fork]:\n    \"\"\"\n    Get the forks with no parents in the inheritance hierarchy.\n    \"\"\"\n    resulting_forks: Set[Fork] = set()\n    for fork in forks:\n        parents = False\n        for next_fork in forks - {fork}:\n            if next_fork < fork:\n                parents = True\n                break\n        if not parents:\n            resulting_forks = resulting_forks | {fork}\n    return resulting_forks\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.get_forks_with_no_descendants","title":"get_forks_with_no_descendants(forks)","text":"

    Get the forks with no descendants in the inheritance hierarchy.

    Source code in src/pytest_plugins/forks/forks.py
    def get_forks_with_no_descendants(forks: Set[Fork]) -> Set[Fork]:\n    \"\"\"\n    Get the forks with no descendants in the inheritance hierarchy.\n    \"\"\"\n    resulting_forks: Set[Fork] = set()\n    for fork in forks:\n        descendants = False\n        for next_fork in forks - {fork}:\n            if next_fork > fork:\n                descendants = True\n                break\n        if not descendants:\n            resulting_forks = resulting_forks | {fork}\n    return resulting_forks\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.get_last_descendants","title":"get_last_descendants(forks, forks_from)","text":"

    Get the last descendant of a class in the inheritance hierarchy.

    Source code in src/pytest_plugins/forks/forks.py
    def get_last_descendants(forks: Set[Fork], forks_from: Set[Fork]) -> Set[Fork]:\n    \"\"\"\n    Get the last descendant of a class in the inheritance hierarchy.\n    \"\"\"\n    resulting_forks: Set[Fork] = set()\n    forks = get_forks_with_no_descendants(forks)\n    for fork_from in forks_from:\n        for fork in forks:\n            if fork >= fork_from:\n                resulting_forks = resulting_forks | {fork}\n    return resulting_forks\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.pytest_configure","title":"pytest_configure(config)","text":"

    Register the plugin's custom markers and process command-line options.

    Custom marker registration: https://docs.pytest.org/en/7.1.x/how-to/writing_plugins.html#registering-custom-markers

    Source code in src/pytest_plugins/forks/forks.py
    @pytest.hookimpl(tryfirst=True)\ndef pytest_configure(config: pytest.Config):\n    \"\"\"\n    Register the plugin's custom markers and process command-line options.\n\n    Custom marker registration:\n    https://docs.pytest.org/en/7.1.x/how-to/writing_plugins.html#registering-custom-markers\n    \"\"\"\n    config.addinivalue_line(\n        \"markers\",\n        (\n            \"valid_at_transition_to(fork): specifies a test case is valid \"\n            \"only at fork transition boundary to the specified fork\"\n        ),\n    )\n    config.addinivalue_line(\n        \"markers\",\n        \"valid_from(fork): specifies from which fork a test case is valid\",\n    )\n    config.addinivalue_line(\n        \"markers\",\n        \"valid_until(fork): specifies until which fork a test case is valid\",\n    )\n\n    for d in fork_covariant_descriptors:\n        config.addinivalue_line(\"markers\", f\"{d.marker_name}: {d.description}\")\n\n    forks = set([fork for fork in get_forks() if not fork.ignore()])\n    config.forks = forks  # type: ignore\n    config.fork_names = set([fork.name() for fork in sorted(list(forks))])  # type: ignore\n    config.forks_by_name = {fork.name(): fork for fork in forks}  # type: ignore\n\n    available_forks_help = textwrap.dedent(\n        f\"\"\"\\\n        Available forks:\n        {\", \".join(fork.name() for fork in forks)}\n        \"\"\"\n    )\n    available_forks_help += textwrap.dedent(\n        f\"\"\"\\\n        Available transition forks:\n        {\", \".join([fork.name() for fork in get_transition_forks()])}\n        \"\"\"\n    )\n\n    def get_fork_option(config, option_name: str, parameter_name: str) -> Set[Fork]:\n        \"\"\"Post-process get option to allow for external fork conditions.\"\"\"\n        config_str = config.getoption(option_name)\n        if not config_str:\n            return set()\n        forks_str = config_str.split(\",\")\n        for i in range(len(forks_str)):\n            forks_str[i] = forks_str[i].strip()\n            if forks_str[i] == \"Merge\":\n                forks_str[i] = \"Paris\"\n\n        resulting_forks = set()\n\n        for fork in get_forks():\n            if fork.name() in forks_str:\n                resulting_forks.add(fork)\n\n        if len(resulting_forks) != len(forks_str):\n            print(\n                f\"Error: Unsupported fork provided to {parameter_name}:\",\n                config_str,\n                \"\\n\",\n                file=sys.stderr,\n            )\n            print(available_forks_help, file=sys.stderr)\n            pytest.exit(\"Invalid command-line options.\", returncode=pytest.ExitCode.USAGE_ERROR)\n\n        return resulting_forks\n\n    single_fork = get_fork_option(config, \"single_fork\", \"--fork\")\n    forks_from = get_fork_option(config, \"forks_from\", \"--from\")\n    forks_until = get_fork_option(config, \"forks_until\", \"--until\")\n    show_fork_help = config.getoption(\"show_fork_help\")\n\n    dev_forks_help = textwrap.dedent(\n        \"To run tests for a fork under active development, it must be \"\n        \"specified explicitly via --forks-until=FORK.\\n\"\n        \"Tests are only ran for deployed mainnet forks by default, i.e., \"\n        f\"until {get_deployed_forks()[-1].name()}.\\n\"\n    )\n    if show_fork_help:\n        print(available_forks_help)\n        print(dev_forks_help)\n        pytest.exit(\"After displaying help.\", returncode=0)\n\n    if single_fork and (forks_from or forks_until):\n        print(\n            \"Error: --fork cannot be used in combination with --from or --until\", file=sys.stderr\n        )\n        pytest.exit(\"Invalid command-line options.\", returncode=pytest.ExitCode.USAGE_ERROR)\n\n    if single_fork:\n        forks_from = single_fork\n        forks_until = single_fork\n    else:\n        if not forks_from:\n            forks_from = get_forks_with_no_parents(forks)\n        if not forks_until:\n            forks_until = get_last_descendants(set(get_deployed_forks()), forks_from)\n\n    fork_set = get_from_until_fork_set(forks, forks_from, forks_until)\n    config.fork_set = fork_set  # type: ignore\n\n    if not fork_set:\n        print(\n            f\"Error: --from {','.join(fork.name() for fork in forks_from)} \"\n            f\"--until {','.join(fork.name() for fork in forks_until)} \"\n            \"creates an empty fork range.\",\n            file=sys.stderr,\n        )\n        pytest.exit(\n            \"Command-line options produce empty fork range.\",\n            returncode=pytest.ExitCode.USAGE_ERROR,\n        )\n\n    # with --collect-only, we don't have access to these config options\n    config.unsupported_forks: Set[Fork] = set()  # type: ignore\n    if config.option.collectonly:\n        return\n\n    evm_bin = config.getoption(\"evm_bin\")\n    t8n = TransitionTool.from_binary_path(binary_path=evm_bin)\n    config.unsupported_forks = filter(  # type: ignore\n        lambda fork: not t8n.is_fork_supported(fork), fork_set\n    )\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.pytest_report_header","title":"pytest_report_header(config, start_path)","text":"

    A pytest hook called to obtain the report header.

    Source code in src/pytest_plugins/forks/forks.py
    @pytest.hookimpl(trylast=True)\ndef pytest_report_header(config, start_path):\n    \"\"\"A pytest hook called to obtain the report header.\"\"\"\n    bold = \"\\033[1m\"\n    warning = \"\\033[93m\"\n    reset = \"\\033[39;49m\"\n    header = [\n        (\n            bold\n            + \"Executing tests for: \"\n            + \", \".join([f.name() for f in sorted(list(config.fork_set))])\n            + reset\n        ),\n    ]\n    if config.getoption(\"forks_until\") is None:\n        header += [\n            (\n                bold + warning + \"Only executing tests with stable/deployed forks: \"\n                \"Specify an upcoming fork via --until=fork to \"\n                \"add forks under development.\" + reset\n            )\n        ]\n    return header\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.fork","title":"fork(request)","text":"

    Parametrize test cases by fork.

    Source code in src/pytest_plugins/forks/forks.py
    @pytest.fixture(autouse=True)\ndef fork(request):\n    \"\"\"\n    Parametrize test cases by fork.\n    \"\"\"\n    pass\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.get_validity_marker_args","title":"get_validity_marker_args(metafunc, validity_marker_name, test_name)","text":"

    Check and return the arguments specified to validity markers.

    Check that the validity markers:

    • pytest.mark.valid_from
    • pytest.mark.valid_until
    • pytest.mark.valid_at_transition_to

    are applied at most once and have been provided with exactly one argument which is a valid fork name.

    Parameters:

    Name Type Description Default metafunc Metafunc

    Pytest's metafunc object.

    required validity_marker_name str

    Name of the validity marker to validate and return.

    required test_name str

    The name of the test being parametrized by pytest_generate_tests.

    required

    Returns:

    Type Description Set[Fork]

    The name of the fork specified to the validity marker.

    Source code in src/pytest_plugins/forks/forks.py
    def get_validity_marker_args(\n    metafunc: Metafunc,\n    validity_marker_name: str,\n    test_name: str,\n) -> Set[Fork]:\n    \"\"\"Check and return the arguments specified to validity markers.\n\n    Check that the validity markers:\n\n    - `pytest.mark.valid_from`\n    - `pytest.mark.valid_until`\n    - `pytest.mark.valid_at_transition_to`\n\n    are applied at most once and have been provided with exactly one\n    argument which is a valid fork name.\n\n    Args:\n        metafunc: Pytest's metafunc object.\n        validity_marker_name: Name of the validity marker to validate\n            and return.\n        test_name: The name of the test being parametrized by\n            `pytest_generate_tests`.\n\n    Returns:\n        The name of the fork specified to the validity marker.\n    \"\"\"\n    validity_markers = [\n        marker for marker in metafunc.definition.iter_markers(validity_marker_name)\n    ]\n    if not validity_markers:\n        return set()\n    if len(validity_markers) > 1:\n        pytest.fail(f\"'{test_name}': Too many '{validity_marker_name}' markers applied to test. \")\n    if len(validity_markers[0].args) == 0:\n        pytest.fail(f\"'{test_name}': Missing fork argument with '{validity_marker_name}' marker. \")\n    if len(validity_markers[0].args) > 1:\n        pytest.fail(\n            f\"'{test_name}': Too many arguments specified to '{validity_marker_name}' marker. \"\n        )\n    fork_names_string = validity_markers[0].args[0]\n    fork_names = fork_names_string.split(\",\")\n    resulting_set: Set[Fork] = set()\n    for fork_name in fork_names:  # type: ignore\n        if fork_name not in metafunc.config.fork_names:  # type: ignore\n            pytest.fail(\n                f\"'{test_name}' specifies an invalid fork '{fork_names_string}' to the \"\n                f\"'{validity_marker_name}'. \"\n                \"List of valid forks: \"\n                \", \".join(name for name in metafunc.config.fork_names)  # type: ignore\n            )\n\n        resulting_set.add(metafunc.config.forks_by_name[fork_name])  # type: ignore\n\n    return resulting_set\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.pytest_generate_tests","title":"pytest_generate_tests(metafunc)","text":"

    Pytest hook used to dynamically generate test cases.

    Source code in src/pytest_plugins/forks/forks.py
    def pytest_generate_tests(metafunc: pytest.Metafunc):\n    \"\"\"\n    Pytest hook used to dynamically generate test cases.\n    \"\"\"\n    test_name = metafunc.function.__name__\n    valid_at_transition_to = get_validity_marker_args(\n        metafunc, \"valid_at_transition_to\", test_name\n    )\n    valid_from = get_validity_marker_args(metafunc, \"valid_from\", test_name)\n    valid_until = get_validity_marker_args(metafunc, \"valid_until\", test_name)\n\n    if valid_at_transition_to and valid_from:\n        pytest.fail(\n            f\"'{test_name}': \"\n            \"The markers 'valid_from' and 'valid_at_transition_to' can't be combined. \"\n        )\n    if valid_at_transition_to and valid_until:\n        pytest.fail(\n            f\"'{test_name}': \"\n            \"The markers 'valid_until' and 'valid_at_transition_to' can't be combined. \"\n        )\n\n    fork_set: Set[Fork] = metafunc.config.fork_set  # type: ignore\n    forks: Set[Fork] = metafunc.config.forks  # type: ignore\n\n    intersection_set: Set[Fork] = set()\n    if valid_at_transition_to:\n        for fork in valid_at_transition_to:\n            if fork in fork_set:\n                intersection_set = intersection_set | set(transition_fork_to(fork))\n\n    else:\n        if not valid_from:\n            valid_from = get_forks_with_no_parents(forks)\n\n        if not valid_until:\n            valid_until = get_last_descendants(forks, valid_from)\n\n        test_fork_set = get_from_until_fork_set(forks, valid_from, valid_until)\n\n        if not test_fork_set:\n            pytest.fail(\n                \"The test function's \"\n                f\"'{test_name}' fork validity markers generate \"\n                \"an empty fork range. Please check the arguments to its \"\n                f\"markers:  @pytest.mark.valid_from ({valid_from}) and \"\n                f\"@pytest.mark.valid_until ({valid_until}).\"\n            )\n\n        intersection_set = fork_set & test_fork_set\n\n    pytest_params: List[Any]\n    if \"fork\" in metafunc.fixturenames:\n        if not intersection_set:\n            if metafunc.config.getoption(\"verbose\") >= 2:\n                pytest_params = [\n                    pytest.param(\n                        None,\n                        marks=[\n                            pytest.mark.skip(\n                                reason=(\n                                    f\"{test_name} is not valid for any any of forks specified on \"\n                                    \"the command-line.\"\n                                )\n                            )\n                        ],\n                    )\n                ]\n                metafunc.parametrize(\"fork\", pytest_params, scope=\"function\")\n        else:\n            unsupported_forks: Set[Fork] = metafunc.config.unsupported_forks  # type: ignore\n            pytest_params = [\n                (\n                    ForkParametrizer(\n                        fork=fork,\n                        mark=pytest.mark.skip(\n                            reason=(\n                                f\"Fork '{fork}' unsupported by \"\n                                f\"'{metafunc.config.getoption('evm_bin')}'.\"\n                            )\n                        ),\n                    )\n                    if fork.name() in sorted(list(unsupported_forks))\n                    else ForkParametrizer(fork=fork)\n                )\n                for fork in sorted(list(intersection_set))\n            ]\n            add_fork_covariant_parameters(metafunc, pytest_params)\n            parametrize_fork(metafunc, pytest_params)\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.add_fork_covariant_parameters","title":"add_fork_covariant_parameters(metafunc, fork_parametrizers)","text":"

    Iterate over the fork covariant descriptors and add their values to the test function.

    Source code in src/pytest_plugins/forks/forks.py
    def add_fork_covariant_parameters(\n    metafunc: Metafunc, fork_parametrizers: List[ForkParametrizer]\n) -> None:\n    \"\"\"\n    Iterate over the fork covariant descriptors and add their values to the test function.\n    \"\"\"\n    for covariant_descriptor in fork_covariant_descriptors:\n        for fork_parametrizer in fork_parametrizers:\n            covariant_descriptor.add_values(metafunc=metafunc, fork_parametrizer=fork_parametrizer)\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.parametrize_fork","title":"parametrize_fork(metafunc, fork_parametrizers)","text":"

    Add the fork parameters to the test function.

    Source code in src/pytest_plugins/forks/forks.py
    def parametrize_fork(metafunc: Metafunc, fork_parametrizers: List[ForkParametrizer]) -> None:\n    \"\"\"\n    Add the fork parameters to the test function.\n    \"\"\"\n    param_names: List[str] = []\n    param_values: List[Any] = []\n\n    for fork_parametrizer in fork_parametrizers:\n        if not param_names:\n            param_names = fork_parametrizer.get_parameter_names()\n        else:\n            assert param_names == fork_parametrizer.get_parameter_names()\n        param_values.extend(fork_parametrizer.get_parameter_values())\n    metafunc.parametrize(param_names, param_values, scope=\"function\")\n
    "},{"location":"library/pytest_plugins/navigation/","title":"Navigation","text":"
    • Overview
    • Forks
    • Test Filler
    • Spec Version Checker
    "},{"location":"library/pytest_plugins/spec_version_checker/","title":"Spec Version Checker Plugin","text":"

    A pytest plugin that verifies the tested version of an EIP specification against the latest version from the ethereum/EIPs Github repository.

    A pytest plugin that checks that the spec version specified in test/filler modules matches that of ethereum/EIPs.

    "},{"location":"library/pytest_plugins/spec_version_checker/#pytest_plugins.spec_version_checker.spec_version_checker.pytest_configure","title":"pytest_configure(config)","text":"

    Register the plugin's custom markers and process command-line options.

    Custom marker registration: https://docs.pytest.org/en/7.1.x/how-to/writing_plugins.html#registering-custom-markers

    Source code in src/pytest_plugins/spec_version_checker/spec_version_checker.py
    @pytest.hookimpl(tryfirst=True)\ndef pytest_configure(config):\n    \"\"\"\n    Register the plugin's custom markers and process command-line options.\n\n    Custom marker registration:\n    https://docs.pytest.org/en/7.1.x/how-to/writing_plugins.html#registering-custom-markers\n    \"\"\"\n    config.addinivalue_line(\n        \"markers\",\n        \"eip_version_check: a test that tests the reference spec defined in an EIP test module.\",\n    )\n
    "},{"location":"library/pytest_plugins/spec_version_checker/#pytest_plugins.spec_version_checker.spec_version_checker.get_ref_spec_from_module","title":"get_ref_spec_from_module(module)","text":"

    Return the reference spec object defined in a module.

    Raises:

    Type Description Exception

    If the module path contains \"eip\" and the module does not define a reference spec.

    Returns:

    Name Type Description spec_obj None | ReferenceSpec

    Return None if the module path does not contain \"eip\", i.e., the module is not required to define a reference spec, otherwise, return the ReferenceSpec object as defined by the module.

    Source code in src/pytest_plugins/spec_version_checker/spec_version_checker.py
    def get_ref_spec_from_module(module: ModuleType) -> None | ReferenceSpec:\n    \"\"\"\n    Return the reference spec object defined in a module.\n\n    Raises:\n        Exception: If the module path contains \"eip\" and the module\n            does not define a reference spec.\n\n    Returns:\n        spec_obj: Return None if the module path does not contain \"eip\",\n            i.e., the module is not required to define a reference spec,\n            otherwise, return the ReferenceSpec object as defined by the\n            module.\n    \"\"\"\n    if not is_test_for_an_eip(str(module.__file__)):\n        return None\n    module_dict = module.__dict__\n    parseable_ref_specs = [\n        ref_spec_type\n        for ref_spec_type in ReferenceSpecTypes\n        if ref_spec_type.parseable_from_module(module_dict)\n    ]\n    if len(parseable_ref_specs) > 0:\n        module_dict = module.__dict__\n        try:\n            spec_obj = parseable_ref_specs[0].parse_from_module(module_dict)\n        except Exception as e:\n            raise Exception(f\"Error in spec_version_checker: {e} (this test is generated).\")\n    else:\n        raise Exception(\"Test doesn't define REFERENCE_SPEC_GIT_PATH and REFERENCE_SPEC_VERSION\")\n    return spec_obj\n
    "},{"location":"library/pytest_plugins/spec_version_checker/#pytest_plugins.spec_version_checker.spec_version_checker.reference_spec","title":"reference_spec(request)","text":"

    Pytest fixture that returns the reference spec defined in a module.

    See get_ref_spec_from_module.

    Source code in src/pytest_plugins/spec_version_checker/spec_version_checker.py
    @pytest.fixture(autouse=True, scope=\"module\")\ndef reference_spec(request) -> None | ReferenceSpec:\n    \"\"\"\n    Pytest fixture that returns the reference spec defined in a module.\n\n    See `get_ref_spec_from_module`.\n    \"\"\"\n    return get_ref_spec_from_module(request.module)\n
    "},{"location":"library/pytest_plugins/spec_version_checker/#pytest_plugins.spec_version_checker.spec_version_checker.is_test_for_an_eip","title":"is_test_for_an_eip(input_string)","text":"

    Return True if input_string contains an EIP number, i.e., eipNNNN.

    Source code in src/pytest_plugins/spec_version_checker/spec_version_checker.py
    def is_test_for_an_eip(input_string: str) -> bool:\n    \"\"\"\n    Return True if `input_string` contains an EIP number, i.e., eipNNNN.\n    \"\"\"\n    pattern = re.compile(r\".*eip\\d{1,4}\", re.IGNORECASE)\n    if pattern.match(input_string):\n        return True\n    return False\n
    "},{"location":"library/pytest_plugins/spec_version_checker/#pytest_plugins.spec_version_checker.spec_version_checker.test_eip_spec_version","title":"test_eip_spec_version(module)","text":"

    Test that the ReferenceSpec object as defined in the test module is not outdated when compared to the remote hash from ethereum/EIPs.

    Source code in src/pytest_plugins/spec_version_checker/spec_version_checker.py
    def test_eip_spec_version(module: ModuleType):\n    \"\"\"\n    Test that the ReferenceSpec object as defined in the test module\n    is not outdated when compared to the remote hash from\n    ethereum/EIPs.\n    \"\"\"\n    ref_spec = get_ref_spec_from_module(module)\n    assert ref_spec, \"No reference spec object defined\"\n\n    message = (\n        \"The version of the spec referenced in \"\n        f\"{module} does not match that from ethereum/EIPs, \"\n        f\"tests might be outdated: Spec: {ref_spec.name()}. \"\n        f\"Referenced version: {ref_spec.known_version()}. \"\n        f\"Latest version: {ref_spec.latest_version()}. The \"\n        f\"version was retrieved from {ref_spec.api_url()}.\"\n    )\n    try:\n        is_up_to_date = not ref_spec.is_outdated()\n    except Exception as e:\n        raise Exception(\n            f\"Error in spec_version_checker: {e} (this test is generated). \"\n            f\"Reference spec URL: {ref_spec.api_url()}.\"\n        )\n\n    assert is_up_to_date, message\n
    "},{"location":"library/pytest_plugins/spec_version_checker/#pytest_plugins.spec_version_checker.spec_version_checker.EIPSpecTestItem","title":"EIPSpecTestItem","text":"

    Bases: Item

    Custom pytest test item to test EIP spec versions.

    Source code in src/pytest_plugins/spec_version_checker/spec_version_checker.py
    class EIPSpecTestItem(Item):\n    \"\"\"\n    Custom pytest test item to test EIP spec versions.\n    \"\"\"\n\n    def __init__(self, name, parent, module):\n        super().__init__(name, parent)\n        self.module = module\n\n    @classmethod\n    def from_parent(cls, parent, module):\n        \"\"\"\n        Public constructor to define new tests.\n        https://docs.pytest.org/en/latest/reference/reference.html#pytest.nodes.Node.from_parent\n        \"\"\"\n        return super().from_parent(parent=parent, name=\"test_eip_spec_version\", module=module)\n\n    def runtest(self):\n        \"\"\"\n        Define the test to execute for this item.\n        \"\"\"\n        test_eip_spec_version(self.module)\n\n    def reportinfo(self):\n        \"\"\"\n        Get location information for this test item to use test reports.\n        \"\"\"\n        return \"spec_version_checker\", 0, f\"{self.name}\"\n
    "},{"location":"library/pytest_plugins/spec_version_checker/#pytest_plugins.spec_version_checker.spec_version_checker.EIPSpecTestItem.from_parent","title":"from_parent(parent, module) classmethod","text":"

    Public constructor to define new tests. https://docs.pytest.org/en/latest/reference/reference.html#pytest.nodes.Node.from_parent

    Source code in src/pytest_plugins/spec_version_checker/spec_version_checker.py
    @classmethod\ndef from_parent(cls, parent, module):\n    \"\"\"\n    Public constructor to define new tests.\n    https://docs.pytest.org/en/latest/reference/reference.html#pytest.nodes.Node.from_parent\n    \"\"\"\n    return super().from_parent(parent=parent, name=\"test_eip_spec_version\", module=module)\n
    "},{"location":"library/pytest_plugins/spec_version_checker/#pytest_plugins.spec_version_checker.spec_version_checker.EIPSpecTestItem.runtest","title":"runtest()","text":"

    Define the test to execute for this item.

    Source code in src/pytest_plugins/spec_version_checker/spec_version_checker.py
    def runtest(self):\n    \"\"\"\n    Define the test to execute for this item.\n    \"\"\"\n    test_eip_spec_version(self.module)\n
    "},{"location":"library/pytest_plugins/spec_version_checker/#pytest_plugins.spec_version_checker.spec_version_checker.EIPSpecTestItem.reportinfo","title":"reportinfo()","text":"

    Get location information for this test item to use test reports.

    Source code in src/pytest_plugins/spec_version_checker/spec_version_checker.py
    def reportinfo(self):\n    \"\"\"\n    Get location information for this test item to use test reports.\n    \"\"\"\n    return \"spec_version_checker\", 0, f\"{self.name}\"\n
    "},{"location":"library/pytest_plugins/spec_version_checker/#pytest_plugins.spec_version_checker.spec_version_checker.pytest_collection_modifyitems","title":"pytest_collection_modifyitems(session, config, items)","text":"

    Insert a new test EIPSpecTestItem for every test modules that contains 'eip' in its path.

    Source code in src/pytest_plugins/spec_version_checker/spec_version_checker.py
    def pytest_collection_modifyitems(session, config, items):\n    \"\"\"\n    Insert a new test EIPSpecTestItem for every test modules that\n    contains 'eip' in its path.\n    \"\"\"\n    modules = set(item.parent for item in items if isinstance(item.parent, Module))\n    new_test_eip_spec_version_items = [\n        EIPSpecTestItem.from_parent(module, module.obj)\n        for module in modules\n        if is_test_for_an_eip(str(module.path))\n    ]\n    for item in new_test_eip_spec_version_items:\n        item.add_marker(\"eip_version_check\", append=True)\n    items.extend(new_test_eip_spec_version_items)\n
    "},{"location":"tests/","title":"Test case reference","text":"

    Documentation for tests.

    Generate fixtures for these test cases for all forks deployed to mainnet with:

    fill -v tests\n

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Cross-client test cases organized by fork. Each directory underneath tests/ contains test cases corresponding to the fork in which the functionality-under-test was introduced.

    "},{"location":"tests/berlin/","title":"Berlin","text":"

    Documentation for tests/berlin.

    Generate fixtures for these test cases with:

    fill -v tests/berlin\n

    Test cases for EVM functionality introduced in Berlin.

    "},{"location":"tests/berlin/eip2930_access_list/","title":"EIP-2930 Access List","text":"

    Documentation for tests/berlin/eip2930_access_list.

    Generate fixtures for these test cases with:

    fill -v tests/berlin/eip2930_access_list\n
    Tests EIP-2930: Optional access lists

    Test cases for EIP-2930: Optional access lists.

    "},{"location":"tests/berlin/eip2930_access_list/test_acl/","title":"Test ACL","text":"

    Documentation for tests/berlin/eip2930_access_list/test_acl.py.

    Generate fixtures for these test cases with:

    fill -v tests/berlin/eip2930_access_list/test_acl.py\n

    Test ACL Transaction Source Code Examples

    "},{"location":"tests/berlin/eip2930_access_list/test_acl/#tests.berlin.eip2930_access_list.test_acl.test_access_list","title":"test_access_list(state_test, pre)","text":"

    Test type 1 transaction.

    Source code in tests/berlin/eip2930_access_list/test_acl.py
    @pytest.mark.valid_from(\"Berlin\")\ndef test_access_list(state_test: StateTestFiller, pre: Alloc):\n    \"\"\"\n    Test type 1 transaction.\n    \"\"\"\n    env = Environment()\n\n    contract_address = pre.deploy_contract(\n        Op.PC + Op.SLOAD + Op.POP + Op.PC + Op.SLOAD,\n        balance=0x03,\n    )\n    sender = pre.fund_eoa(0x300000)\n\n    tx = Transaction(\n        ty=1,\n        chain_id=0x01,\n        to=contract_address,\n        value=1,\n        gas_limit=323328,\n        gas_price=7,\n        access_list=[\n            AccessList(\n                address=\"0x0000000000000000000000000000000000000000\",\n                storage_keys=[\n                    \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n                ],\n            )\n        ],\n        secret_key=\"0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8\",\n        protected=True,\n        sender=sender,\n    )\n\n    post = {\n        contract_address: Account(\n            code=\"0x5854505854\",\n            balance=4,\n            nonce=1,\n        ),\n        sender: Account(\n            balance=0x2CD931,\n            nonce=1,\n        ),\n    }\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/berlin/eip2930_access_list/test_acl/index/test_cases/","title":"Test ACL - Test Cases","text":"

    Test cases generated from tests/berlin/eip2930_access_list/test_acl.py

    Parametrized test cases generated from the test module tests/berlin/eip2930_access_list/test_acl.py:

    test_access_list[fork_Berlin-blockchain_test]\ntest_access_list[fork_Berlin-state_test]\ntest_access_list[fork_London-blockchain_test]\ntest_access_list[fork_London-state_test]\ntest_access_list[fork_Paris-blockchain_test]\ntest_access_list[fork_Paris-blockchain_test_engine]\ntest_access_list[fork_Paris-state_test]\ntest_access_list[fork_Shanghai-blockchain_test]\ntest_access_list[fork_Shanghai-blockchain_test_engine]\ntest_access_list[fork_Shanghai-state_test]\ntest_access_list[fork_Cancun-blockchain_test]\ntest_access_list[fork_Cancun-blockchain_test_engine]\ntest_access_list[fork_Cancun-state_test]\ntest_access_list[fork_Prague-blockchain_test]\ntest_access_list[fork_Prague-blockchain_test_engine]\ntest_access_list[fork_Prague-state_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/berlin/eip2930_access_list/test_acl.py\n
    "},{"location":"tests/byzantium/","title":"Byzantium","text":"

    Documentation for tests/byzantium.

    Generate fixtures for these test cases with:

    fill -v tests/byzantium\n

    Test cases for EVM functionality introduced in Byzantium.

    "},{"location":"tests/byzantium/eip198_modexp_precompile/","title":"EIP-198 Modexp Precompile","text":"

    Documentation for tests/byzantium/eip198_modexp_precompile.

    Generate fixtures for these test cases with:

    fill -v tests/byzantium/eip198_modexp_precompile\n

    Test for precompiles introduced in Byzantium.

    "},{"location":"tests/byzantium/eip198_modexp_precompile/test_modexp/","title":"Test Modexp","text":"

    Documentation for tests/byzantium/eip198_modexp_precompile/test_modexp.py.

    Generate fixtures for these test cases with:

    fill -v tests/byzantium/eip198_modexp_precompile/test_modexp.py\n
    Test EIP-198: MODEXP Precompile

    Tests the MODEXP precompile, located at address 0x0000..0005. Test cases from the EIP are labelled with EIP-198-caseX in the test id.

    "},{"location":"tests/byzantium/eip198_modexp_precompile/test_modexp/#tests.byzantium.eip198_modexp_precompile.test_modexp.test_modexp","title":"test_modexp(state_test, input, output, pre)","text":"

    Test the MODEXP precompile

    Source code in tests/byzantium/eip198_modexp_precompile/test_modexp.py
    @pytest.mark.valid_from(\"Byzantium\")\n@pytest.mark.parametrize(\n    [\"input\", \"output\"],\n    [\n        (\n            ModExpInput(base=\"\", exponent=\"\", modulus=\"02\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x01\"),\n        ),\n        (\n            ModExpInput(base=\"\", exponent=\"\", modulus=\"0002\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x0001\"),\n        ),\n        (\n            ModExpInput(base=\"00\", exponent=\"00\", modulus=\"02\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x01\"),\n        ),\n        (\n            ModExpInput(base=\"\", exponent=\"01\", modulus=\"02\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x00\"),\n        ),\n        (\n            ModExpInput(base=\"01\", exponent=\"01\", modulus=\"02\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x01\"),\n        ),\n        (\n            ModExpInput(base=\"02\", exponent=\"01\", modulus=\"03\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x02\"),\n        ),\n        (\n            ModExpInput(base=\"02\", exponent=\"02\", modulus=\"05\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x04\"),\n        ),\n        (\n            ModExpInput(base=\"\", exponent=\"\", modulus=\"\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x\"),\n        ),\n        (\n            ModExpInput(base=\"\", exponent=\"\", modulus=\"00\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x00\"),\n        ),\n        (\n            ModExpInput(base=\"\", exponent=\"\", modulus=\"01\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x00\"),\n        ),\n        (\n            ModExpInput(base=\"\", exponent=\"\", modulus=\"0001\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x0000\"),\n        ),\n        # Test cases from EIP 198.\n        pytest.param(\n            ModExpInput(\n                base=\"03\",\n                exponent=\"fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e\",\n                modulus=\"fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f\",\n            ),\n            ExpectedOutput(\n                call_return_code=\"0x01\",\n                returned_data=\"0000000000000000000000000000000000000000000000000000000000000001\",\n            ),\n            id=\"EIP-198-case1\",\n        ),\n        pytest.param(\n            ModExpInput(\n                base=\"\",\n                exponent=\"fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e\",\n                modulus=\"fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f\",\n            ),\n            ExpectedOutput(\n                call_return_code=\"0x01\",\n                returned_data=\"0000000000000000000000000000000000000000000000000000000000000000\",\n            ),\n            id=\"EIP-198-case2\",\n        ),\n        pytest.param(  # Note: This is the only test case which goes out-of-gas.\n            ModExpRawInput(\n                raw_input=\"0000000000000000000000000000000000000000000000000000000000000000\"\n                \"0000000000000000000000000000000000000000000000000000000000000020\"\n                \"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\"\n                \"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe\"\n                \"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd\"\n            ),\n            ExpectedOutput(\n                call_return_code=\"0x00\",\n                returned_data=\"0000000000000000000000000000000000000000000000000000000000000000\",\n            ),\n            id=\"EIP-198-case3-raw-input-out-of-gas\",\n        ),\n        pytest.param(\n            ModExpInput(\n                base=\"03\",\n                exponent=\"ffff\",\n                modulus=\"8000000000000000000000000000000000000000000000000000000000000000\",\n                extra_data=\"07\",\n            ),\n            ExpectedOutput(\n                call_return_code=\"0x01\",\n                returned_data=\"0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab\",\n            ),\n            id=\"EIP-198-case4-extra-data_07\",\n        ),\n        pytest.param(\n            ModExpRawInput(\n                raw_input=\"0000000000000000000000000000000000000000000000000000000000000001\"\n                \"0000000000000000000000000000000000000000000000000000000000000002\"\n                \"0000000000000000000000000000000000000000000000000000000000000020\"\n                \"03\"\n                \"ffff\"\n                \"80\"\n            ),\n            ExpectedOutput(\n                call_return_code=\"0x01\",\n                returned_data=\"0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab\",\n            ),\n            id=\"EIP-198-case5-raw-input\",\n        ),\n    ],\n    ids=lambda param: param.__repr__(),  # only required to remove parameter names (input/output)\n)\ndef test_modexp(\n    state_test: StateTestFiller, input: ModExpInput, output: ExpectedOutput, pre: Alloc\n):\n    \"\"\"\n    Test the MODEXP precompile\n    \"\"\"\n    env = Environment()\n    sender = pre.fund_eoa()\n\n    account = pre.deploy_contract(\n        # Store all CALLDATA into memory (offset 0)\n        Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n        # Store the returned CALL status (success = 1, fail = 0) into slot 0:\n        + Op.SSTORE(\n            0,\n            # Setup stack to CALL into ModExp with the CALLDATA and CALL into it (+ pop value)\n            Op.CALL(Op.GAS(), 0x05, 0, 0, Op.CALLDATASIZE(), 0, 0),\n        )\n        # Store contract deployment code to deploy the returned data from ModExp as\n        # contract code (16 bytes)\n        + Op.MSTORE(\n            0,\n            (\n                (\n                    # Need to `ljust` this PUSH32 in order to ensure the code starts\n                    # in memory at offset 0 (memory right-aligns stack items which are not\n                    # 32 bytes)\n                    Op.PUSH32(\n                        bytes(\n                            Op.CODECOPY(0, 16, Op.SUB(Op.CODESIZE(), 16))\n                            + Op.RETURN(0, Op.SUB(Op.CODESIZE, 16))\n                        ).ljust(32, bytes(1))\n                    )\n                )\n            ),\n        )\n        # RETURNDATACOPY the returned data from ModExp into memory (offset 16 bytes)\n        + Op.RETURNDATACOPY(16, 0, Op.RETURNDATASIZE())\n        # CREATE contract with the deployment code + the returned data from ModExp\n        + Op.CREATE(0, 0, Op.ADD(16, Op.RETURNDATASIZE()))\n        # STOP (handy for tracing)\n        + Op.STOP(),\n    )\n\n    tx = Transaction(\n        ty=0x0,\n        to=account,\n        data=input.create_modexp_tx_data(),\n        gas_limit=500000,\n        gas_price=10,\n        protected=True,\n        sender=sender,\n    )\n\n    post = {}\n    if output.call_return_code != \"0x00\":\n        contract_address = compute_create_address(address=account, nonce=1)\n        post[contract_address] = Account(code=output.returned_data)\n    post[account] = Account(storage={0: output.call_return_code})\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/byzantium/eip198_modexp_precompile/test_modexp/index/test_cases/","title":"Test Modexp - Test Cases","text":"

    Test cases generated from tests/byzantium/eip198_modexp_precompile/test_modexp.py

    Parametrized test cases generated from the test module tests/byzantium/eip198_modexp_precompile/test_modexp.py:

    test_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Byzantium-blockchain_test-EIP-198-case1]\ntest_modexp[fork_Byzantium-blockchain_test-EIP-198-case2]\ntest_modexp[fork_Byzantium-blockchain_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Byzantium-blockchain_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Byzantium-blockchain_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Byzantium-state_test-EIP-198-case1]\ntest_modexp[fork_Byzantium-state_test-EIP-198-case2]\ntest_modexp[fork_Byzantium-state_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Byzantium-state_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Byzantium-state_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Constantinople-blockchain_test-EIP-198-case1]\ntest_modexp[fork_Constantinople-blockchain_test-EIP-198-case2]\ntest_modexp[fork_Constantinople-blockchain_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Constantinople-blockchain_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Constantinople-blockchain_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Constantinople-state_test-EIP-198-case1]\ntest_modexp[fork_Constantinople-state_test-EIP-198-case2]\ntest_modexp[fork_Constantinople-state_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Constantinople-state_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Constantinople-state_test-EIP-198-case5-raw-input]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-EIP-198-case1]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-EIP-198-case2]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-EIP-198-case5-raw-input]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_ConstantinopleFix-state_test-EIP-198-case1]\ntest_modexp[fork_ConstantinopleFix-state_test-EIP-198-case2]\ntest_modexp[fork_ConstantinopleFix-state_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_ConstantinopleFix-state_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_ConstantinopleFix-state_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Istanbul-blockchain_test-EIP-198-case1]\ntest_modexp[fork_Istanbul-blockchain_test-EIP-198-case2]\ntest_modexp[fork_Istanbul-blockchain_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Istanbul-blockchain_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Istanbul-blockchain_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Istanbul-state_test-EIP-198-case1]\ntest_modexp[fork_Istanbul-state_test-EIP-198-case2]\ntest_modexp[fork_Istanbul-state_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Istanbul-state_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Istanbul-state_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Berlin-blockchain_test-EIP-198-case1]\ntest_modexp[fork_Berlin-blockchain_test-EIP-198-case2]\ntest_modexp[fork_Berlin-blockchain_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Berlin-blockchain_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Berlin-blockchain_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Berlin-state_test-EIP-198-case1]\ntest_modexp[fork_Berlin-state_test-EIP-198-case2]\ntest_modexp[fork_Berlin-state_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Berlin-state_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Berlin-state_test-EIP-198-case5-raw-input]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_London-blockchain_test-EIP-198-case1]\ntest_modexp[fork_London-blockchain_test-EIP-198-case2]\ntest_modexp[fork_London-blockchain_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_London-blockchain_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_London-blockchain_test-EIP-198-case5-raw-input]\ntest_modexp[fork_London-state_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_London-state_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_London-state_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_London-state_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_London-state_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_London-state_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_London-state_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_London-state_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_London-state_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_London-state_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_London-state_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_London-state_test-EIP-198-case1]\ntest_modexp[fork_London-state_test-EIP-198-case2]\ntest_modexp[fork_London-state_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_London-state_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_London-state_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Paris-blockchain_test-EIP-198-case1]\ntest_modexp[fork_Paris-blockchain_test-EIP-198-case2]\ntest_modexp[fork_Paris-blockchain_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Paris-blockchain_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Paris-blockchain_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Paris-blockchain_test_engine-EIP-198-case1]\ntest_modexp[fork_Paris-blockchain_test_engine-EIP-198-case2]\ntest_modexp[fork_Paris-blockchain_test_engine-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Paris-blockchain_test_engine-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Paris-blockchain_test_engine-EIP-198-case5-raw-input]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Paris-state_test-EIP-198-case1]\ntest_modexp[fork_Paris-state_test-EIP-198-case2]\ntest_modexp[fork_Paris-state_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Paris-state_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Paris-state_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Shanghai-blockchain_test-EIP-198-case1]\ntest_modexp[fork_Shanghai-blockchain_test-EIP-198-case2]\ntest_modexp[fork_Shanghai-blockchain_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Shanghai-blockchain_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Shanghai-blockchain_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Shanghai-blockchain_test_engine-EIP-198-case1]\ntest_modexp[fork_Shanghai-blockchain_test_engine-EIP-198-case2]\ntest_modexp[fork_Shanghai-blockchain_test_engine-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Shanghai-blockchain_test_engine-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Shanghai-blockchain_test_engine-EIP-198-case5-raw-input]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Shanghai-state_test-EIP-198-case1]\ntest_modexp[fork_Shanghai-state_test-EIP-198-case2]\ntest_modexp[fork_Shanghai-state_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Shanghai-state_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Shanghai-state_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Cancun-blockchain_test-EIP-198-case1]\ntest_modexp[fork_Cancun-blockchain_test-EIP-198-case2]\ntest_modexp[fork_Cancun-blockchain_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Cancun-blockchain_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Cancun-blockchain_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Cancun-blockchain_test_engine-EIP-198-case1]\ntest_modexp[fork_Cancun-blockchain_test_engine-EIP-198-case2]\ntest_modexp[fork_Cancun-blockchain_test_engine-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Cancun-blockchain_test_engine-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Cancun-blockchain_test_engine-EIP-198-case5-raw-input]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Cancun-state_test-EIP-198-case1]\ntest_modexp[fork_Cancun-state_test-EIP-198-case2]\ntest_modexp[fork_Cancun-state_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Cancun-state_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Cancun-state_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Prague-blockchain_test-EIP-198-case1]\ntest_modexp[fork_Prague-blockchain_test-EIP-198-case2]\ntest_modexp[fork_Prague-blockchain_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Prague-blockchain_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Prague-blockchain_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Prague-blockchain_test_engine-EIP-198-case1]\ntest_modexp[fork_Prague-blockchain_test_engine-EIP-198-case2]\ntest_modexp[fork_Prague-blockchain_test_engine-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Prague-blockchain_test_engine-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Prague-blockchain_test_engine-EIP-198-case5-raw-input]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Prague-state_test-EIP-198-case1]\ntest_modexp[fork_Prague-state_test-EIP-198-case2]\ntest_modexp[fork_Prague-state_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Prague-state_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Prague-state_test-EIP-198-case5-raw-input]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/byzantium/eip198_modexp_precompile/test_modexp.py\n
    "},{"location":"tests/cancun/","title":"Cancun","text":"

    Documentation for tests/cancun.

    Generate fixtures for these test cases with:

    fill -v tests/cancun\n

    Test cases for EVM functionality introduced in Cancun.

    See EIP-7659: Hardfork Meta - Dencun for a list of EIPS included in Dencun (Deneb/Cancun).

    "},{"location":"tests/cancun/eip1153_tstore/","title":"EIP-1153 Tstore","text":"

    Documentation for tests/cancun/eip1153_tstore.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore\n

    EIP-1153 Tests

    "},{"location":"tests/cancun/eip1153_tstore/spec/","title":"Spec","text":"

    Documentation for tests/cancun/eip1153_tstore/spec.py.

    Defines EIP-1153 specification constants and functions.

    "},{"location":"tests/cancun/eip1153_tstore/spec/#tests.cancun.eip1153_tstore.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-1153 specifications as defined at https://eips.ethereum.org/EIPS/eip-1153

    Source code in tests/cancun/eip1153_tstore/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-1153 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-1153\n    \"\"\"\n\n    TLOAD_OPCODE_BYTE = 0x5C\n    TSTORE_OPCODE_BYTE = 0x5D\n    TLOAD_GAS_COST = 100\n    TSTORE_GAS_COST = 100\n
    "},{"location":"tests/cancun/eip1153_tstore/test_basic_tload/","title":"Test Basic Tload","text":"

    Documentation for tests/cancun/eip1153_tstore/test_basic_tload.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_basic_tload.py\n

    Ethereum Transient Storage EIP Tests https://eips.ethereum.org/EIPS/eip-1153

    "},{"location":"tests/cancun/eip1153_tstore/test_basic_tload/#tests.cancun.eip1153_tstore.test_basic_tload.test_basic_tload_transaction_begin","title":"test_basic_tload_transaction_begin(state_test, pre)","text":"

    Ported .json vectors:

    (01_tloadBeginningTxnFiller.yml) load arbitrary value is 0 at beginning of transaction

    Source code in tests/cancun/eip1153_tstore/test_basic_tload.py
    @pytest.mark.valid_from(\"Cancun\")\ndef test_basic_tload_transaction_begin(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Ported .json vectors:\n\n    (01_tloadBeginningTxnFiller.yml)\n    load arbitrary value is 0 at beginning of transaction\n    \"\"\"\n    slot_tload_at_transaction_begin_result = 1\n    slot_code_worked = 2\n\n    address_to = pre.deploy_contract(\n        code=Op.JUMPDEST()\n        # 01 test\n        + Op.SSTORE(slot_tload_at_transaction_begin_result, Op.TLOAD(0))\n        + Op.SSTORE(slot_code_worked, 1),\n        storage={\n            slot_tload_at_transaction_begin_result: 0xFF,\n        },\n    )\n\n    post = {\n        address_to: Account(\n            storage={\n                slot_tload_at_transaction_begin_result: 0x00,\n                slot_code_worked: 0x01,\n            }\n        )\n    }\n\n    tx = Transaction(\n        sender=pre.fund_eoa(7_000_000_000_000_000_000),\n        to=address_to,\n        gas_price=10,\n        data=b\"\",\n        gas_limit=5000000,\n        value=0,\n    )\n\n    state_test(env=Environment(), pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_basic_tload/#tests.cancun.eip1153_tstore.test_basic_tload.test_basic_tload_works","title":"test_basic_tload_works(state_test, pre)","text":"

    Ported .json vectors:

    (02_tloadAfterTstoreFiller.yml) tload from same slot after tstore returns correct value

    Source code in tests/cancun/eip1153_tstore/test_basic_tload.py
    @pytest.mark.valid_from(\"Cancun\")\ndef test_basic_tload_works(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Ported .json vectors:\n\n    (02_tloadAfterTstoreFiller.yml)\n    tload from same slot after tstore returns correct value\n    \"\"\"\n    tstore_value = 88\n\n    slot_tload_after_tstore_result = 0\n    slot_tload_after_tstore_result_second_time = 1\n    slot_code_worked = 2\n\n    address_to = pre.deploy_contract(\n        code=Op.JUMPDEST()\n        # 02 test\n        + Op.TSTORE(2, tstore_value)\n        + Op.SSTORE(slot_tload_after_tstore_result, Op.TLOAD(2))\n        + Op.SSTORE(slot_tload_after_tstore_result_second_time, Op.TLOAD(2))\n        + Op.SSTORE(slot_code_worked, 1),\n        storage={\n            slot_tload_after_tstore_result: 0xFF,\n            slot_tload_after_tstore_result_second_time: 0xFF,\n        },\n    )\n\n    post = {\n        address_to: Account(\n            storage={\n                slot_tload_after_tstore_result: tstore_value,\n                slot_tload_after_tstore_result_second_time: tstore_value,\n                slot_code_worked: 0x01,\n            }\n        )\n    }\n\n    tx = Transaction(\n        sender=pre.fund_eoa(7_000_000_000_000_000_000),\n        to=address_to,\n        gas_price=10,\n        data=b\"\",\n        gas_limit=5000000,\n        value=0,\n    )\n\n    state_test(env=Environment(), pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_basic_tload/#tests.cancun.eip1153_tstore.test_basic_tload.test_basic_tload_other_after_tstore","title":"test_basic_tload_other_after_tstore(state_test, pre)","text":"

    Ported .json vectors:

    (03_tloadAfterStoreIs0Filler.yml) Loading any other slot after storing to a slot returns 0.

    Source code in tests/cancun/eip1153_tstore/test_basic_tload.py
    @pytest.mark.valid_from(\"Cancun\")\ndef test_basic_tload_other_after_tstore(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Ported .json vectors:\n\n    (03_tloadAfterStoreIs0Filler.yml)\n    Loading any other slot after storing to a slot returns 0.\n    \"\"\"\n    tstore_value = 88\n\n    slot_tload_untouched_slot_after_tstore_result = 1\n    slot_code_worked = 2\n\n    address_to = pre.deploy_contract(\n        code=Op.JUMPDEST()\n        # 03 test\n        + Op.TSTORE(3, tstore_value)\n        + Op.SSTORE(slot_tload_untouched_slot_after_tstore_result, Op.TLOAD(0))\n        + Op.SSTORE(slot_code_worked, 1),\n        storage={\n            slot_tload_untouched_slot_after_tstore_result: 0xFF,\n        },\n    )\n\n    post = {\n        address_to: Account(\n            storage={\n                slot_tload_untouched_slot_after_tstore_result: 0x00,\n                slot_code_worked: 0x01,\n            }\n        )\n    }\n\n    tx = Transaction(\n        sender=pre.fund_eoa(7_000_000_000_000_000_000),\n        to=address_to,\n        gas_price=10,\n        data=b\"\",\n        gas_limit=5000000,\n        value=0,\n    )\n\n    state_test(env=Environment(), pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_basic_tload/#tests.cancun.eip1153_tstore.test_basic_tload.test_basic_tload_gasprice","title":"test_basic_tload_gasprice(state_test, pre)","text":"

    Ported .json vectors:

    (16_tloadGasFiller.yml) tload costs 100 gas same as a warm sload

    Source code in tests/cancun/eip1153_tstore/test_basic_tload.py
    @pytest.mark.valid_from(\"Cancun\")\ndef test_basic_tload_gasprice(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Ported .json vectors:\n\n    (16_tloadGasFiller.yml)\n    tload costs 100 gas same as a warm sload\n    \"\"\"\n    slot_tload_nonzero_gas_price_result = 1\n    slot_tload_zero_gas_price_result = 2\n    slot_code_worked = 3\n\n    \"\"\"\n    N         OPNAME       GAS_COST  TOTAL_GAS REMAINING_GAS     STACK\n    28-1         MSTORE         2     20748   4958252    2:[4ba82f,0,]\n                 MSTORE [0] = 4958255\n    29-1          PUSH1         3     20754   4958246\n    30-1          TLOAD       100     20757   4958243    1:[10,]\n    31-1            GAS         2     20857   4958143    1:[2,]\n    32-1          PUSH1         3     20859   4958141    2:[2,4ba7bd,]\n    33-1         MSTORE         6     20862   4958138    3:[2,4ba7bd,20,]\n                 MSTORE [32] = 4958141\n    \"\"\"\n    extra_opcode_gas = 11  # mstore(3), push1(3),gas(2),push1(3)\n\n    address_to = pre.deploy_contract(\n        code=Op.JUMPDEST()\n        # 16 test\n        + Op.TSTORE(16, 2)\n        + Op.MSTORE(0, Op.GAS())  # hot load the memory to make the extra_opcode_gas be 11\n        + Op.MSTORE(0, Op.GAS())\n        + Op.TLOAD(16)\n        + Op.MSTORE(32, Op.GAS())\n        + Op.SSTORE(slot_tload_nonzero_gas_price_result, Op.SUB(Op.MLOAD(0), Op.MLOAD(32)))\n        + Op.SSTORE(\n            slot_tload_nonzero_gas_price_result,\n            Op.SUB(Op.SLOAD(slot_tload_nonzero_gas_price_result), extra_opcode_gas),\n        )\n        + Op.MSTORE(0, Op.GAS())\n        + Op.TLOAD(5)  # tload slot at 5 is 0\n        + Op.MSTORE(32, Op.GAS())\n        + Op.SSTORE(slot_tload_zero_gas_price_result, Op.SUB(Op.MLOAD(0), Op.MLOAD(32)))\n        + Op.SSTORE(\n            slot_tload_zero_gas_price_result,\n            Op.SUB(Op.SLOAD(slot_tload_zero_gas_price_result), extra_opcode_gas),\n        )\n        + Op.SSTORE(slot_code_worked, 1),\n        storage={\n            slot_tload_nonzero_gas_price_result: 0xFF,\n            slot_tload_zero_gas_price_result: 0xFF,\n        },\n    )\n\n    post = {\n        address_to: Account(\n            storage={\n                slot_tload_nonzero_gas_price_result: Spec.TLOAD_GAS_COST,\n                slot_tload_zero_gas_price_result: Spec.TLOAD_GAS_COST,\n                slot_code_worked: 0x01,\n            }\n        )\n    }\n\n    tx = Transaction(\n        sender=pre.fund_eoa(7_000_000_000_000_000_000),\n        to=address_to,\n        gas_price=10,\n        data=b\"\",\n        gas_limit=5000000,\n        value=0,\n    )\n\n    state_test(env=Environment(), pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_basic_tload/#tests.cancun.eip1153_tstore.test_basic_tload.test_basic_tload_after_store","title":"test_basic_tload_after_store(state_test, pre)","text":"

    Ported .json vectors:

    (18_tloadAfterStoreFiller.yml) tload from same slot after store returns 0

    Source code in tests/cancun/eip1153_tstore/test_basic_tload.py
    @pytest.mark.valid_from(\"Cancun\")\ndef test_basic_tload_after_store(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Ported .json vectors:\n\n    (18_tloadAfterStoreFiller.yml)\n    tload from same slot after store returns 0\n    \"\"\"\n    slot_tload_from_sstore_result = 1\n    slot_code_worked = 2\n\n    address_to = pre.deploy_contract(\n        code=Op.JUMPDEST()\n        # 18 test\n        + Op.SSTORE(slot_tload_from_sstore_result, 22)\n        + Op.SSTORE(slot_tload_from_sstore_result, Op.TLOAD(slot_tload_from_sstore_result))\n        + Op.SSTORE(slot_code_worked, 1),\n        storage={\n            slot_tload_from_sstore_result: 0xFF,\n        },\n    )\n\n    post: Dict[Address, Union[Account, object]] = {}\n    post[address_to] = Account(\n        storage={\n            slot_tload_from_sstore_result: 0x00,\n            slot_code_worked: 0x01,\n        }\n    )\n\n    tx = Transaction(\n        sender=pre.fund_eoa(7_000_000_000_000_000_000),\n        to=address_to,\n        gas_price=10,\n        data=b\"\",\n        gas_limit=5000000,\n        value=0,\n    )\n\n    state_test(env=Environment(), pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_basic_tload/index/test_cases/","title":"Test Basic Tload - Test Cases","text":"

    Test cases generated from tests/cancun/eip1153_tstore/test_basic_tload.py

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_basic_tload.py:

    test_basic_tload_transaction_begin[fork_Cancun-blockchain_test]\ntest_basic_tload_transaction_begin[fork_Cancun-blockchain_test_engine]\ntest_basic_tload_transaction_begin[fork_Cancun-state_test]\ntest_basic_tload_transaction_begin[fork_Prague-blockchain_test]\ntest_basic_tload_transaction_begin[fork_Prague-blockchain_test_engine]\ntest_basic_tload_transaction_begin[fork_Prague-state_test]\ntest_basic_tload_works[fork_Cancun-blockchain_test]\ntest_basic_tload_works[fork_Cancun-blockchain_test_engine]\ntest_basic_tload_works[fork_Cancun-state_test]\ntest_basic_tload_works[fork_Prague-blockchain_test]\ntest_basic_tload_works[fork_Prague-blockchain_test_engine]\ntest_basic_tload_works[fork_Prague-state_test]\ntest_basic_tload_other_after_tstore[fork_Cancun-blockchain_test]\ntest_basic_tload_other_after_tstore[fork_Cancun-blockchain_test_engine]\ntest_basic_tload_other_after_tstore[fork_Cancun-state_test]\ntest_basic_tload_other_after_tstore[fork_Prague-blockchain_test]\ntest_basic_tload_other_after_tstore[fork_Prague-blockchain_test_engine]\ntest_basic_tload_other_after_tstore[fork_Prague-state_test]\ntest_basic_tload_gasprice[fork_Cancun-blockchain_test]\ntest_basic_tload_gasprice[fork_Cancun-blockchain_test_engine]\ntest_basic_tload_gasprice[fork_Cancun-state_test]\ntest_basic_tload_gasprice[fork_Prague-blockchain_test]\ntest_basic_tload_gasprice[fork_Prague-blockchain_test_engine]\ntest_basic_tload_gasprice[fork_Prague-state_test]\ntest_basic_tload_after_store[fork_Cancun-blockchain_test]\ntest_basic_tload_after_store[fork_Cancun-blockchain_test_engine]\ntest_basic_tload_after_store[fork_Cancun-state_test]\ntest_basic_tload_after_store[fork_Prague-blockchain_test]\ntest_basic_tload_after_store[fork_Prague-blockchain_test_engine]\ntest_basic_tload_after_store[fork_Prague-state_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip1153_tstore/test_basic_tload.py\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tload_calls/","title":"Test Tload Calls","text":"

    Documentation for tests/cancun/eip1153_tstore/test_tload_calls.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tload_calls.py\n

    Ethereum Transient Storage EIP Tests https://eips.ethereum.org/EIPS/eip-1153

    "},{"location":"tests/cancun/eip1153_tstore/test_tload_calls/#tests.cancun.eip1153_tstore.test_tload_calls.test_tload_calls","title":"test_tload_calls(state_test, pre, call_type)","text":"

    Ported .json vectors:

    (04_tloadAfterCallFiller.yml) Loading a slot after a call to another contract is 0.

    (12_tloadDelegateCallFiller.yml) delegatecall reads transient storage in the context of the current address

    Source code in tests/cancun/eip1153_tstore/test_tload_calls.py
    @pytest.mark.valid_from(\"Cancun\")\n@pytest.mark.parametrize(\"call_type\", [Op.CALL, Op.CALLCODE, Op.DELEGATECALL])\ndef test_tload_calls(state_test: StateTestFiller, pre: Alloc, call_type: Op):\n    \"\"\"\n    Ported .json vectors:\n\n    (04_tloadAfterCallFiller.yml)\n    Loading a slot after a call to another contract is 0.\n\n    (12_tloadDelegateCallFiller.yml)\n    delegatecall reads transient storage in the context of the current address\n    \"\"\"\n    # Storage variables\n    slot_a_tload_after_subcall_result = 0\n    slot_a_subcall_result = 1\n    slot_b_subcall_tload_result = 2\n    slot_b_subcall_updated_tload_result = 3\n\n    def make_call(call_type: Op, address: Address) -> Bytecode:\n        if call_type == Op.DELEGATECALL or call_type == Op.STATICCALL:\n            return call_type(Op.GAS(), address, 0, 32, 0, 0)\n        else:\n            return call_type(Op.GAS(), address, 0, 0, 32, 0, 0)\n\n    address_call = pre.deploy_contract(\n        balance=1_000_000_000_000_000_000,\n        code=Op.JUMPDEST()\n        + Op.SSTORE(slot_b_subcall_tload_result, Op.TLOAD(0))\n        + Op.TSTORE(0, 20)\n        + Op.SSTORE(slot_b_subcall_updated_tload_result, Op.TLOAD(0)),\n        storage={\n            slot_b_subcall_tload_result: 0xFF,\n            slot_b_subcall_updated_tload_result: 0xFF,\n        },\n    )\n\n    address_to = pre.deploy_contract(\n        balance=1_000_000_000_000_000_000,\n        code=Op.JUMPDEST()\n        + Op.TSTORE(0, 10)\n        + Op.SSTORE(slot_a_subcall_result, make_call(call_type, address_call))\n        + Op.SSTORE(slot_a_tload_after_subcall_result, Op.TLOAD(0)),\n        storage={\n            slot_a_subcall_result: 0xFF,\n            slot_a_tload_after_subcall_result: 0xFF,\n        },\n    )\n\n    post = {\n        address_to: Account(\n            storage={\n                # other calls don't change context, there for tload updated in this account\n                slot_a_tload_after_subcall_result: 10 if call_type == Op.CALL else 20,\n                slot_a_subcall_result: 1,\n                # since context unchanged the subcall works as if continued execution\n                slot_b_subcall_tload_result: 0 if call_type == Op.CALL else 10,\n                slot_b_subcall_updated_tload_result: 0 if call_type == Op.CALL else 20,\n            }\n        ),\n        address_call: Account(\n            storage={\n                slot_b_subcall_tload_result: 0 if call_type == Op.CALL else 0xFF,\n                slot_b_subcall_updated_tload_result: 20 if call_type == Op.CALL else 0xFF,\n            }\n        ),\n    }\n\n    tx = Transaction(\n        sender=pre.fund_eoa(7_000_000_000_000_000_000),\n        to=address_to,\n        gas_price=10,\n        data=b\"\",\n        gas_limit=5000000,\n        value=0,\n    )\n\n    state_test(env=Environment(), pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tload_calls/index/test_cases/","title":"Test Tload Calls - Test Cases","text":"

    Test cases generated from tests/cancun/eip1153_tstore/test_tload_calls.py

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tload_calls.py:

    test_tload_calls[fork_Cancun-blockchain_test-call_type_CALL]\ntest_tload_calls[fork_Cancun-blockchain_test-call_type_CALLCODE]\ntest_tload_calls[fork_Cancun-blockchain_test-call_type_DELEGATECALL]\ntest_tload_calls[fork_Cancun-blockchain_test_engine-call_type_CALL]\ntest_tload_calls[fork_Cancun-blockchain_test_engine-call_type_CALLCODE]\ntest_tload_calls[fork_Cancun-blockchain_test_engine-call_type_DELEGATECALL]\ntest_tload_calls[fork_Cancun-state_test-call_type_CALL]\ntest_tload_calls[fork_Cancun-state_test-call_type_CALLCODE]\ntest_tload_calls[fork_Cancun-state_test-call_type_DELEGATECALL]\ntest_tload_calls[fork_Prague-blockchain_test-call_type_CALL]\ntest_tload_calls[fork_Prague-blockchain_test-call_type_CALLCODE]\ntest_tload_calls[fork_Prague-blockchain_test-call_type_DELEGATECALL]\ntest_tload_calls[fork_Prague-blockchain_test_engine-call_type_CALL]\ntest_tload_calls[fork_Prague-blockchain_test_engine-call_type_CALLCODE]\ntest_tload_calls[fork_Prague-blockchain_test_engine-call_type_DELEGATECALL]\ntest_tload_calls[fork_Prague-state_test-call_type_CALL]\ntest_tload_calls[fork_Prague-state_test-call_type_CALLCODE]\ntest_tload_calls[fork_Prague-state_test-call_type_DELEGATECALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip1153_tstore/test_tload_calls.py\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tload_reentrancy/","title":"Test Tload Reentrancy","text":"

    Documentation for tests/cancun/eip1153_tstore/test_tload_reentrancy.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tload_reentrancy.py\n

    Ethereum Transient Storage EIP Tests https://eips.ethereum.org/EIPS/eip-1153

    "},{"location":"tests/cancun/eip1153_tstore/test_tload_reentrancy/#tests.cancun.eip1153_tstore.test_tload_reentrancy.test_tload_reentrancy","title":"test_tload_reentrancy(state_test, pre, call_type, call_return, call_dest_type)","text":"

    Ported .json vectors:

    (05_tloadReentrancyFiller.yml) Reentrant calls access the same transient storage

    Source code in tests/cancun/eip1153_tstore/test_tload_reentrancy.py
    @pytest.mark.valid_from(\"Cancun\")\n@pytest.mark.parametrize(\"call_type\", [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL])\n@pytest.mark.parametrize(\"call_return\", [Op.RETURN, Op.REVERT, Om.OOG])\n@pytest.mark.parametrize(\"call_dest_type\", [CallDestType.REENTRANCY, CallDestType.EXTERNAL_CALL])\ndef test_tload_reentrancy(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    call_type: Op,\n    call_return: Op,\n    call_dest_type: CallDestType,\n):\n    \"\"\"\n    Ported .json vectors:\n\n    (05_tloadReentrancyFiller.yml)\n    Reentrant calls access the same transient storage\n    \"\"\"\n    tload_value = 44\n    empty_value = 0\n\n    # Storage variables\n    slot_tload_in_subcall_result = 1\n    slot_tload_after_subcall_result = 2\n    slot_subcall_worked = 3\n    slot_code_worked = 4\n\n    # Function names\n    do_load = 1\n    do_reenter = 2\n    call_dest_address: Bytecode | Address\n    call_dest_address = Op.ADDRESS()\n\n    def make_call(call_type: Op) -> Bytecode:\n        if call_type == Op.DELEGATECALL or call_type == Op.STATICCALL:\n            return call_type(Op.GAS(), call_dest_address, 0, 32, 32, 32)\n        else:\n            return call_type(Op.GAS(), call_dest_address, 0, 0, 32, 32, 32)\n\n    subcall_code = Op.MSTORE(0, Op.TLOAD(0)) + call_return(0, 32)\n\n    address_code = pre.deploy_contract(\n        balance=0,\n        code=subcall_code,\n        storage={},\n    )\n    if call_dest_type == CallDestType.EXTERNAL_CALL:\n        call_dest_address = address_code\n\n    address_to = pre.deploy_contract(\n        balance=1_000_000_000_000_000_000,\n        code=Switch(\n            cases=[\n                Case(\n                    condition=Op.EQ(Op.CALLDATALOAD(0), do_load),\n                    action=subcall_code,\n                ),\n                Case(\n                    condition=Op.EQ(Op.CALLDATALOAD(0), do_reenter),\n                    action=Op.TSTORE(0, tload_value)\n                    + Op.MSTORE(0, do_load)\n                    + Op.MSTORE(32, 0xFF)\n                    + Op.SSTORE(slot_subcall_worked, make_call(call_type))\n                    + Op.SSTORE(slot_tload_in_subcall_result, Op.MLOAD(32))\n                    + Op.SSTORE(slot_tload_after_subcall_result, Op.TLOAD(0))\n                    + Op.SSTORE(slot_code_worked, 1),\n                ),\n            ],\n            default_action=None,\n        ),\n        storage={\n            slot_tload_in_subcall_result: 0xFF,\n            slot_tload_after_subcall_result: 0xFF,\n            slot_subcall_worked: 0xFF,\n            slot_code_worked: 0xFF,\n        },\n    )\n\n    if call_dest_type == CallDestType.REENTRANCY:\n        post = {\n            address_to: Account(\n                storage={\n                    slot_code_worked: 1,\n                    # if call OOG, we fail to obtain the result\n                    slot_tload_in_subcall_result: 0xFF if call_return == Om.OOG else tload_value,\n                    slot_tload_after_subcall_result: tload_value,\n                    slot_subcall_worked: (\n                        0 if call_return == Op.REVERT or call_return == Om.OOG else 1\n                    ),\n                }\n            )\n        }\n    else:\n        post = {\n            address_to: Account(\n                storage={\n                    slot_code_worked: 1,\n                    slot_tload_in_subcall_result: (\n                        0xFF  # if call OOG, we fail to obtain the result\n                        if call_return == Om.OOG\n                        # else delegate and callcode are working in the same context so tload works\n                        else (\n                            tload_value\n                            if call_type == Op.DELEGATECALL or call_type == Op.CALLCODE\n                            else empty_value\n                        )\n                    ),\n                    # no subcall errors can change the tload result\n                    slot_tload_after_subcall_result: 44,\n                    slot_subcall_worked: (\n                        0 if call_return == Op.REVERT or call_return == Om.OOG else 1\n                    ),\n                }\n            )\n        }\n\n    tx = Transaction(\n        sender=pre.fund_eoa(7_000_000_000_000_000_000),\n        to=address_to,\n        gas_price=10,\n        data=Hash(do_reenter),\n        gas_limit=5000000,\n        value=0,\n    )\n\n    state_test(env=Environment(), pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tload_reentrancy/index/test_cases/","title":"Test Tload Reentrancy - Test Cases","text":"

    Test cases generated from tests/cancun/eip1153_tstore/test_tload_reentrancy.py

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tload_reentrancy.py:

    test_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip1153_tstore/test_tload_reentrancy.py\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage/","title":"Test Tstorage","text":"

    Documentation for tests/cancun/eip1153_tstore/test_tstorage.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tstorage.py\n
    Tests EIP-1153: Transient Storage Opcodes

    Test EIP-1153: Transient Storage Opcodes. Ports and extends some tests from ethereum/tests/src/EIPTestsFiller/StateTests/stEIP1153-transientStorage/

    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage/#tests.cancun.eip1153_tstore.test_tstorage.test_transient_storage_unset_values","title":"test_transient_storage_unset_values(state_test, pre)","text":"

    Test that tload returns zero for unset values. Loading an arbitrary value is 0 at beginning of transaction: TLOAD(x) is 0.

    Based on ethereum/tests/.../01_tloadBeginningTxnFiller.yml\", # noqa: E501

    Source code in tests/cancun/eip1153_tstore/test_tstorage.py
    def test_transient_storage_unset_values(state_test: StateTestFiller, pre: Alloc):\n    \"\"\"\n    Test that tload returns zero for unset values. Loading an arbitrary value is\n    0 at beginning of transaction: TLOAD(x) is 0.\n\n    Based on [ethereum/tests/.../01_tloadBeginningTxnFiller.yml](https://github.com/ethereum/tests/blob/9b00b68593f5869eb51a6659e1cc983e875e616b/src/EIPTestsFiller/StateTests/stEIP1153-transientStorage/01_tloadBeginningTxnFiller.yml)\",  # noqa: E501\n    \"\"\"\n    env = Environment()\n\n    slots_under_test = [0, 1, 2, 2**128, 2**256 - 1]\n    code = sum(Op.SSTORE(slot, Op.TLOAD(slot)) for slot in slots_under_test)\n\n    code_address = pre.deploy_contract(\n        code=code,  # type: ignore\n        storage={slot: 1 for slot in slots_under_test},\n    )\n\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        to=code_address,\n        gas_limit=1_000_000,\n    )\n\n    post = {code_address: Account(storage={slot: 0 for slot in slots_under_test})}\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage/#tests.cancun.eip1153_tstore.test_tstorage.test_tload_after_tstore","title":"test_tload_after_tstore(state_test, pre)","text":"

    Loading after storing returns the stored value: TSTORE(x, y), TLOAD(x) returns y.

    Based on ethereum/tests/.../02_tloadAfterTstoreFiller.yml\", # noqa: E501

    Source code in tests/cancun/eip1153_tstore/test_tstorage.py
    def test_tload_after_tstore(state_test: StateTestFiller, pre: Alloc):\n    \"\"\"\n    Loading after storing returns the stored value: TSTORE(x, y), TLOAD(x)\n    returns y.\n\n    Based on [ethereum/tests/.../02_tloadAfterTstoreFiller.yml](https://github.com/ethereum/tests/blob/9b00b68593f5869eb51a6659e1cc983e875e616b/src/EIPTestsFiller/StateTests/stEIP1153-transientStorage/02_tloadAfterTstoreFiller.yml)\",  # noqa: E501\n    \"\"\"\n    env = Environment()\n\n    slots_under_test = [0, 1, 2, 2**128, 2**256 - 1]\n    code = sum(\n        Op.TSTORE(slot, slot) + Op.SSTORE(slot, Op.TLOAD(slot)) for slot in slots_under_test\n    )\n    code_address = pre.deploy_contract(\n        code=code,  # type: ignore\n        storage={slot: 0xFF for slot in slots_under_test},\n    )\n\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        to=code_address,\n        gas_limit=1_000_000,\n    )\n\n    post = {code_address: Account(storage={slot: slot for slot in slots_under_test})}\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage/#tests.cancun.eip1153_tstore.test_tstorage.test_tload_after_sstore","title":"test_tload_after_sstore(state_test, pre)","text":"

    Loading after storing returns the stored value: TSTORE(x, y), TLOAD(x) returns y.

    Based on ethereum/tests/.../18_tloadAfterStoreFiller.yml\", # noqa: E501

    Source code in tests/cancun/eip1153_tstore/test_tstorage.py
    def test_tload_after_sstore(state_test: StateTestFiller, pre: Alloc):\n    \"\"\"\n    Loading after storing returns the stored value: TSTORE(x, y), TLOAD(x)\n    returns y.\n\n    Based on [ethereum/tests/.../18_tloadAfterStoreFiller.yml](https://github.com/ethereum/tests/blob/9b00b68593f5869eb51a6659e1cc983e875e616b/src/EIPTestsFiller/StateTests/stEIP1153-transientStorage/18_tloadAfterStoreFiller.yml)\",  # noqa: E501\n    \"\"\"\n    env = Environment()\n\n    slots_under_test = [1, 3, 2**128, 2**256 - 1]\n    code = sum(\n        Op.SSTORE(slot - 1, 0xFF) + Op.SSTORE(slot, Op.TLOAD(slot - 1))\n        for slot in slots_under_test\n    )\n    code_address = pre.deploy_contract(\n        code=code,  # type: ignore\n        storage={slot: 1 for slot in slots_under_test},\n    )\n\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        to=code_address,\n        gas_limit=1_000_000,\n    )\n\n    post = {\n        code_address: Account(\n            code=code,\n            storage={slot - 1: 0xFF for slot in slots_under_test}\n            | {slot: 0 for slot in slots_under_test},\n        )\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage/#tests.cancun.eip1153_tstore.test_tstorage.test_tload_after_tstore_is_zero","title":"test_tload_after_tstore_is_zero(state_test, pre)","text":"

    Test that tload returns zero after tstore is called with zero.

    Based on ethereum/tests/.../03_tloadAfterStoreIs0Filler.yml\", # noqa: E501

    Source code in tests/cancun/eip1153_tstore/test_tstorage.py
    def test_tload_after_tstore_is_zero(state_test: StateTestFiller, pre: Alloc):\n    \"\"\"\n    Test that tload returns zero after tstore is called with zero.\n\n    Based on [ethereum/tests/.../03_tloadAfterStoreIs0Filler.yml](https://github.com/ethereum/tests/blob/9b00b68593f5869eb51a6659e1cc983e875e616b/src/EIPTestsFiller/StateTests/stEIP1153-transientStorage/03_tloadAfterStoreIs0Filler.yml)\",  # noqa: E501\n    \"\"\"\n    env = Environment()\n\n    slots_to_write = [1, 4, 2**128, 2**256 - 2]\n    slots_to_read = [slot - 1 for slot in slots_to_write] + [slot + 1 for slot in slots_to_write]\n    assert set.intersection(set(slots_to_write), set(slots_to_read)) == set()\n\n    code = sum(Op.TSTORE(slot, 1234) for slot in slots_to_write) + sum(\n        Op.SSTORE(slot, Op.TLOAD(slot)) for slot in slots_to_read\n    )\n\n    code_address = pre.deploy_contract(\n        code=code,  # type: ignore\n        storage={slot: 0xFFFF for slot in slots_to_write + slots_to_read},\n    )\n\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        to=code_address,\n        gas_limit=1_000_000,\n    )\n\n    post = {\n        code_address: Account(\n            storage={slot: 0 for slot in slots_to_read} | {slot: 0xFFFF for slot in slots_to_write}\n        )\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage/#tests.cancun.eip1153_tstore.test_tstorage.test_gas_usage","title":"test_gas_usage(state_test, pre, bytecode, expected_gas, overhead_cost, extra_stack_items)","text":"

    Test that tstore and tload consume the expected gas.

    Source code in tests/cancun/eip1153_tstore/test_tstorage.py
    @GasMeasureTestCases.parametrize()\ndef test_gas_usage(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    bytecode: Bytecode,\n    expected_gas: int,\n    overhead_cost: int,\n    extra_stack_items: int,\n):\n    \"\"\"\n    Test that tstore and tload consume the expected gas.\n    \"\"\"\n    gas_measure_bytecode = CodeGasMeasure(\n        code=bytecode, overhead_cost=overhead_cost, extra_stack_items=extra_stack_items\n    )\n\n    env = Environment()\n    code_address = pre.deploy_contract(code=gas_measure_bytecode)\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        to=code_address,\n        gas_limit=1_000_000,\n    )\n    post = {\n        code_address: Account(code=gas_measure_bytecode, storage={0: expected_gas}),\n    }\n    state_test(env=env, pre=pre, tx=tx, post=post)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage/#tests.cancun.eip1153_tstore.test_tstorage.test_run_until_out_of_gas","title":"test_run_until_out_of_gas(state_test, pre, repeat_bytecode, bytecode_repeat_times)","text":"

    Use TSTORE over and over to different keys until we run out of gas.

    Source code in tests/cancun/eip1153_tstore/test_tstorage.py
    @LoopRunUntilOutOfGasCases.parametrize()\ndef test_run_until_out_of_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    repeat_bytecode: Bytecode,\n    bytecode_repeat_times: int,\n):\n    \"\"\"\n    Use TSTORE over and over to different keys until we run out of gas.\n    \"\"\"\n    bytecode = Op.JUMPDEST + repeat_bytecode * bytecode_repeat_times + Op.JUMP(Op.PUSH0)\n    code_address = pre.deploy_contract(code=bytecode)\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        to=code_address,\n        gas_limit=30_000_000,\n    )\n    post = {\n        code_address: Account(code=bytecode, storage={}),\n    }\n    state_test(env=Environment(), pre=pre, tx=tx, post=post)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage/index/test_cases/","title":"Test Tstorage - Test Cases","text":"

    Test cases generated from tests/cancun/eip1153_tstore/test_tstorage.py

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstorage.py:

    test_transient_storage_unset_values[fork_Cancun-blockchain_test]\ntest_transient_storage_unset_values[fork_Cancun-blockchain_test_engine]\ntest_transient_storage_unset_values[fork_Cancun-state_test]\ntest_transient_storage_unset_values[fork_Prague-blockchain_test]\ntest_transient_storage_unset_values[fork_Prague-blockchain_test_engine]\ntest_transient_storage_unset_values[fork_Prague-state_test]\ntest_tload_after_tstore[fork_Cancun-blockchain_test]\ntest_tload_after_tstore[fork_Cancun-blockchain_test_engine]\ntest_tload_after_tstore[fork_Cancun-state_test]\ntest_tload_after_tstore[fork_Prague-blockchain_test]\ntest_tload_after_tstore[fork_Prague-blockchain_test_engine]\ntest_tload_after_tstore[fork_Prague-state_test]\ntest_tload_after_sstore[fork_Cancun-blockchain_test]\ntest_tload_after_sstore[fork_Cancun-blockchain_test_engine]\ntest_tload_after_sstore[fork_Cancun-state_test]\ntest_tload_after_sstore[fork_Prague-blockchain_test]\ntest_tload_after_sstore[fork_Prague-blockchain_test_engine]\ntest_tload_after_sstore[fork_Prague-state_test]\ntest_tload_after_tstore_is_zero[fork_Cancun-blockchain_test]\ntest_tload_after_tstore_is_zero[fork_Cancun-blockchain_test_engine]\ntest_tload_after_tstore_is_zero[fork_Cancun-state_test]\ntest_tload_after_tstore_is_zero[fork_Prague-blockchain_test]\ntest_tload_after_tstore_is_zero[fork_Prague-blockchain_test_engine]\ntest_tload_after_tstore_is_zero[fork_Prague-state_test]\ntest_gas_usage[fork_Cancun-blockchain_test-tload]\ntest_gas_usage[fork_Cancun-blockchain_test-tstore_tload]\ntest_gas_usage[fork_Cancun-blockchain_test-tstore_cold]\ntest_gas_usage[fork_Cancun-blockchain_test-tstore_warm]\ntest_gas_usage[fork_Cancun-blockchain_test_engine-tload]\ntest_gas_usage[fork_Cancun-blockchain_test_engine-tstore_tload]\ntest_gas_usage[fork_Cancun-blockchain_test_engine-tstore_cold]\ntest_gas_usage[fork_Cancun-blockchain_test_engine-tstore_warm]\ntest_gas_usage[fork_Cancun-state_test-tload]\ntest_gas_usage[fork_Cancun-state_test-tstore_tload]\ntest_gas_usage[fork_Cancun-state_test-tstore_cold]\ntest_gas_usage[fork_Cancun-state_test-tstore_warm]\ntest_gas_usage[fork_Prague-blockchain_test-tload]\ntest_gas_usage[fork_Prague-blockchain_test-tstore_tload]\ntest_gas_usage[fork_Prague-blockchain_test-tstore_cold]\ntest_gas_usage[fork_Prague-blockchain_test-tstore_warm]\ntest_gas_usage[fork_Prague-blockchain_test_engine-tload]\ntest_gas_usage[fork_Prague-blockchain_test_engine-tstore_tload]\ntest_gas_usage[fork_Prague-blockchain_test_engine-tstore_cold]\ntest_gas_usage[fork_Prague-blockchain_test_engine-tstore_warm]\ntest_gas_usage[fork_Prague-state_test-tload]\ntest_gas_usage[fork_Prague-state_test-tstore_tload]\ntest_gas_usage[fork_Prague-state_test-tstore_cold]\ntest_gas_usage[fork_Prague-state_test-tstore_warm]\ntest_run_until_out_of_gas[fork_Cancun-blockchain_test-tstore]\ntest_run_until_out_of_gas[fork_Cancun-blockchain_test-tstore_wide_address_space]\ntest_run_until_out_of_gas[fork_Cancun-blockchain_test-tstore_tload]\ntest_run_until_out_of_gas[fork_Cancun-blockchain_test_engine-tstore]\ntest_run_until_out_of_gas[fork_Cancun-blockchain_test_engine-tstore_wide_address_space]\ntest_run_until_out_of_gas[fork_Cancun-blockchain_test_engine-tstore_tload]\ntest_run_until_out_of_gas[fork_Cancun-state_test-tstore]\ntest_run_until_out_of_gas[fork_Cancun-state_test-tstore_wide_address_space]\ntest_run_until_out_of_gas[fork_Cancun-state_test-tstore_tload]\ntest_run_until_out_of_gas[fork_Prague-blockchain_test-tstore]\ntest_run_until_out_of_gas[fork_Prague-blockchain_test-tstore_wide_address_space]\ntest_run_until_out_of_gas[fork_Prague-blockchain_test-tstore_tload]\ntest_run_until_out_of_gas[fork_Prague-blockchain_test_engine-tstore]\ntest_run_until_out_of_gas[fork_Prague-blockchain_test_engine-tstore_wide_address_space]\ntest_run_until_out_of_gas[fork_Prague-blockchain_test_engine-tstore_tload]\ntest_run_until_out_of_gas[fork_Prague-state_test-tstore]\ntest_run_until_out_of_gas[fork_Prague-state_test-tstore_wide_address_space]\ntest_run_until_out_of_gas[fork_Prague-state_test-tstore_tload]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip1153_tstore/test_tstorage.py\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_create_contexts/","title":"Test Tstorage Create Contexts","text":"

    Documentation for tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py\n
    Tests for EIP-1153: Transient Storage

    Test cases for TSTORE and TLOAD opcode calls in contract initcode.

    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_create_contexts/#tests.cancun.eip1153_tstore.test_tstorage_create_contexts.TestTransientStorageInContractCreation","title":"TestTransientStorageInContractCreation","text":"

    Test transient storage in contract creation contexts:

    • TSTORE/TLOAD in initcode should not be able to access the creator's transient storage.
    • TSTORE/TLOAD in initcode should be able to access the created contract's transient storage.
    • TSTORE/TLOAD in creator contract should be able to use its own transient storage.
    Source code in tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py
    @CreateOpcodeParams.parametrize()\n@InitcodeTestCases.parametrize()\nclass TestTransientStorageInContractCreation:\n    \"\"\"\n    Test transient storage in contract creation contexts:\n\n    - TSTORE/TLOAD in initcode should not be able to access the creator's transient storage.\n    - TSTORE/TLOAD in initcode should be able to access the created contract's transient\n        storage.\n    - TSTORE/TLOAD in creator contract should be able to use its own transient storage.\n    \"\"\"\n\n    @pytest.fixture()\n    def create2_salt(self) -> int:  # noqa: D102\n        return 0xDEADBEEF\n\n    @pytest.fixture()\n    def initcode(  # noqa: D102\n        self,\n        deploy_code: Bytecode,\n        constructor_code: Bytecode,\n    ) -> Initcode:\n        return Initcode(deploy_code=deploy_code, initcode_prefix=constructor_code)\n\n    @pytest.fixture()\n    def creator_contract_code(  # noqa: D102\n        self,\n        opcode: Op,\n        create2_salt: int,\n    ) -> Bytecode:\n        return (\n            Op.TSTORE(0, 0x0100)\n            + Op.TSTORE(1, 0x0200)\n            + Op.TSTORE(2, 0x0300)\n            + Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n            + Op.SSTORE(4, Op.CALL(address=opcode(size=Op.CALLDATASIZE, salt=create2_salt)))\n            # Save the state of transient storage following call to storage; the transient\n            # storage should not have been overwritten\n            + Op.SSTORE(0, Op.TLOAD(0))\n            + Op.SSTORE(1, Op.TLOAD(1))\n            + Op.SSTORE(2, Op.TLOAD(2))\n        )\n\n    @pytest.fixture()\n    def creator_address(self, pre: Alloc, creator_contract_code: Bytecode) -> Address:\n        \"\"\"The address that creates the contract with create/create2\"\"\"\n        return pre.deploy_contract(creator_contract_code)\n\n    @pytest.fixture()\n    def expected_creator_storage(self) -> dict:  # noqa: D102\n        return {0: 0x0100, 1: 0x0200, 2: 0x0300, 4: 0x0001}\n\n    @pytest.fixture()\n    def created_contract_address(  # noqa: D102\n        self, creator_address: Address, opcode: Op, create2_salt: int, initcode: Initcode\n    ) -> Address:\n        return compute_create_address(\n            address=creator_address,\n            nonce=1,\n            salt=create2_salt,\n            initcode=initcode,\n            opcode=opcode,\n        )\n\n    def test_contract_creation(\n        self,\n        state_test: StateTestFiller,\n        pre: Alloc,\n        creator_address: Address,\n        created_contract_address: Address,\n        initcode: Initcode,\n        deploy_code: Bytecode,\n        expected_creator_storage: dict,\n        expected_storage: dict,\n    ) -> None:\n        \"\"\"\n        Test transient storage in contract creation contexts.\n        \"\"\"\n        sender = pre.fund_eoa()\n\n        tx = Transaction(\n            sender=sender,\n            to=creator_address,\n            data=initcode,\n            gas_limit=1_000_000,\n        )\n\n        post = {\n            creator_address: Account(\n                nonce=2,\n                storage=expected_creator_storage,\n            ),\n            created_contract_address: Account(\n                nonce=1,\n                code=deploy_code,\n                storage=expected_storage,\n            ),\n        }\n\n        state_test(\n            env=Environment(),\n            pre=pre,\n            post=post,\n            tx=tx,\n        )\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_create_contexts/#tests.cancun.eip1153_tstore.test_tstorage_create_contexts.TestTransientStorageInContractCreation.test_contract_creation","title":"test_contract_creation(state_test, pre, creator_address, created_contract_address, initcode, deploy_code, expected_creator_storage, expected_storage)","text":"

    Test transient storage in contract creation contexts.

    Source code in tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py
    def test_contract_creation(\n    self,\n    state_test: StateTestFiller,\n    pre: Alloc,\n    creator_address: Address,\n    created_contract_address: Address,\n    initcode: Initcode,\n    deploy_code: Bytecode,\n    expected_creator_storage: dict,\n    expected_storage: dict,\n) -> None:\n    \"\"\"\n    Test transient storage in contract creation contexts.\n    \"\"\"\n    sender = pre.fund_eoa()\n\n    tx = Transaction(\n        sender=sender,\n        to=creator_address,\n        data=initcode,\n        gas_limit=1_000_000,\n    )\n\n    post = {\n        creator_address: Account(\n            nonce=2,\n            storage=expected_creator_storage,\n        ),\n        created_contract_address: Account(\n            nonce=1,\n            code=deploy_code,\n            storage=expected_storage,\n        ),\n    }\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_create_contexts/index/test_cases/","title":"Test Tstorage Create Contexts - Test Cases","text":"

    Test cases generated from tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py:

    TestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_execution_contexts/","title":"Test Tstorage Execution Contexts","text":"

    Documentation for tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py\n
    Tests for EIP-1153: Transient Storage

    Test cases for TSTORE and TLOAD opcode calls in different execution contexts.

    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_execution_contexts/#tests.cancun.eip1153_tstore.test_tstorage_execution_contexts.test_subcall","title":"test_subcall(state_test, env, pre, tx, post)","text":"

    Test transient storage with a subcall using the following opcodes:

    • CALL
    • CALLCODE
    • DELEGATECALL
    • STATICCALL
    Source code in tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py
    @CallContextTestCases.parametrize()\ndef test_subcall(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    tx: Transaction,\n    post: Mapping,\n):\n    \"\"\"\n    Test transient storage with a subcall using the following opcodes:\n\n    - `CALL`\n    - `CALLCODE`\n    - `DELEGATECALL`\n    - `STATICCALL`\n    \"\"\"\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_execution_contexts/index/test_cases/","title":"Test Tstorage Execution Contexts - Test Cases","text":"

    Test cases generated from tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py:

    test_subcall[fork_Cancun-blockchain_test-call]\ntest_subcall[fork_Cancun-blockchain_test-staticcall_cant_call_tstore]\ntest_subcall[fork_Cancun-blockchain_test-staticcall_cant_call_tstore_with_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test-staticcalled_context_can_call_tload]\ntest_subcall[fork_Cancun-blockchain_test-callcode]\ntest_subcall[fork_Cancun-blockchain_test-delegatecall]\ntest_subcall[fork_Cancun-blockchain_test-call_with_revert]\ntest_subcall[fork_Cancun-blockchain_test-call_with_invalid]\ntest_subcall[fork_Cancun-blockchain_test-call_with_stack_overflow]\ntest_subcall[fork_Cancun-blockchain_test-call_with_tstore_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test-call_with_tstore_stack_underflow_2]\ntest_subcall[fork_Cancun-blockchain_test-call_with_tload_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test-call_with_out_of_gas]\ntest_subcall[fork_Cancun-blockchain_test-call_with_out_of_gas_2]\ntest_subcall[fork_Cancun-blockchain_test-callcode_with_revert]\ntest_subcall[fork_Cancun-blockchain_test-callcode_with_invalid]\ntest_subcall[fork_Cancun-blockchain_test-callcode_with_stack_overflow]\ntest_subcall[fork_Cancun-blockchain_test-callcode_with_tstore_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test-callcode_with_tstore_stack_underflow_2]\ntest_subcall[fork_Cancun-blockchain_test-callcode_with_tload_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test-callcode_with_out_of_gas]\ntest_subcall[fork_Cancun-blockchain_test-callcode_with_out_of_gas_2]\ntest_subcall[fork_Cancun-blockchain_test-delegatecall_with_revert]\ntest_subcall[fork_Cancun-blockchain_test-delegatecall_with_invalid]\ntest_subcall[fork_Cancun-blockchain_test-delegatecall_with_stack_overflow]\ntest_subcall[fork_Cancun-blockchain_test-delegatecall_with_tstore_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test-delegatecall_with_tstore_stack_underflow_2]\ntest_subcall[fork_Cancun-blockchain_test-delegatecall_with_tload_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test-delegatecall_with_out_of_gas]\ntest_subcall[fork_Cancun-blockchain_test-delegatecall_with_out_of_gas_2]\ntest_subcall[fork_Cancun-blockchain_test_engine-call]\ntest_subcall[fork_Cancun-blockchain_test_engine-staticcall_cant_call_tstore]\ntest_subcall[fork_Cancun-blockchain_test_engine-staticcall_cant_call_tstore_with_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test_engine-staticcalled_context_can_call_tload]\ntest_subcall[fork_Cancun-blockchain_test_engine-callcode]\ntest_subcall[fork_Cancun-blockchain_test_engine-delegatecall]\ntest_subcall[fork_Cancun-blockchain_test_engine-call_with_revert]\ntest_subcall[fork_Cancun-blockchain_test_engine-call_with_invalid]\ntest_subcall[fork_Cancun-blockchain_test_engine-call_with_stack_overflow]\ntest_subcall[fork_Cancun-blockchain_test_engine-call_with_tstore_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test_engine-call_with_tstore_stack_underflow_2]\ntest_subcall[fork_Cancun-blockchain_test_engine-call_with_tload_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test_engine-call_with_out_of_gas]\ntest_subcall[fork_Cancun-blockchain_test_engine-call_with_out_of_gas_2]\ntest_subcall[fork_Cancun-blockchain_test_engine-callcode_with_revert]\ntest_subcall[fork_Cancun-blockchain_test_engine-callcode_with_invalid]\ntest_subcall[fork_Cancun-blockchain_test_engine-callcode_with_stack_overflow]\ntest_subcall[fork_Cancun-blockchain_test_engine-callcode_with_tstore_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test_engine-callcode_with_tstore_stack_underflow_2]\ntest_subcall[fork_Cancun-blockchain_test_engine-callcode_with_tload_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test_engine-callcode_with_out_of_gas]\ntest_subcall[fork_Cancun-blockchain_test_engine-callcode_with_out_of_gas_2]\ntest_subcall[fork_Cancun-blockchain_test_engine-delegatecall_with_revert]\ntest_subcall[fork_Cancun-blockchain_test_engine-delegatecall_with_invalid]\ntest_subcall[fork_Cancun-blockchain_test_engine-delegatecall_with_stack_overflow]\ntest_subcall[fork_Cancun-blockchain_test_engine-delegatecall_with_tstore_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test_engine-delegatecall_with_tstore_stack_underflow_2]\ntest_subcall[fork_Cancun-blockchain_test_engine-delegatecall_with_tload_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test_engine-delegatecall_with_out_of_gas]\ntest_subcall[fork_Cancun-blockchain_test_engine-delegatecall_with_out_of_gas_2]\ntest_subcall[fork_Cancun-state_test-call]\ntest_subcall[fork_Cancun-state_test-staticcall_cant_call_tstore]\ntest_subcall[fork_Cancun-state_test-staticcall_cant_call_tstore_with_stack_underflow]\ntest_subcall[fork_Cancun-state_test-staticcalled_context_can_call_tload]\ntest_subcall[fork_Cancun-state_test-callcode]\ntest_subcall[fork_Cancun-state_test-delegatecall]\ntest_subcall[fork_Cancun-state_test-call_with_revert]\ntest_subcall[fork_Cancun-state_test-call_with_invalid]\ntest_subcall[fork_Cancun-state_test-call_with_stack_overflow]\ntest_subcall[fork_Cancun-state_test-call_with_tstore_stack_underflow]\ntest_subcall[fork_Cancun-state_test-call_with_tstore_stack_underflow_2]\ntest_subcall[fork_Cancun-state_test-call_with_tload_stack_underflow]\ntest_subcall[fork_Cancun-state_test-call_with_out_of_gas]\ntest_subcall[fork_Cancun-state_test-call_with_out_of_gas_2]\ntest_subcall[fork_Cancun-state_test-callcode_with_revert]\ntest_subcall[fork_Cancun-state_test-callcode_with_invalid]\ntest_subcall[fork_Cancun-state_test-callcode_with_stack_overflow]\ntest_subcall[fork_Cancun-state_test-callcode_with_tstore_stack_underflow]\ntest_subcall[fork_Cancun-state_test-callcode_with_tstore_stack_underflow_2]\ntest_subcall[fork_Cancun-state_test-callcode_with_tload_stack_underflow]\ntest_subcall[fork_Cancun-state_test-callcode_with_out_of_gas]\ntest_subcall[fork_Cancun-state_test-callcode_with_out_of_gas_2]\ntest_subcall[fork_Cancun-state_test-delegatecall_with_revert]\ntest_subcall[fork_Cancun-state_test-delegatecall_with_invalid]\ntest_subcall[fork_Cancun-state_test-delegatecall_with_stack_overflow]\ntest_subcall[fork_Cancun-state_test-delegatecall_with_tstore_stack_underflow]\ntest_subcall[fork_Cancun-state_test-delegatecall_with_tstore_stack_underflow_2]\ntest_subcall[fork_Cancun-state_test-delegatecall_with_tload_stack_underflow]\ntest_subcall[fork_Cancun-state_test-delegatecall_with_out_of_gas]\ntest_subcall[fork_Cancun-state_test-delegatecall_with_out_of_gas_2]\ntest_subcall[fork_Prague-blockchain_test-call]\ntest_subcall[fork_Prague-blockchain_test-staticcall_cant_call_tstore]\ntest_subcall[fork_Prague-blockchain_test-staticcall_cant_call_tstore_with_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test-staticcalled_context_can_call_tload]\ntest_subcall[fork_Prague-blockchain_test-callcode]\ntest_subcall[fork_Prague-blockchain_test-delegatecall]\ntest_subcall[fork_Prague-blockchain_test-call_with_revert]\ntest_subcall[fork_Prague-blockchain_test-call_with_invalid]\ntest_subcall[fork_Prague-blockchain_test-call_with_stack_overflow]\ntest_subcall[fork_Prague-blockchain_test-call_with_tstore_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test-call_with_tstore_stack_underflow_2]\ntest_subcall[fork_Prague-blockchain_test-call_with_tload_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test-call_with_out_of_gas]\ntest_subcall[fork_Prague-blockchain_test-call_with_out_of_gas_2]\ntest_subcall[fork_Prague-blockchain_test-callcode_with_revert]\ntest_subcall[fork_Prague-blockchain_test-callcode_with_invalid]\ntest_subcall[fork_Prague-blockchain_test-callcode_with_stack_overflow]\ntest_subcall[fork_Prague-blockchain_test-callcode_with_tstore_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test-callcode_with_tstore_stack_underflow_2]\ntest_subcall[fork_Prague-blockchain_test-callcode_with_tload_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test-callcode_with_out_of_gas]\ntest_subcall[fork_Prague-blockchain_test-callcode_with_out_of_gas_2]\ntest_subcall[fork_Prague-blockchain_test-delegatecall_with_revert]\ntest_subcall[fork_Prague-blockchain_test-delegatecall_with_invalid]\ntest_subcall[fork_Prague-blockchain_test-delegatecall_with_stack_overflow]\ntest_subcall[fork_Prague-blockchain_test-delegatecall_with_tstore_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test-delegatecall_with_tstore_stack_underflow_2]\ntest_subcall[fork_Prague-blockchain_test-delegatecall_with_tload_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test-delegatecall_with_out_of_gas]\ntest_subcall[fork_Prague-blockchain_test-delegatecall_with_out_of_gas_2]\ntest_subcall[fork_Prague-blockchain_test_engine-call]\ntest_subcall[fork_Prague-blockchain_test_engine-staticcall_cant_call_tstore]\ntest_subcall[fork_Prague-blockchain_test_engine-staticcall_cant_call_tstore_with_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test_engine-staticcalled_context_can_call_tload]\ntest_subcall[fork_Prague-blockchain_test_engine-callcode]\ntest_subcall[fork_Prague-blockchain_test_engine-delegatecall]\ntest_subcall[fork_Prague-blockchain_test_engine-call_with_revert]\ntest_subcall[fork_Prague-blockchain_test_engine-call_with_invalid]\ntest_subcall[fork_Prague-blockchain_test_engine-call_with_stack_overflow]\ntest_subcall[fork_Prague-blockchain_test_engine-call_with_tstore_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test_engine-call_with_tstore_stack_underflow_2]\ntest_subcall[fork_Prague-blockchain_test_engine-call_with_tload_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test_engine-call_with_out_of_gas]\ntest_subcall[fork_Prague-blockchain_test_engine-call_with_out_of_gas_2]\ntest_subcall[fork_Prague-blockchain_test_engine-callcode_with_revert]\ntest_subcall[fork_Prague-blockchain_test_engine-callcode_with_invalid]\ntest_subcall[fork_Prague-blockchain_test_engine-callcode_with_stack_overflow]\ntest_subcall[fork_Prague-blockchain_test_engine-callcode_with_tstore_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test_engine-callcode_with_tstore_stack_underflow_2]\ntest_subcall[fork_Prague-blockchain_test_engine-callcode_with_tload_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test_engine-callcode_with_out_of_gas]\ntest_subcall[fork_Prague-blockchain_test_engine-callcode_with_out_of_gas_2]\ntest_subcall[fork_Prague-blockchain_test_engine-delegatecall_with_revert]\ntest_subcall[fork_Prague-blockchain_test_engine-delegatecall_with_invalid]\ntest_subcall[fork_Prague-blockchain_test_engine-delegatecall_with_stack_overflow]\ntest_subcall[fork_Prague-blockchain_test_engine-delegatecall_with_tstore_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test_engine-delegatecall_with_tstore_stack_underflow_2]\ntest_subcall[fork_Prague-blockchain_test_engine-delegatecall_with_tload_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test_engine-delegatecall_with_out_of_gas]\ntest_subcall[fork_Prague-blockchain_test_engine-delegatecall_with_out_of_gas_2]\ntest_subcall[fork_Prague-state_test-call]\ntest_subcall[fork_Prague-state_test-staticcall_cant_call_tstore]\ntest_subcall[fork_Prague-state_test-staticcall_cant_call_tstore_with_stack_underflow]\ntest_subcall[fork_Prague-state_test-staticcalled_context_can_call_tload]\ntest_subcall[fork_Prague-state_test-callcode]\ntest_subcall[fork_Prague-state_test-delegatecall]\ntest_subcall[fork_Prague-state_test-call_with_revert]\ntest_subcall[fork_Prague-state_test-call_with_invalid]\ntest_subcall[fork_Prague-state_test-call_with_stack_overflow]\ntest_subcall[fork_Prague-state_test-call_with_tstore_stack_underflow]\ntest_subcall[fork_Prague-state_test-call_with_tstore_stack_underflow_2]\ntest_subcall[fork_Prague-state_test-call_with_tload_stack_underflow]\ntest_subcall[fork_Prague-state_test-call_with_out_of_gas]\ntest_subcall[fork_Prague-state_test-call_with_out_of_gas_2]\ntest_subcall[fork_Prague-state_test-callcode_with_revert]\ntest_subcall[fork_Prague-state_test-callcode_with_invalid]\ntest_subcall[fork_Prague-state_test-callcode_with_stack_overflow]\ntest_subcall[fork_Prague-state_test-callcode_with_tstore_stack_underflow]\ntest_subcall[fork_Prague-state_test-callcode_with_tstore_stack_underflow_2]\ntest_subcall[fork_Prague-state_test-callcode_with_tload_stack_underflow]\ntest_subcall[fork_Prague-state_test-callcode_with_out_of_gas]\ntest_subcall[fork_Prague-state_test-callcode_with_out_of_gas_2]\ntest_subcall[fork_Prague-state_test-delegatecall_with_revert]\ntest_subcall[fork_Prague-state_test-delegatecall_with_invalid]\ntest_subcall[fork_Prague-state_test-delegatecall_with_stack_overflow]\ntest_subcall[fork_Prague-state_test-delegatecall_with_tstore_stack_underflow]\ntest_subcall[fork_Prague-state_test-delegatecall_with_tstore_stack_underflow_2]\ntest_subcall[fork_Prague-state_test-delegatecall_with_tload_stack_underflow]\ntest_subcall[fork_Prague-state_test-delegatecall_with_out_of_gas]\ntest_subcall[fork_Prague-state_test-delegatecall_with_out_of_gas_2]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts/","title":"Test Tstorage Reentrancy Contexts","text":"

    Documentation for tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py\n
    Tests for EIP-1153: Transient Storage

    Test cases for TSTORE and TLOAD opcode calls in reentrancy contexts.

    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts/#tests.cancun.eip1153_tstore.test_tstorage_reentrancy_contexts.test_reentrant_call","title":"test_reentrant_call(state_test, pre, bytecode, expected_storage)","text":"

    Test transient storage in different reentrancy contexts.

    Source code in tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py
    @ReentrancyTestCases.parametrize()\ndef test_reentrant_call(\n    state_test: StateTestFiller, pre: Alloc, bytecode: Bytecode, expected_storage: Dict\n):\n    \"\"\"\n    Test transient storage in different reentrancy contexts.\n    \"\"\"\n    env = Environment()\n\n    callee_address = pre.deploy_contract(bytecode)\n\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        to=callee_address,\n        data=Hash(1),\n        gas_limit=1_000_000,\n    )\n\n    post = {callee_address: Account(code=bytecode, storage=expected_storage)}\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts/index/test_cases/","title":"Test Tstorage Reentrancy Contexts - Test Cases","text":"

    Test cases generated from tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py:

    test_reentrant_call[fork_Cancun-blockchain_test-tstore_in_reentrant_call]\ntest_reentrant_call[fork_Cancun-blockchain_test-tload_after_reentrant_tstore]\ntest_reentrant_call[fork_Cancun-blockchain_test-manipulate_in_reentrant_call]\ntest_reentrant_call[fork_Cancun-blockchain_test-tstore_in_call_then_tload_return_in_staticcall]\ntest_reentrant_call[fork_Cancun-blockchain_test-tstore_before_revert_has_no_effect]\ntest_reentrant_call[fork_Cancun-blockchain_test-revert_undoes_all]\ntest_reentrant_call[fork_Cancun-blockchain_test-revert_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Cancun-blockchain_test-tstore_before_invalid_has_no_effect]\ntest_reentrant_call[fork_Cancun-blockchain_test-invalid_undoes_all]\ntest_reentrant_call[fork_Cancun-blockchain_test-invalid_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Cancun-blockchain_test_engine-tstore_in_reentrant_call]\ntest_reentrant_call[fork_Cancun-blockchain_test_engine-tload_after_reentrant_tstore]\ntest_reentrant_call[fork_Cancun-blockchain_test_engine-manipulate_in_reentrant_call]\ntest_reentrant_call[fork_Cancun-blockchain_test_engine-tstore_in_call_then_tload_return_in_staticcall]\ntest_reentrant_call[fork_Cancun-blockchain_test_engine-tstore_before_revert_has_no_effect]\ntest_reentrant_call[fork_Cancun-blockchain_test_engine-revert_undoes_all]\ntest_reentrant_call[fork_Cancun-blockchain_test_engine-revert_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Cancun-blockchain_test_engine-tstore_before_invalid_has_no_effect]\ntest_reentrant_call[fork_Cancun-blockchain_test_engine-invalid_undoes_all]\ntest_reentrant_call[fork_Cancun-blockchain_test_engine-invalid_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Cancun-state_test-tstore_in_reentrant_call]\ntest_reentrant_call[fork_Cancun-state_test-tload_after_reentrant_tstore]\ntest_reentrant_call[fork_Cancun-state_test-manipulate_in_reentrant_call]\ntest_reentrant_call[fork_Cancun-state_test-tstore_in_call_then_tload_return_in_staticcall]\ntest_reentrant_call[fork_Cancun-state_test-tstore_before_revert_has_no_effect]\ntest_reentrant_call[fork_Cancun-state_test-revert_undoes_all]\ntest_reentrant_call[fork_Cancun-state_test-revert_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Cancun-state_test-tstore_before_invalid_has_no_effect]\ntest_reentrant_call[fork_Cancun-state_test-invalid_undoes_all]\ntest_reentrant_call[fork_Cancun-state_test-invalid_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Prague-blockchain_test-tstore_in_reentrant_call]\ntest_reentrant_call[fork_Prague-blockchain_test-tload_after_reentrant_tstore]\ntest_reentrant_call[fork_Prague-blockchain_test-manipulate_in_reentrant_call]\ntest_reentrant_call[fork_Prague-blockchain_test-tstore_in_call_then_tload_return_in_staticcall]\ntest_reentrant_call[fork_Prague-blockchain_test-tstore_before_revert_has_no_effect]\ntest_reentrant_call[fork_Prague-blockchain_test-revert_undoes_all]\ntest_reentrant_call[fork_Prague-blockchain_test-revert_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Prague-blockchain_test-tstore_before_invalid_has_no_effect]\ntest_reentrant_call[fork_Prague-blockchain_test-invalid_undoes_all]\ntest_reentrant_call[fork_Prague-blockchain_test-invalid_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Prague-blockchain_test_engine-tstore_in_reentrant_call]\ntest_reentrant_call[fork_Prague-blockchain_test_engine-tload_after_reentrant_tstore]\ntest_reentrant_call[fork_Prague-blockchain_test_engine-manipulate_in_reentrant_call]\ntest_reentrant_call[fork_Prague-blockchain_test_engine-tstore_in_call_then_tload_return_in_staticcall]\ntest_reentrant_call[fork_Prague-blockchain_test_engine-tstore_before_revert_has_no_effect]\ntest_reentrant_call[fork_Prague-blockchain_test_engine-revert_undoes_all]\ntest_reentrant_call[fork_Prague-blockchain_test_engine-revert_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Prague-blockchain_test_engine-tstore_before_invalid_has_no_effect]\ntest_reentrant_call[fork_Prague-blockchain_test_engine-invalid_undoes_all]\ntest_reentrant_call[fork_Prague-blockchain_test_engine-invalid_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Prague-state_test-tstore_in_reentrant_call]\ntest_reentrant_call[fork_Prague-state_test-tload_after_reentrant_tstore]\ntest_reentrant_call[fork_Prague-state_test-manipulate_in_reentrant_call]\ntest_reentrant_call[fork_Prague-state_test-tstore_in_call_then_tload_return_in_staticcall]\ntest_reentrant_call[fork_Prague-state_test-tstore_before_revert_has_no_effect]\ntest_reentrant_call[fork_Prague-state_test-revert_undoes_all]\ntest_reentrant_call[fork_Prague-state_test-revert_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Prague-state_test-tstore_before_invalid_has_no_effect]\ntest_reentrant_call[fork_Prague-state_test-invalid_undoes_all]\ntest_reentrant_call[fork_Prague-state_test-invalid_undoes_tstorage_after_successful_call]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_selfdestruct/","title":"Test Tstorage Selfdestruct","text":"

    Documentation for tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py\n
    Tests for EIP-1153: Transient Storage

    Test cases for TSTORE and TLOAD opcode calls in reentrancy after self-destruct, taking into account the changes in EIP-6780.

    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_selfdestruct/#tests.cancun.eip1153_tstore.test_tstorage_selfdestruct.test_reentrant_selfdestructing_call","title":"test_reentrant_selfdestructing_call(state_test, pre, pre_existing_contract, caller_bytecode, callee_bytecode, expected_storage)","text":"

    Test transient storage in different reentrancy contexts after selfdestructing.

    Source code in tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py
    @SelfDestructCases.parametrize()\ndef test_reentrant_selfdestructing_call(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    pre_existing_contract: bool,\n    caller_bytecode: Bytecode,\n    callee_bytecode: Bytecode,\n    expected_storage: Dict,\n):\n    \"\"\"\n    Test transient storage in different reentrancy contexts after selfdestructing.\n    \"\"\"\n    env = Environment()\n\n    caller_address = pre.deploy_contract(code=caller_bytecode)\n\n    data: Hash | Bytecode\n    if pre_existing_contract:\n        callee_address = pre.deploy_contract(code=callee_bytecode)\n        data = Hash(callee_address)\n    else:\n        callee_address = compute_create_address(address=caller_address, nonce=1)\n        data = Initcode(deploy_code=callee_bytecode)\n\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        to=caller_address,\n        gas_limit=1_000_000,\n        data=data,\n    )\n\n    expected_storage[0] = callee_address\n\n    post: Dict = {caller_address: Account(storage=expected_storage)}\n\n    if pre_existing_contract:\n        post[callee_address] = Account(code=callee_bytecode)\n    else:\n        post[callee_address] = Account.NONEXISTENT\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_selfdestruct/index/test_cases/","title":"Test Tstorage Selfdestruct - Test Cases","text":"

    Test cases generated from tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py:

    test_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tload_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tload_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tload_after_inner_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tload_after_inner_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tstore_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tstore_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test_engine-tload_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test_engine-tload_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test_engine-tload_after_inner_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test_engine-tload_after_inner_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test_engine-tstore_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test_engine-tstore_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-state_test-tload_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-state_test-tload_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-state_test-tload_after_inner_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-state_test-tload_after_inner_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-state_test-tstore_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-state_test-tstore_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test-tload_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test-tload_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test-tload_after_inner_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test-tload_after_inner_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test-tstore_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test-tstore_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test_engine-tload_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test_engine-tload_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test_engine-tload_after_inner_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test_engine-tload_after_inner_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test_engine-tstore_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test_engine-tstore_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-state_test-tload_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-state_test-tload_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-state_test-tload_after_inner_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-state_test-tload_after_inner_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-state_test-tstore_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-state_test-tstore_after_selfdestruct_new_contract]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstore_reentrancy/","title":"Test Tstore Reentrancy","text":"

    Documentation for tests/cancun/eip1153_tstore/test_tstore_reentrancy.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tstore_reentrancy.py\n

    Ethereum Transient Storage EIP Tests https://eips.ethereum.org/EIPS/eip-1153

    "},{"location":"tests/cancun/eip1153_tstore/test_tstore_reentrancy/#tests.cancun.eip1153_tstore.test_tstore_reentrancy.test_tstore_reentrancy","title":"test_tstore_reentrancy(state_test, pre, call_type, call_return, call_dest_type)","text":"

    Ported .json vectors:

    (06_tstoreInReentrancyCallFiller.yml) Reentrant calls access the same transient storage

    (07_tloadAfterReentrancyStoreFiller.yml) Successfully returned calls do not revert transient storage writes

    (08_revertUndoesTransientStoreFiller.yml) Revert undoes the transient storage writes from a call.

    (09_revertUndoesAllFiller.yml) Revert undoes all the transient storage writes to the same key from the failed call.

    (11_tstoreDelegateCallFiller.yml) delegatecall manipulates transient storage in the context of the current address.

    (13_tloadStaticCallFiller.yml) Transient storage cannot be manipulated in a static context, tstore reverts

    (20_oogUndoesTransientStoreInCallFiller.yml) Out of gas undoes the transient storage writes from a call.

    Source code in tests/cancun/eip1153_tstore/test_tstore_reentrancy.py
    @pytest.mark.valid_from(\"Cancun\")\n@pytest.mark.parametrize(\"call_type\", [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL])\n@pytest.mark.parametrize(\"call_return\", [Op.RETURN, Op.REVERT, Om.OOG])\n@pytest.mark.parametrize(\"call_dest_type\", [CallDestType.REENTRANCY, CallDestType.EXTERNAL_CALL])\ndef test_tstore_reentrancy(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    call_type: Op,\n    call_return: Op,\n    call_dest_type: CallDestType,\n):\n    \"\"\"\n    Ported .json vectors:\n\n    (06_tstoreInReentrancyCallFiller.yml)\n    Reentrant calls access the same transient storage\n\n    (07_tloadAfterReentrancyStoreFiller.yml)\n    Successfully returned calls do not revert transient storage writes\n\n    (08_revertUndoesTransientStoreFiller.yml)\n    Revert undoes the transient storage writes from a call.\n\n    (09_revertUndoesAllFiller.yml)\n    Revert undoes all the transient storage writes to the same key from the failed call.\n\n    (11_tstoreDelegateCallFiller.yml)\n    delegatecall manipulates transient storage in the context of the current address.\n\n    (13_tloadStaticCallFiller.yml)\n    Transient storage cannot be manipulated in a static context, tstore reverts\n\n    (20_oogUndoesTransientStoreInCallFiller.yml)\n    Out of gas undoes the transient storage writes from a call.\n    \"\"\"\n    tload_value_set_before_call = 80\n    tload_value_set_in_call = 90\n\n    # Storage cells\n    slot_tload_before_call = 0\n    slot_tload_in_subcall_result = 1\n    slot_tload_after_call = 2\n    slot_subcall_worked = 3\n    slot_tload_1_after_call = 4\n    slot_tstore_overwrite = 5\n    slot_code_worked = 6\n\n    # Function names\n    do_tstore = 1\n    do_reenter = 2\n    call_dest_address: Bytecode | Address\n    call_dest_address = Op.ADDRESS()\n\n    def make_call(call_type: Op) -> Bytecode:\n        if call_type == Op.DELEGATECALL or call_type == Op.STATICCALL:\n            return call_type(Op.GAS(), call_dest_address, 0, 32, 32, 32)\n        else:\n            return call_type(Op.GAS(), call_dest_address, 0, 0, 32, 32, 32)\n\n    subcall_code = (\n        Op.TSTORE(0, 89)\n        + Op.TSTORE(0, tload_value_set_in_call)\n        + Op.TSTORE(1, 11)\n        + Op.TSTORE(1, 12)\n        + Op.MSTORE(0, Op.TLOAD(0))\n        + call_return(0, 32)\n    )\n\n    address_code = pre.deploy_contract(\n        balance=0,\n        code=subcall_code,\n        storage={},\n    )\n    if call_dest_type == CallDestType.EXTERNAL_CALL:\n        call_dest_address = address_code\n\n    address_to = pre.deploy_contract(\n        balance=1_000_000_000_000_000_000,\n        code=Switch(\n            cases=[\n                Case(\n                    condition=Op.EQ(Op.CALLDATALOAD(0), do_tstore),\n                    action=subcall_code,\n                ),\n                Case(\n                    condition=Op.EQ(Op.CALLDATALOAD(0), do_reenter),\n                    action=Op.TSTORE(0, tload_value_set_before_call)\n                    + Op.SSTORE(slot_tload_before_call, Op.TLOAD(0))\n                    + Op.MSTORE(0, do_tstore)\n                    + Op.MSTORE(32, 0xFF)\n                    + Op.SSTORE(slot_subcall_worked, make_call(call_type))\n                    + Op.SSTORE(slot_tload_in_subcall_result, Op.MLOAD(32))\n                    + Op.SSTORE(slot_tload_after_call, Op.TLOAD(0))\n                    + Op.SSTORE(slot_tload_1_after_call, Op.TLOAD(1))\n                    + Op.TSTORE(0, 50)\n                    + Op.SSTORE(slot_tstore_overwrite, Op.TLOAD(0))\n                    + Op.SSTORE(slot_code_worked, 1),\n                ),\n            ],\n            default_action=None,\n        ),\n        storage={\n            slot_tload_before_call: 0xFF,\n            slot_tload_in_subcall_result: 0xFF,\n            slot_tload_after_call: 0xFF,\n            slot_subcall_worked: 0xFF,\n            slot_tload_1_after_call: 0xFF,\n            slot_tstore_overwrite: 0xFF,\n            slot_code_worked: 0xFF,\n        },\n    )\n\n    on_failing_calls = call_type == Op.STATICCALL or call_return in [Op.REVERT, Om.OOG]\n    on_successful_delegate_or_callcode = call_type in [\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n    ] and call_return not in [Op.REVERT, Om.OOG]\n\n    if call_dest_type == CallDestType.REENTRANCY:\n        post = {\n            address_to: Account(\n                storage={\n                    slot_code_worked: 1,\n                    slot_tload_before_call: tload_value_set_before_call,\n                    slot_tload_in_subcall_result: (\n                        # we fail to obtain in call result if it fails\n                        0xFF\n                        if call_type == Op.STATICCALL or call_return == Om.OOG\n                        else tload_value_set_in_call\n                    ),\n                    # reentrant tstore overrides value in upper level\n                    slot_tload_after_call: (\n                        tload_value_set_before_call\n                        if on_failing_calls\n                        else tload_value_set_in_call\n                    ),\n                    slot_tload_1_after_call: 0 if on_failing_calls else 12,\n                    slot_tstore_overwrite: 50,\n                    # tstore in static call not allowed\n                    slot_subcall_worked: 0 if on_failing_calls else 1,\n                }\n            )\n        }\n    else:\n        post = {\n            address_to: Account(\n                storage={\n                    slot_code_worked: 1,\n                    slot_tload_before_call: tload_value_set_before_call,\n                    slot_tload_in_subcall_result: (\n                        # we fail to obtain in call result if it fails\n                        0xFF\n                        if call_type == Op.STATICCALL or call_return == Om.OOG\n                        else tload_value_set_in_call\n                    ),\n                    # external tstore overrides value in upper level only in delegate and callcode\n                    slot_tload_after_call: (\n                        tload_value_set_in_call\n                        if on_successful_delegate_or_callcode\n                        else tload_value_set_before_call\n                    ),\n                    slot_tload_1_after_call: 12 if on_successful_delegate_or_callcode else 0,\n                    slot_tstore_overwrite: 50,\n                    # tstore in static call not allowed, reentrancy means external call here\n                    slot_subcall_worked: 0 if on_failing_calls else 1,\n                }\n            )\n        }\n\n    tx = Transaction(\n        sender=pre.fund_eoa(7_000_000_000_000_000_000),\n        to=address_to,\n        gas_price=10,\n        data=Hash(do_reenter),\n        gas_limit=5000000,\n        value=0,\n    )\n\n    state_test(env=Environment(), pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstore_reentrancy/index/test_cases/","title":"Test Tstore Reentrancy - Test Cases","text":"

    Test cases generated from tests/cancun/eip1153_tstore/test_tstore_reentrancy.py

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstore_reentrancy.py:

    test_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip1153_tstore/test_tstore_reentrancy.py\n
    "},{"location":"tests/cancun/eip4788_beacon_root/","title":"EIP-4788 Beacon Root","text":"

    Documentation for tests/cancun/eip4788_beacon_root.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4788_beacon_root\n

    Cross-client EIP-4788 Tests

    "},{"location":"tests/cancun/eip4788_beacon_root/spec/","title":"Spec","text":"

    Documentation for tests/cancun/eip4788_beacon_root/spec.py.

    Defines EIP-4788 specification constants and functions.

    "},{"location":"tests/cancun/eip4788_beacon_root/spec/#tests.cancun.eip4788_beacon_root.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-4788 specifications as defined at https://eips.ethereum.org/EIPS/eip-4788#specification

    Source code in tests/cancun/eip4788_beacon_root/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-4788 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-4788#specification\n    \"\"\"\n\n    BEACON_ROOTS_ADDRESS = 0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02\n    BEACON_ROOTS_CALL_GAS = 100_000\n    BEACON_ROOTS_DEPLOYER_ADDRESS = 0x0B799C86A49DEEB90402691F1041AA3AF2D3C875\n    HISTORY_BUFFER_LENGTH = 8_191\n    SYSTEM_ADDRESS = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE\n    FORK_TIMESTAMP = 15_000  # ShanghaiToCancun timestamp\n
    "},{"location":"tests/cancun/eip4788_beacon_root/spec/#tests.cancun.eip4788_beacon_root.spec.SpecHelpers","title":"SpecHelpers dataclass","text":"

    Helper functions closely related to the EIP-4788 specification.

    Source code in tests/cancun/eip4788_beacon_root/spec.py
    @dataclass(frozen=True)\nclass SpecHelpers:\n    \"\"\"\n    Helper functions closely related to the EIP-4788 specification.\n    \"\"\"\n\n    def timestamp_index(self, timestamp: int) -> int:\n        \"\"\"\n        Derive the timestamp index into the timestamp ring buffer.\n        \"\"\"\n        return timestamp % Spec.HISTORY_BUFFER_LENGTH\n\n    def root_index(self, timestamp: int) -> int:\n        \"\"\"\n        Derive the root index into the root ring buffer.\n        \"\"\"\n        return self.timestamp_index(timestamp) + Spec.HISTORY_BUFFER_LENGTH\n\n    @staticmethod\n    def expected_storage(\n        *,\n        beacon_root: bytes,\n        valid_call: bool,\n        valid_input: bool,\n    ) -> Storage:\n        \"\"\"\n        Derives the expected storage for a given beacon root contract call\n        dependent on:\n        - success or failure of the call\n        - validity of the timestamp input used within the call\n        \"\"\"\n        # By default assume the call is unsuccessful and all keys are zero\n        storage = Storage({k: 0 for k in range(4)})  # type: ignore\n        if valid_call and valid_input:\n            # beacon root contract call is successful\n            storage[0] = 1\n            storage[1] = beacon_root\n            storage[2] = 32\n            storage[3] = beacon_root\n\n        return storage\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/","title":"Test Beacon Root Contract","text":"

    Documentation for tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py\n
    Tests beacon block root for EIP-4788: Beacon block root in the EVM

    Test the exposed beacon chain root in the EVM for EIP-4788: Beacon block root in the EVM

    Adding a new test

    Add a function that is named test_<test_name> and takes at least the following arguments:

    • state_test
    • env
    • pre
    • tx
    • post
    • valid_call

    All other pytest.fixtures can be parametrized to generate new combinations and test cases.

    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_beacon_root_contract_calls","title":"test_beacon_root_contract_calls(blockchain_test, beacon_root, timestamp, pre, tx, post)","text":"

    Tests the beacon root contract call using various call contexts: - CALL - DELEGATECALL - CALLCODE - STATICCALL for different call gas amounts: - exact gas (valid call) - extra gas (valid call) - insufficient gas (invalid call)

    The expected result is that the contract call will be executed if the gas amount is met and return the correctparent_beacon_block_root. Otherwise the call will be invalid, and not be executed. This is highlighted within storage by storing the return value of each call context.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\n    \"call_gas, valid_call\",\n    [\n        pytest.param(Spec.BEACON_ROOTS_CALL_GAS, True),\n        pytest.param(int(Spec.BEACON_ROOTS_CALL_GAS / 100), False),\n    ],\n)\n@pytest.mark.parametrize(\n    \"call_type,call_value,valid_input\",\n    [\n        (Op.CALL, 1, True),\n        (Op.CALL, 0, True),\n        (Op.CALLCODE, 0, False),\n        (Op.DELEGATECALL, 0, False),\n        (Op.STATICCALL, 0, True),\n    ],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_beacon_root_contract_calls(\n    blockchain_test: BlockchainTestFiller,\n    beacon_root: bytes,\n    timestamp: int,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Tests the beacon root contract call using various call contexts:\n    - `CALL`\n    - `DELEGATECALL`\n    - `CALLCODE`\n    - `STATICCALL`\n    for different call gas amounts:\n    - exact gas (valid call)\n    - extra gas (valid call)\n    - insufficient gas (invalid call)\n\n    The expected result is that the contract call will be executed if the gas amount is met\n    and return the correct`parent_beacon_block_root`. Otherwise the call will be invalid, and not\n    be executed. This is highlighted within storage by storing the return value of each call\n    context.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        blocks=[Block(txs=[tx], parent_beacon_block_root=beacon_root, timestamp=timestamp)],\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_beacon_root_contract_timestamps","title":"test_beacon_root_contract_timestamps(blockchain_test, beacon_root, timestamp, pre, tx, post)","text":"

    Tests the beacon root contract call across for various valid and invalid timestamps.

    The expected result is that the contract call will return the correct parent_beacon_block_root for a valid input timestamp and return the zero'd 32 bytes value for an invalid input timestamp.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\n    \"timestamp, valid_input\",\n    [\n        (0x0C, True),  # twelve\n        (2**32, True),  # arbitrary\n        (2**64 - 2, True),  # near-max\n        (2**64 - 1, True),  # max\n        # TODO: Update t8n to un marshal > 64-bit int\n        # Exception: failed to evaluate: ERROR(10): failed un marshaling stdin\n        # (2**64, False),  # overflow\n        # Exception: failed to evaluate: ERROR(10): failed un marshaling stdin\n        # (2**64 + 1, False),  # overflow+1\n    ],\n)\n@pytest.mark.parametrize(\"auto_access_list\", [False, True])\n@pytest.mark.parametrize(\n    \"system_address_balance\",\n    [\n        pytest.param(0, id=\"empty_system_address\"),\n        pytest.param(1, id=\"one_wei_system_address\"),\n        pytest.param(int(1e18), id=\"one_eth_system_address\"),\n    ],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_beacon_root_contract_timestamps(\n    blockchain_test: BlockchainTestFiller,\n    beacon_root: bytes,\n    timestamp: int,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Tests the beacon root contract call across for various valid and invalid timestamps.\n\n    The expected result is that the contract call will return the correct\n    `parent_beacon_block_root` for a valid input timestamp and return the zero'd 32 bytes value\n    for an invalid input timestamp.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        blocks=[Block(txs=[tx], parent_beacon_block_root=beacon_root, timestamp=timestamp)],\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_calldata_lengths","title":"test_calldata_lengths(blockchain_test, beacon_root, timestamp, pre, tx, post)","text":"

    Tests the beacon root contract call using multiple invalid input lengths.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\n    \"tx_data\",\n    [\n        pytest.param(bytes(), id=\"empty_calldata\"),\n        pytest.param(int.to_bytes(12, length=1, byteorder=\"big\"), id=\"one_byte\"),\n        pytest.param(int.to_bytes(12, length=31, byteorder=\"big\"), id=\"31_bytes\"),\n        pytest.param(int.to_bytes(12, length=33, byteorder=\"big\"), id=\"33_bytes\"),\n        pytest.param(int.to_bytes(12, length=1024, byteorder=\"big\"), id=\"1024_bytes\"),\n    ],\n)\n@pytest.mark.parametrize(\"valid_call,valid_input\", [(False, False)])\n@pytest.mark.parametrize(\"timestamp\", [12])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_calldata_lengths(\n    blockchain_test: BlockchainTestFiller,\n    beacon_root: bytes,\n    timestamp: int,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Tests the beacon root contract call using multiple invalid input lengths.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        blocks=[Block(txs=[tx], parent_beacon_block_root=beacon_root, timestamp=timestamp)],\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_beacon_root_equal_to_timestamp","title":"test_beacon_root_equal_to_timestamp(blockchain_test, beacon_root, timestamp, pre, tx, post)","text":"

    Tests the beacon root contract call where the beacon root is equal to the timestamp.

    The expected result is that the contract call will return the parent_beacon_block_root, as all timestamps used are valid.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\n    \"beacon_root, timestamp\",\n    [\n        (12, 12),  # twelve\n        (2**32, 2**32),  # arbitrary\n        (2**64 - 2, 2**64 - 2),  # near-max\n        (2**64 - 1, 2**64 - 1),  # max\n    ],\n    indirect=[\"beacon_root\"],\n)\n@pytest.mark.parametrize(\"auto_access_list\", [False, True])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_beacon_root_equal_to_timestamp(\n    blockchain_test: BlockchainTestFiller,\n    beacon_root: bytes,\n    timestamp: int,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Tests the beacon root contract call where the beacon root is equal to the timestamp.\n\n    The expected result is that the contract call will return the `parent_beacon_block_root`,\n    as all timestamps used are valid.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        blocks=[Block(txs=[tx], parent_beacon_block_root=beacon_root, timestamp=timestamp)],\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_tx_to_beacon_root_contract","title":"test_tx_to_beacon_root_contract(blockchain_test, beacon_root, timestamp, pre, tx, post)","text":"

    Tests the beacon root contract using a transaction with different types and data lengths.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\"auto_access_list\", [False, True])\n@pytest.mark.parametrize(\"call_beacon_root_contract\", [True])\n@pytest.mark.with_all_tx_types\n@pytest.mark.valid_from(\"Cancun\")\ndef test_tx_to_beacon_root_contract(\n    blockchain_test: BlockchainTestFiller,\n    beacon_root: bytes,\n    timestamp: int,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Tests the beacon root contract using a transaction with different types and data lengths.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        blocks=[Block(txs=[tx], parent_beacon_block_root=beacon_root, timestamp=timestamp)],\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_invalid_beacon_root_calldata_value","title":"test_invalid_beacon_root_calldata_value(blockchain_test, beacon_root, timestamp, pre, tx, post)","text":"

    Tests the beacon root contract call using invalid input values: - zero calldata.

    Contract should revert.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\n    \"tx_data\",\n    [\n        pytest.param(int.to_bytes(0, length=32, byteorder=\"big\"), id=\"zero_calldata\"),\n    ],\n)\n@pytest.mark.parametrize(\"valid_call,valid_input\", [(False, False)])\n@pytest.mark.parametrize(\"timestamp\", [12])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_invalid_beacon_root_calldata_value(\n    blockchain_test: BlockchainTestFiller,\n    beacon_root: bytes,\n    timestamp: int,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Tests the beacon root contract call using invalid input values:\n    - zero calldata.\n\n    Contract should revert.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        blocks=[Block(txs=[tx], parent_beacon_block_root=beacon_root, timestamp=timestamp)],\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_beacon_root_selfdestruct","title":"test_beacon_root_selfdestruct(blockchain_test, beacon_root, timestamp, pre, tx, post)","text":"

    Tests that self destructing the beacon root address transfers actors balance correctly.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\"timestamp\", [12])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_beacon_root_selfdestruct(\n    blockchain_test: BlockchainTestFiller,\n    beacon_root: bytes,\n    timestamp: int,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Tests that self destructing the beacon root address transfers actors balance correctly.\n    \"\"\"\n    # self destruct actor\n    self_destruct_actor_address = pre.deploy_contract(\n        Op.SELFDESTRUCT(Spec.BEACON_ROOTS_ADDRESS),\n        balance=0xBA1,\n    )\n    # self destruct caller\n    self_destruct_caller_address = pre.deploy_contract(\n        Op.CALL(gas=100_000, address=self_destruct_actor_address)\n        + Op.SSTORE(0, Op.BALANCE(Spec.BEACON_ROOTS_ADDRESS))\n    )\n    post = {\n        self_destruct_caller_address: Account(\n            storage=Storage({0: 0xBA1}),  # type: ignore\n        )\n    }\n    blockchain_test(\n        pre=pre,\n        blocks=[\n            Block(\n                txs=[\n                    Transaction(\n                        sender=pre.fund_eoa(),\n                        to=self_destruct_caller_address,\n                        gas_limit=100_000,\n                    )\n                ]\n            )\n        ],\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_multi_block_beacon_root_timestamp_calls","title":"test_multi_block_beacon_root_timestamp_calls(blockchain_test, pre, timestamps, beacon_roots, block_count, call_gas, call_value)","text":"

    Tests multiple blocks where each block writes a timestamp to storage and contains one transaction that calls the beacon root contract multiple times.

    The blocks might overwrite the historical roots buffer, or not, depending on the timestamps, and whether they increment in multiples of Spec.HISTORY_BUFFER_LENGTH or not.

    By default, the beacon roots are the keccak of the block number.

    Each transaction checks the current timestamp and also all previous timestamps, and verifies that the beacon root is correct for all of them if the timestamp is supposed to be in the buffer, which might have been overwritten by a later block.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\n    \"timestamps\",\n    [\n        pytest.param(\n            count(\n                start=Spec.HISTORY_BUFFER_LENGTH - 5,\n                step=1,\n            ),\n            id=\"buffer_wraparound\",\n        ),\n        pytest.param(\n            count(\n                start=12,\n                step=Spec.HISTORY_BUFFER_LENGTH,\n            ),\n            id=\"buffer_wraparound_overwrite\",\n        ),\n        pytest.param(\n            count(\n                start=2**32,\n                step=Spec.HISTORY_BUFFER_LENGTH,\n            ),\n            id=\"buffer_wraparound_overwrite_high_timestamp\",\n        ),\n        pytest.param(\n            count(\n                start=5,\n                step=Spec.HISTORY_BUFFER_LENGTH - 1,\n            ),\n            id=\"buffer_wraparound_no_overwrite\",\n        ),\n        pytest.param(\n            count(\n                start=Spec.HISTORY_BUFFER_LENGTH - 3,\n                step=Spec.HISTORY_BUFFER_LENGTH + 1,\n            ),\n            id=\"buffer_wraparound_no_overwrite_2\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"block_count\", [10])  # All tests use 10 blocks\n@pytest.mark.valid_from(\"Cancun\")\ndef test_multi_block_beacon_root_timestamp_calls(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    timestamps: Iterator[int],\n    beacon_roots: Iterator[bytes],\n    block_count: int,\n    call_gas: int,\n    call_value: int,\n):\n    \"\"\"\n    Tests multiple blocks where each block writes a timestamp to storage and contains one\n    transaction that calls the beacon root contract multiple times.\n\n    The blocks might overwrite the historical roots buffer, or not, depending on the `timestamps`,\n    and whether they increment in multiples of `Spec.HISTORY_BUFFER_LENGTH` or not.\n\n    By default, the beacon roots are the keccak of the block number.\n\n    Each transaction checks the current timestamp and also all previous timestamps, and verifies\n    that the beacon root is correct for all of them if the timestamp is supposed to be in the\n    buffer, which might have been overwritten by a later block.\n    \"\"\"\n    blocks: List[Block] = []\n    post = {}\n\n    timestamps_storage: Dict[int, int] = {}\n    roots_storage: Dict[int, bytes] = {}\n\n    all_timestamps: List[int] = []\n\n    sender = pre.fund_eoa()\n\n    for timestamp, beacon_root, i in zip(timestamps, beacon_roots, range(block_count)):\n        timestamp_index = timestamp % Spec.HISTORY_BUFFER_LENGTH\n        timestamps_storage[timestamp_index] = timestamp\n        roots_storage[timestamp_index] = beacon_root\n\n        all_timestamps.append(timestamp)\n\n        withdraw_index = count(0)\n\n        current_call_account_code = Bytecode()\n        current_call_account_expected_storage = Storage()\n\n        # We are going to call the beacon roots contract once for every timestamp of the current\n        # and all previous blocks, and check that the returned beacon root is still correct only\n        # if it was not overwritten.\n        for t in all_timestamps:\n            current_call_account_code += Op.MSTORE(0, t)\n            call_valid = (\n                timestamp_index in timestamps_storage\n                and timestamps_storage[t % Spec.HISTORY_BUFFER_LENGTH] == t\n            )\n            current_call_account_code += Op.SSTORE(\n                current_call_account_expected_storage.store_next(0x01 if call_valid else 0x00),\n                Op.CALL(\n                    call_gas,\n                    Spec.BEACON_ROOTS_ADDRESS,\n                    call_value,\n                    0x00,\n                    0x20,\n                    0x20,\n                    0x20,\n                ),\n            )\n\n            current_call_account_code += Op.SSTORE(\n                current_call_account_expected_storage.store_next(\n                    roots_storage[t % Spec.HISTORY_BUFFER_LENGTH] if call_valid else 0x00\n                ),\n                Op.MLOAD(0x20),\n            )\n\n        current_call_account_address = pre.deploy_contract(current_call_account_code)\n\n        post[current_call_account_address] = Account(\n            storage=current_call_account_expected_storage,\n        )\n        blocks.append(\n            Block(\n                txs=[\n                    Transaction(\n                        sender=sender,\n                        to=current_call_account_address,\n                        data=Hash(timestamp),\n                        gas_limit=1_000_000,\n                    )\n                ],\n                parent_beacon_block_root=beacon_root,\n                timestamp=timestamp,\n                withdrawals=[\n                    # Also withdraw to the beacon root contract and the system address\n                    Withdrawal(\n                        address=Spec.BEACON_ROOTS_ADDRESS,\n                        amount=1,\n                        index=next(withdraw_index),\n                        validator_index=0,\n                    ),\n                    Withdrawal(\n                        address=Spec.SYSTEM_ADDRESS,\n                        amount=1,\n                        index=next(withdraw_index),\n                        validator_index=1,\n                    ),\n                ],\n            )\n        )\n\n    blockchain_test(\n        pre=pre,\n        blocks=blocks,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_beacon_root_transition","title":"test_beacon_root_transition(blockchain_test, pre, timestamps, beacon_roots, block_count, call_gas, call_value, fork)","text":"

    Tests the fork transition to cancun and verifies that blocks with timestamp lower than the transition timestamp do not contain beacon roots in the pre-deployed contract.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\n    \"timestamps\",\n    [pytest.param(count(start=1000, step=1000), id=\"fork_transition\")],\n)\n@pytest.mark.parametrize(\"block_count\", [20])\n@pytest.mark.valid_at_transition_to(\"Cancun\")\ndef test_beacon_root_transition(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    timestamps: Iterator[int],\n    beacon_roots: Iterator[bytes],\n    block_count: int,\n    call_gas: int,\n    call_value: int,\n    fork: Fork,\n):\n    \"\"\"\n    Tests the fork transition to cancun and verifies that blocks with timestamp lower than the\n    transition timestamp do not contain beacon roots in the pre-deployed contract.\n    \"\"\"\n    blocks: List[Block] = []\n    post = {}\n\n    timestamps_storage: Dict[int, int] = {}\n    roots_storage: Dict[int, bytes] = {}\n\n    all_timestamps: List[int] = []\n    timestamps_in_beacon_root_contract: List[int] = []\n\n    sender = pre.fund_eoa()\n\n    for timestamp, beacon_root, i in zip(timestamps, beacon_roots, range(block_count)):\n        timestamp_index = timestamp % Spec.HISTORY_BUFFER_LENGTH\n\n        transitioned = fork.header_beacon_root_required(i, timestamp)\n        if transitioned:\n            # We've transitioned, the current timestamp must contain a value in the contract\n            timestamps_in_beacon_root_contract.append(timestamp)\n            timestamps_storage[timestamp_index] = timestamp\n            roots_storage[timestamp_index] = beacon_root\n\n        all_timestamps.append(timestamp)\n\n        withdraw_index = count(0)\n\n        current_call_account_code = Bytecode()\n        current_call_account_expected_storage = Storage()\n\n        # We are going to call the beacon roots contract once for every timestamp of the current\n        # and all previous blocks, and check that the returned beacon root is correct only\n        # if it was after the transition timestamp.\n        for t in all_timestamps:\n            current_call_account_code += Op.MSTORE(0, t)\n            call_valid = (\n                t in timestamps_in_beacon_root_contract\n                and timestamp_index in timestamps_storage\n                and timestamps_storage[t % Spec.HISTORY_BUFFER_LENGTH] == t\n            )\n            current_call_account_code += Op.SSTORE(\n                current_call_account_expected_storage.store_next(0x01 if call_valid else 0x00),\n                Op.CALL(\n                    call_gas,\n                    Spec.BEACON_ROOTS_ADDRESS,\n                    call_value,\n                    0x00,\n                    0x20,\n                    0x20,\n                    0x20,\n                ),\n            )\n\n            current_call_account_code += Op.SSTORE(\n                current_call_account_expected_storage.store_next(\n                    roots_storage[t % Spec.HISTORY_BUFFER_LENGTH] if call_valid else 0x00\n                ),\n                Op.MLOAD(0x20),\n            )\n\n        current_call_account_address = pre.deploy_contract(current_call_account_code)\n        post[current_call_account_address] = Account(\n            storage=current_call_account_expected_storage,\n        )\n        blocks.append(\n            Block(\n                txs=[\n                    Transaction(\n                        sender=sender,\n                        to=current_call_account_address,\n                        data=Hash(timestamp),\n                        gas_limit=1_000_000,\n                    )\n                ],\n                parent_beacon_block_root=beacon_root if transitioned else None,\n                timestamp=timestamp,\n                withdrawals=[\n                    # Also withdraw to the beacon root contract and the system address\n                    Withdrawal(\n                        address=Spec.BEACON_ROOTS_ADDRESS,\n                        amount=1,\n                        index=next(withdraw_index),\n                        validator_index=0,\n                    ),\n                    Withdrawal(\n                        address=Spec.SYSTEM_ADDRESS,\n                        amount=1,\n                        index=next(withdraw_index),\n                        validator_index=1,\n                    ),\n                ],\n            )\n        )\n\n    blockchain_test(\n        pre=pre,\n        blocks=blocks,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_no_beacon_root_contract_at_transition","title":"test_no_beacon_root_contract_at_transition(blockchain_test, pre, beacon_roots, tx, timestamp, caller_address, fork)","text":"

    Tests the fork transition to cancun in the case where the beacon root pre-deploy was not deployed in time for the fork.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\"timestamp\", [15_000])\n@pytest.mark.valid_at_transition_to(\"Cancun\")\ndef test_no_beacon_root_contract_at_transition(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    beacon_roots: Iterator[bytes],\n    tx: Transaction,\n    timestamp: int,\n    caller_address: Address,\n    fork: Fork,\n):\n    \"\"\"\n    Tests the fork transition to cancun in the case where the beacon root pre-deploy was not\n    deployed in time for the fork.\n    \"\"\"\n    assert fork.header_beacon_root_required(1, timestamp)\n    blocks: List[Block] = [\n        Block(\n            txs=[tx],\n            parent_beacon_block_root=next(beacon_roots),\n            timestamp=timestamp,\n            withdrawals=[\n                # Also withdraw to the beacon root contract and the system address\n                Withdrawal(\n                    address=Spec.BEACON_ROOTS_ADDRESS,\n                    amount=1,\n                    index=0,\n                    validator_index=0,\n                ),\n                Withdrawal(\n                    address=Spec.SYSTEM_ADDRESS,\n                    amount=1,\n                    index=1,\n                    validator_index=1,\n                ),\n            ],\n        )\n    ]\n    pre[Spec.BEACON_ROOTS_ADDRESS] = Account(\n        code=b\"\",  # Remove the code that is automatically allocated on Cancun fork\n        nonce=0,\n        balance=0,\n    )\n    post = {\n        Spec.BEACON_ROOTS_ADDRESS: Account(\n            storage={\n                timestamp % Spec.HISTORY_BUFFER_LENGTH: 0,\n                (timestamp % Spec.HISTORY_BUFFER_LENGTH) + Spec.HISTORY_BUFFER_LENGTH: 0,\n            },\n            code=b\"\",\n            nonce=0,\n            balance=int(1e9),\n        ),\n        caller_address: Account(\n            storage={\n                0: 1\n            },  # Successful call because the contract is not there, but nothing else is stored\n        ),\n    }\n    blockchain_test(\n        pre=pre,\n        blocks=blocks,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_beacon_root_contract_deploy","title":"test_beacon_root_contract_deploy(blockchain_test, pre, beacon_root, tx, timestamp, post, fork)","text":"

    Tests the fork transition to cancun deploying the contract during Shanghai and verifying the code deployed and its functionality after Cancun.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\n    \"timestamp\",\n    [\n        pytest.param(15_000, id=\"deploy_on_shanghai\"),\n        pytest.param(30_000, id=\"deploy_on_cancun\"),\n    ],\n)\n@pytest.mark.valid_at_transition_to(\"Cancun\")\ndef test_beacon_root_contract_deploy(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    beacon_root: bytes,\n    tx: Transaction,\n    timestamp: int,\n    post: Dict,\n    fork: Fork,\n):\n    \"\"\"\n    Tests the fork transition to cancun deploying the contract during Shanghai and verifying the\n    code deployed and its functionality after Cancun.\n    \"\"\"\n    assert fork.header_beacon_root_required(1, timestamp)\n    tx_gas_limit = 0x3D090\n    tx_gas_price = 0xE8D4A51000\n    deployer_required_balance = tx_gas_limit * tx_gas_price\n    deploy_tx = Transaction(\n        ty=0,\n        nonce=0,\n        to=None,\n        gas_limit=tx_gas_limit,\n        gas_price=tx_gas_price,\n        value=0,\n        data=bytes.fromhex(\n            \"60618060095f395ff33373fffffffffffffffffffffffffffffffffffffffe14604d576020361460\"\n            \"24575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f526020\"\n            \"5ff35b5f5ffd5b62001fff42064281555f359062001fff015500\"\n        ),\n        v=0x1B,\n        r=0x539,\n        s=0x1B9B6EB1F0,\n        protected=False,\n    ).with_signature_and_sender()\n    deployer_address = deploy_tx.sender\n    assert deployer_address is not None\n    assert Address(deployer_address) == Spec.BEACON_ROOTS_DEPLOYER_ADDRESS\n    blocks: List[Block] = []\n\n    beacon_root_contract_storage: Dict = {}\n    for i, current_timestamp in enumerate(range(timestamp // 2, timestamp + 1, timestamp // 2)):\n        if i == 0:\n            blocks.append(\n                Block(  # Deployment block\n                    txs=[deploy_tx],\n                    parent_beacon_block_root=(\n                        beacon_root\n                        if fork.header_beacon_root_required(1, current_timestamp)\n                        else None\n                    ),\n                    timestamp=timestamp // 2,\n                    withdrawals=[\n                        # Also withdraw to the beacon root contract and the system address\n                        Withdrawal(\n                            address=Spec.BEACON_ROOTS_ADDRESS,\n                            amount=1,\n                            index=0,\n                            validator_index=0,\n                        ),\n                        Withdrawal(\n                            address=Spec.SYSTEM_ADDRESS,\n                            amount=1,\n                            index=1,\n                            validator_index=1,\n                        ),\n                    ],\n                )\n            )\n            beacon_root_contract_storage[current_timestamp % Spec.HISTORY_BUFFER_LENGTH] = 0\n            beacon_root_contract_storage[\n                (current_timestamp % Spec.HISTORY_BUFFER_LENGTH) + Spec.HISTORY_BUFFER_LENGTH\n            ] = 0\n        elif i == 1:\n            blocks.append(\n                Block(  # Contract already deployed\n                    txs=[tx],\n                    parent_beacon_block_root=beacon_root,\n                    timestamp=timestamp,\n                    withdrawals=[\n                        # Also withdraw to the beacon root contract and the system address\n                        Withdrawal(\n                            address=Spec.BEACON_ROOTS_ADDRESS,\n                            amount=1,\n                            index=2,\n                            validator_index=0,\n                        ),\n                        Withdrawal(\n                            address=Spec.SYSTEM_ADDRESS,\n                            amount=1,\n                            index=3,\n                            validator_index=1,\n                        ),\n                    ],\n                ),\n            )\n            beacon_root_contract_storage[\n                current_timestamp % Spec.HISTORY_BUFFER_LENGTH\n            ] = current_timestamp\n            beacon_root_contract_storage[\n                (current_timestamp % Spec.HISTORY_BUFFER_LENGTH) + Spec.HISTORY_BUFFER_LENGTH\n            ] = beacon_root\n        else:\n            assert False, \"This test should only have two blocks\"\n\n    expected_code = fork.pre_allocation_blockchain()[Spec.BEACON_ROOTS_ADDRESS][\"code\"]\n    pre[Spec.BEACON_ROOTS_ADDRESS] = Account(\n        code=b\"\",  # Remove the code that is automatically allocated on Cancun fork\n        nonce=0,\n        balance=0,\n    )\n    pre[deployer_address] = Account(\n        balance=deployer_required_balance,\n    )\n\n    post[Spec.BEACON_ROOTS_ADDRESS] = Account(\n        storage=beacon_root_contract_storage,\n        code=expected_code,\n        nonce=1,\n        balance=int(2e9),\n    )\n    post[Spec.SYSTEM_ADDRESS] = Account(\n        storage={},\n        code=b\"\",\n        nonce=0,\n        balance=int(2e9),\n    )\n    post[deployer_address] = Account(\n        balance=175916000000000000,  # It doesn't consume all the balance :(\n        nonce=1,\n    )\n    blockchain_test(\n        pre=pre,\n        blocks=blocks,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/index/test_cases/","title":"Test Beacon Root Contract - Test Cases","text":"

    Test cases generated from tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py

    Parametrized test cases generated from the test module tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py:

    test_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALL-call_value_1-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALL-call_value_1-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALL-call_value_0-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALL-call_value_0-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALLCODE-call_value_0-valid_input_False-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALLCODE-call_value_0-valid_input_False-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_DELEGATECALL-call_value_0-valid_input_False-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_DELEGATECALL-call_value_0-valid_input_False-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_STATICCALL-call_value_0-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_STATICCALL-call_value_0-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test_engine-call_type_CALL-call_value_1-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test_engine-call_type_CALL-call_value_1-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test_engine-call_type_CALL-call_value_0-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test_engine-call_type_CALL-call_value_0-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test_engine-call_type_CALLCODE-call_value_0-valid_input_False-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test_engine-call_type_CALLCODE-call_value_0-valid_input_False-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test_engine-call_type_DELEGATECALL-call_value_0-valid_input_False-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test_engine-call_type_DELEGATECALL-call_value_0-valid_input_False-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test_engine-call_type_STATICCALL-call_value_0-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test_engine-call_type_STATICCALL-call_value_0-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test-call_type_CALL-call_value_1-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test-call_type_CALL-call_value_1-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test-call_type_CALL-call_value_0-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test-call_type_CALL-call_value_0-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test-call_type_CALLCODE-call_value_0-valid_input_False-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test-call_type_CALLCODE-call_value_0-valid_input_False-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test-call_type_DELEGATECALL-call_value_0-valid_input_False-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test-call_type_DELEGATECALL-call_value_0-valid_input_False-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test-call_type_STATICCALL-call_value_0-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test-call_type_STATICCALL-call_value_0-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test_engine-call_type_CALL-call_value_1-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test_engine-call_type_CALL-call_value_1-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test_engine-call_type_CALL-call_value_0-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test_engine-call_type_CALL-call_value_0-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test_engine-call_type_CALLCODE-call_value_0-valid_input_False-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test_engine-call_type_CALLCODE-call_value_0-valid_input_False-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test_engine-call_type_DELEGATECALL-call_value_0-valid_input_False-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test_engine-call_type_DELEGATECALL-call_value_0-valid_input_False-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test_engine-call_type_STATICCALL-call_value_0-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test_engine-call_type_STATICCALL-call_value_0-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-empty_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-empty_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-empty_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-empty_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-empty_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-empty_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-empty_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-empty_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_wei_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_wei_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_wei_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_wei_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_wei_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_wei_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_wei_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_wei_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_eth_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_eth_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_eth_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_eth_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_eth_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_eth_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_eth_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_eth_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-empty_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-empty_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-empty_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-empty_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-empty_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-empty_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-empty_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-empty_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_wei_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_wei_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_wei_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_wei_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_wei_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_wei_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_wei_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_wei_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_eth_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_eth_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_eth_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_eth_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_eth_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_eth_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_eth_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_eth_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-empty_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-empty_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-empty_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-empty_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-empty_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-empty_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-empty_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-empty_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_wei_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_wei_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_wei_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_wei_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_wei_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_wei_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_wei_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_wei_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_eth_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_eth_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_eth_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_eth_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_eth_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_eth_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_eth_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_eth_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_calldata_lengths[fork_Cancun-blockchain_test-timestamp_12-valid_call_False-valid_input_False-empty_calldata]\ntest_calldata_lengths[fork_Cancun-blockchain_test-timestamp_12-valid_call_False-valid_input_False-one_byte]\ntest_calldata_lengths[fork_Cancun-blockchain_test-timestamp_12-valid_call_False-valid_input_False-31_bytes]\ntest_calldata_lengths[fork_Cancun-blockchain_test-timestamp_12-valid_call_False-valid_input_False-33_bytes]\ntest_calldata_lengths[fork_Cancun-blockchain_test-timestamp_12-valid_call_False-valid_input_False-1024_bytes]\ntest_calldata_lengths[fork_Cancun-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-empty_calldata]\ntest_calldata_lengths[fork_Cancun-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-one_byte]\ntest_calldata_lengths[fork_Cancun-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-31_bytes]\ntest_calldata_lengths[fork_Cancun-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-33_bytes]\ntest_calldata_lengths[fork_Cancun-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-1024_bytes]\ntest_calldata_lengths[fork_Prague-blockchain_test-timestamp_12-valid_call_False-valid_input_False-empty_calldata]\ntest_calldata_lengths[fork_Prague-blockchain_test-timestamp_12-valid_call_False-valid_input_False-one_byte]\ntest_calldata_lengths[fork_Prague-blockchain_test-timestamp_12-valid_call_False-valid_input_False-31_bytes]\ntest_calldata_lengths[fork_Prague-blockchain_test-timestamp_12-valid_call_False-valid_input_False-33_bytes]\ntest_calldata_lengths[fork_Prague-blockchain_test-timestamp_12-valid_call_False-valid_input_False-1024_bytes]\ntest_calldata_lengths[fork_Prague-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-empty_calldata]\ntest_calldata_lengths[fork_Prague-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-one_byte]\ntest_calldata_lengths[fork_Prague-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-31_bytes]\ntest_calldata_lengths[fork_Prague-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-33_bytes]\ntest_calldata_lengths[fork_Prague-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-1024_bytes]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_False-beacon_root_12-timestamp_12]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_False-beacon_root_4294967296-timestamp_4294967296]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_False-beacon_root_18446744073709551614-timestamp_18446744073709551614]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_False-beacon_root_18446744073709551615-timestamp_18446744073709551615]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_True-beacon_root_12-timestamp_12]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_True-beacon_root_4294967296-timestamp_4294967296]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_True-beacon_root_18446744073709551614-timestamp_18446744073709551614]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_True-beacon_root_18446744073709551615-timestamp_18446744073709551615]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test_engine-auto_access_list_False-beacon_root_12-timestamp_12]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test_engine-auto_access_list_False-beacon_root_4294967296-timestamp_4294967296]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test_engine-auto_access_list_False-beacon_root_18446744073709551614-timestamp_18446744073709551614]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test_engine-auto_access_list_False-beacon_root_18446744073709551615-timestamp_18446744073709551615]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test_engine-auto_access_list_True-beacon_root_12-timestamp_12]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test_engine-auto_access_list_True-beacon_root_4294967296-timestamp_4294967296]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test_engine-auto_access_list_True-beacon_root_18446744073709551614-timestamp_18446744073709551614]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test_engine-auto_access_list_True-beacon_root_18446744073709551615-timestamp_18446744073709551615]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test-auto_access_list_False-beacon_root_12-timestamp_12]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test-auto_access_list_False-beacon_root_4294967296-timestamp_4294967296]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test-auto_access_list_False-beacon_root_18446744073709551614-timestamp_18446744073709551614]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test-auto_access_list_False-beacon_root_18446744073709551615-timestamp_18446744073709551615]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test-auto_access_list_True-beacon_root_12-timestamp_12]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test-auto_access_list_True-beacon_root_4294967296-timestamp_4294967296]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test-auto_access_list_True-beacon_root_18446744073709551614-timestamp_18446744073709551614]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test-auto_access_list_True-beacon_root_18446744073709551615-timestamp_18446744073709551615]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test_engine-auto_access_list_False-beacon_root_12-timestamp_12]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test_engine-auto_access_list_False-beacon_root_4294967296-timestamp_4294967296]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test_engine-auto_access_list_False-beacon_root_18446744073709551614-timestamp_18446744073709551614]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test_engine-auto_access_list_False-beacon_root_18446744073709551615-timestamp_18446744073709551615]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test_engine-auto_access_list_True-beacon_root_12-timestamp_12]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test_engine-auto_access_list_True-beacon_root_4294967296-timestamp_4294967296]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test_engine-auto_access_list_True-beacon_root_18446744073709551614-timestamp_18446744073709551614]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test_engine-auto_access_list_True-beacon_root_18446744073709551615-timestamp_18446744073709551615]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_3-blockchain_test-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_3-blockchain_test-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_3-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_3-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_2-blockchain_test-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_2-blockchain_test-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_2-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_2-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_1-blockchain_test-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_1-blockchain_test-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_1-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_1-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_0-blockchain_test-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_0-blockchain_test-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_0-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_0-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_3-blockchain_test-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_3-blockchain_test-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_3-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_3-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_2-blockchain_test-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_2-blockchain_test-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_2-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_2-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_1-blockchain_test-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_1-blockchain_test-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_1-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_1-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_0-blockchain_test-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_0-blockchain_test-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_0-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_0-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_True]\ntest_invalid_beacon_root_calldata_value[fork_Cancun-blockchain_test-timestamp_12-valid_call_False-valid_input_False-zero_calldata]\ntest_invalid_beacon_root_calldata_value[fork_Cancun-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-zero_calldata]\ntest_invalid_beacon_root_calldata_value[fork_Prague-blockchain_test-timestamp_12-valid_call_False-valid_input_False-zero_calldata]\ntest_invalid_beacon_root_calldata_value[fork_Prague-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-zero_calldata]\ntest_beacon_root_selfdestruct[fork_Cancun-blockchain_test-timestamp_12]\ntest_beacon_root_selfdestruct[fork_Cancun-blockchain_test_engine-timestamp_12]\ntest_beacon_root_selfdestruct[fork_Prague-blockchain_test-timestamp_12]\ntest_beacon_root_selfdestruct[fork_Prague-blockchain_test_engine-timestamp_12]\ntest_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test-block_count_10-buffer_wraparound]\ntest_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test-block_count_10-buffer_wraparound_overwrite]\ntest_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test-block_count_10-buffer_wraparound_overwrite_high_timestamp]\ntest_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test-block_count_10-buffer_wraparound_no_overwrite]\ntest_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test-block_count_10-buffer_wraparound_no_overwrite_2]\ntest_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test_engine-block_count_10-buffer_wraparound]\ntest_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test_engine-block_count_10-buffer_wraparound_overwrite]\ntest_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test_engine-block_count_10-buffer_wraparound_overwrite_high_timestamp]\ntest_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test_engine-block_count_10-buffer_wraparound_no_overwrite]\ntest_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test_engine-block_count_10-buffer_wraparound_no_overwrite_2]\ntest_multi_block_beacon_root_timestamp_calls[fork_Prague-blockchain_test-block_count_10-buffer_wraparound]\ntest_multi_block_beacon_root_timestamp_calls[fork_Prague-blockchain_test-block_count_10-buffer_wraparound_overwrite]\ntest_multi_block_beacon_root_timestamp_calls[fork_Prague-blockchain_test-block_count_10-buffer_wraparound_overwrite_high_timestamp]\ntest_multi_block_beacon_root_timestamp_calls[fork_Prague-blockchain_test-block_count_10-buffer_wraparound_no_overwrite]\ntest_multi_block_beacon_root_timestamp_calls[fork_Prague-blockchain_test-block_count_10-buffer_wraparound_no_overwrite_2]\ntest_multi_block_beacon_root_timestamp_calls[fork_Prague-blockchain_test_engine-block_count_10-buffer_wraparound]\ntest_multi_block_beacon_root_timestamp_calls[fork_Prague-blockchain_test_engine-block_count_10-buffer_wraparound_overwrite]\ntest_multi_block_beacon_root_timestamp_calls[fork_Prague-blockchain_test_engine-block_count_10-buffer_wraparound_overwrite_high_timestamp]\ntest_multi_block_beacon_root_timestamp_calls[fork_Prague-blockchain_test_engine-block_count_10-buffer_wraparound_no_overwrite]\ntest_multi_block_beacon_root_timestamp_calls[fork_Prague-blockchain_test_engine-block_count_10-buffer_wraparound_no_overwrite_2]\ntest_beacon_root_transition[fork_ShanghaiToCancunAtTime15k-blockchain_test-block_count_20-fork_transition]\ntest_beacon_root_transition[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-block_count_20-fork_transition]\ntest_no_beacon_root_contract_at_transition[fork_ShanghaiToCancunAtTime15k-blockchain_test-timestamp_15000]\ntest_no_beacon_root_contract_at_transition[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-timestamp_15000]\ntest_beacon_root_contract_deploy[fork_ShanghaiToCancunAtTime15k-blockchain_test-deploy_on_shanghai]\ntest_beacon_root_contract_deploy[fork_ShanghaiToCancunAtTime15k-blockchain_test-deploy_on_cancun]\ntest_beacon_root_contract_deploy[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-deploy_on_shanghai]\ntest_beacon_root_contract_deploy[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-deploy_on_cancun]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py\n
    "},{"location":"tests/cancun/eip4844_blobs/","title":"EIP-4844 Blobs","text":"

    Documentation for tests/cancun/eip4844_blobs.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs\n

    Cross-client EIP-4844 Tests

    "},{"location":"tests/cancun/eip4844_blobs/point_evaluation_vectors/README_./","title":"KZG Point Evaluation Test Vectors","text":"

    This directory contains test vectors for the KZG point evaluation algorithm that are loaded and used throughout different tests.

    Each file must contain a JSON list of objects, each with the following fields:

    • name: a string describing the test case
    • input: object containing commitment, proof, z and y
    • output: expected output of the evaluation, true, false or null.
    "},{"location":"tests/cancun/eip4844_blobs/point_evaluation_vectors/README_./#generating-the-test-vectors-used-in-v106-and-on","title":"Generating The Test Vectors (used in v1.0.6 and on)","text":"

    From execution-spec-tests release v1.0.6 and on, the point evaluation test vectors were generated using commit 63aa303c from the official-kzg consensus-specs branch.

    The test vectors were generated as following:

    1. In the consensus-specs repo:

      cd tests/generators/kzg_4844/\nrm -rf /tmp/kzg_4844_output\nmkdir /tmp/kzg_4844_output\npython -m main --output /tmp/kzg_4844_output\n
    2. In the execution-spec-tests repo:

      cd tests/cancun/4844_blobs/point_evaluation_vectors/\npip install -r requirements.txt\npython concat_kzg_vectors_to_json.py \\\n    --input /tmp/kzg_4844_output/general/deneb/kzg/verify_kzg_proof/kzg-mainnet/\n    --output go_kzg_4844_verify_kzg_proof.json\n
    "},{"location":"tests/cancun/eip4844_blobs/point_evaluation_vectors/README_./#previous-versions-of-the-test-vectors-used-up-to-v105","title":"Previous Versions of the Test Vectors (used up to v1.0.5)","text":"

    The test vectors up and including execution-spec-tests release v1.0.5 were: - go_kzg_4844_verify_kzg_proof.json: test vectors from the go-kzg-4844 repository.

    "},{"location":"tests/cancun/eip4844_blobs/spec/","title":"Spec","text":"

    Documentation for tests/cancun/eip4844_blobs/spec.py.

    Defines EIP-4844 specification constants and functions.

    "},{"location":"tests/cancun/eip4844_blobs/spec/#tests.cancun.eip4844_blobs.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-4844 specifications as defined at https://eips.ethereum.org/EIPS/eip-4844#parameters

    If the parameter is not currently used within the tests, it is commented out.

    Source code in tests/cancun/eip4844_blobs/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-4844 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-4844#parameters\n\n    If the parameter is not currently used within the tests, it is commented\n    out.\n    \"\"\"\n\n    BLOB_TX_TYPE = 0x03\n    FIELD_ELEMENTS_PER_BLOB = 4096\n    BLS_MODULUS = 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFF00000001\n    BLOB_COMMITMENT_VERSION_KZG = 1\n    POINT_EVALUATION_PRECOMPILE_ADDRESS = 10\n    POINT_EVALUATION_PRECOMPILE_GAS = 50_000\n    MAX_BLOB_GAS_PER_BLOCK = 786432\n    TARGET_BLOB_GAS_PER_BLOCK = 393216\n    MIN_BLOB_GASPRICE = 1\n    BLOB_GASPRICE_UPDATE_FRACTION = 3338477\n    # MAX_VERSIONED_HASHES_LIST_SIZE = 2**24\n    # MAX_CALLDATA_SIZE = 2**24\n    # MAX_ACCESS_LIST_SIZE = 2**24\n    # MAX_ACCESS_LIST_STORAGE_KEYS = 2**24\n    # MAX_TX_WRAP_COMMITMENTS = 2**12\n    # LIMIT_BLOBS_PER_TX = 2**12\n    GAS_PER_BLOB = 2**17\n    HASH_OPCODE_BYTE = 0x49\n    HASH_GAS_COST = 3\n\n    @classmethod\n    def kzg_to_versioned_hash(\n        cls,\n        kzg_commitment: bytes | int,  # 48 bytes\n        blob_commitment_version_kzg: Optional[bytes | int] = None,\n    ) -> bytes:\n        \"\"\"\n        Calculates the versioned hash for a given KZG commitment.\n        \"\"\"\n        if blob_commitment_version_kzg is None:\n            blob_commitment_version_kzg = cls.BLOB_COMMITMENT_VERSION_KZG\n        if isinstance(kzg_commitment, int):\n            kzg_commitment = kzg_commitment.to_bytes(48, \"big\")\n        if isinstance(blob_commitment_version_kzg, int):\n            blob_commitment_version_kzg = blob_commitment_version_kzg.to_bytes(1, \"big\")\n        return blob_commitment_version_kzg + sha256(kzg_commitment).digest()[1:]\n\n    @classmethod\n    def fake_exponential(cls, factor: int, numerator: int, denominator: int) -> int:\n        \"\"\"\n        Used to calculate the blob gas cost.\n        \"\"\"\n        i = 1\n        output = 0\n        numerator_accumulator = factor * denominator\n        while numerator_accumulator > 0:\n            output += numerator_accumulator\n            numerator_accumulator = (numerator_accumulator * numerator) // (denominator * i)\n            i += 1\n        return output // denominator\n\n    @classmethod\n    def calc_excess_blob_gas(cls, parent: BlockHeaderBlobGasFields) -> int:\n        \"\"\"\n        Calculate the excess blob gas for a block given the excess blob gas\n        and blob gas used from the parent block header.\n        \"\"\"\n        if parent.excess_blob_gas + parent.blob_gas_used < cls.TARGET_BLOB_GAS_PER_BLOCK:\n            return 0\n        else:\n            return parent.excess_blob_gas + parent.blob_gas_used - cls.TARGET_BLOB_GAS_PER_BLOCK\n\n    @classmethod\n    def get_total_blob_gas(cls, tx: Transaction) -> int:\n        \"\"\"\n        Calculate the total blob gas for a transaction.\n        \"\"\"\n        if tx.blob_versioned_hashes is None:\n            return 0\n        return cls.GAS_PER_BLOB * len(tx.blob_versioned_hashes)\n\n    @classmethod\n    def get_blob_gasprice(cls, *, excess_blob_gas: int) -> int:\n        \"\"\"\n        Calculate the blob gas price from the excess.\n        \"\"\"\n        return cls.fake_exponential(\n            cls.MIN_BLOB_GASPRICE,\n            excess_blob_gas,\n            cls.BLOB_GASPRICE_UPDATE_FRACTION,\n        )\n
    "},{"location":"tests/cancun/eip4844_blobs/spec/#tests.cancun.eip4844_blobs.spec.SpecHelpers","title":"SpecHelpers dataclass","text":"

    Define parameters and helper functions that are tightly coupled to the 4844 spec but not strictly part of it.

    Source code in tests/cancun/eip4844_blobs/spec.py
    @dataclass(frozen=True)\nclass SpecHelpers:\n    \"\"\"\n    Define parameters and helper functions that are tightly coupled to the 4844\n    spec but not strictly part of it.\n    \"\"\"\n\n    BYTES_PER_FIELD_ELEMENT = 32\n\n    @classmethod\n    def max_blobs_per_block(cls) -> int:  # MAX_BLOBS_PER_BLOCK =\n        \"\"\"\n        Returns the maximum number of blobs per block.\n        \"\"\"\n        return Spec.MAX_BLOB_GAS_PER_BLOCK // Spec.GAS_PER_BLOB\n\n    @classmethod\n    def target_blobs_per_block(cls) -> int:\n        \"\"\"\n        Returns the target number of blobs per block.\n        \"\"\"\n        return Spec.TARGET_BLOB_GAS_PER_BLOCK // Spec.GAS_PER_BLOB\n\n    @classmethod\n    def calc_excess_blob_gas_from_blob_count(\n        cls, parent_excess_blob_gas: int, parent_blob_count: int\n    ) -> int:\n        \"\"\"\n        Calculate the excess blob gas for a block given the parent excess blob gas\n        and the number of blobs in the block.\n        \"\"\"\n        parent_consumed_blob_gas = parent_blob_count * Spec.GAS_PER_BLOB\n        return Spec.calc_excess_blob_gas(\n            BlockHeaderBlobGasFields(parent_excess_blob_gas, parent_consumed_blob_gas)\n        )\n\n    @classmethod\n    def get_min_excess_blob_gas_for_blob_gas_price(cls, blob_gas_price: int) -> int:\n        \"\"\"\n        Gets the minimum required excess blob gas value to get a given blob gas cost in a block\n        \"\"\"\n        current_excess_blob_gas = 0\n        current_blob_gas_price = 1\n        while current_blob_gas_price < blob_gas_price:\n            current_excess_blob_gas += Spec.GAS_PER_BLOB\n            current_blob_gas_price = Spec.get_blob_gasprice(\n                excess_blob_gas=current_excess_blob_gas\n            )\n        return current_excess_blob_gas\n\n    @classmethod\n    def get_min_excess_blobs_for_blob_gas_price(cls, blob_gas_price: int) -> int:\n        \"\"\"\n        Gets the minimum required excess blobs to get a given blob gas cost in a block\n        \"\"\"\n        return cls.get_min_excess_blob_gas_for_blob_gas_price(blob_gas_price) // Spec.GAS_PER_BLOB\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/","title":"Test Blob Txs","text":"

    Documentation for tests/cancun/eip4844_blobs/test_blob_txs.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_blob_txs.py\n
    Tests blob type transactions for EIP-4844: Shard Blob Transactions

    Test blob type transactions for EIP-4844: Shard Blob Transactions.

    Adding a new test

    Add a function that is named test_<test_name> and takes at least the following arguments:

    • blockchain_test or state_test
    • pre
    • env
    • block or txs

    All other pytest.fixture fixtures can be parametrized to generate new combinations and test cases.

    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_valid_blob_tx_combinations","title":"test_valid_blob_tx_combinations(blockchain_test, pre, env, block)","text":"

    Test all valid blob combinations in a single block, assuming a given value of MAX_BLOBS_PER_BLOCK.

    This assumes a block can include from 1 and up to MAX_BLOBS_PER_BLOCK transactions where all transactions contain at least 1 blob, and the sum of all blobs in a block is at most MAX_BLOBS_PER_BLOCK.

    This test is parametrized with all valid blob transaction combinations for a given block, and therefore if value of MAX_BLOBS_PER_BLOCK changes, this test is automatically updated.

    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"blobs_per_tx\",\n    all_valid_blob_combinations(),\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_valid_blob_tx_combinations(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    env: Environment,\n    block: Block,\n):\n    \"\"\"\n    Test all valid blob combinations in a single block, assuming a given value of\n    `MAX_BLOBS_PER_BLOCK`.\n\n    This assumes a block can include from 1 and up to `MAX_BLOBS_PER_BLOCK` transactions where all\n    transactions contain at least 1 blob, and the sum of all blobs in a block is at\n    most `MAX_BLOBS_PER_BLOCK`.\n\n    This test is parametrized with all valid blob transaction combinations for a given block, and\n    therefore if value of `MAX_BLOBS_PER_BLOCK` changes, this test is automatically updated.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=[block],\n        genesis_environment=env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_invalid_tx_max_fee_per_blob_gas","title":"test_invalid_tx_max_fee_per_blob_gas(blockchain_test, pre, env, block, non_zero_blob_gas_used_genesis_block)","text":"

    Reject blocks with invalid blob txs due to:

    • tx max_fee_per_blob_gas is barely not enough
    • tx max_fee_per_blob_gas is zero
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"parent_excess_blobs,parent_blobs,tx_max_fee_per_blob_gas,tx_error\",\n    [\n        # tx max_blob_gas_cost of the transaction is not enough\n        pytest.param(\n            SpecHelpers.get_min_excess_blobs_for_blob_gas_price(2) - 1,  # blob gas price is 1\n            SpecHelpers.target_blobs_per_block() + 1,  # blob gas cost increases to 2\n            1,  # tx max_blob_gas_cost is 1\n            TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS,\n            id=\"insufficient_max_fee_per_blob_gas\",\n        ),\n        # tx max_blob_gas_cost of the transaction is zero, which is invalid\n        pytest.param(\n            0,  # blob gas price is 1\n            0,  # blob gas cost stays put at 1\n            0,  # tx max_blob_gas_cost is 0\n            TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS,\n            id=\"invalid_max_fee_per_blob_gas\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\n    \"account_balance_modifier\",\n    [1_000_000_000],\n)  # Extra balance to cover block blob gas cost\n@pytest.mark.valid_from(\"Cancun\")\ndef test_invalid_tx_max_fee_per_blob_gas(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    env: Environment,\n    block: Block,\n    non_zero_blob_gas_used_genesis_block: Optional[Block],\n):\n    \"\"\"\n    Reject blocks with invalid blob txs due to:\n\n    - tx max_fee_per_blob_gas is barely not enough\n    - tx max_fee_per_blob_gas is zero\n    \"\"\"\n    if non_zero_blob_gas_used_genesis_block is not None:\n        blocks = [non_zero_blob_gas_used_genesis_block, block]\n    else:\n        blocks = [block]\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_invalid_tx_max_fee_per_blob_gas_state","title":"test_invalid_tx_max_fee_per_blob_gas_state(state_test_only, state_env, pre, txs)","text":"

    Reject an invalid blob transaction due to:

    • tx max_fee_per_blob_gas is barely not enough
    • tx max_fee_per_blob_gas is zero
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"parent_excess_blobs,parent_blobs,tx_max_fee_per_blob_gas,tx_error\",\n    [\n        # tx max_blob_gas_cost of the transaction is not enough\n        pytest.param(\n            SpecHelpers.get_min_excess_blobs_for_blob_gas_price(2) - 1,  # blob gas price is 1\n            SpecHelpers.target_blobs_per_block() + 1,  # blob gas cost increases to 2\n            1,  # tx max_blob_gas_cost is 1\n            TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS,\n            id=\"insufficient_max_fee_per_blob_gas\",\n        ),\n        # tx max_blob_gas_cost of the transaction is zero, which is invalid\n        pytest.param(\n            0,  # blob gas price is 1\n            0,  # blob gas cost stays put at 1\n            0,  # tx max_blob_gas_cost is 0\n            TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS,\n            id=\"invalid_max_fee_per_blob_gas\",\n        ),\n    ],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_invalid_tx_max_fee_per_blob_gas_state(\n    state_test_only: StateTestFiller,\n    state_env: Environment,\n    pre: Alloc,\n    txs: List[Transaction],\n):\n    \"\"\"\n    Reject an invalid blob transaction due to:\n\n    - tx max_fee_per_blob_gas is barely not enough\n    - tx max_fee_per_blob_gas is zero\n    \"\"\"\n    assert len(txs) == 1\n    state_test_only(\n        pre=pre,\n        post={},\n        tx=txs[0],\n        env=state_env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_invalid_normal_gas","title":"test_invalid_normal_gas(state_test, state_env, pre, txs, header_verify, rlp_modifier)","text":"

    Reject an invalid blob transaction due to:

    • Sufficient max fee per blob gas, but insufficient max fee per gas
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"tx_max_fee_per_gas,tx_error\",\n    [\n        # max blob gas is ok, but max fee per gas is less than base fee per gas\n        (\n            6,\n            TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS,\n        ),\n    ],\n    ids=[\"insufficient_max_fee_per_gas\"],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_invalid_normal_gas(\n    state_test: StateTestFiller,\n    state_env: Environment,\n    pre: Alloc,\n    txs: List[Transaction],\n    header_verify: Optional[Header],\n    rlp_modifier: Optional[Header],\n):\n    \"\"\"\n    Reject an invalid blob transaction due to:\n\n    - Sufficient max fee per blob gas, but insufficient max fee per gas\n    \"\"\"\n    assert len(txs) == 1\n    state_test(\n        pre=pre,\n        post={},\n        tx=txs[0],\n        env=state_env,\n        blockchain_test_header_verify=header_verify,\n        blockchain_test_rlp_modifier=rlp_modifier,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_invalid_block_blob_count","title":"test_invalid_block_blob_count(blockchain_test, pre, env, block)","text":"

    Test all invalid blob combinations in a single block, where the sum of all blobs in a block is at MAX_BLOBS_PER_BLOCK + 1.

    This test is parametrized with all blob transaction combinations exceeding MAX_BLOBS_PER_BLOCK by one for a given block, and therefore if value of MAX_BLOBS_PER_BLOCK changes, this test is automatically updated.

    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"blobs_per_tx\",\n    invalid_blob_combinations(),\n)\n@pytest.mark.parametrize(\n    \"tx_error\", [TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED], ids=[\"\"]\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_invalid_block_blob_count(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    env: Environment,\n    block: Block,\n):\n    \"\"\"\n    Test all invalid blob combinations in a single block, where the sum of all blobs in a block is\n    at `MAX_BLOBS_PER_BLOCK + 1`.\n\n    This test is parametrized with all blob transaction combinations exceeding\n    `MAX_BLOBS_PER_BLOCK` by one for a given block, and\n    therefore if value of `MAX_BLOBS_PER_BLOCK` changes, this test is automatically updated.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=[block],\n        genesis_environment=env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_insufficient_balance_blob_tx","title":"test_insufficient_balance_blob_tx(state_test, state_env, pre, txs)","text":"

    Reject blocks where user cannot afford the blob gas specified (but max_fee_per_gas would be enough for current block), including:

    • Transactions with max fee equal or higher than current block base fee
    • Transactions with and without priority fee
    • Transactions with and without value
    • Transactions with and without calldata
    • Transactions with max fee per blob gas lower or higher than the priority fee
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"tx_access_list\",\n    [[], [AccessList(address=100, storage_keys=[100, 200])]],\n    ids=[\"no_access_list\", \"access_list\"],\n)\n@pytest.mark.parametrize(\"tx_max_fee_per_gas\", [7, 14])\n@pytest.mark.parametrize(\"tx_max_priority_fee_per_gas\", [0, 7])\n@pytest.mark.parametrize(\"tx_value\", [0, 1])\n@pytest.mark.parametrize(\n    \"tx_calldata\",\n    [b\"\", b\"\\x00\", b\"\\x01\"],\n    ids=[\"no_calldata\", \"single_zero_calldata\", \"single_one_calldata\"],\n)\n@pytest.mark.parametrize(\"tx_max_fee_per_blob_gas\", [1, 100, 10000])\n@pytest.mark.parametrize(\"account_balance_modifier\", [-1], ids=[\"exact_balance_minus_1\"])\n@pytest.mark.parametrize(\"tx_error\", [TransactionException.INSUFFICIENT_ACCOUNT_FUNDS], ids=[\"\"])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_insufficient_balance_blob_tx(\n    state_test: StateTestFiller,\n    state_env: Environment,\n    pre: Alloc,\n    txs: List[Transaction],\n):\n    \"\"\"\n    Reject blocks where user cannot afford the blob gas specified (but\n    max_fee_per_gas would be enough for current block), including:\n\n    - Transactions with max fee equal or higher than current block base fee\n    - Transactions with and without priority fee\n    - Transactions with and without value\n    - Transactions with and without calldata\n    - Transactions with max fee per blob gas lower or higher than the priority fee\n    \"\"\"\n    assert len(txs) == 1\n    state_test(\n        pre=pre,\n        post={},\n        tx=txs[0],\n        env=state_env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_sufficient_balance_blob_tx","title":"test_sufficient_balance_blob_tx(state_test, state_env, pre, txs)","text":"

    Check that transaction is accepted when user can exactly afford the blob gas specified (and max_fee_per_gas would be enough for current block), including:

    • Transactions with max fee equal or higher than current block base fee
    • Transactions with and without priority fee
    • Transactions with and without value
    • Transactions with and without calldata
    • Transactions with max fee per blob gas lower or higher than the priority fee
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"tx_access_list\",\n    [[], [AccessList(address=100, storage_keys=[100, 200])]],\n    ids=[\"no_access_list\", \"access_list\"],\n)\n@pytest.mark.parametrize(\"tx_max_fee_per_gas\", [7, 14])\n@pytest.mark.parametrize(\"tx_max_priority_fee_per_gas\", [0, 7])\n@pytest.mark.parametrize(\"tx_value\", [0, 1])\n@pytest.mark.parametrize(\n    \"tx_calldata\",\n    [b\"\", b\"\\x00\", b\"\\x01\"],\n    ids=[\"no_calldata\", \"single_zero_calldata\", \"single_one_calldata\"],\n)\n@pytest.mark.parametrize(\"tx_max_fee_per_blob_gas\", [1, 100, 10000])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_sufficient_balance_blob_tx(\n    state_test: StateTestFiller,\n    state_env: Environment,\n    pre: Alloc,\n    txs: List[Transaction],\n):\n    \"\"\"\n    Check that transaction is accepted when user can exactly afford the blob gas specified (and\n    max_fee_per_gas would be enough for current block), including:\n\n    - Transactions with max fee equal or higher than current block base fee\n    - Transactions with and without priority fee\n    - Transactions with and without value\n    - Transactions with and without calldata\n    - Transactions with max fee per blob gas lower or higher than the priority fee\n    \"\"\"\n    assert len(txs) == 1\n    state_test(\n        pre=pre,\n        post={},\n        tx=txs[0],\n        env=state_env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_sufficient_balance_blob_tx_pre_fund_tx","title":"test_sufficient_balance_blob_tx_pre_fund_tx(blockchain_test, total_account_minimum_balance, sender, env, pre, txs, header_verify)","text":"

    Check that transaction is accepted when user can exactly afford the blob gas specified (and max_fee_per_gas would be enough for current block) because a funding transaction is prepended in the same block, including:

    • Transactions with max fee equal or higher than current block base fee
    • Transactions with and without priority fee
    • Transactions with and without value
    • Transactions with and without calldata
    • Transactions with max fee per blob gas lower or higher than the priority fee
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"tx_access_list\",\n    [[], [AccessList(address=100, storage_keys=[100, 200])]],\n    ids=[\"no_access_list\", \"access_list\"],\n)\n@pytest.mark.parametrize(\"tx_max_fee_per_gas\", [7, 14])\n@pytest.mark.parametrize(\"tx_max_priority_fee_per_gas\", [0, 7])\n@pytest.mark.parametrize(\"tx_value\", [0, 1])\n@pytest.mark.parametrize(\n    \"tx_calldata\",\n    [b\"\", b\"\\x00\", b\"\\x01\"],\n    ids=[\"no_calldata\", \"single_zero_calldata\", \"single_one_calldata\"],\n)\n@pytest.mark.parametrize(\"tx_max_fee_per_blob_gas\", [1, 100, 10000])\n@pytest.mark.parametrize(\"sender_initial_balance\", [0])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_sufficient_balance_blob_tx_pre_fund_tx(\n    blockchain_test: BlockchainTestFiller,\n    total_account_minimum_balance: int,\n    sender: EOA,\n    env: Environment,\n    pre: Alloc,\n    txs: List[Transaction],\n    header_verify: Optional[Header],\n):\n    \"\"\"\n    Check that transaction is accepted when user can exactly afford the blob gas specified (and\n    max_fee_per_gas would be enough for current block) because a funding transaction is\n    prepended in the same block, including:\n\n    - Transactions with max fee equal or higher than current block base fee\n    - Transactions with and without priority fee\n    - Transactions with and without value\n    - Transactions with and without calldata\n    - Transactions with max fee per blob gas lower or higher than the priority fee\n    \"\"\"\n    pre_funding_sender = pre.fund_eoa(amount=(21_000 * 100) + total_account_minimum_balance)\n    txs = [\n        Transaction(\n            sender=pre_funding_sender,\n            to=sender,\n            value=total_account_minimum_balance,\n            gas_limit=21_000,\n        )\n    ] + txs\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=[\n            Block(\n                txs=txs,\n                header_verify=header_verify,\n            )\n        ],\n        genesis_environment=env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_blob_gas_subtraction_tx","title":"test_blob_gas_subtraction_tx(state_test, state_env, pre, sender_initial_balance, txs, destination_account, destination_account_balance, total_account_transactions_fee)","text":"

    Check that the blob gas fee for a transaction is subtracted from the sender balance before the transaction is executed, including:

    • Transactions with max fee equal or higher than current block base fee
    • Transactions with and without value
    • Transactions with and without calldata
    • Transactions with max fee per blob gas lower or higher than the priority fee
    • Transactions where an externally owned account sends funds to the sender mid execution
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"tx_access_list\",\n    [[], [AccessList(address=100, storage_keys=[100, 200])]],\n    ids=[\"no_access_list\", \"access_list\"],\n)\n@pytest.mark.parametrize(\"tx_max_fee_per_gas\", [7, 14])\n@pytest.mark.parametrize(\"tx_max_priority_fee_per_gas\", [0, 7])\n@pytest.mark.parametrize(\"tx_value\", [0, 1])\n@pytest.mark.parametrize(\n    \"tx_calldata\",\n    [b\"\", b\"\\x01\"],\n    ids=[\"no_calldata\", \"single_non_zero_byte_calldata\"],\n)\n@pytest.mark.parametrize(\"tx_max_fee_per_blob_gas\", [1, 100])\n@pytest.mark.parametrize(\n    \"tx_gas\", [500_000], ids=[\"\"]\n)  # Increase gas to account for contract code\n@pytest.mark.parametrize(\n    \"destination_account_balance\", [100], ids=[\"100_wei_mid_execution\"]\n)  # Amount sent by the contract to the sender mid execution\n@pytest.mark.parametrize(\n    \"destination_account_code\",\n    [\n        Op.SSTORE(0, Op.BALANCE(Op.ORIGIN))\n        + Op.CALL(Op.GAS, Op.ORIGIN, Op.SUB(Op.SELFBALANCE, Op.CALLVALUE), 0, 0, 0, 0)\n        + Op.SSTORE(1, Op.BALANCE(Op.ORIGIN))\n    ],\n    ids=[\"\"],\n)  # Amount sent by the contract to the sender mid execution\n@pytest.mark.valid_from(\"Cancun\")\ndef test_blob_gas_subtraction_tx(\n    state_test: StateTestFiller,\n    state_env: Environment,\n    pre: Alloc,\n    sender_initial_balance: int,\n    txs: List[Transaction],\n    destination_account: Address,\n    destination_account_balance: int,\n    total_account_transactions_fee: int,\n):\n    \"\"\"\n    Check that the blob gas fee for a transaction is subtracted from the sender balance before the\n    transaction is executed, including:\n\n    - Transactions with max fee equal or higher than current block base fee\n    - Transactions with and without value\n    - Transactions with and without calldata\n    - Transactions with max fee per blob gas lower or higher than the priority fee\n    - Transactions where an externally owned account sends funds to the sender mid execution\n    \"\"\"\n    assert len(txs) == 1\n    post = {\n        destination_account: Account(\n            storage={\n                0: sender_initial_balance - total_account_transactions_fee,\n                1: sender_initial_balance\n                - total_account_transactions_fee\n                + destination_account_balance,\n            }\n        )\n    }\n    state_test(\n        pre=pre,\n        post=post,\n        tx=txs[0],\n        env=state_env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_insufficient_balance_blob_tx_combinations","title":"test_insufficient_balance_blob_tx_combinations(blockchain_test, pre, env, block)","text":"

    Reject all valid blob transaction combinations in a block, but block is invalid due to:

    • The amount of blobs is correct but the user cannot afford the transaction total cost
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"blobs_per_tx\",\n    all_valid_blob_combinations(),\n)\n@pytest.mark.parametrize(\"account_balance_modifier\", [-1], ids=[\"exact_balance_minus_1\"])\n@pytest.mark.parametrize(\"tx_error\", [TransactionException.INSUFFICIENT_ACCOUNT_FUNDS], ids=[\"\"])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_insufficient_balance_blob_tx_combinations(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    env: Environment,\n    block: Block,\n):\n    \"\"\"\n    Reject all valid blob transaction combinations in a block, but block is invalid due to:\n\n    - The amount of blobs is correct but the user cannot afford the\n            transaction total cost\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=[block],\n        genesis_environment=env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_invalid_tx_blob_count","title":"test_invalid_tx_blob_count(state_test, state_env, pre, txs, header_verify, rlp_modifier)","text":"

    Reject blocks that include blob transactions with invalid blob counts:

    • blob count == 0 in type 3 transaction
    • blob count > MAX_BLOBS_PER_BLOCK in type 3 transaction
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"blobs_per_tx,tx_error\",\n    [\n        ([0], TransactionException.TYPE_3_TX_ZERO_BLOBS),\n        (\n            [SpecHelpers.max_blobs_per_block() + 1],\n            TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED,\n        ),\n    ],\n    ids=[\"too_few_blobs\", \"too_many_blobs\"],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_invalid_tx_blob_count(\n    state_test: StateTestFiller,\n    state_env: Environment,\n    pre: Alloc,\n    txs: List[Transaction],\n    header_verify: Optional[Header],\n    rlp_modifier: Optional[Header],\n):\n    \"\"\"\n    Reject blocks that include blob transactions with invalid blob counts:\n\n    - `blob count == 0` in type 3 transaction\n    - `blob count > MAX_BLOBS_PER_BLOCK` in type 3 transaction\n    \"\"\"\n    assert len(txs) == 1\n    state_test(\n        pre=pre,\n        post={},\n        tx=txs[0],\n        env=state_env,\n        blockchain_test_header_verify=header_verify,\n        blockchain_test_rlp_modifier=rlp_modifier,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_invalid_blob_hash_versioning_single_tx","title":"test_invalid_blob_hash_versioning_single_tx(state_test, state_env, pre, txs, header_verify, rlp_modifier)","text":"

    Reject blob transactions with invalid blob hash version, including:

    • Transaction with single blob with invalid version
    • Transaction with multiple blobs all with invalid version
    • Transaction with multiple blobs either with invalid version
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"blob_hashes_per_tx\",\n    [\n        [[Hash(1)]],\n        [[Hash(x) for x in range(2)]],\n        [add_kzg_version([Hash(1)], Spec.BLOB_COMMITMENT_VERSION_KZG) + [Hash(2)]],\n        [[Hash(1)] + add_kzg_version([Hash(2)], Spec.BLOB_COMMITMENT_VERSION_KZG)],\n    ],\n    ids=[\n        \"single_blob\",\n        \"multiple_blobs\",\n        \"multiple_blobs_single_bad_hash_1\",\n        \"multiple_blobs_single_bad_hash_2\",\n    ],\n)\n@pytest.mark.parametrize(\n    \"tx_error\", [TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH], ids=[\"\"]\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_invalid_blob_hash_versioning_single_tx(\n    state_test: StateTestFiller,\n    state_env: Environment,\n    pre: Alloc,\n    txs: List[Transaction],\n    header_verify: Optional[Header],\n    rlp_modifier: Optional[Header],\n):\n    \"\"\"\n    Reject blob transactions with invalid blob hash version, including:\n\n    - Transaction with single blob with invalid version\n    - Transaction with multiple blobs all with invalid version\n    - Transaction with multiple blobs either with invalid version\n    \"\"\"\n    assert len(txs) == 1\n    state_test(\n        pre=pre,\n        post={},\n        tx=txs[0],\n        env=state_env,\n        blockchain_test_header_verify=header_verify,\n        blockchain_test_rlp_modifier=rlp_modifier,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_invalid_blob_hash_versioning_multiple_txs","title":"test_invalid_blob_hash_versioning_multiple_txs(blockchain_test, pre, env, block)","text":"

    Reject blocks that include blob transactions with invalid blob hash version, including:

    • Multiple blob transactions with single blob all with invalid version
    • Multiple blob transactions with multiple blobs all with invalid version
    • Multiple blob transactions with multiple blobs only one with invalid version
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"blob_hashes_per_tx\",\n    [\n        [\n            add_kzg_version([Hash(1)], Spec.BLOB_COMMITMENT_VERSION_KZG),\n            [Hash(2)],\n        ],\n        [\n            add_kzg_version([Hash(1)], Spec.BLOB_COMMITMENT_VERSION_KZG),\n            [Hash(x) for x in range(1, 3)],\n        ],\n        [\n            add_kzg_version([Hash(1)], Spec.BLOB_COMMITMENT_VERSION_KZG),\n            [Hash(2)] + add_kzg_version([Hash(3)], Spec.BLOB_COMMITMENT_VERSION_KZG),\n        ],\n        [\n            add_kzg_version([Hash(1)], Spec.BLOB_COMMITMENT_VERSION_KZG),\n            add_kzg_version([Hash(2)], Spec.BLOB_COMMITMENT_VERSION_KZG),\n            [Hash(3)],\n        ],\n    ],\n    ids=[\n        \"single_blob\",\n        \"multiple_blobs\",\n        \"multiple_blobs_single_bad_hash_1\",\n        \"multiple_blobs_single_bad_hash_2\",\n    ],\n)\n@pytest.mark.parametrize(\n    \"tx_error\", [TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH], ids=[\"\"]\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_invalid_blob_hash_versioning_multiple_txs(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    env: Environment,\n    block: Block,\n):\n    \"\"\"\n    Reject blocks that include blob transactions with invalid blob hash\n    version, including:\n\n    - Multiple blob transactions with single blob all with invalid version\n    - Multiple blob transactions with multiple blobs all with invalid version\n    - Multiple blob transactions with multiple blobs only one with invalid version\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=[block],\n        genesis_environment=env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_invalid_blob_tx_contract_creation","title":"test_invalid_blob_tx_contract_creation(blockchain_test, pre, env, txs, header_verify)","text":"

    Reject blocks that include blob transactions that have nil to value (contract creating).

    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"tx_gas\", [500_000], ids=[\"\"]\n)  # Increase gas to account for contract creation\n@pytest.mark.valid_from(\"Cancun\")\ndef test_invalid_blob_tx_contract_creation(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    env: Environment,\n    txs: List[Transaction],\n    header_verify: Optional[Header],\n):\n    \"\"\"\n    Reject blocks that include blob transactions that have nil to value (contract creating).\n    \"\"\"\n    assert len(txs) == 1\n    assert txs[0].blob_versioned_hashes is not None and len(txs[0].blob_versioned_hashes) == 1\n    # Replace the transaction with a contract creating one, only in the RLP version\n    contract_creating_tx = txs[0].copy(to=None).with_signature_and_sender()\n    txs[0].rlp_override = contract_creating_tx.rlp\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=[\n            Block(\n                txs=txs,\n                exception=[\n                    BlockException.RLP_STRUCTURES_ENCODING,\n                    TransactionException.TYPE_3_TX_CONTRACT_CREATION,\n                ],\n                header_verify=header_verify,\n            )\n        ],\n        genesis_environment=env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_blob_tx_attribute_opcodes","title":"test_blob_tx_attribute_opcodes(state_test, pre, sender, tx_value, tx_gas, tx_calldata, tx_max_fee_per_gas, tx_max_fee_per_blob_gas, tx_max_priority_fee_per_gas, tx_access_list, blob_hashes_per_tx, opcode, state_env)","text":"

    Test opcodes that read transaction attributes work properly for blob type transactions:

    • ORIGIN
    • CALLER
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [Op.ORIGIN, Op.CALLER],\n    indirect=[\"opcode\"],\n)\n@pytest.mark.parametrize(\"tx_gas\", [500_000])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_blob_tx_attribute_opcodes(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    tx_value: int,\n    tx_gas: int,\n    tx_calldata: bytes,\n    tx_max_fee_per_gas: int,\n    tx_max_fee_per_blob_gas: int,\n    tx_max_priority_fee_per_gas: int,\n    tx_access_list: List[AccessList],\n    blob_hashes_per_tx: List[List[bytes]],\n    opcode: Tuple[Bytecode, Storage.StorageDictType],\n    state_env: Environment,\n):\n    \"\"\"\n    Test opcodes that read transaction attributes work properly for blob type transactions:\n\n    - ORIGIN\n    - CALLER\n    \"\"\"\n    code, storage = opcode\n    destination_account = pre.deploy_contract(code=code)\n    tx = Transaction(\n        ty=Spec.BLOB_TX_TYPE,\n        sender=sender,\n        to=destination_account,\n        value=tx_value,\n        gas_limit=tx_gas,\n        data=tx_calldata,\n        max_fee_per_gas=tx_max_fee_per_gas,\n        max_priority_fee_per_gas=tx_max_priority_fee_per_gas,\n        max_fee_per_blob_gas=tx_max_fee_per_blob_gas,\n        access_list=tx_access_list,\n        blob_versioned_hashes=blob_hashes_per_tx[0],\n    )\n    post = {\n        destination_account: Account(\n            storage=storage,\n        )\n    }\n    state_test(\n        pre=pre,\n        post=post,\n        tx=tx,\n        env=state_env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_blob_tx_attribute_value_opcode","title":"test_blob_tx_attribute_value_opcode(state_test, pre, sender, tx_value, tx_gas, tx_calldata, tx_max_fee_per_gas, tx_max_fee_per_blob_gas, tx_max_priority_fee_per_gas, tx_access_list, blob_hashes_per_tx, opcode, state_env)","text":"

    Test the VALUE opcode with different blob type transaction value amounts.

    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\"opcode\", [Op.CALLVALUE], indirect=[\"opcode\"])\n@pytest.mark.parametrize(\"tx_value\", [0, 1, int(1e18)])\n@pytest.mark.parametrize(\"tx_gas\", [500_000])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_blob_tx_attribute_value_opcode(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    tx_value: int,\n    tx_gas: int,\n    tx_calldata: bytes,\n    tx_max_fee_per_gas: int,\n    tx_max_fee_per_blob_gas: int,\n    tx_max_priority_fee_per_gas: int,\n    tx_access_list: List[AccessList],\n    blob_hashes_per_tx: List[List[bytes]],\n    opcode: Tuple[Bytecode, Storage.StorageDictType],\n    state_env: Environment,\n):\n    \"\"\"\n    Test the VALUE opcode with different blob type transaction value amounts.\n    \"\"\"\n    code, storage = opcode\n    destination_account = pre.deploy_contract(code=code)\n    tx = Transaction(\n        ty=Spec.BLOB_TX_TYPE,\n        sender=sender,\n        to=destination_account,\n        value=tx_value,\n        gas_limit=tx_gas,\n        data=tx_calldata,\n        max_fee_per_gas=tx_max_fee_per_gas,\n        max_priority_fee_per_gas=tx_max_priority_fee_per_gas,\n        max_fee_per_blob_gas=tx_max_fee_per_blob_gas,\n        access_list=tx_access_list,\n        blob_versioned_hashes=blob_hashes_per_tx[0],\n    )\n    post = {\n        destination_account: Account(\n            storage=storage,\n            balance=tx_value,\n        )\n    }\n    state_test(\n        pre=pre,\n        post=post,\n        tx=tx,\n        env=state_env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_blob_tx_attribute_calldata_opcodes","title":"test_blob_tx_attribute_calldata_opcodes(state_test, pre, sender, tx_value, tx_gas, tx_calldata, tx_max_fee_per_gas, tx_max_fee_per_blob_gas, tx_max_priority_fee_per_gas, tx_access_list, blob_hashes_per_tx, opcode, state_env)","text":"

    Test calldata related opcodes to verify their behavior is not affected by blobs:

    • CALLDATALOAD
    • CALLDATASIZE
    • CALLDATACOPY
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.CALLDATALOAD,\n        Op.CALLDATASIZE,\n        Op.CALLDATACOPY,\n    ],\n    indirect=True,\n)\n@pytest.mark.parametrize(\n    \"tx_calldata\",\n    [\n        b\"\",\n        b\"\\x01\",\n        b\"\\x00\\x01\" * 16,\n    ],\n    ids=[\"empty\", \"single_byte\", \"word\"],\n)\n@pytest.mark.parametrize(\"tx_gas\", [500_000])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_blob_tx_attribute_calldata_opcodes(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    tx_value: int,\n    tx_gas: int,\n    tx_calldata: bytes,\n    tx_max_fee_per_gas: int,\n    tx_max_fee_per_blob_gas: int,\n    tx_max_priority_fee_per_gas: int,\n    tx_access_list: List[AccessList],\n    blob_hashes_per_tx: List[List[bytes]],\n    opcode: Tuple[Bytecode, Storage.StorageDictType],\n    state_env: Environment,\n):\n    \"\"\"\n    Test calldata related opcodes to verify their behavior is not affected by blobs:\n\n    - CALLDATALOAD\n    - CALLDATASIZE\n    - CALLDATACOPY\n    \"\"\"\n    code, storage = opcode\n    destination_account = pre.deploy_contract(code=code)\n    tx = Transaction(\n        ty=Spec.BLOB_TX_TYPE,\n        sender=sender,\n        to=destination_account,\n        value=tx_value,\n        gas_limit=tx_gas,\n        data=tx_calldata,\n        max_fee_per_gas=tx_max_fee_per_gas,\n        max_priority_fee_per_gas=tx_max_priority_fee_per_gas,\n        max_fee_per_blob_gas=tx_max_fee_per_blob_gas,\n        access_list=tx_access_list,\n        blob_versioned_hashes=blob_hashes_per_tx[0],\n    )\n    post = {\n        destination_account: Account(\n            storage=storage,\n        )\n    }\n    state_test(\n        pre=pre,\n        post=post,\n        tx=tx,\n        env=state_env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_blob_tx_attribute_gasprice_opcode","title":"test_blob_tx_attribute_gasprice_opcode(state_test, pre, sender, tx_value, tx_gas, tx_calldata, tx_max_fee_per_gas, tx_max_fee_per_blob_gas, tx_max_priority_fee_per_gas, tx_access_list, blob_hashes_per_tx, opcode, state_env)","text":"

    Test GASPRICE opcode to sanity check that the blob gas fee does not affect its calculation:

    • No priority fee
    • Priority fee below data fee
    • Priority fee above data fee
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\"tx_max_priority_fee_per_gas\", [0, 2])  # always below data fee\n@pytest.mark.parametrize(\"tx_max_fee_per_blob_gas\", [1, 3])  # normal and above priority fee\n@pytest.mark.parametrize(\"tx_max_fee_per_gas\", [100])  # always above priority fee\n@pytest.mark.parametrize(\"opcode\", [Op.GASPRICE], indirect=True)\n@pytest.mark.parametrize(\"tx_gas\", [500_000])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_blob_tx_attribute_gasprice_opcode(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    tx_value: int,\n    tx_gas: int,\n    tx_calldata: bytes,\n    tx_max_fee_per_gas: int,\n    tx_max_fee_per_blob_gas: int,\n    tx_max_priority_fee_per_gas: int,\n    tx_access_list: List[AccessList],\n    blob_hashes_per_tx: List[List[bytes]],\n    opcode: Tuple[Bytecode, Storage.StorageDictType],\n    state_env: Environment,\n):\n    \"\"\"\n    Test GASPRICE opcode to sanity check that the blob gas fee does not affect\n    its calculation:\n\n    - No priority fee\n    - Priority fee below data fee\n    - Priority fee above data fee\n    \"\"\"\n    code, storage = opcode\n    destination_account = pre.deploy_contract(code=code)\n    tx = Transaction(\n        ty=Spec.BLOB_TX_TYPE,\n        sender=sender,\n        to=destination_account,\n        value=tx_value,\n        gas_limit=tx_gas,\n        data=tx_calldata,\n        max_fee_per_gas=tx_max_fee_per_gas,\n        max_priority_fee_per_gas=tx_max_priority_fee_per_gas,\n        max_fee_per_blob_gas=tx_max_fee_per_blob_gas,\n        access_list=tx_access_list,\n        blob_versioned_hashes=blob_hashes_per_tx[0],\n    )\n    post = {\n        destination_account: Account(\n            storage=storage,\n        )\n    }\n    state_test(\n        pre=pre,\n        post=post,\n        tx=tx,\n        env=state_env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_blob_type_tx_pre_fork","title":"test_blob_type_tx_pre_fork(state_test, pre, txs)","text":"

    Reject blocks with blob type transactions before Cancun fork.

    Blocks sent by NewPayloadV2 (Shanghai) that contain blob type transactions, furthermore blobs field within NewPayloadV2 method must be computed as INVALID, due to an invalid block hash.

    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    [\n        \"blobs_per_tx\",\n        \"parent_excess_blobs\",\n        \"tx_max_fee_per_blob_gas\",\n        \"tx_error\",\n    ],\n    [\n        (\n            [0],\n            None,\n            1,\n            [TransactionException.TYPE_3_TX_PRE_FORK, TransactionException.TYPE_3_TX_ZERO_BLOBS],\n        ),\n        ([1], None, 1, TransactionException.TYPE_3_TX_PRE_FORK),\n    ],\n    ids=[\"no_blob_tx\", \"one_blob_tx\"],\n)\n@pytest.mark.valid_at_transition_to(\"Cancun\")\ndef test_blob_type_tx_pre_fork(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    txs: List[Transaction],\n):\n    \"\"\"\n    Reject blocks with blob type transactions before Cancun fork.\n\n    Blocks sent by NewPayloadV2 (Shanghai) that contain blob type transactions, furthermore blobs\n    field within NewPayloadV2 method must be computed as INVALID, due to an invalid block hash.\n    \"\"\"\n    assert len(txs) == 1\n    state_test(\n        pre=pre,\n        post={},\n        tx=txs[0],\n        env=Environment(),  # `env` fixture has blob fields\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/index/test_cases/","title":"Test Blob Txs - Test Cases","text":"

    Test cases generated from tests/cancun/eip4844_blobs/test_blob_txs.py

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_blob_txs.py:

    test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 4)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 2, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 4)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 5)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 4)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(4,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(5,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(6,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 2, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(4, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 2, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3, 2, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(4, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(5, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(4, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 4)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 2, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 4)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 5)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2, 4)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(3, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(3,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(4,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(5,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(6,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(3, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2, 2, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(3, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(4, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2, 2, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(3, 2, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(3, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(4, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(5, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(3, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(4, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 1, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 4)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 2, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 4)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 5)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2, 4)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(3, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(3,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(4,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(5,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(6,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(3, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2, 2, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(3, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(4, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2, 2, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(3, 2, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(3, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(4, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(5, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(3, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(4, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 4)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 2, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 4)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 5)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2, 4)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(3, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(3,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(4,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(5,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(6,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(3, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2, 2, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(3, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(4, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2, 2, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(3, 2, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(3, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(4, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(5, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(3, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(4, 2)]\ntest_invalid_tx_max_fee_per_blob_gas[fork_Cancun-blockchain_test-account_balance_modifier_1000000000-insufficient_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas[fork_Cancun-blockchain_test-account_balance_modifier_1000000000-invalid_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas[fork_Cancun-blockchain_test_engine-account_balance_modifier_1000000000-insufficient_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas[fork_Cancun-blockchain_test_engine-account_balance_modifier_1000000000-invalid_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas[fork_Prague-blockchain_test-account_balance_modifier_1000000000-insufficient_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas[fork_Prague-blockchain_test-account_balance_modifier_1000000000-invalid_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas[fork_Prague-blockchain_test_engine-account_balance_modifier_1000000000-insufficient_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas[fork_Prague-blockchain_test_engine-account_balance_modifier_1000000000-invalid_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas_state[fork_Cancun-state_test-insufficient_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas_state[fork_Cancun-state_test-invalid_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas_state[fork_Prague-state_test-insufficient_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas_state[fork_Prague-state_test-invalid_max_fee_per_blob_gas]\ntest_invalid_normal_gas[fork_Cancun-blockchain_test-insufficient_max_fee_per_gas]\ntest_invalid_normal_gas[fork_Cancun-blockchain_test_engine-insufficient_max_fee_per_gas]\ntest_invalid_normal_gas[fork_Cancun-state_test-insufficient_max_fee_per_gas]\ntest_invalid_normal_gas[fork_Prague-blockchain_test-insufficient_max_fee_per_gas]\ntest_invalid_normal_gas[fork_Prague-blockchain_test_engine-insufficient_max_fee_per_gas]\ntest_invalid_normal_gas[fork_Prague-state_test-insufficient_max_fee_per_gas]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 1, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 1, 1, 1, 2)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 1, 1, 3)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 1, 2, 2)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 1, 4)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 2, 3)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 2, 2, 2)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 5)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 2, 4)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 3, 3)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(2, 2, 3)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 6)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(2, 5)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(3, 4)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(7,)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(2, 1, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(3, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(2, 2, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(4, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(3, 2, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(2, 2, 2, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(5, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(4, 2, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(3, 3, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(3, 2, 2)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(6, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(5, 2)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(4, 3)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 1, 1, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 1, 1, 1, 1, 2)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 1, 1, 1, 3)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 1, 1, 2, 2)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 1, 1, 4)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 1, 2, 3)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 2, 2, 2)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 1, 5)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 2, 4)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 3, 3)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(2, 2, 3)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 6)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(2, 5)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(3, 4)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(7,)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(2, 1, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(3, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(2, 2, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(4, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(3, 2, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(2, 2, 2, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(5, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(4, 2, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(3, 3, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(3, 2, 2)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(6, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(5, 2)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(4, 3)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 1, 1, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 1, 1, 1, 1, 2)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 1, 1, 1, 3)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 1, 1, 2, 2)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 1, 1, 4)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 1, 2, 3)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 2, 2, 2)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 1, 5)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 2, 4)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 3, 3)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(2, 2, 3)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 6)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(2, 5)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(3, 4)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(7,)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(2, 1, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(3, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(2, 2, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(4, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(3, 2, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(2, 2, 2, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(5, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(4, 2, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(3, 3, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(3, 2, 2)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(6, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(5, 2)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(4, 3)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 1, 1, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 1, 1, 1, 1, 2)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 1, 1, 1, 3)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 1, 1, 2, 2)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 1, 1, 4)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 1, 2, 3)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 2, 2, 2)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 1, 5)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 2, 4)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 3, 3)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(2, 2, 3)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 6)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(2, 5)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(3, 4)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(7,)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(2, 1, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(3, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(2, 2, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(4, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(3, 2, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(2, 2, 2, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(5, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(4, 2, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(3, 3, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(3, 2, 2)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(6, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(5, 2)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(4, 3)]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 2, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 5)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(4,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(5,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(6,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 2, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(4, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(4, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(5, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(4, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 2, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 5)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(4,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(5,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(6,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 2, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(4, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(4, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(5, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(4, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 2, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 5)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(4,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(5,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(6,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 2, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(4, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(4, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(5, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(4, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 2, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 5)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(4,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(5,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(6,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 2, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(4, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(4, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(5, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(4, 2)]\ntest_invalid_tx_blob_count[fork_Cancun-blockchain_test-too_few_blobs]\ntest_invalid_tx_blob_count[fork_Cancun-blockchain_test-too_many_blobs]\ntest_invalid_tx_blob_count[fork_Cancun-blockchain_test_engine-too_few_blobs]\ntest_invalid_tx_blob_count[fork_Cancun-blockchain_test_engine-too_many_blobs]\ntest_invalid_tx_blob_count[fork_Cancun-state_test-too_few_blobs]\ntest_invalid_tx_blob_count[fork_Cancun-state_test-too_many_blobs]\ntest_invalid_tx_blob_count[fork_Prague-blockchain_test-too_few_blobs]\ntest_invalid_tx_blob_count[fork_Prague-blockchain_test-too_many_blobs]\ntest_invalid_tx_blob_count[fork_Prague-blockchain_test_engine-too_few_blobs]\ntest_invalid_tx_blob_count[fork_Prague-blockchain_test_engine-too_many_blobs]\ntest_invalid_tx_blob_count[fork_Prague-state_test-too_few_blobs]\ntest_invalid_tx_blob_count[fork_Prague-state_test-too_many_blobs]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-blockchain_test--single_blob]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-blockchain_test--multiple_blobs]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-blockchain_test--multiple_blobs_single_bad_hash_1]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-blockchain_test--multiple_blobs_single_bad_hash_2]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-blockchain_test_engine--single_blob]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-blockchain_test_engine--multiple_blobs]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-blockchain_test_engine--multiple_blobs_single_bad_hash_1]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-blockchain_test_engine--multiple_blobs_single_bad_hash_2]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-state_test--single_blob]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-state_test--multiple_blobs]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-state_test--multiple_blobs_single_bad_hash_1]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-state_test--multiple_blobs_single_bad_hash_2]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-blockchain_test--single_blob]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-blockchain_test--multiple_blobs]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-blockchain_test--multiple_blobs_single_bad_hash_1]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-blockchain_test--multiple_blobs_single_bad_hash_2]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-blockchain_test_engine--single_blob]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-blockchain_test_engine--multiple_blobs]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-blockchain_test_engine--multiple_blobs_single_bad_hash_1]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-blockchain_test_engine--multiple_blobs_single_bad_hash_2]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-state_test--single_blob]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-state_test--multiple_blobs]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-state_test--multiple_blobs_single_bad_hash_1]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-state_test--multiple_blobs_single_bad_hash_2]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Cancun-blockchain_test--single_blob]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Cancun-blockchain_test--multiple_blobs]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Cancun-blockchain_test--multiple_blobs_single_bad_hash_1]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Cancun-blockchain_test--multiple_blobs_single_bad_hash_2]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Cancun-blockchain_test_engine--single_blob]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Cancun-blockchain_test_engine--multiple_blobs]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Cancun-blockchain_test_engine--multiple_blobs_single_bad_hash_1]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Cancun-blockchain_test_engine--multiple_blobs_single_bad_hash_2]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Prague-blockchain_test--single_blob]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Prague-blockchain_test--multiple_blobs]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Prague-blockchain_test--multiple_blobs_single_bad_hash_1]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Prague-blockchain_test--multiple_blobs_single_bad_hash_2]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Prague-blockchain_test_engine--single_blob]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Prague-blockchain_test_engine--multiple_blobs]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Prague-blockchain_test_engine--multiple_blobs_single_bad_hash_1]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Prague-blockchain_test_engine--multiple_blobs_single_bad_hash_2]\ntest_invalid_blob_tx_contract_creation[fork_Cancun-blockchain_test-]\ntest_invalid_blob_tx_contract_creation[fork_Cancun-blockchain_test_engine-]\ntest_invalid_blob_tx_contract_creation[fork_Prague-blockchain_test-]\ntest_invalid_blob_tx_contract_creation[fork_Prague-blockchain_test_engine-]\ntest_blob_tx_attribute_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-opcode_ORIGIN]\ntest_blob_tx_attribute_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-opcode_CALLER]\ntest_blob_tx_attribute_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-opcode_ORIGIN]\ntest_blob_tx_attribute_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-opcode_CALLER]\ntest_blob_tx_attribute_opcodes[fork_Cancun-state_test-tx_gas_500000-opcode_ORIGIN]\ntest_blob_tx_attribute_opcodes[fork_Cancun-state_test-tx_gas_500000-opcode_CALLER]\ntest_blob_tx_attribute_opcodes[fork_Prague-blockchain_test-tx_gas_500000-opcode_ORIGIN]\ntest_blob_tx_attribute_opcodes[fork_Prague-blockchain_test-tx_gas_500000-opcode_CALLER]\ntest_blob_tx_attribute_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-opcode_ORIGIN]\ntest_blob_tx_attribute_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-opcode_CALLER]\ntest_blob_tx_attribute_opcodes[fork_Prague-state_test-tx_gas_500000-opcode_ORIGIN]\ntest_blob_tx_attribute_opcodes[fork_Prague-state_test-tx_gas_500000-opcode_CALLER]\ntest_blob_tx_attribute_value_opcode[fork_Cancun-blockchain_test-tx_gas_500000-tx_value_0-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Cancun-blockchain_test-tx_gas_500000-tx_value_1-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Cancun-blockchain_test-tx_gas_500000-tx_value_1000000000000000000-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Cancun-blockchain_test_engine-tx_gas_500000-tx_value_0-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Cancun-blockchain_test_engine-tx_gas_500000-tx_value_1-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Cancun-blockchain_test_engine-tx_gas_500000-tx_value_1000000000000000000-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Cancun-state_test-tx_gas_500000-tx_value_0-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Cancun-state_test-tx_gas_500000-tx_value_1-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Cancun-state_test-tx_gas_500000-tx_value_1000000000000000000-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Prague-blockchain_test-tx_gas_500000-tx_value_0-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Prague-blockchain_test-tx_gas_500000-tx_value_1-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Prague-blockchain_test-tx_gas_500000-tx_value_1000000000000000000-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Prague-blockchain_test_engine-tx_gas_500000-tx_value_0-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Prague-blockchain_test_engine-tx_gas_500000-tx_value_1-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Prague-blockchain_test_engine-tx_gas_500000-tx_value_1000000000000000000-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Prague-state_test-tx_gas_500000-tx_value_0-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Prague-state_test-tx_gas_500000-tx_value_1-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Prague-state_test-tx_gas_500000-tx_value_1000000000000000000-opcode_CALLVALUE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-empty-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-empty-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-empty-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-single_byte-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-single_byte-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-single_byte-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-word-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-word-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-word-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-empty-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-empty-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-empty-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-single_byte-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-single_byte-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-single_byte-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-word-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-word-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-word-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-state_test-tx_gas_500000-empty-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-state_test-tx_gas_500000-empty-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-state_test-tx_gas_500000-empty-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-state_test-tx_gas_500000-single_byte-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-state_test-tx_gas_500000-single_byte-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-state_test-tx_gas_500000-single_byte-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-state_test-tx_gas_500000-word-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-state_test-tx_gas_500000-word-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-state_test-tx_gas_500000-word-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test-tx_gas_500000-empty-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test-tx_gas_500000-empty-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test-tx_gas_500000-empty-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test-tx_gas_500000-single_byte-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test-tx_gas_500000-single_byte-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test-tx_gas_500000-single_byte-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test-tx_gas_500000-word-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test-tx_gas_500000-word-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test-tx_gas_500000-word-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-empty-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-empty-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-empty-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-single_byte-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-single_byte-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-single_byte-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-word-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-word-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-word-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-state_test-tx_gas_500000-empty-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-state_test-tx_gas_500000-empty-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-state_test-tx_gas_500000-empty-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-state_test-tx_gas_500000-single_byte-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-state_test-tx_gas_500000-single_byte-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-state_test-tx_gas_500000-single_byte-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-state_test-tx_gas_500000-word-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-state_test-tx_gas_500000-word-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-state_test-tx_gas_500000-word-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-blockchain_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-blockchain_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-blockchain_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-blockchain_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-blockchain_test_engine-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-blockchain_test_engine-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-blockchain_test_engine-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-blockchain_test_engine-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-state_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-state_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-state_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-state_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-blockchain_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-blockchain_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-blockchain_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-blockchain_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-blockchain_test_engine-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-blockchain_test_engine-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-blockchain_test_engine-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-blockchain_test_engine-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-state_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-state_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-state_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-state_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_2]\ntest_blob_type_tx_pre_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test-no_blob_tx]\ntest_blob_type_tx_pre_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test-one_blob_tx]\ntest_blob_type_tx_pre_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-no_blob_tx]\ntest_blob_type_tx_pre_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-one_blob_tx]\ntest_blob_type_tx_pre_fork[fork_ShanghaiToCancunAtTime15k-state_test-no_blob_tx]\ntest_blob_type_tx_pre_fork[fork_ShanghaiToCancunAtTime15k-state_test-one_blob_tx]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip4844_blobs/test_blob_txs.py\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs_full/","title":"Test Blob Txs Full","text":"

    Documentation for tests/cancun/eip4844_blobs/test_blob_txs_full.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_blob_txs_full.py\n
    Tests full blob type transactions for EIP-4844: Shard Blob Transactions

    Test full blob type transactions for EIP-4844: Shard Blob Transactions.

    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs_full/#tests.cancun.eip4844_blobs.test_blob_txs_full.test_reject_valid_full_blob_in_block_rlp","title":"test_reject_valid_full_blob_in_block_rlp(blockchain_test, pre, env, blocks)","text":"

    Test valid blob combinations where one or more txs in the block serialized version contain a full blob (network version) tx.

    Source code in tests/cancun/eip4844_blobs/test_blob_txs_full.py
    @pytest.mark.parametrize(\n    \"txs_blobs,txs_wrapped_blobs\",\n    [\n        (\n            [  # Txs\n                [  # Blobs per transaction\n                    Blob(\n                        blob=bytes(\n                            Spec.FIELD_ELEMENTS_PER_BLOB * SpecHelpers.BYTES_PER_FIELD_ELEMENT\n                        ),\n                        kzg_commitment=INF_POINT,\n                        kzg_proof=INF_POINT,\n                    ),\n                ]\n            ],\n            [True],\n        ),\n        (\n            [  # Txs\n                [  # Blobs per transaction\n                    Blob(\n                        blob=bytes(\n                            Spec.FIELD_ELEMENTS_PER_BLOB * SpecHelpers.BYTES_PER_FIELD_ELEMENT\n                        ),\n                        kzg_commitment=INF_POINT,\n                        kzg_proof=INF_POINT,\n                    )\n                ]\n                for _ in range(SpecHelpers.max_blobs_per_block())\n            ],\n            [True] + ([False] * (SpecHelpers.max_blobs_per_block() - 1)),\n        ),\n        (\n            [  # Txs\n                [  # Blobs per transaction\n                    Blob(\n                        blob=bytes(\n                            Spec.FIELD_ELEMENTS_PER_BLOB * SpecHelpers.BYTES_PER_FIELD_ELEMENT\n                        ),\n                        kzg_commitment=INF_POINT,\n                        kzg_proof=INF_POINT,\n                    )\n                ]\n                for _ in range(SpecHelpers.max_blobs_per_block())\n            ],\n            ([False] * (SpecHelpers.max_blobs_per_block() - 1)) + [True],\n        ),\n    ],\n    ids=[\n        \"one_full_blob_one_tx\",\n        \"one_full_blob_max_txs\",\n        \"one_full_blob_at_the_end_max_txs\",\n    ],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_reject_valid_full_blob_in_block_rlp(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    env: Environment,\n    blocks: List[Block],\n):\n    \"\"\"\n    Test valid blob combinations where one or more txs in the block\n    serialized version contain a full blob (network version) tx.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs_full/index/test_cases/","title":"Test Blob Txs Full - Test Cases","text":"

    Test cases generated from tests/cancun/eip4844_blobs/test_blob_txs_full.py

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_blob_txs_full.py:

    test_reject_valid_full_blob_in_block_rlp[fork_Cancun-blockchain_test-one_full_blob_one_tx]\ntest_reject_valid_full_blob_in_block_rlp[fork_Cancun-blockchain_test-one_full_blob_max_txs]\ntest_reject_valid_full_blob_in_block_rlp[fork_Cancun-blockchain_test-one_full_blob_at_the_end_max_txs]\ntest_reject_valid_full_blob_in_block_rlp[fork_Cancun-blockchain_test_engine-one_full_blob_one_tx]\ntest_reject_valid_full_blob_in_block_rlp[fork_Cancun-blockchain_test_engine-one_full_blob_max_txs]\ntest_reject_valid_full_blob_in_block_rlp[fork_Cancun-blockchain_test_engine-one_full_blob_at_the_end_max_txs]\ntest_reject_valid_full_blob_in_block_rlp[fork_Prague-blockchain_test-one_full_blob_one_tx]\ntest_reject_valid_full_blob_in_block_rlp[fork_Prague-blockchain_test-one_full_blob_max_txs]\ntest_reject_valid_full_blob_in_block_rlp[fork_Prague-blockchain_test-one_full_blob_at_the_end_max_txs]\ntest_reject_valid_full_blob_in_block_rlp[fork_Prague-blockchain_test_engine-one_full_blob_one_tx]\ntest_reject_valid_full_blob_in_block_rlp[fork_Prague-blockchain_test_engine-one_full_blob_max_txs]\ntest_reject_valid_full_blob_in_block_rlp[fork_Prague-blockchain_test_engine-one_full_blob_at_the_end_max_txs]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip4844_blobs/test_blob_txs_full.py\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blobhash_opcode/","title":"Test Blobhash Opcode","text":"

    Documentation for tests/cancun/eip4844_blobs/test_blobhash_opcode.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_blobhash_opcode.py\n
    Tests BLOBHASH opcode in EIP-4844: Shard Blob Transactions

    Test cases for the BLOBHASH opcode in EIP-4844: Shard Blob Transactions.

    Adding a new test

    Add a function that is named test_<test_name> and takes at least the following arguments:

    • blockchain_test
    • pre
    • tx
    • post

    Additional custom pytest.fixture fixtures can be added and parametrized for new test cases.

    There is no specific structure to follow within this test module.

    "},{"location":"tests/cancun/eip4844_blobs/test_blobhash_opcode/#tests.cancun.eip4844_blobs.test_blobhash_opcode.test_blobhash_gas_cost","title":"test_blobhash_gas_cost(pre, tx_type, blobhash_index, state_test)","text":"

    Tests BLOBHASH opcode gas cost using a variety of indexes.

    Asserts that the gas consumption of the BLOBHASH opcode is correct by ensuring it matches HASH_OPCODE_GAS = 3. Includes both valid and invalid random index sizes from the range [0, 2**256-1], for tx types 2 and 3.

    Source code in tests/cancun/eip4844_blobs/test_blobhash_opcode.py
    @pytest.mark.parametrize(\"blobhash_index\", blobhash_index_values)\n@pytest.mark.with_all_tx_types\ndef test_blobhash_gas_cost(\n    pre: Alloc,\n    tx_type: int,\n    blobhash_index: int,\n    state_test: StateTestFiller,\n):\n    \"\"\"\n    Tests `BLOBHASH` opcode gas cost using a variety of indexes.\n\n    Asserts that the gas consumption of the `BLOBHASH` opcode is correct by ensuring\n    it matches `HASH_OPCODE_GAS = 3`. Includes both valid and invalid random\n    index sizes from the range `[0, 2**256-1]`, for tx types 2 and 3.\n    \"\"\"\n    gas_measure_code = CodeGasMeasure(\n        code=Op.BLOBHASH(blobhash_index),\n        overhead_cost=3,\n        extra_stack_items=1,\n    )\n\n    address = pre.deploy_contract(gas_measure_code)\n    sender = pre.fund_eoa()\n\n    tx = Transaction(\n        ty=tx_type,\n        sender=sender,\n        to=address,\n        data=Hash(0),\n        gas_limit=3_000_000,\n        gas_price=10 if tx_type < 2 else None,\n        access_list=[] if tx_type >= 1 else None,\n        max_fee_per_gas=10 if tx_type >= 2 else None,\n        max_priority_fee_per_gas=10 if tx_type >= 2 else None,\n        max_fee_per_blob_gas=10 if tx_type == 3 else None,\n        blob_versioned_hashes=random_blob_hashes[0 : SpecHelpers.target_blobs_per_block()]\n        if tx_type == 3\n        else None,\n    )\n    post = {address: Account(storage={0: Spec.HASH_GAS_COST})}\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blobhash_opcode/#tests.cancun.eip4844_blobs.test_blobhash_opcode.test_blobhash_scenarios","title":"test_blobhash_scenarios(pre, scenario, blockchain_test)","text":"

    Tests that the BLOBHASH opcode returns the correct versioned hash for various valid indexes.

    Covers various scenarios with random blob_versioned_hash values within the valid range [0, 2**256-1].

    Source code in tests/cancun/eip4844_blobs/test_blobhash_opcode.py
    @pytest.mark.parametrize(\n    \"scenario\",\n    [\n        \"single_valid\",\n        \"repeated_valid\",\n        \"valid_invalid\",\n        \"varied_valid\",\n    ],\n)\ndef test_blobhash_scenarios(\n    pre: Alloc,\n    scenario: str,\n    blockchain_test: BlockchainTestFiller,\n):\n    \"\"\"\n    Tests that the `BLOBHASH` opcode returns the correct versioned hash for\n    various valid indexes.\n\n    Covers various scenarios with random `blob_versioned_hash` values within\n    the valid range `[0, 2**256-1]`.\n    \"\"\"\n    TOTAL_BLOCKS = 5\n    b_hashes_list = BlobhashScenario.create_blob_hashes_list(length=TOTAL_BLOCKS)\n    blobhash_calls = BlobhashScenario.generate_blobhash_bytecode(scenario)\n    sender = pre.fund_eoa()\n\n    blocks: List[Block] = []\n    post = {}\n    for i in range(TOTAL_BLOCKS):\n        address = pre.deploy_contract(blobhash_calls)\n        blocks.append(\n            Block(\n                txs=[\n                    Transaction(\n                        ty=Spec.BLOB_TX_TYPE,\n                        sender=sender,\n                        to=address,\n                        data=Hash(0),\n                        gas_limit=3_000_000,\n                        access_list=[],\n                        max_fee_per_gas=10,\n                        max_priority_fee_per_gas=10,\n                        max_fee_per_blob_gas=10,\n                        blob_versioned_hashes=b_hashes_list[i],\n                    )\n                ]\n            )\n        )\n        post[address] = Account(\n            storage={\n                index: b_hashes_list[i][index]\n                for index in range(SpecHelpers.max_blobs_per_block())\n            }\n        )\n    blockchain_test(\n        pre=pre,\n        blocks=blocks,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blobhash_opcode/#tests.cancun.eip4844_blobs.test_blobhash_opcode.test_blobhash_invalid_blob_index","title":"test_blobhash_invalid_blob_index(pre, blockchain_test, scenario)","text":"

    Tests that the BLOBHASH opcode returns a zeroed bytes32 value for invalid indexes.

    Includes cases where the index is negative (index < 0) or exceeds the maximum number of blob_versioned_hash values stored: (index >= len(tx.message.blob_versioned_hashes)).

    It confirms that the returned value is a zeroed bytes32 for each case.

    Source code in tests/cancun/eip4844_blobs/test_blobhash_opcode.py
    @pytest.mark.parametrize(\n    \"scenario\",\n    [\n        \"invalid_calls\",\n    ],\n)\ndef test_blobhash_invalid_blob_index(\n    pre: Alloc,\n    blockchain_test: BlockchainTestFiller,\n    scenario,\n):\n    \"\"\"\n    Tests that the `BLOBHASH` opcode returns a zeroed `bytes32` value for invalid\n    indexes.\n\n    Includes cases where the index is negative (`index < 0`) or\n    exceeds the maximum number of `blob_versioned_hash` values stored:\n    (`index >= len(tx.message.blob_versioned_hashes)`).\n\n    It confirms that the returned value is a zeroed `bytes32` for each case.\n    \"\"\"\n    TOTAL_BLOCKS = 5\n    blobhash_calls = BlobhashScenario.generate_blobhash_bytecode(scenario)\n    sender = pre.fund_eoa()\n    blocks: List[Block] = []\n    post = {}\n    for i in range(TOTAL_BLOCKS):\n        address = pre.deploy_contract(blobhash_calls)\n        blob_per_block = (i % SpecHelpers.max_blobs_per_block()) + 1\n        blobs = [random_blob_hashes[blob] for blob in range(blob_per_block)]\n        blocks.append(\n            Block(\n                txs=[\n                    Transaction(\n                        ty=Spec.BLOB_TX_TYPE,\n                        sender=sender,\n                        to=address,\n                        gas_limit=3_000_000,\n                        data=Hash(0),\n                        access_list=[],\n                        max_fee_per_gas=10,\n                        max_priority_fee_per_gas=10,\n                        max_fee_per_blob_gas=10,\n                        blob_versioned_hashes=blobs,\n                    )\n                ]\n            )\n        )\n        post[address] = Account(\n            storage={\n                index: (0 if index < 0 or index >= blob_per_block else blobs[index])\n                for index in range(\n                    -TOTAL_BLOCKS,\n                    blob_per_block + (TOTAL_BLOCKS - (i % SpecHelpers.max_blobs_per_block())),\n                )\n            }\n        )\n    blockchain_test(\n        pre=pre,\n        blocks=blocks,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blobhash_opcode/#tests.cancun.eip4844_blobs.test_blobhash_opcode.test_blobhash_multiple_txs_in_block","title":"test_blobhash_multiple_txs_in_block(pre, blockchain_test)","text":"

    Tests that the BLOBHASH opcode returns the appropriate values when there is more than 1 blob tx type within a block (for tx types 2 and 3).

    Scenarios involve tx type 3 followed by tx type 2 running the same code within a block, including the opposite.

    Source code in tests/cancun/eip4844_blobs/test_blobhash_opcode.py
    def test_blobhash_multiple_txs_in_block(\n    pre: Alloc,\n    blockchain_test: BlockchainTestFiller,\n):\n    \"\"\"\n    Tests that the `BLOBHASH` opcode returns the appropriate values when there\n    is more than 1 blob tx type within a block (for tx types 2 and 3).\n\n    Scenarios involve tx type 3 followed by tx type 2 running the same code\n    within a block, including the opposite.\n    \"\"\"\n    blobhash_bytecode = BlobhashScenario.generate_blobhash_bytecode(\"single_valid\")\n    addresses = [pre.deploy_contract(blobhash_bytecode) for _ in range(4)]\n    sender = pre.fund_eoa()\n\n    def blob_tx(address: Address, type: int):\n        return Transaction(\n            ty=type,\n            sender=sender,\n            to=address,\n            data=Hash(0),\n            gas_limit=3_000_000,\n            gas_price=10 if type < 2 else None,\n            access_list=[] if type >= 1 else None,\n            max_fee_per_gas=10,\n            max_priority_fee_per_gas=10,\n            max_fee_per_blob_gas=10 if type >= 3 else None,\n            blob_versioned_hashes=random_blob_hashes[0 : SpecHelpers.max_blobs_per_block()]\n            if type >= 3\n            else None,\n        )\n\n    blocks = [\n        Block(\n            txs=[\n                blob_tx(address=addresses[0], type=3),\n                blob_tx(address=addresses[0], type=2),\n            ]\n        ),\n        Block(\n            txs=[\n                blob_tx(address=addresses[1], type=2),\n                blob_tx(address=addresses[1], type=3),\n            ]\n        ),\n        Block(\n            txs=[\n                blob_tx(address=addresses[2], type=2),\n                blob_tx(address=addresses[3], type=3),\n            ],\n        ),\n    ]\n    post = {\n        Address(address): Account(\n            storage={i: random_blob_hashes[i] for i in range(SpecHelpers.max_blobs_per_block())}\n        )\n        if address in (addresses[1], addresses[3])\n        else Account(storage={i: 0 for i in range(SpecHelpers.max_blobs_per_block())})\n        for address in addresses\n    }\n    blockchain_test(\n        pre=pre,\n        blocks=blocks,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blobhash_opcode/index/test_cases/","title":"Test Blobhash Opcode - Test Cases","text":"

    Test cases generated from tests/cancun/eip4844_blobs/test_blobhash_opcode.py

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_blobhash_opcode.py:

    test_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test_engine-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test_engine-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test_engine-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test_engine-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test_engine-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test_engine-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test_engine-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-state_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-state_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-state_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-state_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-state_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-state_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-state_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test_engine-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test_engine-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test_engine-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test_engine-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test_engine-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test_engine-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test_engine-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-state_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-state_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-state_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-state_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-state_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-state_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-state_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test_engine-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test_engine-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test_engine-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test_engine-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test_engine-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test_engine-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test_engine-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-state_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-state_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-state_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-state_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-state_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-state_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-state_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test_engine-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test_engine-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test_engine-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test_engine-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test_engine-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test_engine-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test_engine-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-state_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-state_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-state_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-state_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-state_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-state_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-state_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test_engine-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test_engine-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test_engine-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test_engine-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test_engine-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test_engine-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test_engine-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-state_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-state_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-state_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-state_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-state_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-state_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-state_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test_engine-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test_engine-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test_engine-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test_engine-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test_engine-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test_engine-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test_engine-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-state_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-state_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-state_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-state_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-state_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-state_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-state_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test_engine-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test_engine-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test_engine-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test_engine-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test_engine-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test_engine-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test_engine-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-state_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-state_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-state_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-state_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-state_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-state_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-state_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test_engine-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test_engine-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test_engine-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test_engine-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test_engine-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test_engine-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test_engine-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-state_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-state_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-state_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-state_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-state_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-state_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-state_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_scenarios[fork_Cancun-blockchain_test-scenario_single_valid]\ntest_blobhash_scenarios[fork_Cancun-blockchain_test-scenario_repeated_valid]\ntest_blobhash_scenarios[fork_Cancun-blockchain_test-scenario_valid_invalid]\ntest_blobhash_scenarios[fork_Cancun-blockchain_test-scenario_varied_valid]\ntest_blobhash_scenarios[fork_Cancun-blockchain_test_engine-scenario_single_valid]\ntest_blobhash_scenarios[fork_Cancun-blockchain_test_engine-scenario_repeated_valid]\ntest_blobhash_scenarios[fork_Cancun-blockchain_test_engine-scenario_valid_invalid]\ntest_blobhash_scenarios[fork_Cancun-blockchain_test_engine-scenario_varied_valid]\ntest_blobhash_scenarios[fork_Prague-blockchain_test-scenario_single_valid]\ntest_blobhash_scenarios[fork_Prague-blockchain_test-scenario_repeated_valid]\ntest_blobhash_scenarios[fork_Prague-blockchain_test-scenario_valid_invalid]\ntest_blobhash_scenarios[fork_Prague-blockchain_test-scenario_varied_valid]\ntest_blobhash_scenarios[fork_Prague-blockchain_test_engine-scenario_single_valid]\ntest_blobhash_scenarios[fork_Prague-blockchain_test_engine-scenario_repeated_valid]\ntest_blobhash_scenarios[fork_Prague-blockchain_test_engine-scenario_valid_invalid]\ntest_blobhash_scenarios[fork_Prague-blockchain_test_engine-scenario_varied_valid]\ntest_blobhash_invalid_blob_index[fork_Cancun-blockchain_test-scenario_invalid_calls]\ntest_blobhash_invalid_blob_index[fork_Cancun-blockchain_test_engine-scenario_invalid_calls]\ntest_blobhash_invalid_blob_index[fork_Prague-blockchain_test-scenario_invalid_calls]\ntest_blobhash_invalid_blob_index[fork_Prague-blockchain_test_engine-scenario_invalid_calls]\ntest_blobhash_multiple_txs_in_block[fork_Cancun-blockchain_test]\ntest_blobhash_multiple_txs_in_block[fork_Cancun-blockchain_test_engine]\ntest_blobhash_multiple_txs_in_block[fork_Prague-blockchain_test]\ntest_blobhash_multiple_txs_in_block[fork_Prague-blockchain_test_engine]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip4844_blobs/test_blobhash_opcode.py\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts/","title":"Test Blobhash Opcode Contexts","text":"

    Documentation for tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py\n
    Tests BLOBHASH opcode in EIP-4844: Shard Blob Transactions

    Test case for BLOBHASH opcode calls across different contexts in EIP-4844: Shard Blob Transactions.

    "},{"location":"tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts/#tests.cancun.eip4844_blobs.test_blobhash_opcode_contexts.test_blobhash_opcode_contexts","title":"test_blobhash_opcode_contexts(opcode_context, blockchain_test)","text":"

    Tests that the BLOBHASH opcode functions correctly when called in different contexts including:

    • BLOBHASH opcode on the top level of the call stack.
    • BLOBHASH opcode on the max value.
    • BLOBHASH opcode on CALL, DELEGATECALL, STATICCALL, and CALLCODE.
    • BLOBHASH opcode on Initcode.
    • BLOBHASH opcode on CREATE and CREATE2.
    • BLOBHASH opcode on transaction types 0, 1 and 2.
    Source code in tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py
    @pytest.mark.compile_yul_with(\"Shanghai\")\ndef test_blobhash_opcode_contexts(opcode_context, blockchain_test: BlockchainTestFiller):\n    \"\"\"\n    Tests that the `BLOBHASH` opcode functions correctly when called in different\n    contexts including:\n\n    - `BLOBHASH` opcode on the top level of the call stack.\n    - `BLOBHASH` opcode on the max value.\n    - `BLOBHASH` opcode on `CALL`, `DELEGATECALL`, `STATICCALL`, and `CALLCODE`.\n    - `BLOBHASH` opcode on Initcode.\n    - `BLOBHASH` opcode on `CREATE` and `CREATE2`.\n    - `BLOBHASH` opcode on transaction types 0, 1 and 2.\n    \"\"\"\n    blockchain_test(\n        pre=opcode_context.get(\"pre\"),\n        blocks=[Block(txs=[opcode_context.get(\"tx\")])],\n        post=opcode_context.get(\"post\"),\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts/index/test_cases/","title":"Test Blobhash Opcode Contexts - Test Cases","text":"

    Test cases generated from tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py:

    test_blobhash_opcode_contexts[opcode_context_on_top_level_call_stack-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_top_level_call_stack-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_top_level_call_stack-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_top_level_call_stack-fork_Prague-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_max_value-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_max_value-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_max_value-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_max_value-fork_Prague-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_CALL-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_CALL-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_CALL-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_CALL-fork_Prague-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_DELEGATECALL-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_DELEGATECALL-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_DELEGATECALL-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_DELEGATECALL-fork_Prague-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_STATICCALL-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_STATICCALL-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_STATICCALL-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_STATICCALL-fork_Prague-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_CALLCODE-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_CALLCODE-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_CALLCODE-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_CALLCODE-fork_Prague-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_CREATE-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_CREATE-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_CREATE-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_CREATE-fork_Prague-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_CREATE2-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_CREATE2-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_CREATE2-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_CREATE2-fork_Prague-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_type_2_tx-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_type_2_tx-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_type_2_tx-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_type_2_tx-fork_Prague-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_type_1_tx-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_type_1_tx-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_type_1_tx-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_type_1_tx-fork_Prague-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_type_0_tx-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_type_0_tx-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_type_0_tx-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_type_0_tx-fork_Prague-blockchain_test_engine]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/","title":"Test Excess Blob Gas","text":"

    Documentation for tests/cancun/eip4844_blobs/test_excess_blob_gas.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_excess_blob_gas.py\n
    Tests excessBlobGas and blobGasUsed block fields for EIP-4844: Shard Blob Transactions

    Test excessBlobGas and blobGasUsed block fields for EIP-4844: Shard Blob Transactions.

    Adding a new test

    Add a function that is named test_<test_name> and takes at least the following arguments:

    • blockchain_test
    • env
    • pre
    • blocks
    • post
    • correct_excess_blob_gas

    The following arguments need to be parametrized or the test will not be generated:

    • new_blobs

    All other pytest.fixture fixtures can be parametrized to generate new combinations and test cases.

    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_correct_excess_blob_gas_calculation","title":"test_correct_excess_blob_gas_calculation(blockchain_test, env, pre, blocks, post, correct_excess_blob_gas)","text":"

    Test calculation of the excessBlobGas increase/decrease across multiple blocks with and without blobs:

    • With parent block containing [0, MAX_BLOBS_PER_BLOCK] blobs
    • With parent block containing [0, TARGET_BLOBS_PER_BLOCK] equivalent value of excess blob gas
    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\"parent_blobs\", range(0, SpecHelpers.max_blobs_per_block() + 1))\n@pytest.mark.parametrize(\"parent_excess_blobs\", range(0, SpecHelpers.target_blobs_per_block() + 1))\n@pytest.mark.parametrize(\"new_blobs\", [1])\ndef test_correct_excess_blob_gas_calculation(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    post: Mapping[Address, Account],\n    correct_excess_blob_gas: int,\n):\n    \"\"\"\n    Test calculation of the `excessBlobGas` increase/decrease across\n    multiple blocks with and without blobs:\n\n    - With parent block containing `[0, MAX_BLOBS_PER_BLOCK]` blobs\n    - With parent block containing `[0, TARGET_BLOBS_PER_BLOCK]` equivalent value of excess blob gas\n    \"\"\"  # noqa: E501\n    blockchain_test(\n        pre=pre,\n        post=post,\n        blocks=blocks,\n        genesis_environment=env,\n        tag=f\"expected_excess_blob_gas:{hex(correct_excess_blob_gas)}\",\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_correct_increasing_blob_gas_costs","title":"test_correct_increasing_blob_gas_costs(blockchain_test, env, pre, blocks, post, correct_excess_blob_gas)","text":"

    Test calculation of the excessBlobGas and blob gas tx costs at value points where the cost increases to interesting amounts:

    • At the first blob gas cost increase (1 to 2)
    • At total transaction data cost increase to > 2^32
    • At blob gas wei cost increase to > 2^32
    • At total transaction data cost increase to > 2^64
    • At blob gas wei cost increase to > 2^64
    • At blob gas wei cost increase of around current total Ether supply
    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\n    \"parent_excess_blobs\",\n    [g - 1 for g in BLOB_GAS_COST_INCREASES],\n)\n@pytest.mark.parametrize(\"parent_blobs\", [SpecHelpers.target_blobs_per_block() + 1])\n@pytest.mark.parametrize(\"new_blobs\", [1])\ndef test_correct_increasing_blob_gas_costs(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    post: Mapping[Address, Account],\n    correct_excess_blob_gas: int,\n):\n    \"\"\"\n    Test calculation of the `excessBlobGas` and blob gas tx costs at\n    value points where the cost increases to interesting amounts:\n\n    - At the first blob gas cost increase (1 to 2)\n    - At total transaction data cost increase to `> 2^32`\n    - At blob gas wei cost increase to `> 2^32`\n    - At total transaction data cost increase to `> 2^64`\n    - At blob gas wei cost increase to `> 2^64`\n    - At blob gas wei cost increase of around current total Ether supply\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        post=post,\n        blocks=blocks,\n        genesis_environment=env,\n        tag=f\"expected_excess_blob_gas:{hex(correct_excess_blob_gas)}\",\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_correct_decreasing_blob_gas_costs","title":"test_correct_decreasing_blob_gas_costs(blockchain_test, env, pre, blocks, post, correct_excess_blob_gas)","text":"

    Test calculation of the excessBlobGas and blob gas tx costs at value points where the cost decreases to interesting amounts.

    See test_correct_increasing_blob_gas_costs.

    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\n    \"parent_excess_blobs\",\n    [g for g in BLOB_GAS_COST_INCREASES],\n)\n@pytest.mark.parametrize(\"parent_blobs\", [SpecHelpers.target_blobs_per_block() - 1])\n@pytest.mark.parametrize(\"new_blobs\", [1])\ndef test_correct_decreasing_blob_gas_costs(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    post: Mapping[Address, Account],\n    correct_excess_blob_gas: int,\n):\n    \"\"\"\n    Test calculation of the `excessBlobGas` and blob gas tx costs at\n    value points where the cost decreases to interesting amounts.\n\n    See test_correct_increasing_blob_gas_costs.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        post=post,\n        blocks=blocks,\n        genesis_environment=env,\n        tag=f\"expected_excess_blob_gas:{hex(correct_excess_blob_gas)}\",\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_invalid_zero_excess_blob_gas_in_header","title":"test_invalid_zero_excess_blob_gas_in_header(blockchain_test, env, pre, blocks, correct_excess_blob_gas, header_excess_blob_gas)","text":"

    Test rejection of blocks where the excessBlobGas in the header drops to zero in a block with or without data blobs, but the excess blobs in the parent are greater than target.

    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\"header_excess_blob_gas\", [0])\n@pytest.mark.parametrize(\"new_blobs\", [0, 1])\n@pytest.mark.parametrize(\"parent_blobs\", range(0, SpecHelpers.max_blobs_per_block() + 1))\ndef test_invalid_zero_excess_blob_gas_in_header(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    correct_excess_blob_gas: int,\n    header_excess_blob_gas: Optional[int],\n):\n    \"\"\"\n    Test rejection of blocks where the `excessBlobGas` in the header drops to\n    zero in a block with or without data blobs, but the excess blobs in the parent are\n    greater than target.\n    \"\"\"\n    if header_excess_blob_gas is None:\n        raise Exception(\"test case is badly formatted\")\n\n    if header_excess_blob_gas == correct_excess_blob_gas:\n        raise Exception(\"invalid test case\")\n\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n        tag=\"-\".join(\n            [\n                f\"correct:{hex(correct_excess_blob_gas)}\",\n                f\"header:{hex(header_excess_blob_gas)}\",\n            ]\n        ),\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_invalid_blob_gas_used_in_header","title":"test_invalid_blob_gas_used_in_header(blockchain_test, env, pre, blocks, new_blobs, header_blob_gas_used)","text":"

    Test rejection of blocks where the blobGasUsed in the header is invalid:

    • blobGasUsed is not equal to the number of data blobs in the block
    • blobGasUsed is the max uint64 value
    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\n    \"new_blobs,header_blob_gas_used\",\n    all_invalid_blob_gas_used_combinations(),\n)\n@pytest.mark.parametrize(\"parent_blobs\", [0])\ndef test_invalid_blob_gas_used_in_header(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    new_blobs: int,\n    header_blob_gas_used: Optional[int],\n):\n    \"\"\"\n    Test rejection of blocks where the `blobGasUsed` in the header is invalid:\n\n    - `blobGasUsed` is not equal to the number of data blobs in the block\n    - `blobGasUsed` is the max uint64 value\n    \"\"\"\n    if header_blob_gas_used is None:\n        raise Exception(\"test case is badly formatted\")\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n        tag=\"-\".join(\n            [\n                f\"correct:{hex(new_blobs * Spec.GAS_PER_BLOB)}\",\n                f\"header:{hex(header_blob_gas_used)}\",\n            ]\n        ),\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_invalid_excess_blob_gas_above_target_change","title":"test_invalid_excess_blob_gas_above_target_change(blockchain_test, env, pre, blocks, correct_excess_blob_gas, header_excess_blob_gas)","text":"

    Test rejection of blocks where the excessBlobGas

    • decreases more than TARGET_BLOB_GAS_PER_BLOCK in a single block with zero blobs
    • increases more than TARGET_BLOB_GAS_PER_BLOCK in a single block with max blobs
    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\n    \"header_excess_blobs_delta,parent_blobs\",\n    [\n        (-1, 0),\n        (+1, SpecHelpers.max_blobs_per_block()),\n    ],\n    ids=[\"zero_blobs_decrease_more_than_expected\", \"max_blobs_increase_more_than_expected\"],\n)\n@pytest.mark.parametrize(\"new_blobs\", [1])\ndef test_invalid_excess_blob_gas_above_target_change(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    correct_excess_blob_gas: int,\n    header_excess_blob_gas: Optional[int],\n):\n    \"\"\"\n    Test rejection of blocks where the `excessBlobGas`\n\n    - decreases more than `TARGET_BLOB_GAS_PER_BLOCK` in a single block with zero blobs\n    - increases more than `TARGET_BLOB_GAS_PER_BLOCK` in a single block with max blobs\n    \"\"\"\n    if header_excess_blob_gas is None:\n        raise Exception(\"test case is badly formatted\")\n\n    if header_excess_blob_gas == correct_excess_blob_gas:\n        raise Exception(\"invalid test case\")\n\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n        tag=\"-\".join(\n            [\n                f\"correct:{hex(correct_excess_blob_gas)}\",\n                f\"header:{hex(header_excess_blob_gas)}\",\n            ]\n        ),\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_invalid_static_excess_blob_gas","title":"test_invalid_static_excess_blob_gas(blockchain_test, env, pre, blocks, correct_excess_blob_gas, parent_excess_blob_gas)","text":"

    Test rejection of blocks where the excessBlobGas remains unchanged but the parent blobs included are not TARGET_BLOBS_PER_BLOCK.

    Test is parametrized to MAX_BLOBS_PER_BLOCK and TARGET_BLOBS_PER_BLOCK.

    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\n    \"parent_blobs\",\n    [\n        b\n        for b in range(0, SpecHelpers.max_blobs_per_block() + 1)\n        if b != SpecHelpers.target_blobs_per_block()\n    ],\n)\n@pytest.mark.parametrize(\"parent_excess_blobs\", [1, SpecHelpers.target_blobs_per_block()])\n@pytest.mark.parametrize(\"new_blobs\", [1])\ndef test_invalid_static_excess_blob_gas(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    correct_excess_blob_gas: int,\n    parent_excess_blob_gas: int,\n):\n    \"\"\"\n    Test rejection of blocks where the `excessBlobGas` remains unchanged\n    but the parent blobs included are not `TARGET_BLOBS_PER_BLOCK`.\n\n    Test is parametrized to `MAX_BLOBS_PER_BLOCK` and `TARGET_BLOBS_PER_BLOCK`.\n    \"\"\"\n    blocks[-1].rlp_modifier = Header(excess_blob_gas=parent_excess_blob_gas)\n    blocks[-1].header_verify = None\n    blocks[-1].exception = BlockException.INCORRECT_EXCESS_BLOB_GAS\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n        tag=\"-\".join(\n            [\n                f\"correct:{hex(correct_excess_blob_gas)}\",\n                f\"header:{hex(parent_excess_blob_gas)}\",\n            ]\n        ),\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_invalid_excess_blob_gas_target_blobs_increase_from_zero","title":"test_invalid_excess_blob_gas_target_blobs_increase_from_zero(blockchain_test, env, pre, blocks, correct_excess_blob_gas, header_excess_blob_gas)","text":"

    Test rejection of blocks where the excessBlobGas increases from zero, even when the included blobs are on or below target.

    Test is parametrized according to [0, TARGET_BLOBS_PER_BLOCK new blobs.

    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\"header_excess_blobs_delta\", range(1, SpecHelpers.max_blobs_per_block()))\n@pytest.mark.parametrize(\"parent_blobs\", range(0, SpecHelpers.target_blobs_per_block() + 1))\n@pytest.mark.parametrize(\"parent_excess_blobs\", [0])  # Start at 0\n@pytest.mark.parametrize(\"new_blobs\", [1])\ndef test_invalid_excess_blob_gas_target_blobs_increase_from_zero(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    correct_excess_blob_gas: int,\n    header_excess_blob_gas: Optional[int],\n):\n    \"\"\"\n    Test rejection of blocks where the `excessBlobGas` increases from zero,\n    even when the included blobs are on or below target.\n\n    Test is parametrized according to `[0, TARGET_BLOBS_PER_BLOCK` new blobs.\n    \"\"\"\n    if header_excess_blob_gas is None:\n        raise Exception(\"test case is badly formatted\")\n\n    if header_excess_blob_gas == correct_excess_blob_gas:\n        raise Exception(\"invalid test case\")\n\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n        tag=\"-\".join(\n            [\n                f\"correct:{hex(correct_excess_blob_gas)}\",\n                f\"header:{hex(header_excess_blob_gas)}\",\n            ]\n        ),\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target","title":"test_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target(blockchain_test, env, pre, blocks, correct_excess_blob_gas, header_excess_blob_gas)","text":"

    Test rejection of blocks where the excessBlobGas does not increase from zero, even when the included blobs is above target.

    Test is parametrized to [TARGET_BLOBS_PER_BLOCK+1, MAX_BLOBS_PER_BLOCK] new blobs.

    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\"header_excess_blob_gas\", [0])\n@pytest.mark.parametrize(\n    \"parent_blobs\",\n    range(SpecHelpers.target_blobs_per_block() + 1, SpecHelpers.max_blobs_per_block() + 1),\n)\n@pytest.mark.parametrize(\"parent_excess_blobs\", [0])  # Start at 0\n@pytest.mark.parametrize(\"new_blobs\", [1])\ndef test_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    correct_excess_blob_gas: int,\n    header_excess_blob_gas: Optional[int],\n):\n    \"\"\"\n    Test rejection of blocks where the `excessBlobGas` does not increase from\n    zero, even when the included blobs is above target.\n\n    Test is parametrized to `[TARGET_BLOBS_PER_BLOCK+1, MAX_BLOBS_PER_BLOCK]` new blobs.\n    \"\"\"\n    if header_excess_blob_gas is None:\n        raise Exception(\"test case is badly formatted\")\n\n    if header_excess_blob_gas == correct_excess_blob_gas:\n        raise Exception(\"invalid test case\")\n\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n        tag=\"-\".join(\n            [\n                f\"correct:{hex(correct_excess_blob_gas)}\",\n                f\"header:{hex(header_excess_blob_gas)}\",\n            ]\n        ),\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_invalid_excess_blob_gas_change","title":"test_invalid_excess_blob_gas_change(blockchain_test, env, pre, blocks, correct_excess_blob_gas, header_excess_blob_gas)","text":"

    Test rejection of blocks where the excessBlobGas changes to an invalid value.

    Given a parent block containing [0, MAX_BLOBS_PER_BLOCK] blobs, test an invalid excessBlobGas value by changing it by [-TARGET_BLOBS_PER_BLOCK, TARGET_BLOBS_PER_BLOCK] from the correct value.

    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\n    \"parent_blobs,header_excess_blobs_delta\",\n    itertools.product(\n        # parent_blobs\n        range(0, SpecHelpers.max_blobs_per_block() + 1),\n        # header_excess_blobs_delta (from correct value)\n        [\n            x\n            for x in range(\n                -SpecHelpers.target_blobs_per_block(), SpecHelpers.target_blobs_per_block() + 1\n            )\n            if x != 0\n        ],\n    ),\n)\n@pytest.mark.parametrize(\"new_blobs\", [1])\ndef test_invalid_excess_blob_gas_change(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    correct_excess_blob_gas: int,\n    header_excess_blob_gas: Optional[int],\n):\n    \"\"\"\n    Test rejection of blocks where the `excessBlobGas` changes to an invalid\n    value.\n\n    Given a parent block containing `[0, MAX_BLOBS_PER_BLOCK]` blobs, test an invalid\n    `excessBlobGas` value by changing it by `[-TARGET_BLOBS_PER_BLOCK, TARGET_BLOBS_PER_BLOCK]`\n    from the correct value.\n    \"\"\"\n    if header_excess_blob_gas is None:\n        raise Exception(\"test case is badly formatted\")\n\n    if header_excess_blob_gas == correct_excess_blob_gas:\n        raise Exception(\"invalid test case\")\n\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n        tag=\"-\".join(\n            [\n                f\"correct:{hex(correct_excess_blob_gas)}\",\n                f\"header:{hex(header_excess_blob_gas)}\",\n            ]\n        ),\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_invalid_negative_excess_blob_gas","title":"test_invalid_negative_excess_blob_gas(blockchain_test, env, pre, blocks, correct_excess_blob_gas, header_excess_blob_gas)","text":"

    Test rejection of blocks where the excessBlobGas changes to the two's complement equivalent of the negative value after subtracting target blobs.

    Reasoning is that the excessBlobGas is a uint64, so it cannot be negative, and we test for a potential underflow here.

    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\n    \"header_excess_blob_gas\",\n    [(2**64 + (x * Spec.GAS_PER_BLOB)) for x in range(-SpecHelpers.target_blobs_per_block(), 0)],\n)\n@pytest.mark.parametrize(\"parent_blobs\", range(SpecHelpers.target_blobs_per_block()))\n@pytest.mark.parametrize(\"new_blobs\", [1])\n@pytest.mark.parametrize(\"parent_excess_blobs\", range(SpecHelpers.target_blobs_per_block()))\ndef test_invalid_negative_excess_blob_gas(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    correct_excess_blob_gas: int,\n    header_excess_blob_gas: Optional[int],\n):\n    \"\"\"\n    Test rejection of blocks where the `excessBlobGas` changes to the two's\n    complement equivalent of the negative value after subtracting target blobs.\n\n    Reasoning is that the `excessBlobGas` is a `uint64`, so it cannot be negative, and\n    we test for a potential underflow here.\n    \"\"\"\n    if header_excess_blob_gas is None:\n        raise Exception(\"test case is badly formatted\")\n\n    if header_excess_blob_gas == correct_excess_blob_gas:\n        raise Exception(\"invalid test case\")\n\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n        tag=\"-\".join(\n            [\n                f\"correct:{hex(correct_excess_blob_gas)}\",\n                f\"header:{hex(header_excess_blob_gas)}\",\n            ]\n        ),\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_invalid_non_multiple_excess_blob_gas","title":"test_invalid_non_multiple_excess_blob_gas(blockchain_test, env, pre, blocks, correct_excess_blob_gas, header_excess_blob_gas)","text":"

    Test rejection of blocks where the excessBlobGas changes to a value that is not a multiple of Spec.GAS_PER_BLOB`:

    • Parent block contains TARGET_BLOBS_PER_BLOCK + 1 blobs, but excessBlobGas is off by \u00b11
    • Parent block contains TARGET_BLOBS_PER_BLOCK - 1 blobs, but excessBlobGas is off by \u00b11
    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\n    \"parent_blobs,header_excess_blob_gas_delta\",\n    [\n        (SpecHelpers.target_blobs_per_block() + 1, 1),\n        (SpecHelpers.target_blobs_per_block() + 1, Spec.GAS_PER_BLOB - 1),\n        (SpecHelpers.target_blobs_per_block() - 1, -1),\n        (SpecHelpers.target_blobs_per_block() - 1, -(Spec.GAS_PER_BLOB - 1)),\n    ],\n)\n@pytest.mark.parametrize(\"new_blobs\", [1])\n@pytest.mark.parametrize(\"parent_excess_blobs\", [SpecHelpers.target_blobs_per_block() + 1])\ndef test_invalid_non_multiple_excess_blob_gas(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    correct_excess_blob_gas: int,\n    header_excess_blob_gas: Optional[int],\n):\n    \"\"\"\n    Test rejection of blocks where the `excessBlobGas` changes to a value that\n    is not a multiple of Spec.GAS_PER_BLOB`:\n\n    - Parent block contains `TARGET_BLOBS_PER_BLOCK + 1` blobs, but `excessBlobGas` is off by +/-1\n    - Parent block contains `TARGET_BLOBS_PER_BLOCK - 1` blobs, but `excessBlobGas` is off by +/-1\n    \"\"\"\n    if header_excess_blob_gas is None:\n        raise Exception(\"test case is badly formatted\")\n\n    if header_excess_blob_gas == correct_excess_blob_gas:\n        raise Exception(\"invalid test case\")\n\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n        tag=\"-\".join(\n            [\n                f\"correct:{hex(correct_excess_blob_gas)}\",\n                f\"header:{hex(header_excess_blob_gas)}\",\n            ]\n        ),\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/index/test_cases/","title":"Test Excess Blob Gas - Test Cases","text":"

    Test cases generated from tests/cancun/eip4844_blobs/test_excess_blob_gas.py

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_excess_blob_gas.py:

    test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_6]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_17]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_264]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_564]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_829]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_1129]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_1229]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_17]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_264]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_564]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_829]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_1129]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_1229]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_17]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_264]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_564]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_829]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_1129]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_1229]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_17]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_264]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_564]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_829]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_1129]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_1229]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_18]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_265]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_565]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_830]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_1130]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_1230]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_18]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_265]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_565]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_830]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_1130]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_1230]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_18]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_265]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_565]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_830]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_1130]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_1230]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_18]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_265]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_565]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_830]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_1130]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_1230]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_1-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_1-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_2-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_2-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_3-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_3-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_4-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_4-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_5-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_5-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_6-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_6-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_1-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_1-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_2-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_2-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_3-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_3-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_4-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_4-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_5-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_5-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_6-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_6-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_1-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_1-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_2-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_2-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_3-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_3-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_4-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_4-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_5-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_5-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_6-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_6-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_1-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_1-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_2-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_2-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_3-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_3-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_4-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_4-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_5-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_5-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_6-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_6-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_18446744073709551615]\ntest_invalid_excess_blob_gas_above_target_change[fork_Cancun-blockchain_test-new_blobs_1-zero_blobs_decrease_more_than_expected]\ntest_invalid_excess_blob_gas_above_target_change[fork_Cancun-blockchain_test-new_blobs_1-max_blobs_increase_more_than_expected]\ntest_invalid_excess_blob_gas_above_target_change[fork_Cancun-blockchain_test_engine-new_blobs_1-zero_blobs_decrease_more_than_expected]\ntest_invalid_excess_blob_gas_above_target_change[fork_Cancun-blockchain_test_engine-new_blobs_1-max_blobs_increase_more_than_expected]\ntest_invalid_excess_blob_gas_above_target_change[fork_Prague-blockchain_test-new_blobs_1-zero_blobs_decrease_more_than_expected]\ntest_invalid_excess_blob_gas_above_target_change[fork_Prague-blockchain_test-new_blobs_1-max_blobs_increase_more_than_expected]\ntest_invalid_excess_blob_gas_above_target_change[fork_Prague-blockchain_test_engine-new_blobs_1-zero_blobs_decrease_more_than_expected]\ntest_invalid_excess_blob_gas_above_target_change[fork_Prague-blockchain_test_engine-new_blobs_1-max_blobs_increase_more_than_expected]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_0]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_1]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_2]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_4]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_5]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_6]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_0]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_1]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_2]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_4]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_5]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_6]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_0]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_1]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_2]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_4]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_5]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_6]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_0]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_1]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_2]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_4]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_5]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_6]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_0]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_1]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_2]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_4]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_5]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_6]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_0]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_1]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_2]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_4]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_5]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_6]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_0]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_1]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_2]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_4]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_5]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_6]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_0]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_1]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_2]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_4]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_5]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_6]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_5]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_4-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_5-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_6-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_4-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_5-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_6-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_4-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_5-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_6-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_4-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_5-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_6-header_excess_blob_gas_0]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_3]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_non_multiple_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_4-new_blobs_1-parent_blobs_4-header_excess_blob_gas_delta_1]\ntest_invalid_non_multiple_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_4-new_blobs_1-parent_blobs_4-header_excess_blob_gas_delta_131071]\ntest_invalid_non_multiple_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_4-new_blobs_1-parent_blobs_2-header_excess_blob_gas_delta_-1]\ntest_invalid_non_multiple_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_4-new_blobs_1-parent_blobs_2-header_excess_blob_gas_delta_-131071]\ntest_invalid_non_multiple_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_4-new_blobs_1-parent_blobs_4-header_excess_blob_gas_delta_1]\ntest_invalid_non_multiple_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_4-new_blobs_1-parent_blobs_4-header_excess_blob_gas_delta_131071]\ntest_invalid_non_multiple_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_4-new_blobs_1-parent_blobs_2-header_excess_blob_gas_delta_-1]\ntest_invalid_non_multiple_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_4-new_blobs_1-parent_blobs_2-header_excess_blob_gas_delta_-131071]\ntest_invalid_non_multiple_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_4-new_blobs_1-parent_blobs_4-header_excess_blob_gas_delta_1]\ntest_invalid_non_multiple_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_4-new_blobs_1-parent_blobs_4-header_excess_blob_gas_delta_131071]\ntest_invalid_non_multiple_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_4-new_blobs_1-parent_blobs_2-header_excess_blob_gas_delta_-1]\ntest_invalid_non_multiple_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_4-new_blobs_1-parent_blobs_2-header_excess_blob_gas_delta_-131071]\ntest_invalid_non_multiple_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_4-new_blobs_1-parent_blobs_4-header_excess_blob_gas_delta_1]\ntest_invalid_non_multiple_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_4-new_blobs_1-parent_blobs_4-header_excess_blob_gas_delta_131071]\ntest_invalid_non_multiple_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_4-new_blobs_1-parent_blobs_2-header_excess_blob_gas_delta_-1]\ntest_invalid_non_multiple_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_4-new_blobs_1-parent_blobs_2-header_excess_blob_gas_delta_-131071]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip4844_blobs/test_excess_blob_gas.py\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition/","title":"Test Excess Blob Gas Fork Transition","text":"

    Documentation for tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py\n
    Tests excessBlobGas and blobGasUsed block fields for EIP-4844: Shard Blob Transactions at fork transition.

    Test excessBlobGas and blobGasUsed block fields for EIP-4844: Shard Blob Transactions at fork transition.

    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition/#tests.cancun.eip4844_blobs.test_excess_blob_gas_fork_transition.test_invalid_pre_fork_block_with_blob_fields","title":"test_invalid_pre_fork_block_with_blob_fields(blockchain_test, env, pre, pre_fork_blocks, excess_blob_gas_present, blob_gas_used_present)","text":"

    Test block rejection when excessBlobGas and/or blobGasUsed fields are present on a pre-fork block.

    Blocks sent by NewPayloadV2 (Shanghai) that contain excessBlobGas and blobGasUsed fields must be rejected with the appropriate EngineAPIError.InvalidParams error error.

    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py
    @pytest.mark.parametrize(\n    \"excess_blob_gas_present,blob_gas_used_present\",\n    [\n        (True, False),\n        (False, True),\n        (True, True),\n    ],\n)\ndef test_invalid_pre_fork_block_with_blob_fields(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    pre_fork_blocks: List[Block],\n    excess_blob_gas_present: bool,\n    blob_gas_used_present: bool,\n):\n    \"\"\"\n    Test block rejection when `excessBlobGas` and/or `blobGasUsed` fields are present on a pre-fork\n    block.\n\n    Blocks sent by NewPayloadV2 (Shanghai) that contain `excessBlobGas` and `blobGasUsed` fields\n    must be rejected with the appropriate `EngineAPIError.InvalidParams` error error.\n    \"\"\"\n    header_modifier = Header(\n        excess_blob_gas=0 if excess_blob_gas_present else None,\n        blob_gas_used=0 if blob_gas_used_present else None,\n    )\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=pre_fork_blocks[:-1]\n        + [\n            Block(\n                timestamp=(FORK_TIMESTAMP - 1),\n                rlp_modifier=header_modifier,\n                exception=BlockException.INCORRECT_BLOCK_FORMAT,\n                engine_api_error_code=EngineAPIError.InvalidParams,\n            )\n        ],\n        genesis_environment=env,\n        tag=\"invalid_pre_fork_blob_fields\",\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition/#tests.cancun.eip4844_blobs.test_excess_blob_gas_fork_transition.test_invalid_post_fork_block_without_blob_fields","title":"test_invalid_post_fork_block_without_blob_fields(blockchain_test, env, pre, pre_fork_blocks, excess_blob_gas_missing, blob_gas_used_missing)","text":"

    Test block rejection when excessBlobGas and/or blobGasUsed fields are missing on a post-fork block.

    Blocks sent by NewPayloadV3 (Cancun) without excessBlobGas and blobGasUsed fields must be rejected with the appropriate EngineAPIError.InvalidParams error.

    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py
    @pytest.mark.parametrize(\n    \"excess_blob_gas_missing,blob_gas_used_missing\",\n    [\n        (True, False),\n        (False, True),\n        (True, True),\n    ],\n)\ndef test_invalid_post_fork_block_without_blob_fields(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    pre_fork_blocks: List[Block],\n    excess_blob_gas_missing: bool,\n    blob_gas_used_missing: bool,\n):\n    \"\"\"\n    Test block rejection when `excessBlobGas` and/or `blobGasUsed` fields are missing on a\n    post-fork block.\n\n    Blocks sent by NewPayloadV3 (Cancun) without `excessBlobGas` and `blobGasUsed` fields must be\n    rejected with the appropriate `EngineAPIError.InvalidParams` error.\n    \"\"\"\n    header_modifier = Header()\n    if excess_blob_gas_missing:\n        header_modifier.excess_blob_gas = Header.REMOVE_FIELD\n    if blob_gas_used_missing:\n        header_modifier.blob_gas_used = Header.REMOVE_FIELD\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=pre_fork_blocks\n        + [\n            Block(\n                timestamp=FORK_TIMESTAMP,\n                rlp_modifier=header_modifier,\n                exception=BlockException.INCORRECT_BLOCK_FORMAT,\n                engine_api_error_code=EngineAPIError.InvalidParams,\n            )\n        ],\n        genesis_environment=env,\n        tag=\"blob_fields_missing_post_fork\",\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition/#tests.cancun.eip4844_blobs.test_excess_blob_gas_fork_transition.test_fork_transition_excess_blob_gas","title":"test_fork_transition_excess_blob_gas(blockchain_test, env, pre, pre_fork_blocks, post_fork_blocks, post)","text":"

    Test excessBlobGas calculation in the header when the fork is activated.

    Also produce enough blocks to test the blob gas price increase when the block is full with SpecHelpers.max_blobs_per_block() blobs.

    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py
    @pytest.mark.parametrize(\n    \"post_fork_block_count,blob_count_per_block\",\n    [\n        (\n            SpecHelpers.get_min_excess_blobs_for_blob_gas_price(2)\n            // (SpecHelpers.max_blobs_per_block() - SpecHelpers.target_blobs_per_block())\n            + 2,\n            SpecHelpers.max_blobs_per_block(),\n        ),\n        (10, 0),\n        (10, SpecHelpers.target_blobs_per_block()),\n    ],\n    ids=[\"max_blobs\", \"no_blobs\", \"target_blobs\"],\n)\ndef test_fork_transition_excess_blob_gas(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    pre_fork_blocks: List[Block],\n    post_fork_blocks: List[Block],\n    post: Mapping[Address, Account],\n):\n    \"\"\"\n    Test `excessBlobGas` calculation in the header when the fork is activated.\n\n    Also produce enough blocks to test the blob gas price increase when the block is full with\n    `SpecHelpers.max_blobs_per_block()` blobs.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        post=post,\n        blocks=pre_fork_blocks + post_fork_blocks,\n        genesis_environment=env,\n        tag=\"correct_initial_blob_gas_calc\",\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition/index/test_cases/","title":"Test Excess Blob Gas Fork Transition - Test Cases","text":"

    Test cases generated from tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py:

    test_invalid_pre_fork_block_with_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_present_True-blob_gas_used_present_False]\ntest_invalid_pre_fork_block_with_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_present_False-blob_gas_used_present_True]\ntest_invalid_pre_fork_block_with_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_present_True-blob_gas_used_present_True]\ntest_invalid_pre_fork_block_with_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-excess_blob_gas_present_True-blob_gas_used_present_False]\ntest_invalid_pre_fork_block_with_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-excess_blob_gas_present_False-blob_gas_used_present_True]\ntest_invalid_pre_fork_block_with_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-excess_blob_gas_present_True-blob_gas_used_present_True]\ntest_invalid_post_fork_block_without_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_missing_True-blob_gas_used_missing_False]\ntest_invalid_post_fork_block_without_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_missing_False-blob_gas_used_missing_True]\ntest_invalid_post_fork_block_without_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_missing_True-blob_gas_used_missing_True]\ntest_invalid_post_fork_block_without_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-excess_blob_gas_missing_True-blob_gas_used_missing_False]\ntest_invalid_post_fork_block_without_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-excess_blob_gas_missing_False-blob_gas_used_missing_True]\ntest_invalid_post_fork_block_without_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-excess_blob_gas_missing_True-blob_gas_used_missing_True]\ntest_fork_transition_excess_blob_gas[fork_ShanghaiToCancunAtTime15k-blockchain_test-max_blobs]\ntest_fork_transition_excess_blob_gas[fork_ShanghaiToCancunAtTime15k-blockchain_test-no_blobs]\ntest_fork_transition_excess_blob_gas[fork_ShanghaiToCancunAtTime15k-blockchain_test-target_blobs]\ntest_fork_transition_excess_blob_gas[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-max_blobs]\ntest_fork_transition_excess_blob_gas[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-no_blobs]\ntest_fork_transition_excess_blob_gas[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-target_blobs]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py\n
    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile/","title":"Test Point Evaluation Precompile","text":"

    Documentation for tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py\n
    Tests point evaluation precompile for EIP-4844: Shard Blob Transactions

    Test point evaluation precompile for EIP-4844: Shard Blob Transactions.

    Adding a new test

    Add a function that is named test_<test_name> and takes at least the following arguments:

    • blockchain_test | state_test
    • pre
    • tx
    • post

    The following arguments need to be parametrized or the test will not be generated:

    • versioned_hash
    • kzg_commitment
    • z
    • y
    • kzg_proof
    • result

    These values correspond to a single call of the precompile, and result refers to whether the call should succeed or fail.

    All other pytest.fixture fixtures can be parametrized to generate new combinations and test cases.

    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile/#tests.cancun.eip4844_blobs.test_point_evaluation_precompile.test_valid_inputs","title":"test_valid_inputs(state_test, pre, tx, post)","text":"

    Test valid sanity precompile calls that are expected to succeed.

    • kzg_commitment and kzg_proof are set to values such that p(z)==0 for all values of z, hence y is tested to be zero, and call to be successful.
    Source code in tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py
    @pytest.mark.parametrize(\n    \"z,y,kzg_commitment,kzg_proof,versioned_hash\",\n    [\n        pytest.param(Spec.BLS_MODULUS - 1, 0, INF_POINT, INF_POINT, None, id=\"in_bounds_z\"),\n    ],\n)\n@pytest.mark.parametrize(\"result\", [Result.SUCCESS])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_valid_inputs(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Test valid sanity precompile calls that are expected to succeed.\n\n    - `kzg_commitment` and `kzg_proof` are set to values such that `p(z)==0` for all values of `z`,\n    hence `y` is tested to be zero, and call to be successful.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile/#tests.cancun.eip4844_blobs.test_point_evaluation_precompile.test_invalid_inputs","title":"test_invalid_inputs(state_test, pre, tx, post)","text":"

    Test invalid precompile calls:

    • Out of bounds inputs z and y
    • Correct proof, commitment, z and y, but incorrect lengths
    • Null inputs
    • Zero inputs
    • Correct proof, commitment, z and y, but incorrect version versioned hash
    Source code in tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py
    @pytest.mark.parametrize(\n    \"z,y,kzg_commitment,kzg_proof,versioned_hash\",\n    [\n        (Spec.BLS_MODULUS, 0, INF_POINT, INF_POINT, None),\n        (0, Spec.BLS_MODULUS, INF_POINT, INF_POINT, None),\n        (Z, 0, INF_POINT, INF_POINT[:-1], None),\n        (Z, 0, INF_POINT, INF_POINT[0:1], None),\n        (Z, 0, INF_POINT, INF_POINT + bytes([0]), None),\n        (Z, 0, INF_POINT, INF_POINT + bytes([0] * 1023), None),\n        (bytes(), bytes(), bytes(), bytes(), bytes()),\n        (0, 0, 0, 0, 0),\n        (0, 0, 0, 0, None),\n        (Z, 0, INF_POINT, INF_POINT, Spec.kzg_to_versioned_hash(0xC0 << 376, 0x00)),\n        (Z, 0, INF_POINT, INF_POINT, Spec.kzg_to_versioned_hash(0xC0 << 376, 0x02)),\n        (Z, 0, INF_POINT, INF_POINT, Spec.kzg_to_versioned_hash(0xC0 << 376, 0xFF)),\n    ],\n    ids=[\n        \"out_of_bounds_z\",\n        \"out_of_bounds_y\",\n        \"correct_proof_1_input_too_short\",\n        \"correct_proof_1_input_too_short_2\",\n        \"correct_proof_1_input_too_long\",\n        \"correct_proof_1_input_extra_long\",\n        \"null_inputs\",\n        \"zeros_inputs\",\n        \"zeros_inputs_correct_versioned_hash\",\n        \"correct_proof_1_incorrect_versioned_hash_version_0x00\",\n        \"correct_proof_1_incorrect_versioned_hash_version_0x02\",\n        \"correct_proof_1_incorrect_versioned_hash_version_0xff\",\n    ],\n)\n@pytest.mark.parametrize(\"result\", [Result.FAILURE])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_invalid_inputs(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Test invalid precompile calls:\n\n    - Out of bounds inputs `z` and `y`\n    - Correct proof, commitment, z and y, but incorrect lengths\n    - Null inputs\n    - Zero inputs\n    - Correct proof, commitment, z and y, but incorrect version versioned hash\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile/#tests.cancun.eip4844_blobs.test_point_evaluation_precompile.test_external_vectors","title":"test_external_vectors(state_test, pre, tx, post)","text":"

    Test precompile calls using external test vectors compiled from different sources:

    • go_kzg_4844_verify_kzg_proof.json: test vectors from the go-kzg-4844 repository.
    Source code in tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py
    @pytest.mark.parametrize(\n    \"z,y,kzg_commitment,kzg_proof,result\",\n    all_external_vectors(),\n)\n@pytest.mark.parametrize(\"versioned_hash\", [None])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_external_vectors(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Test precompile calls using external test vectors compiled from different sources:\n\n    - `go_kzg_4844_verify_kzg_proof.json`: test vectors from the\n    [go-kzg-4844](https://github.com/crate-crypto/go-kzg-4844) repository.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile/#tests.cancun.eip4844_blobs.test_point_evaluation_precompile.test_call_opcode_types","title":"test_call_opcode_types(state_test, pre, tx, post)","text":"

    Test calling the Point Evaluation Precompile with different call types, gas and parameter configuration:

    • Using CALL, DELEGATECALL, CALLCODE and STATICCALL.
    • Using correct and incorrect proofs
    • Using barely insufficient gas
    Source code in tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py
    @pytest.mark.parametrize(\n    \"call_gas,y,result\",\n    [\n        (Spec.POINT_EVALUATION_PRECOMPILE_GAS, 0, Result.SUCCESS),\n        (Spec.POINT_EVALUATION_PRECOMPILE_GAS, 1, Result.FAILURE),\n        (Spec.POINT_EVALUATION_PRECOMPILE_GAS - 1, 0, Result.OUT_OF_GAS),\n    ],\n    ids=[\"correct\", \"incorrect\", \"insufficient_gas\"],\n)\n@pytest.mark.with_all_call_opcodes\n@pytest.mark.parametrize(\n    \"z,kzg_commitment,kzg_proof,versioned_hash\",\n    [[Z, INF_POINT, INF_POINT, None]],\n    ids=[\"\"],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_call_opcode_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Test calling the Point Evaluation Precompile with different call types, gas\n    and parameter configuration:\n\n    - Using CALL, DELEGATECALL, CALLCODE and STATICCALL.\n    - Using correct and incorrect proofs\n    - Using barely insufficient gas\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile/#tests.cancun.eip4844_blobs.test_point_evaluation_precompile.test_tx_entry_point","title":"test_tx_entry_point(state_test, precompile_input, call_gas, pre, proof_correct)","text":"

    Test calling the Point Evaluation Precompile directly as transaction entry point, and measure the gas consumption.

    • Using gas_limit with exact necessary gas, insufficient gas and extra gas.
    • Using correct and incorrect proofs
    Source code in tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py
    @pytest.mark.parametrize(\n    \"call_gas\",\n    [\n        (Spec.POINT_EVALUATION_PRECOMPILE_GAS),\n        (Spec.POINT_EVALUATION_PRECOMPILE_GAS + 1),\n        (Spec.POINT_EVALUATION_PRECOMPILE_GAS - 1),\n    ],\n    ids=[\"exact_gas\", \"extra_gas\", \"insufficient_gas\"],\n)\n@pytest.mark.parametrize(\n    \"z,y,kzg_commitment,kzg_proof,versioned_hash,proof_correct\",\n    [\n        [Z, 0, INF_POINT, INF_POINT, None, True],\n        [Z, 1, INF_POINT, INF_POINT, None, False],\n    ],\n    ids=[\"correct_proof\", \"incorrect_proof\"],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_tx_entry_point(\n    state_test: StateTestFiller,\n    precompile_input: bytes,\n    call_gas: int,\n    pre: Alloc,\n    proof_correct: bool,\n):\n    \"\"\"\n    Test calling the Point Evaluation Precompile directly as\n    transaction entry point, and measure the gas consumption.\n\n    - Using `gas_limit` with exact necessary gas, insufficient gas and extra gas.\n    - Using correct and incorrect proofs\n    \"\"\"\n    start_balance = 10**18\n    sender = pre.fund_eoa(amount=start_balance)\n\n    # Gas is appended the intrinsic gas cost of the transaction\n    intrinsic_gas_cost = 21_000 + eip_2028_transaction_data_cost(precompile_input)\n\n    # Consumed gas will only be the precompile gas if the proof is correct and\n    # the call gas is sufficient.\n    # Otherwise, the call gas will be consumed in full.\n    consumed_gas = (\n        Spec.POINT_EVALUATION_PRECOMPILE_GAS\n        if call_gas >= Spec.POINT_EVALUATION_PRECOMPILE_GAS and proof_correct\n        else call_gas\n    ) + intrinsic_gas_cost\n\n    fee_per_gas = 7\n\n    tx = Transaction(\n        sender=sender,\n        data=precompile_input,\n        to=Address(Spec.POINT_EVALUATION_PRECOMPILE_ADDRESS),\n        gas_limit=call_gas + intrinsic_gas_cost,\n        gas_price=fee_per_gas,\n    )\n\n    post = {\n        sender: Account(\n            nonce=1,\n            balance=start_balance - (consumed_gas * fee_per_gas),\n        )\n    }\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile/#tests.cancun.eip4844_blobs.test_point_evaluation_precompile.test_precompile_before_fork","title":"test_precompile_before_fork(state_test, pre, tx, precompile_caller_address)","text":"

    Test calling the Point Evaluation Precompile before the appropriate fork.

    Source code in tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py
    @pytest.mark.parametrize(\n    \"z,y,kzg_commitment,kzg_proof,versioned_hash\",\n    [[Z, 0, INF_POINT, INF_POINT, None]],\n    ids=[\"correct_proof\"],\n)\n@pytest.mark.parametrize(\"precompile_caller_storage\", [{}], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_caller_balance\", [1], ids=[\"\"])\n@pytest.mark.parametrize(\n    \"precompile_caller_code\",\n    [\n        Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n        + Op.SSTORE(\n            Op.NUMBER,\n            Op.CALL(\n                address=Spec.POINT_EVALUATION_PRECOMPILE_ADDRESS,\n                value=1,\n                args_size=Op.CALLDATASIZE,\n            ),\n        )\n    ],\n    ids=[\"\"],\n)\n@pytest.mark.valid_at_transition_to(\"Cancun\")\ndef test_precompile_before_fork(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    tx: Transaction,\n    precompile_caller_address: Address,\n):\n    \"\"\"\n    Test calling the Point Evaluation Precompile before the appropriate fork.\n    \"\"\"\n    post = {\n        precompile_caller_address: Account(\n            storage={1: 1},\n            # The call succeeds because precompile is not there yet\n        ),\n        Address(Spec.POINT_EVALUATION_PRECOMPILE_ADDRESS): Account(\n            balance=1,\n        ),\n    }\n\n    state_test(\n        pre=pre,\n        env=Environment(timestamp=7_500),\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile/#tests.cancun.eip4844_blobs.test_point_evaluation_precompile.test_precompile_during_fork","title":"test_precompile_during_fork(blockchain_test, pre, precompile_caller_address, precompile_input, sender)","text":"

    Test calling the Point Evaluation Precompile before the appropriate fork.

    Source code in tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py
    @pytest.mark.parametrize(\n    \"z,y,kzg_commitment,kzg_proof,versioned_hash\",\n    [[Z, 0, INF_POINT, INF_POINT, None]],\n    ids=[\"correct_proof\"],\n)\n@pytest.mark.parametrize(\"precompile_caller_storage\", [{}], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_caller_balance\", [len(PRE_FORK_BLOCK_RANGE)], ids=[\"\"])\n@pytest.mark.parametrize(\n    \"precompile_caller_code\",\n    [\n        Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n        + Op.SSTORE(\n            Op.NUMBER,\n            Op.CALL(\n                address=Spec.POINT_EVALUATION_PRECOMPILE_ADDRESS,\n                value=1,\n                args_size=Op.CALLDATASIZE,\n            ),\n        )\n    ],\n    ids=[\"\"],\n)\n@pytest.mark.valid_at_transition_to(\"Cancun\")\ndef test_precompile_during_fork(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    precompile_caller_address: Address,\n    precompile_input: bytes,\n    sender: EOA,\n):\n    \"\"\"\n    Test calling the Point Evaluation Precompile before the appropriate fork.\n    \"\"\"\n    # Blocks before fork\n    blocks = [\n        Block(\n            timestamp=t,\n            txs=[\n                Transaction(\n                    sender=sender,\n                    data=precompile_input,\n                    to=precompile_caller_address,\n                    gas_limit=Spec.POINT_EVALUATION_PRECOMPILE_GAS * 100,\n                )\n            ],\n        )\n        for t in PRE_FORK_BLOCK_RANGE\n    ]\n    # Block after fork\n    blocks += [\n        Block(\n            timestamp=FORK_TIMESTAMP,\n            txs=[\n                Transaction(\n                    sender=sender,\n                    data=precompile_input,\n                    to=precompile_caller_address,\n                    gas_limit=Spec.POINT_EVALUATION_PRECOMPILE_GAS * 100,\n                )\n            ],\n        )\n    ]\n\n    post = {\n        precompile_caller_address: Account(\n            storage={b: 1 for b in range(1, len(PRE_FORK_BLOCK_RANGE) + 1)},\n            # Only the call in the last block's tx fails; storage 0 by default.\n        ),\n        Address(Spec.POINT_EVALUATION_PRECOMPILE_ADDRESS): Account(\n            balance=len(PRE_FORK_BLOCK_RANGE),\n        ),\n    }\n\n    blockchain_test(\n        pre=pre,\n        post=post,\n        blocks=blocks,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile/index/test_cases/","title":"Test Point Evaluation Precompile - Test Cases","text":"

    Test cases generated from tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py:

    test_valid_inputs[fork_Cancun-blockchain_test-result_Result.SUCCESS-in_bounds_z]\ntest_valid_inputs[fork_Cancun-blockchain_test_engine-result_Result.SUCCESS-in_bounds_z]\ntest_valid_inputs[fork_Cancun-state_test-result_Result.SUCCESS-in_bounds_z]\ntest_valid_inputs[fork_Prague-blockchain_test-result_Result.SUCCESS-in_bounds_z]\ntest_valid_inputs[fork_Prague-blockchain_test_engine-result_Result.SUCCESS-in_bounds_z]\ntest_valid_inputs[fork_Prague-state_test-result_Result.SUCCESS-in_bounds_z]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-out_of_bounds_z]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-out_of_bounds_y]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-correct_proof_1_input_too_short]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-correct_proof_1_input_too_short_2]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-correct_proof_1_input_too_long]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-correct_proof_1_input_extra_long]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-null_inputs]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-zeros_inputs]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-zeros_inputs_correct_versioned_hash]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x00]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x02]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0xff]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-out_of_bounds_z]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-out_of_bounds_y]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_input_too_short]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_input_too_short_2]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_input_too_long]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_input_extra_long]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-null_inputs]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-zeros_inputs]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-zeros_inputs_correct_versioned_hash]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x00]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x02]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0xff]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-out_of_bounds_z]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-out_of_bounds_y]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-correct_proof_1_input_too_short]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-correct_proof_1_input_too_short_2]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-correct_proof_1_input_too_long]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-correct_proof_1_input_extra_long]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-null_inputs]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-zeros_inputs]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-zeros_inputs_correct_versioned_hash]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x00]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x02]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0xff]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-out_of_bounds_z]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-out_of_bounds_y]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-correct_proof_1_input_too_short]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-correct_proof_1_input_too_short_2]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-correct_proof_1_input_too_long]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-correct_proof_1_input_extra_long]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-null_inputs]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-zeros_inputs]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-zeros_inputs_correct_versioned_hash]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x00]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x02]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0xff]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-out_of_bounds_z]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-out_of_bounds_y]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_input_too_short]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_input_too_short_2]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_input_too_long]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_input_extra_long]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-null_inputs]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-zeros_inputs]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-zeros_inputs_correct_versioned_hash]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x00]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x02]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0xff]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-out_of_bounds_z]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-out_of_bounds_y]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-correct_proof_1_input_too_short]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-correct_proof_1_input_too_short_2]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-correct_proof_1_input_too_long]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-correct_proof_1_input_extra_long]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-null_inputs]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-zeros_inputs]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-zeros_inputs_correct_versioned_hash]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x00]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x02]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0xff]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_26b753dec0560daa]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_31ebd010e6098750]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3208425794224c3f]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_420f2a187ce77035]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_585454b31673dd62]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b24f8997145435c]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_af669445747d2585]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_cae5d3491190b777]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_d736268229bd87ec]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_05c1f3685f3393f0]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_177b58dc7a46b08f]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_395cf6d697d1a743]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_585454b31673dd62]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_a0be66af9a97ea52]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_02e696ada7d4631d]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3208425794224c3f]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_ffa6e97b97146517]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_26b753dec0560daa]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_31ebd010e6098750]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3208425794224c3f]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_420f2a187ce77035]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_585454b31673dd62]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b24f8997145435c]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af669445747d2585]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_cae5d3491190b777]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d736268229bd87ec]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_392169c16a2e5ef6]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c1e8b38219e3e12]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c87ec986c2656c2]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_420f2a187ce77035]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_83e53423a2dd93fe]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_ed6b180ec759bcf6]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_1b44e341d56c757d]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_32afa9561a4b3b91]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_3e55802a5ed3c757]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_1b44e341d56c757d]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_32afa9561a4b3b91]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_3e55802a5ed3c757]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_35d08d612aad2197]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_4aa6def8c35c9097]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_4e51cef08a61606f]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_b358a2e763727b70]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_eb0601fec84cc5e9]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_35d08d612aad2197]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_4aa6def8c35c9097]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_4e51cef08a61606f]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_b358a2e763727b70]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_eb0601fec84cc5e9]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_26b753dec0560daa]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_31ebd010e6098750]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_3208425794224c3f]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_420f2a187ce77035]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_585454b31673dd62]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b24f8997145435c]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_af669445747d2585]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_cae5d3491190b777]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_d736268229bd87ec]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_05c1f3685f3393f0]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_177b58dc7a46b08f]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_395cf6d697d1a743]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_585454b31673dd62]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_a0be66af9a97ea52]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_02e696ada7d4631d]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3208425794224c3f]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_ffa6e97b97146517]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_26b753dec0560daa]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_31ebd010e6098750]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3208425794224c3f]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_420f2a187ce77035]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_585454b31673dd62]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b24f8997145435c]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af669445747d2585]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_cae5d3491190b777]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d736268229bd87ec]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_392169c16a2e5ef6]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c1e8b38219e3e12]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c87ec986c2656c2]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_420f2a187ce77035]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_83e53423a2dd93fe]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_ed6b180ec759bcf6]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_1b44e341d56c757d]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_32afa9561a4b3b91]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_3e55802a5ed3c757]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_proof_1b44e341d56c757d]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_proof_32afa9561a4b3b91]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_proof_3e55802a5ed3c757]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_proof_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_35d08d612aad2197]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_4aa6def8c35c9097]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_4e51cef08a61606f]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_b358a2e763727b70]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_eb0601fec84cc5e9]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_35d08d612aad2197]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_4aa6def8c35c9097]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_4e51cef08a61606f]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_b358a2e763727b70]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_eb0601fec84cc5e9]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_26b753dec0560daa]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_31ebd010e6098750]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3208425794224c3f]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_420f2a187ce77035]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_585454b31673dd62]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b24f8997145435c]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_af669445747d2585]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_cae5d3491190b777]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_d736268229bd87ec]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_05c1f3685f3393f0]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_177b58dc7a46b08f]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_395cf6d697d1a743]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_585454b31673dd62]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_a0be66af9a97ea52]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_02e696ada7d4631d]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3208425794224c3f]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_ffa6e97b97146517]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_26b753dec0560daa]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_31ebd010e6098750]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3208425794224c3f]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_420f2a187ce77035]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_585454b31673dd62]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b24f8997145435c]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af669445747d2585]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_cae5d3491190b777]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d736268229bd87ec]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_392169c16a2e5ef6]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c1e8b38219e3e12]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c87ec986c2656c2]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_420f2a187ce77035]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_83e53423a2dd93fe]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_ed6b180ec759bcf6]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_1b44e341d56c757d]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_32afa9561a4b3b91]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_3e55802a5ed3c757]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_1b44e341d56c757d]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_32afa9561a4b3b91]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_3e55802a5ed3c757]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_35d08d612aad2197]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_4aa6def8c35c9097]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_4e51cef08a61606f]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_b358a2e763727b70]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_eb0601fec84cc5e9]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_35d08d612aad2197]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_4aa6def8c35c9097]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_4e51cef08a61606f]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_b358a2e763727b70]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_eb0601fec84cc5e9]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_26b753dec0560daa]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_31ebd010e6098750]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3208425794224c3f]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_420f2a187ce77035]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_585454b31673dd62]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b24f8997145435c]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_af669445747d2585]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_cae5d3491190b777]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_d736268229bd87ec]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_05c1f3685f3393f0]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_177b58dc7a46b08f]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_395cf6d697d1a743]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_585454b31673dd62]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_a0be66af9a97ea52]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_02e696ada7d4631d]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3208425794224c3f]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_ffa6e97b97146517]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_26b753dec0560daa]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_31ebd010e6098750]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3208425794224c3f]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_420f2a187ce77035]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_585454b31673dd62]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b24f8997145435c]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af669445747d2585]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_cae5d3491190b777]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d736268229bd87ec]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_392169c16a2e5ef6]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c1e8b38219e3e12]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c87ec986c2656c2]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_420f2a187ce77035]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_83e53423a2dd93fe]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_ed6b180ec759bcf6]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_1b44e341d56c757d]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_32afa9561a4b3b91]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_3e55802a5ed3c757]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_1b44e341d56c757d]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_32afa9561a4b3b91]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_3e55802a5ed3c757]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_35d08d612aad2197]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_4aa6def8c35c9097]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_4e51cef08a61606f]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_b358a2e763727b70]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_eb0601fec84cc5e9]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_35d08d612aad2197]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_4aa6def8c35c9097]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_4e51cef08a61606f]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_b358a2e763727b70]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_eb0601fec84cc5e9]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_26b753dec0560daa]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_31ebd010e6098750]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_3208425794224c3f]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_420f2a187ce77035]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_585454b31673dd62]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b24f8997145435c]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_af669445747d2585]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_cae5d3491190b777]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_d736268229bd87ec]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_05c1f3685f3393f0]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_177b58dc7a46b08f]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_395cf6d697d1a743]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_585454b31673dd62]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_a0be66af9a97ea52]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_02e696ada7d4631d]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3208425794224c3f]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_ffa6e97b97146517]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_26b753dec0560daa]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_31ebd010e6098750]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3208425794224c3f]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_420f2a187ce77035]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_585454b31673dd62]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b24f8997145435c]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af669445747d2585]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_cae5d3491190b777]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d736268229bd87ec]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_392169c16a2e5ef6]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c1e8b38219e3e12]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c87ec986c2656c2]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_420f2a187ce77035]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_83e53423a2dd93fe]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_ed6b180ec759bcf6]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_1b44e341d56c757d]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_32afa9561a4b3b91]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_3e55802a5ed3c757]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_proof_1b44e341d56c757d]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_proof_32afa9561a4b3b91]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_proof_3e55802a5ed3c757]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_proof_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_35d08d612aad2197]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_4aa6def8c35c9097]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_4e51cef08a61606f]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_b358a2e763727b70]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_eb0601fec84cc5e9]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_35d08d612aad2197]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_4aa6def8c35c9097]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_4e51cef08a61606f]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_b358a2e763727b70]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_eb0601fec84cc5e9]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_26b753dec0560daa]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_31ebd010e6098750]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3208425794224c3f]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_420f2a187ce77035]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_585454b31673dd62]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b24f8997145435c]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_af669445747d2585]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_cae5d3491190b777]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_d736268229bd87ec]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_05c1f3685f3393f0]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_177b58dc7a46b08f]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_395cf6d697d1a743]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_585454b31673dd62]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_a0be66af9a97ea52]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_02e696ada7d4631d]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3208425794224c3f]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_ffa6e97b97146517]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_26b753dec0560daa]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_31ebd010e6098750]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3208425794224c3f]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_420f2a187ce77035]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_585454b31673dd62]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b24f8997145435c]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af669445747d2585]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_cae5d3491190b777]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d736268229bd87ec]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_392169c16a2e5ef6]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c1e8b38219e3e12]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c87ec986c2656c2]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_420f2a187ce77035]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_83e53423a2dd93fe]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_ed6b180ec759bcf6]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_1b44e341d56c757d]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_32afa9561a4b3b91]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_3e55802a5ed3c757]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_1b44e341d56c757d]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_32afa9561a4b3b91]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_3e55802a5ed3c757]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_35d08d612aad2197]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_4aa6def8c35c9097]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_4e51cef08a61606f]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_b358a2e763727b70]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_eb0601fec84cc5e9]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_35d08d612aad2197]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_4aa6def8c35c9097]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_4e51cef08a61606f]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_b358a2e763727b70]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_eb0601fec84cc5e9]\ntest_call_opcode_types[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-state_test--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-state_test--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-state_test--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test--insufficient_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test-correct_proof-exact_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test-correct_proof-extra_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test-correct_proof-insufficient_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test-incorrect_proof-exact_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test-incorrect_proof-extra_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test-incorrect_proof-insufficient_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test_engine-correct_proof-exact_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test_engine-correct_proof-extra_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test_engine-correct_proof-insufficient_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test_engine-incorrect_proof-exact_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test_engine-incorrect_proof-extra_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test_engine-incorrect_proof-insufficient_gas]\ntest_tx_entry_point[fork_Cancun-state_test-correct_proof-exact_gas]\ntest_tx_entry_point[fork_Cancun-state_test-correct_proof-extra_gas]\ntest_tx_entry_point[fork_Cancun-state_test-correct_proof-insufficient_gas]\ntest_tx_entry_point[fork_Cancun-state_test-incorrect_proof-exact_gas]\ntest_tx_entry_point[fork_Cancun-state_test-incorrect_proof-extra_gas]\ntest_tx_entry_point[fork_Cancun-state_test-incorrect_proof-insufficient_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test-correct_proof-exact_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test-correct_proof-extra_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test-correct_proof-insufficient_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test-incorrect_proof-exact_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test-incorrect_proof-extra_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test-incorrect_proof-insufficient_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test_engine-correct_proof-exact_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test_engine-correct_proof-extra_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test_engine-correct_proof-insufficient_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test_engine-incorrect_proof-exact_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test_engine-incorrect_proof-extra_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test_engine-incorrect_proof-insufficient_gas]\ntest_tx_entry_point[fork_Prague-state_test-correct_proof-exact_gas]\ntest_tx_entry_point[fork_Prague-state_test-correct_proof-extra_gas]\ntest_tx_entry_point[fork_Prague-state_test-correct_proof-insufficient_gas]\ntest_tx_entry_point[fork_Prague-state_test-incorrect_proof-exact_gas]\ntest_tx_entry_point[fork_Prague-state_test-incorrect_proof-extra_gas]\ntest_tx_entry_point[fork_Prague-state_test-incorrect_proof-insufficient_gas]\ntest_precompile_before_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test----correct_proof]\ntest_precompile_before_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine----correct_proof]\ntest_precompile_before_fork[fork_ShanghaiToCancunAtTime15k-state_test----correct_proof]\ntest_precompile_during_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test----correct_proof]\ntest_precompile_during_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine----correct_proof]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py\n
    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas/","title":"Test Point Evaluation Precompile Gas","text":"

    Documentation for tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py\n
    Tests gas usage on point evaluation precompile for EIP-4844: Shard Blob Transactions

    Test gas usage on point evaluation precompile for EIP-4844: Shard Blob Transactions.

    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas/#tests.cancun.eip4844_blobs.test_point_evaluation_precompile_gas.test_point_evaluation_precompile_gas_usage","title":"test_point_evaluation_precompile_gas_usage(state_test, pre, tx, post)","text":"

    Test point evaluation precompile gas usage under different call contexts and gas limits:

    • Test using all call types (CALL, DELEGATECALL, CALLCODE, STATICCALL)
    • Test using different gas limits (exact gas, insufficient gas, extra gas)
    • Test using correct and incorrect proofs
    Source code in tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py
    @pytest.mark.parametrize(\n    \"call_type\",\n    [Op.CALL, Op.DELEGATECALL, Op.CALLCODE, Op.STATICCALL],\n)\n@pytest.mark.parametrize(\n    \"call_gas\",\n    [\n        Spec.POINT_EVALUATION_PRECOMPILE_GAS,\n        Spec.POINT_EVALUATION_PRECOMPILE_GAS - 1,\n        Spec.POINT_EVALUATION_PRECOMPILE_GAS + 1,\n    ],\n    ids=[\"exact_gas\", \"insufficient_gas\", \"extra_gas\"],\n)\n@pytest.mark.parametrize(\"proof\", [\"correct\", \"incorrect\"])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_point_evaluation_precompile_gas_usage(\n    state_test: StateTestFiller,\n    pre: Dict,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Test point evaluation precompile gas usage under different call contexts and gas limits:\n\n    - Test using all call types (CALL, DELEGATECALL, CALLCODE, STATICCALL)\n    - Test using different gas limits (exact gas, insufficient gas, extra gas)\n    - Test using correct and incorrect proofs\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas/index/test_cases/","title":"Test Point Evaluation Precompile Gas - Test Cases","text":"

    Test cases generated from tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py:

    test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-extra_gas-call_type_STATICCALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py\n
    "},{"location":"tests/cancun/eip5656_mcopy/","title":"EIP-5656 Mcopy","text":"

    Documentation for tests/cancun/eip5656_mcopy.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip5656_mcopy\n

    Cross-client EIP-5656 Tests

    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy/","title":"Test Mcopy","text":"

    Documentation for tests/cancun/eip5656_mcopy/test_mcopy.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip5656_mcopy/test_mcopy.py\n
    Tests EIP-5656: MCOPY - Memory copying instruction

    Test copy operations of EIP-5656: MCOPY - Memory copying instruction

    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy/#tests.cancun.eip5656_mcopy.test_mcopy.test_valid_mcopy_operations","title":"test_valid_mcopy_operations(state_test, pre, post, tx)","text":"Perform MCOPY operations using different offsets and lengths
    • Zero inputs
    • Memory rewrites (copy from and to the same location)
    • Memory overwrites (copy from and to different locations)
    • Memory extensions (copy to a location that is out of bounds)
    • Memory clear (copy from a location that is out of bounds)
    Source code in tests/cancun/eip5656_mcopy/test_mcopy.py
    @pytest.mark.parametrize(\n    \"dest,src,length\",\n    [\n        (0x00, 0x00, 0x00),\n        (2**256 - 1, 0x00, 0x00),\n        (0x00, 0x00, 0x01),\n        (0x00, 0x00, 0x20),\n        (0x01, 0x00, 0x01),\n        (0x01, 0x00, 0x20),\n        (0x11, 0x11, 0x01),\n        (0x11, 0x11, 0x20),\n        (0x11, 0x11, 0x40),\n        (0x10, 0x00, 0x40),\n        (0x00, 0x10, 0x40),\n        (0x0F, 0x10, 0x40),\n        (0x100, 0x01, 0x01),\n        (0x100, 0x01, 0x20),\n        (0x100, 0x01, 0x1F),\n        (0x100, 0x01, 0x21),\n        (0x00, 0x00, 0x100),\n        (0x100, 0x00, 0x100),\n        (0x200, 0x00, 0x100),\n        (0x00, 0x100, 0x100),\n        (0x100, 0x100, 0x01),\n    ],\n    ids=[\n        \"zero_inputs\",\n        \"zero_length_out_of_bounds_destination\",\n        \"single_byte_rewrite\",\n        \"full_word_rewrite\",\n        \"single_byte_forward_overwrite\",\n        \"full_word_forward_overwrite\",\n        \"mid_word_single_byte_rewrite\",\n        \"mid_word_single_word_rewrite\",\n        \"mid_word_multi_word_rewrite\",\n        \"two_words_forward_overwrite\",\n        \"two_words_backward_overwrite\",\n        \"two_words_backward_overwrite_single_byte_offset\",\n        \"single_byte_memory_extension\",\n        \"single_word_memory_extension\",\n        \"single_word_minus_one_byte_memory_extension\",\n        \"single_word_plus_one_byte_memory_extension\",\n        \"full_memory_rewrite\",\n        \"full_memory_copy\",\n        \"full_memory_copy_offset\",\n        \"full_memory_clean\",\n        \"out_of_bounds_memory_extension\",\n    ],\n)\n@pytest.mark.with_all_evm_code_types\n@pytest.mark.valid_from(\"Cancun\")\ndef test_valid_mcopy_operations(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: Mapping[str, Account],\n    tx: Transaction,\n):\n    \"\"\"\n    Perform MCOPY operations using different offsets and lengths:\n      - Zero inputs\n      - Memory rewrites (copy from and to the same location)\n      - Memory overwrites (copy from and to different locations)\n      - Memory extensions (copy to a location that is out of bounds)\n      - Memory clear (copy from a location that is out of bounds)\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy/#tests.cancun.eip5656_mcopy.test_mcopy.test_mcopy_on_empty_memory","title":"test_mcopy_on_empty_memory(state_test, pre, post, tx)","text":"

    Perform MCOPY operations on an empty memory, using different offsets and lengths.

    Source code in tests/cancun/eip5656_mcopy/test_mcopy.py
    @pytest.mark.parametrize(\"dest\", [0x00, 0x20])\n@pytest.mark.parametrize(\"src\", [0x00, 0x20])\n@pytest.mark.parametrize(\"length\", [0x00, 0x01])\n@pytest.mark.parametrize(\"initial_memory\", [bytes()], ids=[\"empty_memory\"])\n@pytest.mark.with_all_evm_code_types\n@pytest.mark.valid_from(\"Cancun\")\ndef test_mcopy_on_empty_memory(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: Mapping[str, Account],\n    tx: Transaction,\n):\n    \"\"\"\n    Perform MCOPY operations on an empty memory, using different offsets and lengths.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy/index/test_cases/","title":"Test Mcopy - Test Cases","text":"

    Test cases generated from tests/cancun/eip5656_mcopy/test_mcopy.py

    Parametrized test cases generated from the test module tests/cancun/eip5656_mcopy/test_mcopy.py:

    test_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-zero_inputs]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-zero_length_out_of_bounds_destination]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-full_word_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-single_byte_forward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-full_word_forward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-mid_word_single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-mid_word_single_word_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-mid_word_multi_word_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-two_words_forward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-two_words_backward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-two_words_backward_overwrite_single_byte_offset]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-single_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-single_word_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-single_word_minus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-single_word_plus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-full_memory_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-full_memory_copy]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-full_memory_copy_offset]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-full_memory_clean]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-out_of_bounds_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-zero_inputs]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-zero_length_out_of_bounds_destination]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-full_word_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-single_byte_forward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-full_word_forward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-mid_word_single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-mid_word_single_word_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-mid_word_multi_word_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-two_words_forward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-two_words_backward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-two_words_backward_overwrite_single_byte_offset]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-single_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-single_word_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-single_word_minus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-single_word_plus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-full_memory_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-full_memory_copy]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-full_memory_copy_offset]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-full_memory_clean]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-out_of_bounds_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-zero_inputs]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-zero_length_out_of_bounds_destination]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-full_word_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-single_byte_forward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-full_word_forward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-mid_word_single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-mid_word_single_word_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-mid_word_multi_word_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-two_words_forward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-two_words_backward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-two_words_backward_overwrite_single_byte_offset]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-single_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-single_word_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-single_word_minus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-single_word_plus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-full_memory_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-full_memory_copy]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-full_memory_copy_offset]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-full_memory_clean]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-out_of_bounds_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-zero_inputs]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-zero_length_out_of_bounds_destination]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-full_word_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-single_byte_forward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-full_word_forward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-mid_word_single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-mid_word_single_word_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-mid_word_multi_word_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-two_words_forward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-two_words_backward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-two_words_backward_overwrite_single_byte_offset]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-single_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-single_word_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-single_word_minus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-single_word_plus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-full_memory_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-full_memory_copy]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-full_memory_copy_offset]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-full_memory_clean]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-out_of_bounds_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-zero_inputs]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-zero_length_out_of_bounds_destination]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-full_word_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-single_byte_forward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-full_word_forward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-mid_word_single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-mid_word_single_word_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-mid_word_multi_word_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-two_words_forward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-two_words_backward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-two_words_backward_overwrite_single_byte_offset]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-single_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-single_word_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-single_word_minus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-single_word_plus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-full_memory_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-full_memory_copy]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-full_memory_copy_offset]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-full_memory_clean]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-out_of_bounds_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-zero_inputs]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-zero_length_out_of_bounds_destination]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-full_word_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-single_byte_forward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-full_word_forward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-mid_word_single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-mid_word_single_word_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-mid_word_multi_word_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-two_words_forward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-two_words_backward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-two_words_backward_overwrite_single_byte_offset]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-single_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-single_word_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-single_word_minus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-single_word_plus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-full_memory_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-full_memory_copy]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-full_memory_copy_offset]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-full_memory_clean]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-out_of_bounds_memory_extension]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test-empty_memory-length_0-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test-empty_memory-length_0-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test-empty_memory-length_0-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test-empty_memory-length_0-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test-empty_memory-length_1-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test-empty_memory-length_1-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test-empty_memory-length_1-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test-empty_memory-length_1-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_0-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_0-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_0-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_0-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_1-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_1-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_1-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_1-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-state_test-empty_memory-length_0-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-state_test-empty_memory-length_0-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-state_test-empty_memory-length_0-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-state_test-empty_memory-length_0-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-state_test-empty_memory-length_1-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-state_test-empty_memory-length_1-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-state_test-empty_memory-length_1-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-state_test-empty_memory-length_1-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test-empty_memory-length_0-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test-empty_memory-length_0-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test-empty_memory-length_0-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test-empty_memory-length_0-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test-empty_memory-length_1-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test-empty_memory-length_1-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test-empty_memory-length_1-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test-empty_memory-length_1-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_0-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_0-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_0-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_0-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_1-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_1-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_1-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_1-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-state_test-empty_memory-length_0-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-state_test-empty_memory-length_0-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-state_test-empty_memory-length_0-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-state_test-empty_memory-length_0-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-state_test-empty_memory-length_1-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-state_test-empty_memory-length_1-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-state_test-empty_memory-length_1-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-state_test-empty_memory-length_1-src_32-dest_32]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip5656_mcopy/test_mcopy.py\n
    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy_contexts/","title":"Test Mcopy Contexts","text":"

    Documentation for tests/cancun/eip5656_mcopy/test_mcopy_contexts.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip5656_mcopy/test_mcopy_contexts.py\n
    Tests EIP-5656: MCOPY - Memory copying instruction

    Test memory copy under different call contexts EIP-5656: MCOPY - Memory copying instruction

    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy_contexts/#tests.cancun.eip5656_mcopy.test_mcopy_contexts.test_no_memory_corruption_on_upper_call_stack_levels","title":"test_no_memory_corruption_on_upper_call_stack_levels(state_test, pre, post, tx)","text":"

    Perform a subcall with any of the following opcodes, which uses MCOPY during its execution, and verify that the caller's memory is unaffected

    Source code in tests/cancun/eip5656_mcopy/test_mcopy_contexts.py
    @pytest.mark.with_all_call_opcodes\n@pytest.mark.valid_from(\"Cancun\")\ndef test_no_memory_corruption_on_upper_call_stack_levels(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: Mapping[str, Account],\n    tx: Transaction,\n):\n    \"\"\"\n    Perform a subcall with any of the following opcodes, which uses MCOPY during its execution,\n    and verify that the caller's memory is unaffected\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy_contexts/#tests.cancun.eip5656_mcopy.test_mcopy_contexts.test_no_memory_corruption_on_upper_create_stack_levels","title":"test_no_memory_corruption_on_upper_create_stack_levels(state_test, pre, post, tx)","text":"

    Perform a subcall with any of the following opcodes, which uses MCOPY during its execution, and verify that the caller's memory is unaffected: - CREATE - CREATE2

    TODO: [EOF] Add EOFCREATE opcode

    Source code in tests/cancun/eip5656_mcopy/test_mcopy_contexts.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.CREATE,\n        Op.CREATE2,\n    ],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_no_memory_corruption_on_upper_create_stack_levels(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: Mapping[str, Account],\n    tx: Transaction,\n):\n    \"\"\"\n    Perform a subcall with any of the following opcodes, which uses MCOPY during its execution,\n    and verify that the caller's memory is unaffected:\n      - `CREATE`\n      - `CREATE2`\n\n    TODO: [EOF] Add EOFCREATE opcode\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy_contexts/index/test_cases/","title":"Test Mcopy Contexts - Test Cases","text":"

    Test cases generated from tests/cancun/eip5656_mcopy/test_mcopy_contexts.py

    Parametrized test cases generated from the test module tests/cancun/eip5656_mcopy/test_mcopy_contexts.py:

    test_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Cancun-blockchain_test-call_opcode_CREATE]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Cancun-blockchain_test-call_opcode_CREATE2]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Cancun-blockchain_test_engine-call_opcode_CREATE]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Cancun-blockchain_test_engine-call_opcode_CREATE2]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Cancun-state_test-call_opcode_CREATE]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Cancun-state_test-call_opcode_CREATE2]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Prague-blockchain_test-call_opcode_CREATE]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Prague-blockchain_test-call_opcode_CREATE2]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Prague-blockchain_test_engine-call_opcode_CREATE]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Prague-blockchain_test_engine-call_opcode_CREATE2]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Prague-state_test-call_opcode_CREATE]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Prague-state_test-call_opcode_CREATE2]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip5656_mcopy/test_mcopy_contexts.py\n
    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion/","title":"Test Mcopy Memory Expansion","text":"

    Documentation for tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py\n
    Tests EIP-5656: MCOPY - Memory copying instruction

    Test copy operations of EIP-5656: MCOPY - Memory copying instruction that produce a memory expansion, and potentially an out-of-gas error.

    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion/#tests.cancun.eip5656_mcopy.test_mcopy_memory_expansion.test_mcopy_memory_expansion","title":"test_mcopy_memory_expansion(state_test, env, pre, post, tx)","text":"

    Perform MCOPY operations that expand the memory, and verify the gas it costs to do so.

    Source code in tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py
    @pytest.mark.parametrize(\n    \"dest,src,length\",\n    [\n        (0x00, 0x00, 0x01),\n        (0x100, 0x00, 0x01),\n        (0x1F, 0x00, 0x01),\n        (0x20, 0x00, 0x01),\n        (0x1000, 0x00, 0x01),\n        (0x1000, 0x00, 0x40),\n        (0x00, 0x00, 0x00),\n        (2**256 - 1, 0x00, 0x00),\n        (0x00, 2**256 - 1, 0x00),\n        (2**256 - 1, 2**256 - 1, 0x00),\n    ],\n    ids=[\n        \"single_byte_expansion\",\n        \"single_byte_expansion_2\",\n        \"single_byte_expansion_word_boundary\",\n        \"single_byte_expansion_word_boundary_2\",\n        \"multi_word_expansion\",\n        \"multi_word_expansion_2\",\n        \"zero_length_expansion\",\n        \"huge_dest_zero_length\",\n        \"huge_src_zero_length\",\n        \"huge_dest_huge_src_zero_length\",\n    ],\n)\n@pytest.mark.parametrize(\"successful\", [True, False])\n@pytest.mark.parametrize(\n    \"initial_memory\",\n    [\n        bytes(range(0x00, 0x100)),\n        bytes(),\n    ],\n    ids=[\n        \"from_existent_memory\",\n        \"from_empty_memory\",\n    ],\n)\n@pytest.mark.with_all_evm_code_types\n@pytest.mark.valid_from(\"Cancun\")\ndef test_mcopy_memory_expansion(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    post: Mapping[str, Account],\n    tx: Transaction,\n):\n    \"\"\"\n    Perform MCOPY operations that expand the memory, and verify the gas it costs to do so.\n    \"\"\"\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion/#tests.cancun.eip5656_mcopy.test_mcopy_memory_expansion.test_mcopy_huge_memory_expansion","title":"test_mcopy_huge_memory_expansion(state_test, env, pre, post, tx)","text":"

    Perform MCOPY operations that expand the memory by huge amounts, and verify that it correctly runs out of gas.

    Source code in tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py
    @pytest.mark.parametrize(\n    \"dest,src,length\",\n    [\n        (2**256 - 1, 0x00, 0x01),\n        (2**256 - 2, 0x00, 0x01),\n        (2**255 - 1, 0x00, 0x01),\n        (0x00, 2**256 - 1, 0x01),\n        (0x00, 2**256 - 2, 0x01),\n        (0x00, 2**255 - 1, 0x01),\n        (0x00, 0x00, 2**256 - 1),\n        (0x00, 0x00, 2**256 - 2),\n        (0x00, 0x00, 2**255 - 1),\n    ],\n    ids=[\n        \"max_dest_single_byte_expansion\",\n        \"max_dest_minus_one_single_byte_expansion\",\n        \"half_max_dest_single_byte_expansion\",\n        \"max_src_single_byte_expansion\",\n        \"max_src_minus_one_single_byte_expansion\",\n        \"half_max_src_single_byte_expansion\",\n        \"max_length_expansion\",\n        \"max_length_minus_one_expansion\",\n        \"half_max_length_expansion\",\n    ],\n)\n@pytest.mark.parametrize(\n    \"call_exact_cost\",\n    [2**128 - 1],\n    ids=[\"\"],\n)  # Limit subcall gas, otherwise it would be impossibly large\n@pytest.mark.parametrize(\"successful\", [False])\n@pytest.mark.parametrize(\n    \"initial_memory\",\n    [\n        bytes(range(0x00, 0x100)),\n        bytes(),\n    ],\n    ids=[\n        \"from_existent_memory\",\n        \"from_empty_memory\",\n    ],\n)\n@pytest.mark.with_all_evm_code_types\n@pytest.mark.valid_from(\"Cancun\")\ndef test_mcopy_huge_memory_expansion(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Mapping[str, Account],\n    post: Mapping[str, Account],\n    tx: Transaction,\n):\n    \"\"\"\n    Perform MCOPY operations that expand the memory by huge amounts, and verify that it correctly\n    runs out of gas.\n    \"\"\"\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion/index/test_cases/","title":"Test Mcopy Memory Expansion - Test Cases","text":"

    Test cases generated from tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py

    Parametrized test cases generated from the test module tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py:

    test_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--half_max_length_expansion]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/","title":"EIP-6780 Selfdestruct","text":"

    Documentation for tests/cancun/eip6780_selfdestruct.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip6780_selfdestruct\n

    Tests for EIP-6780: SELFDESTRUCT only in same transaction.

    "},{"location":"tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision/","title":"Test Dynamic Create2 Selfdestruct Collision","text":"

    Documentation for tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py\n

    Suicide scenario requested test #381

    "},{"location":"tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision/#tests.cancun.eip6780_selfdestruct.test_dynamic_create2_selfdestruct_collision.test_dynamic_create2_selfdestruct_collision","title":"test_dynamic_create2_selfdestruct_collision(env, fork, create2_dest_already_in_state, call_create2_contract_in_between, call_create2_contract_at_the_end, state_test)","text":"

    Dynamic Create2->Suicide->Create2 collision scenario:

    Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys, then on a different call, in the same tx, perform a self-destruct. Then: a) on the same tx, attempt to recreate the contract <=== Covered in this test 1) and create2 contract already in the state 2) and create2 contract is not in the state b) on a different tx, attempt to recreate the contract Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys, then in a different tx, perform a self-destruct. Then: a) on the same tx, attempt to recreate the contract b) on a different tx, attempt to recreate the contract Verify that the test case described in https://wiki.hyperledger.org/pages/viewpage.action?pageId=117440824 is covered

    Source code in tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py
    @pytest.mark.valid_from(\"Paris\")\n@pytest.mark.parametrize(\n    \"create2_dest_already_in_state\",\n    (True, False),\n)\n@pytest.mark.parametrize(\n    \"call_create2_contract_in_between,call_create2_contract_at_the_end\",\n    [\n        (True, True),\n        (True, False),\n        (False, True),\n    ],\n)\ndef test_dynamic_create2_selfdestruct_collision(\n    env: Environment,\n    fork: Fork,\n    create2_dest_already_in_state: bool,\n    call_create2_contract_in_between: bool,\n    call_create2_contract_at_the_end: bool,\n    state_test: StateTestFiller,\n):\n    \"\"\"Dynamic Create2->Suicide->Create2 collision scenario:\n\n    Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys,\n    then on a different call, in the same tx, perform a self-destruct.\n    Then:\n        a) on the same tx, attempt to recreate the contract   <=== Covered in this test\n            1) and create2 contract already in the state\n            2) and create2 contract is not in the state\n        b) on a different tx, attempt to recreate the contract\n    Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys,\n    then in a different tx, perform a self-destruct.\n    Then:\n        a) on the same tx, attempt to recreate the contract\n        b) on a different tx, attempt to recreate the contract\n    Verify that the test case described\n    in https://wiki.hyperledger.org/pages/viewpage.action?pageId=117440824 is covered\n    \"\"\"\n    assert call_create2_contract_in_between or call_create2_contract_at_the_end, \"invalid test\"\n\n    # Storage locations\n    create2_constructor_worked = 1\n    first_create2_result = 2\n    second_create2_result = 3\n    code_worked = 4\n\n    # Pre-Existing Addresses\n    address_zero = Address(0x00)\n    address_to = Address(0x0600)\n    address_code = Address(0x0601)\n    address_create2_storage = Address(0x0512)\n    sendall_destination = Address(0x03E8)\n\n    # CREATE2 Initcode\n    create2_salt = 1\n    deploy_code = Op.SELFDESTRUCT(sendall_destination)\n    initcode = Initcode(\n        deploy_code=deploy_code,\n        initcode_prefix=Op.SSTORE(create2_constructor_worked, 1)\n        + Op.CALL(Op.GAS(), address_create2_storage, 0, 0, 0, 0, 0),\n    )\n\n    # Created addresses\n    create2_address = compute_create2_address(address_code, create2_salt, initcode)\n    call_address_in_between = create2_address if call_create2_contract_in_between else address_zero\n    call_address_in_the_end = create2_address if call_create2_contract_at_the_end else address_zero\n\n    # Values\n    pre_existing_create2_balance = 1\n    first_create2_value = 10\n    first_call_value = 100\n    second_create2_value = 1000\n    second_call_value = 10000\n\n    pre = {\n        address_to: Account(\n            balance=100000000,\n            nonce=0,\n            code=Op.JUMPDEST()\n            # Make a subcall that do CREATE2 and returns its the result\n            + Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n            + Op.CALL(100000, address_code, first_create2_value, 0, Op.CALLDATASIZE(), 0, 32)\n            + Op.SSTORE(\n                first_create2_result,\n                Op.MLOAD(0),\n            )\n            # In case the create2 didn't work, flush account balance\n            + Op.CALL(100000, address_code, 0, 0, 0, 0, 0)\n            # Call to the created account to trigger selfdestruct\n            + Op.CALL(100000, call_address_in_between, first_call_value, 0, 0, 0, 0)\n            # Make a subcall that do CREATE2 collision and returns its address as the result\n            + Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n            + Op.CALL(100000, address_code, second_create2_value, 0, Op.CALLDATASIZE(), 0, 32)\n            + Op.SSTORE(\n                second_create2_result,\n                Op.MLOAD(0),\n            )\n            # Call to the created account to trigger selfdestruct\n            + Op.CALL(100000, call_address_in_the_end, second_call_value, 0, 0, 0, 0)\n            + Op.SSTORE(code_worked, 1),\n            storage={first_create2_result: 0xFF, second_create2_result: 0xFF},\n        ),\n        address_code: Account(\n            balance=0,\n            nonce=0,\n            code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n            + Op.MSTORE(\n                0,\n                Op.CREATE2(Op.SELFBALANCE(), 0, Op.CALLDATASIZE(), create2_salt),\n            )\n            + Op.RETURN(0, 32),\n            storage={},\n        ),\n        address_create2_storage: Account(\n            balance=7000000000000000000,\n            nonce=0,\n            code=Op.SSTORE(1, 1),\n            storage={},\n        ),\n        TestAddress: Account(\n            balance=7000000000000000000,\n            nonce=0,\n            code=\"0x\",\n            storage={},\n        ),\n    }\n\n    if create2_dest_already_in_state:\n        # Create2 address already in the state, e.g. deployed in a previous block\n        pre[create2_address] = Account(\n            balance=pre_existing_create2_balance,\n            nonce=1,\n            code=deploy_code,\n            storage={},\n        )\n\n    post: Dict[Address, Union[Account, object]] = {}\n\n    # Create2 address only exists if it was pre-existing and after cancun\n    post[create2_address] = (\n        Account(balance=0, nonce=1, code=deploy_code, storage={create2_constructor_worked: 0x00})\n        if create2_dest_already_in_state and fork >= Cancun\n        else Account.NONEXISTENT\n    )\n\n    # Create2 initcode is only executed if the contract did not already exist\n    post[address_create2_storage] = Account(\n        storage={create2_constructor_worked: int(not create2_dest_already_in_state)}\n    )\n\n    # Entry code that makes the calls to the create2 contract creator\n    post[address_to] = Account(\n        storage={\n            code_worked: 0x01,\n            # First create2 only works if the contract was not preexisting\n            first_create2_result: 0x00 if create2_dest_already_in_state else create2_address,\n            # Second create2 must never work\n            second_create2_result: 0x00,\n        }\n    )\n\n    # Calculate the destination account expected balance for the selfdestruct/sendall calls\n    sendall_destination_balance = (\n        pre_existing_create2_balance if create2_dest_already_in_state else first_create2_value\n    )\n\n    if call_create2_contract_in_between:\n        sendall_destination_balance += first_call_value\n\n    if call_create2_contract_at_the_end:\n        sendall_destination_balance += second_call_value\n\n    post[sendall_destination] = Account(balance=sendall_destination_balance)\n\n    tx = Transaction(\n        ty=0x0,\n        chain_id=0x0,\n        nonce=0,\n        to=address_to,\n        gas_price=10,\n        protected=False,\n        data=initcode,\n        gas_limit=5000000,\n        value=0,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision/#tests.cancun.eip6780_selfdestruct.test_dynamic_create2_selfdestruct_collision.test_dynamic_create2_selfdestruct_collision_two_different_transactions","title":"test_dynamic_create2_selfdestruct_collision_two_different_transactions(env, fork, create2_dest_already_in_state, call_create2_contract_at_the_end, blockchain_test)","text":"

    Dynamic Create2->Suicide->Create2 collision scenario:

    Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys, then on a different call, in the same tx, perform a self-destruct. Then: a) on the same tx, attempt to recreate the contract 1) and create2 contract already in the state 2) and create2 contract is not in the state b) on a different tx, attempt to recreate the contract <=== Covered in this test Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys, then in a different tx, perform a self-destruct. Then: a) on the same tx, attempt to recreate the contract b) on a different tx, attempt to recreate the contract Verify that the test case described in https://wiki.hyperledger.org/pages/viewpage.action?pageId=117440824 is covered

    Source code in tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py
    @pytest.mark.valid_from(\"Paris\")\n@pytest.mark.parametrize(\n    \"create2_dest_already_in_state\",\n    (True, False),\n)\n@pytest.mark.parametrize(\n    \"call_create2_contract_at_the_end\",\n    (True, False),\n)\ndef test_dynamic_create2_selfdestruct_collision_two_different_transactions(\n    env: Environment,\n    fork: Fork,\n    create2_dest_already_in_state: bool,\n    call_create2_contract_at_the_end: bool,\n    blockchain_test: BlockchainTestFiller,\n):\n    \"\"\"Dynamic Create2->Suicide->Create2 collision scenario:\n\n    Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys,\n    then on a different call, in the same tx, perform a self-destruct.\n    Then:\n        a) on the same tx, attempt to recreate the contract\n            1) and create2 contract already in the state\n            2) and create2 contract is not in the state\n        b) on a different tx, attempt to recreate the contract <=== Covered in this test\n    Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys,\n    then in a different tx, perform a self-destruct.\n    Then:\n        a) on the same tx, attempt to recreate the contract\n        b) on a different tx, attempt to recreate the contract\n    Verify that the test case described\n    in https://wiki.hyperledger.org/pages/viewpage.action?pageId=117440824 is covered\n    \"\"\"\n    # assert call_create2_contract_at_the_end, \"invalid test\"\n\n    # Storage locations\n    create2_constructor_worked = 1\n    first_create2_result = 2\n    second_create2_result = 3\n    code_worked = 4\n\n    # Pre-Existing Addresses\n    address_zero = Address(0x00)\n    address_to = Address(0x0600)\n    address_to_second = Address(0x0700)\n    address_code = Address(0x0601)\n    address_create2_storage = Address(0x0512)\n    sendall_destination = Address(0x03E8)\n\n    # CREATE2 Initcode\n    create2_salt = 1\n    deploy_code = Op.SELFDESTRUCT(sendall_destination)\n    initcode = Initcode(\n        deploy_code=deploy_code,\n        initcode_prefix=Op.SSTORE(create2_constructor_worked, 1)\n        + Op.CALL(Op.GAS(), address_create2_storage, 0, 0, 0, 0, 0),\n    )\n\n    # Created addresses\n    create2_address = compute_create2_address(address_code, create2_salt, initcode)\n    call_address_in_the_end = create2_address if call_create2_contract_at_the_end else address_zero\n\n    # Values\n    pre_existing_create2_balance = 1\n    first_create2_value = 10\n    first_call_value = 100\n    second_create2_value = 1000\n    second_call_value = 10000\n\n    pre = {\n        address_to: Account(\n            balance=100000000,\n            nonce=0,\n            code=Op.JUMPDEST()\n            # Make a subcall that do CREATE2 and returns its the result\n            + Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n            + Op.CALL(100000, address_code, first_create2_value, 0, Op.CALLDATASIZE(), 0, 32)\n            + Op.SSTORE(\n                first_create2_result,\n                Op.MLOAD(0),\n            )\n            # In case the create2 didn't work, flush account balance\n            + Op.CALL(100000, address_code, 0, 0, 0, 0, 0)\n            # Call to the created account to trigger selfdestruct\n            + Op.CALL(100000, create2_address, first_call_value, 0, 0, 0, 0)\n            + Op.SSTORE(code_worked, 1),\n            storage={first_create2_result: 0xFF},\n        ),\n        address_to_second: Account(\n            balance=100000000,\n            nonce=0,\n            code=Op.JUMPDEST()\n            # Make a subcall that do CREATE2 collision and returns its address as the result\n            + Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n            + Op.CALL(100000, address_code, second_create2_value, 0, Op.CALLDATASIZE(), 0, 32)\n            + Op.SSTORE(\n                second_create2_result,\n                Op.MLOAD(0),\n            )\n            # Call to the created account to trigger selfdestruct\n            + Op.CALL(200000, call_address_in_the_end, second_call_value, 0, 0, 0, 0)\n            + Op.SSTORE(code_worked, 1),\n            storage={second_create2_result: 0xFF},\n        ),\n        address_code: Account(\n            balance=0,\n            nonce=0,\n            code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n            + Op.MSTORE(\n                0,\n                Op.CREATE2(Op.SELFBALANCE(), 0, Op.CALLDATASIZE(), create2_salt),\n            )\n            + Op.RETURN(0, 32),\n            storage={},\n        ),\n        address_create2_storage: Account(\n            balance=7000000000000000000,\n            nonce=0,\n            code=Op.SSTORE(1, 1),\n            storage={},\n        ),\n        TestAddress: Account(\n            balance=7000000000000000000,\n            nonce=0,\n            code=\"0x\",\n            storage={},\n        ),\n    }\n\n    if create2_dest_already_in_state:\n        # Create2 address already in the state, e.g. deployed in a previous block\n        pre[create2_address] = Account(\n            balance=pre_existing_create2_balance,\n            nonce=1,\n            code=deploy_code,\n            storage={},\n        )\n\n    post: Dict[Address, Union[Account, object]] = {}\n\n    # Create2 address only exists if it was pre-existing and after cancun\n    post[create2_address] = (\n        Account(balance=0, nonce=1, code=deploy_code, storage={create2_constructor_worked: 0x00})\n        if create2_dest_already_in_state and fork >= Cancun\n        else (\n            Account.NONEXISTENT\n            if call_create2_contract_at_the_end\n            else Account(balance=1000, nonce=1, code=deploy_code)\n        )\n    )\n\n    # after Cancun Create2 initcode is only executed if the contract did not already exist\n    # and before it will always be executed as the first tx deletes the account\n    post[address_create2_storage] = Account(\n        storage={\n            create2_constructor_worked: int(fork < Cancun or not create2_dest_already_in_state)\n        }\n    )\n\n    # Entry code that makes the calls to the create2 contract creator\n    post[address_to] = Account(\n        storage={\n            code_worked: 0x01,\n            # First create2 only works if the contract was not preexisting\n            first_create2_result: 0x00 if create2_dest_already_in_state else create2_address,\n        }\n    )\n    post[address_to_second] = Account(\n        storage={\n            code_worked: 0x01,\n            # Second create2 will not collide before Cancun as the first tx calls selfdestruct\n            # After cancun it will collide only if create2_dest_already_in_state otherwise the\n            # first tx creates and deletes it\n            second_create2_result: (\n                (0x00 if create2_dest_already_in_state else create2_address)\n                if fork >= Cancun\n                else create2_address\n            ),\n        }\n    )\n\n    # Calculate the destination account expected balance for the selfdestruct/sendall calls\n    sendall_destination_balance = 0\n\n    if create2_dest_already_in_state:\n        sendall_destination_balance += pre_existing_create2_balance\n        if fork >= Cancun:\n            # first create2 fails, but first calls ok. the account is not removed on cancun\n            # therefore with the second create2 it is not successful\n            sendall_destination_balance += first_call_value\n        else:\n            # first create2 fails, first calls totally removes the account\n            # in the second transaction second create2 is successful\n            sendall_destination_balance += first_call_value\n            if call_create2_contract_at_the_end:\n                sendall_destination_balance += second_create2_value\n    else:\n        # if no account in the state, first create2 successful, first call successful and removes\n        # because it is removed in the next transaction second create2 successful\n        sendall_destination_balance = first_create2_value + first_call_value\n        if call_create2_contract_at_the_end:\n            sendall_destination_balance += second_create2_value\n\n    if call_create2_contract_at_the_end:\n        sendall_destination_balance += second_call_value\n\n    post[sendall_destination] = Account(balance=sendall_destination_balance)\n\n    nonce = count()\n\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post=post,\n        blocks=[\n            Block(\n                txs=[\n                    Transaction(\n                        ty=0x0,\n                        chain_id=0x0,\n                        nonce=next(nonce),\n                        to=address_to,\n                        gas_price=10,\n                        protected=False,\n                        data=initcode,\n                        gas_limit=5000000,\n                        value=0,\n                    ),\n                    Transaction(\n                        ty=0x0,\n                        chain_id=0x0,\n                        nonce=next(nonce),\n                        to=address_to_second,\n                        gas_price=10,\n                        protected=False,\n                        data=initcode,\n                        gas_limit=5000000,\n                        value=0,\n                    ),\n                ]\n            )\n        ],\n    )\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision/#tests.cancun.eip6780_selfdestruct.test_dynamic_create2_selfdestruct_collision.test_dynamic_create2_selfdestruct_collision_multi_tx","title":"test_dynamic_create2_selfdestruct_collision_multi_tx(fork, selfdestruct_on_first_tx, recreate_on_first_tx, blockchain_test)","text":"

    Dynamic Create2->Suicide->Create2 collision scenario over multiple transactions:

    Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys, then on a different call, in the same or different tx but same block, perform a self-destruct. Then: a) on the same tx, attempt to recreate the contract b) on a different tx, attempt to recreate the contract Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys, then in a different tx, perform a self-destruct. Then: a) on the same tx, attempt to recreate the contract <=== Covered in this test b) on a different tx, attempt to recreate the contract <=== Covered in this test Verify that the test case described in https://wiki.hyperledger.org/pages/viewpage.action?pageId=117440824 is covered

    Source code in tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py
    @pytest.mark.valid_from(\"Paris\")\n@pytest.mark.parametrize(\n    \"selfdestruct_on_first_tx,recreate_on_first_tx\",\n    [\n        (False, False),\n        (True, False),\n        (True, True),\n    ],\n)\ndef test_dynamic_create2_selfdestruct_collision_multi_tx(\n    fork: Fork,\n    selfdestruct_on_first_tx: bool,\n    recreate_on_first_tx: bool,\n    blockchain_test: BlockchainTestFiller,\n):\n    \"\"\"Dynamic Create2->Suicide->Create2 collision scenario over multiple transactions:\n\n    Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys,\n    then on a different call, in the same or different tx but same block, perform a self-destruct.\n    Then:\n        a) on the same tx, attempt to recreate the contract\n        b) on a different tx, attempt to recreate the contract\n    Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys,\n    then in a different tx, perform a self-destruct.\n    Then:\n        a) on the same tx, attempt to recreate the contract       <=== Covered in this test\n        b) on a different tx, attempt to recreate the contract    <=== Covered in this test\n    Verify that the test case described\n    in https://wiki.hyperledger.org/pages/viewpage.action?pageId=117440824 is covered\n    \"\"\"\n    if recreate_on_first_tx:\n        assert selfdestruct_on_first_tx, \"invalid test\"\n\n    # Storage locations\n    create2_constructor_worked = 1\n    first_create2_result = 2\n    second_create2_result = 3\n    part_1_worked = 4\n    part_2_worked = 5\n\n    # Pre-Existing Addresses\n    address_to = Address(0x0600)\n    address_code = Address(0x0601)\n    address_create2_storage = Address(0x0512)\n    sendall_destination = Address(0x03E8)\n\n    # CREATE2 Initcode\n    create2_salt = 1\n    deploy_code = Op.SELFDESTRUCT(sendall_destination)\n    initcode = Initcode(\n        deploy_code=deploy_code,\n        initcode_prefix=Op.SSTORE(create2_constructor_worked, 1)\n        + Op.CALL(Op.GAS(), address_create2_storage, 0, 0, 0, 0, 0),\n    )\n\n    # Created addresses\n    create2_address = compute_create2_address(address_code, create2_salt, initcode)\n\n    # Values\n    first_create2_value = 3\n    first_call_value = 5\n    second_create2_value = 7\n    second_call_value = 11\n\n    # Code is divided in two transactions part of the same block\n    first_tx_code = Bytecode()\n    second_tx_code = Bytecode()\n\n    first_tx_code += (\n        Op.JUMPDEST()\n        # Make a subcall that do CREATE2 and returns its the result\n        + Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n        + Op.CALL(100000, address_code, first_create2_value, 0, Op.CALLDATASIZE(), 0, 32)\n        + Op.SSTORE(\n            first_create2_result,\n            Op.MLOAD(0),\n        )\n    )\n\n    if selfdestruct_on_first_tx:\n        first_tx_code += (\n            # Call to the created account to trigger selfdestruct\n            Op.CALL(100000, create2_address, first_call_value, 0, 0, 0, 0)\n        )\n    else:\n        second_tx_code += (\n            # Call to the created account to trigger selfdestruct\n            Op.CALL(100000, create2_address, first_call_value, 0, 0, 0, 0)\n        )\n\n    if recreate_on_first_tx:\n        first_tx_code += (\n            # Make a subcall that do CREATE2 collision and returns its address as the result\n            Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n            + Op.CALL(100000, address_code, second_create2_value, 0, Op.CALLDATASIZE(), 0, 32)\n            + Op.SSTORE(\n                second_create2_result,\n                Op.MLOAD(0),\n            )\n        )\n\n    else:\n        second_tx_code += (\n            # Make a subcall that do CREATE2 collision and returns its address as the result\n            Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n            + Op.CALL(100000, address_code, second_create2_value, 0, Op.CALLDATASIZE(), 0, 32)\n            + Op.SSTORE(\n                second_create2_result,\n                Op.MLOAD(0),\n            )\n        )\n\n    # Second tx code always calls the create2 contract at the end\n    second_tx_code += Op.CALL(100000, create2_address, second_call_value, 0, 0, 0, 0)\n\n    first_tx_code += Op.SSTORE(part_1_worked, 1)\n    second_tx_code += Op.SSTORE(part_2_worked, 1)\n\n    pre = {\n        address_to: Account(\n            balance=100000000,\n            nonce=0,\n            code=Conditional(\n                # Depending on the tx, execute the first or second tx code\n                condition=Op.EQ(Op.SLOAD(part_1_worked), 0),\n                if_true=first_tx_code,\n                if_false=second_tx_code,\n            ),\n            storage={first_create2_result: 0xFF, second_create2_result: 0xFF},\n        ),\n        address_code: Account(\n            balance=0,\n            nonce=0,\n            code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n            + Op.MSTORE(\n                0,\n                Op.CREATE2(Op.SELFBALANCE(), 0, Op.CALLDATASIZE(), create2_salt),\n            )\n            + Op.RETURN(0, 32),\n            storage={},\n        ),\n        address_create2_storage: Account(\n            balance=7000000000000000000,\n            nonce=0,\n            code=Op.SSTORE(1, 1),\n            storage={},\n        ),\n        TestAddress: Account(\n            balance=7000000000000000000,\n            nonce=0,\n            code=\"0x\",\n            storage={},\n        ),\n    }\n\n    post: Dict[Address, Union[Account, object]] = {}\n\n    # Create2 address only exists if it was pre-existing and after cancun\n    account_will_exist_with_code = not selfdestruct_on_first_tx and fork >= Cancun\n    # If the contract is self-destructed and we also attempt to recreate it on the first tx,\n    # the second call on the second tx will only place balance in the account\n    account_will_exist_with_balance = selfdestruct_on_first_tx and recreate_on_first_tx\n\n    post[create2_address] = (\n        Account(balance=0, nonce=1, code=deploy_code, storage={create2_constructor_worked: 0x01})\n        if account_will_exist_with_code\n        else (\n            Account(balance=second_call_value, nonce=0)\n            if account_will_exist_with_balance\n            else Account.NONEXISTENT\n        )\n    )\n\n    # Create2 initcode saves storage unconditionally\n    post[address_create2_storage] = Account(storage={create2_constructor_worked: 0x01})\n\n    # Entry code that makes the calls to the create2 contract creator\n    post[address_to] = Account(\n        storage={\n            part_1_worked: 0x01,\n            part_2_worked: 0x01,\n            # First create2 always works\n            first_create2_result: create2_address,\n            # Second create2 only works if we successfully self-destructed on the first tx\n            second_create2_result: (\n                create2_address if selfdestruct_on_first_tx and not recreate_on_first_tx else 0x00\n            ),\n        }\n    )\n\n    # Calculate the destination account expected balance for the selfdestruct/sendall calls\n    sendall_destination_balance = first_create2_value + first_call_value\n\n    if not account_will_exist_with_balance:\n        sendall_destination_balance += second_call_value\n\n    if selfdestruct_on_first_tx and not recreate_on_first_tx:\n        sendall_destination_balance += second_create2_value\n\n    post[sendall_destination] = Account(balance=sendall_destination_balance)\n\n    nonce = count()\n\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post=post,\n        blocks=[\n            Block(\n                txs=[\n                    Transaction(\n                        ty=0x0,\n                        chain_id=0x0,\n                        nonce=next(nonce),\n                        to=address_to,\n                        gas_price=10,\n                        protected=False,\n                        data=initcode,\n                        gas_limit=5000000,\n                        value=0,\n                    ),\n                    Transaction(\n                        ty=0x0,\n                        chain_id=0x0,\n                        nonce=next(nonce),\n                        to=address_to,\n                        gas_price=10,\n                        protected=False,\n                        data=initcode,\n                        gas_limit=5000000,\n                        value=0,\n                    ),\n                ]\n            )\n        ],\n    )\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision/index/test_cases/","title":"Test Dynamic Create2 Selfdestruct Collision - Test Cases","text":"

    Test cases generated from tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py

    Parametrized test cases generated from the test module tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py:

    test_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test_engine-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test_engine-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-state_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-state_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test_engine-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test_engine-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-state_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-state_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test_engine-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test_engine-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-state_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-state_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test_engine-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test_engine-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-state_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-state_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Paris-blockchain_test-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Paris-blockchain_test-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Paris-blockchain_test-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Paris-blockchain_test-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Paris-blockchain_test_engine-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Paris-blockchain_test_engine-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Paris-blockchain_test_engine-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Paris-blockchain_test_engine-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Shanghai-blockchain_test-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Shanghai-blockchain_test-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Shanghai-blockchain_test-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Shanghai-blockchain_test-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Shanghai-blockchain_test_engine-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Shanghai-blockchain_test_engine-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Shanghai-blockchain_test_engine-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Shanghai-blockchain_test_engine-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Cancun-blockchain_test-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Cancun-blockchain_test-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Cancun-blockchain_test-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Cancun-blockchain_test-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Cancun-blockchain_test_engine-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Cancun-blockchain_test_engine-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Cancun-blockchain_test_engine-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Cancun-blockchain_test_engine-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Prague-blockchain_test-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Prague-blockchain_test-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Prague-blockchain_test-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Prague-blockchain_test-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Prague-blockchain_test_engine-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Prague-blockchain_test_engine-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Prague-blockchain_test_engine-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Prague-blockchain_test_engine-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Paris-blockchain_test-selfdestruct_on_first_tx_False-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Paris-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Paris-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_True]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Paris-blockchain_test_engine-selfdestruct_on_first_tx_False-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Paris-blockchain_test_engine-selfdestruct_on_first_tx_True-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Paris-blockchain_test_engine-selfdestruct_on_first_tx_True-recreate_on_first_tx_True]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Shanghai-blockchain_test-selfdestruct_on_first_tx_False-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Shanghai-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Shanghai-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_True]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_on_first_tx_False-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_on_first_tx_True-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_on_first_tx_True-recreate_on_first_tx_True]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Cancun-blockchain_test-selfdestruct_on_first_tx_False-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Cancun-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Cancun-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_True]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Cancun-blockchain_test_engine-selfdestruct_on_first_tx_False-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Cancun-blockchain_test_engine-selfdestruct_on_first_tx_True-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Cancun-blockchain_test_engine-selfdestruct_on_first_tx_True-recreate_on_first_tx_True]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Prague-blockchain_test-selfdestruct_on_first_tx_False-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Prague-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Prague-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_True]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Prague-blockchain_test_engine-selfdestruct_on_first_tx_False-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Prague-blockchain_test_engine-selfdestruct_on_first_tx_True-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Prague-blockchain_test_engine-selfdestruct_on_first_tx_True-recreate_on_first_tx_True]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert/","title":"Test Reentrancy Selfdestruct Revert","text":"

    Documentation for tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py\n

    Suicide scenario requested test tests#1325

    "},{"location":"tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert/#tests.cancun.eip6780_selfdestruct.test_reentrancy_selfdestruct_revert.test_reentrancy_selfdestruct_revert","title":"test_reentrancy_selfdestruct_revert(env, fork, first_suicide, second_suicide, state_test)","text":"

    Suicide reentrancy scenario:

    Call|Callcode|Delegatecall the contract S. S self destructs. Call the revert proxy contract R. R Calls|Callcode|Delegatecall S. S self destructs (for the second time). R reverts (including the effects of the second selfdestruct). It is expected the S is self destructed after the transaction.

    Source code in tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py
    @pytest.mark.valid_from(\"Paris\")\n@pytest.mark.parametrize(\"first_suicide\", [Op.CALL, Op.CALLCODE, Op.DELEGATECALL])\n@pytest.mark.parametrize(\"second_suicide\", [Op.CALL, Op.CALLCODE, Op.DELEGATECALL])\ndef test_reentrancy_selfdestruct_revert(\n    env: Environment,\n    fork: Fork,\n    first_suicide: Op,\n    second_suicide: Op,\n    state_test: StateTestFiller,\n):\n    \"\"\"\n    Suicide reentrancy scenario:\n\n    Call|Callcode|Delegatecall the contract S.\n    S self destructs.\n    Call the revert proxy contract R.\n    R Calls|Callcode|Delegatecall S.\n    S self destructs (for the second time).\n    R reverts (including the effects of the second selfdestruct).\n    It is expected the S is self destructed after the transaction.\n    \"\"\"\n    address_to = TestAddress2\n    address_s = Address(0x1000000000000000000000000000000000000001)\n    address_r = Address(0x1000000000000000000000000000000000000002)\n    suicide_d = Address(0x03E8)\n\n    def construct_call_s(call_type: Op, money: int):\n        if call_type in [Op.CALLCODE, Op.CALL]:\n            return call_type(Op.GAS, address_s, money, 0, 0, 0, 0)\n        else:\n            return call_type(Op.GAS, address_s, money, 0, 0, 0)\n\n    pre = {\n        address_to: Account(\n            balance=1000000000000000000,\n            nonce=0,\n            code=Op.SSTORE(1, construct_call_s(first_suicide, 0))\n            + Op.SSTORE(2, Op.CALL(Op.GAS, address_r, 0, 0, 0, 0, 0))\n            + Op.RETURNDATACOPY(0, 0, Op.RETURNDATASIZE())\n            + Op.SSTORE(3, Op.MLOAD(0)),\n            storage={0x01: 0x0100, 0x02: 0x0100, 0x03: 0x0100},\n        ),\n        address_s: Account(\n            balance=3000000000000000000,\n            nonce=0,\n            code=Op.SELFDESTRUCT(1000),\n            storage={},\n        ),\n        address_r: Account(\n            balance=5000000000000000000,\n            nonce=0,\n            # Send money when calling it suicide second time to make sure the funds not transferred\n            code=Op.MSTORE(0, Op.ADD(15, construct_call_s(second_suicide, 100)))\n            + Op.REVERT(0, 32),\n            storage={},\n        ),\n        TestAddress: Account(\n            balance=7000000000000000000,\n            nonce=0,\n            code=\"0x\",\n            storage={},\n        ),\n    }\n\n    post = {\n        # Second caller unchanged as call gets reverted\n        address_r: Account(balance=5000000000000000000, storage={}),\n    }\n\n    if first_suicide in [Op.CALLCODE, Op.DELEGATECALL]:\n        if fork >= Cancun:\n            # On Cancun even callcode/delegatecall does not remove the account, so the value remain\n            post[address_to] = Account(\n                storage={\n                    0x01: 0x01,  # First call to contract S->suicide success\n                    0x02: 0x00,  # Second call to contract S->suicide reverted\n                    0x03: 16,  # Reverted value to check that revert really worked\n                },\n            )\n        else:\n            # Callcode executed first suicide from sender. sender is deleted\n            post[address_to] = Account.NONEXISTENT  # type: ignore\n\n        # Original suicide account remains in state\n        post[address_s] = Account(balance=3000000000000000000, storage={})\n        # Suicide destination\n        post[suicide_d] = Account(\n            balance=1000000000000000000,\n        )\n\n    # On Cancun suicide no longer destroys the account from state, just cleans the balance\n    if first_suicide in [Op.CALL]:\n        post[address_to] = Account(\n            storage={\n                0x01: 0x01,  # First call to contract S->suicide success\n                0x02: 0x00,  # Second call to contract S->suicide reverted\n                0x03: 16,  # Reverted value to check that revert really worked\n            },\n        )\n        if fork >= Cancun:\n            # On Cancun suicide does not remove the account, just sends the balance\n            post[address_s] = Account(balance=0, code=\"0x6103e8ff\", storage={})\n        else:\n            post[address_s] = Account.NONEXISTENT  # type: ignore\n\n        # Suicide destination\n        post[suicide_d] = Account(\n            balance=3000000000000000000,\n        )\n\n    tx = Transaction(\n        ty=0x0,\n        chain_id=0x0,\n        nonce=0,\n        to=address_to,\n        gas_price=10,\n        protected=False,\n        data=\"\",\n        gas_limit=500000,\n        value=0,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert/index/test_cases/","title":"Test Reentrancy Selfdestruct Revert - Test Cases","text":"

    Test cases generated from tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py

    Parametrized test cases generated from the test module tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py:

    test_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test_engine-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test_engine-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test_engine-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-state_test-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-state_test-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Paris-state_test-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-state_test-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-state_test-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Paris-state_test-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-state_test-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-state_test-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Paris-state_test-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test_engine-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test_engine-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test_engine-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-state_test-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-state_test-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-state_test-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-state_test-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-state_test-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-state_test-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-state_test-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-state_test-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-state_test-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test_engine-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test_engine-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test_engine-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-state_test-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-state_test-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-state_test-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-state_test-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-state_test-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-state_test-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-state_test-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-state_test-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-state_test-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test_engine-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test_engine-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test_engine-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-state_test-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-state_test-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Prague-state_test-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-state_test-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-state_test-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Prague-state_test-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-state_test-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-state_test-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Prague-state_test-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/","title":"Test Selfdestruct","text":"

    Documentation for tests/cancun/eip6780_selfdestruct/test_selfdestruct.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip6780_selfdestruct/test_selfdestruct.py\n
    Tests EIP-6780: SELFDESTRUCT only in same transaction

    Tests for EIP-6780: SELFDESTRUCT only in same transaction.

    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/#tests.cancun.eip6780_selfdestruct.test_selfdestruct.test_create_selfdestruct_same_tx","title":"test_create_selfdestruct_same_tx(state_test, env, pre, sender, selfdestruct_code, sendall_recipient_addresses, create_opcode, call_times, selfdestruct_contract_initial_balance)","text":"

    Use CREATE or CREATE2 to create a self-destructing contract, and call it in the same transaction.

    Behavior should be the same before and after EIP-6780.

    Test using
    • Different send-all recipient addresses: single, multiple, including self
    • Different initial balances for the self-destructing contract
    • Different opcodes: CREATE, CREATE2
    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
    @pytest.mark.parametrize(\"create_opcode\", [Op.CREATE, Op.CREATE2])\n@pytest.mark.parametrize(\n    \"call_times,sendall_recipient_addresses\",\n    [\n        pytest.param(\n            1,\n            [PRE_DEPLOY_CONTRACT_1],\n            id=\"single_call\",\n        ),\n        pytest.param(\n            1,\n            [SELF_ADDRESS],\n            id=\"single_call_self\",\n        ),\n        pytest.param(\n            2,\n            [PRE_DEPLOY_CONTRACT_1],\n            id=\"multiple_calls_single_sendall_recipient\",\n        ),\n        pytest.param(\n            2,\n            [SELF_ADDRESS],\n            id=\"multiple_calls_single_self_recipient\",\n        ),\n        pytest.param(\n            3,\n            [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3],\n            id=\"multiple_calls_multiple_sendall_recipients\",\n        ),\n        pytest.param(\n            3,\n            [SELF_ADDRESS, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3],\n            id=\"multiple_calls_multiple_sendall_recipients_including_self\",\n        ),\n        pytest.param(\n            3,\n            [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, SELF_ADDRESS],\n            id=\"multiple_calls_multiple_sendall_recipients_including_self_last\",\n        ),\n        pytest.param(\n            6,\n            [SELF_ADDRESS, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3],\n            id=\"multiple_calls_multiple_repeating_sendall_recipients_including_self\",\n        ),\n        pytest.param(\n            6,\n            [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, SELF_ADDRESS],\n            id=\"multiple_calls_multiple_repeating_sendall_recipients_including_self_last\",\n        ),\n    ],\n    indirect=[\"sendall_recipient_addresses\"],\n)\n@pytest.mark.parametrize(\"selfdestruct_contract_initial_balance\", [0, 100_000])\n@pytest.mark.valid_from(\"Shanghai\")\ndef test_create_selfdestruct_same_tx(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    sender: EOA,\n    selfdestruct_code: Bytecode,\n    sendall_recipient_addresses: List[Address],\n    create_opcode: Op,\n    call_times: int,\n    selfdestruct_contract_initial_balance: int,\n):\n    \"\"\"\n    Use CREATE or CREATE2 to create a self-destructing contract, and call it in the same\n    transaction.\n\n    Behavior should be the same before and after EIP-6780.\n\n    Test using:\n        - Different send-all recipient addresses: single, multiple, including self\n        - Different initial balances for the self-destructing contract\n        - Different opcodes: CREATE, CREATE2\n    \"\"\"\n    selfdestruct_contract_initcode = Initcode(deploy_code=selfdestruct_code)\n    initcode_copy_from_address = pre.deploy_contract(selfdestruct_contract_initcode)\n    # Our entry point is an initcode that in turn creates a self-destructing contract\n    entry_code_storage = Storage()\n\n    # Bytecode used to create the contract, can be CREATE or CREATE2\n    create_bytecode = create_opcode(size=len(selfdestruct_contract_initcode))\n    selfdestruct_contract_address = compute_create_address(\n        address=compute_create_address(address=sender, nonce=0),\n        nonce=1,\n        initcode=selfdestruct_contract_initcode,\n        opcode=create_opcode,\n    )\n    for i in range(len(sendall_recipient_addresses)):\n        if sendall_recipient_addresses[i] == SELF_ADDRESS:\n            sendall_recipient_addresses[i] = selfdestruct_contract_address\n    if selfdestruct_contract_initial_balance > 0:\n        pre.fund_address(selfdestruct_contract_address, selfdestruct_contract_initial_balance)\n\n    # Create a dict to record the expected final balances\n    sendall_final_balances = dict(\n        zip(sendall_recipient_addresses, [0] * len(sendall_recipient_addresses))\n    )\n    selfdestruct_contract_current_balance = selfdestruct_contract_initial_balance\n\n    # Entry code that will be executed, creates the contract and then calls it in the same tx\n    entry_code = (\n        # Initcode is already deployed at `initcode_copy_from_address`, so just copy it\n        Op.EXTCODECOPY(\n            initcode_copy_from_address,\n            0,\n            0,\n            len(selfdestruct_contract_initcode),\n        )\n        # And we store the created address for verification purposes\n        + Op.SSTORE(\n            entry_code_storage.store_next(selfdestruct_contract_address),\n            create_bytecode,\n        )\n    )\n\n    # Store the EXTCODE* properties of the created address\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(len(selfdestruct_code)),\n        Op.EXTCODESIZE(selfdestruct_contract_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(selfdestruct_code.keccak256()),\n        Op.EXTCODEHASH(selfdestruct_contract_address),\n    )\n\n    # Call the self-destructing contract multiple times as required, increasing the wei sent each\n    # time\n    entry_code_balance = 0\n    for i, sendall_recipient in zip(range(call_times), cycle(sendall_recipient_addresses)):\n        entry_code += Op.MSTORE(0, sendall_recipient)\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(1),\n            Op.CALL(\n                Op.GASLIMIT,  # Gas\n                selfdestruct_contract_address,  # Address\n                i,  # Value\n                0,\n                32,\n                0,\n                0,\n            ),\n        )\n        entry_code_balance += i\n        selfdestruct_contract_current_balance += i\n\n        # Balance is always sent to other contracts\n        if sendall_recipient != selfdestruct_contract_address:\n            sendall_final_balances[sendall_recipient] += selfdestruct_contract_current_balance\n\n        # Self-destructing contract must always have zero balance after the call because the\n        # self-destruct always happens in the same transaction in this test\n        selfdestruct_contract_current_balance = 0\n\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(0),\n            Op.BALANCE(selfdestruct_contract_address),\n        )\n\n    # Check the EXTCODE* properties of the self-destructing contract again\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(len(selfdestruct_code)),\n        Op.EXTCODESIZE(selfdestruct_contract_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(selfdestruct_code.keccak256()),\n        Op.EXTCODEHASH(selfdestruct_contract_address),\n    )\n\n    # Lastly return zero so the entry point contract is created and we can retain the stored\n    # values for verification.\n    entry_code += Op.RETURN(max(len(selfdestruct_contract_initcode), 32), 1)\n\n    tx = Transaction(\n        value=entry_code_balance,\n        data=entry_code,\n        sender=sender,\n        to=None,\n        gas_limit=500_000,\n    )\n\n    entry_code_address = tx.created_contract\n\n    post: Dict[Address, Account] = {\n        entry_code_address: Account(\n            storage=entry_code_storage,\n        ),\n    }\n\n    # Check the balances of the sendall recipients\n    for address, balance in sendall_final_balances.items():\n        post[address] = Account(balance=balance, storage={0: 1})\n\n    post[selfdestruct_contract_address] = Account.NONEXISTENT  # type: ignore\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/#tests.cancun.eip6780_selfdestruct.test_selfdestruct.test_self_destructing_initcode","title":"test_self_destructing_initcode(state_test, env, pre, sender, selfdestruct_code, sendall_recipient_addresses, create_opcode, call_times, selfdestruct_contract_initial_balance)","text":"

    Test that a contract can self-destruct in its initcode.

    Behavior is the same before and after EIP-6780.

    Test using
    • Different initial balances for the self-destructing contract
    • Different opcodes: CREATE, CREATE2
    • Different number of calls to the self-destructing contract in the same tx
    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
    @pytest.mark.parametrize(\"create_opcode\", [Op.CREATE, Op.CREATE2])\n@pytest.mark.parametrize(\"call_times\", [0, 1])\n@pytest.mark.parametrize(\"selfdestruct_contract_initial_balance\", [0, 100_000])\n@pytest.mark.valid_from(\"Shanghai\")\ndef test_self_destructing_initcode(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    sender: EOA,\n    selfdestruct_code: Bytecode,\n    sendall_recipient_addresses: List[Address],\n    create_opcode: Op,\n    call_times: int,  # Number of times to call the self-destructing contract in the same tx\n    selfdestruct_contract_initial_balance: int,\n):\n    \"\"\"\n    Test that a contract can self-destruct in its initcode.\n\n    Behavior is the same before and after EIP-6780.\n\n    Test using:\n        - Different initial balances for the self-destructing contract\n        - Different opcodes: CREATE, CREATE2\n        - Different number of calls to the self-destructing contract in the same tx\n    \"\"\"\n    initcode_copy_from_address = pre.deploy_contract(selfdestruct_code)\n    # Our entry point is an initcode that in turn creates a self-destructing contract\n    entry_code_storage = Storage()\n    sendall_amount = 0\n\n    # Bytecode used to create the contract, can be CREATE or CREATE2\n    create_bytecode = create_opcode(size=len(selfdestruct_code))\n\n    selfdestruct_contract_address = compute_create_address(\n        address=compute_create_address(address=sender, nonce=0),\n        nonce=1,\n        initcode=selfdestruct_code,\n        opcode=create_opcode,\n    )\n\n    # Entry code that will be executed, creates the contract and then calls it in the same tx\n    entry_code = (\n        # Initcode is already deployed at `initcode_copy_from_address`, so just copy it\n        Op.EXTCODECOPY(\n            initcode_copy_from_address,\n            0,\n            0,\n            len(selfdestruct_code),\n        )\n        # And we store the created address for verification purposes\n        + Op.SSTORE(\n            entry_code_storage.store_next(selfdestruct_contract_address),\n            create_bytecode,\n        )\n    )\n\n    # Store the EXTCODE* properties of the created address\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(0),\n        Op.EXTCODESIZE(selfdestruct_contract_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(Bytecode().keccak256()),\n        Op.EXTCODEHASH(selfdestruct_contract_address),\n    )\n\n    # Call the self-destructing contract multiple times as required, increasing the wei sent each\n    # time\n    entry_code_balance = 0\n    for i in range(call_times):\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(1),\n            Op.CALL(\n                Op.GASLIMIT,  # Gas\n                selfdestruct_contract_address,  # Address\n                i,  # Value\n                0,\n                0,\n                0,\n                0,\n            ),\n        )\n        entry_code_balance += i\n\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(0),\n            Op.BALANCE(selfdestruct_contract_address),\n        )\n\n    # Lastly return zero so the entry point contract is created and we can retain the stored\n    # values for verification.\n    entry_code += Op.RETURN(max(len(selfdestruct_code), 32), 1)\n\n    if selfdestruct_contract_initial_balance > 0:\n        # Address where the contract is created already had some balance,\n        # which must be included in the send-all operation\n        sendall_amount += selfdestruct_contract_initial_balance\n        pre.fund_address(selfdestruct_contract_address, selfdestruct_contract_initial_balance)\n\n    tx = Transaction(\n        value=entry_code_balance,\n        data=entry_code,\n        sender=sender,\n        to=None,\n        gas_limit=500_000,\n    )\n\n    entry_code_address = tx.created_contract\n\n    post: Dict[Address, Account] = {\n        entry_code_address: Account(\n            storage=entry_code_storage,\n        ),\n        selfdestruct_contract_address: Account.NONEXISTENT,  # type: ignore\n        sendall_recipient_addresses[0]: Account(balance=sendall_amount, storage={0: 1}),\n    }\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/#tests.cancun.eip6780_selfdestruct.test_selfdestruct.test_self_destructing_initcode_create_tx","title":"test_self_destructing_initcode_create_tx(state_test, env, pre, sender, tx_value, selfdestruct_code, sendall_recipient_addresses, selfdestruct_contract_initial_balance)","text":"

    Use a Create Transaction to execute a self-destructing initcode.

    Behavior should be the same before and after EIP-6780.

    Test using
    • Different initial balances for the self-destructing contract
    • Different transaction value amounts
    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
    @pytest.mark.parametrize(\"tx_value\", [0, 100_000])\n@pytest.mark.parametrize(\"selfdestruct_contract_initial_balance\", [0, 100_000])\n@pytest.mark.valid_from(\"Shanghai\")\ndef test_self_destructing_initcode_create_tx(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    sender: EOA,\n    tx_value: int,\n    selfdestruct_code: Bytecode,\n    sendall_recipient_addresses: List[Address],\n    selfdestruct_contract_initial_balance: int,\n):\n    \"\"\"\n    Use a Create Transaction to execute a self-destructing initcode.\n\n    Behavior should be the same before and after EIP-6780.\n\n    Test using:\n        - Different initial balances for the self-destructing contract\n        - Different transaction value amounts\n    \"\"\"\n    tx = Transaction(\n        sender=sender,\n        value=tx_value,\n        data=selfdestruct_code,\n        to=None,\n        gas_limit=500_000,\n    )\n    selfdestruct_contract_address = tx.created_contract\n    pre.fund_address(selfdestruct_contract_address, selfdestruct_contract_initial_balance)\n\n    # Our entry point is an initcode that in turn creates a self-destructing contract\n    sendall_amount = selfdestruct_contract_initial_balance + tx_value\n\n    post: Dict[Address, Account] = {\n        selfdestruct_contract_address: Account.NONEXISTENT,  # type: ignore\n        sendall_recipient_addresses[0]: Account(balance=sendall_amount, storage={0: 1}),\n    }\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/#tests.cancun.eip6780_selfdestruct.test_selfdestruct.test_recreate_self_destructed_contract_different_txs","title":"test_recreate_self_destructed_contract_different_txs(blockchain_test, env, pre, sender, selfdestruct_code, selfdestruct_contract_initial_balance, sendall_recipient_addresses, create_opcode, recreate_times, call_times)","text":"

    Test that a contract can be recreated after it has self-destructed, over the lapse of multiple transactions.

    Behavior should be the same before and after EIP-6780.

    Test using
    • Different initial balances for the self-destructing contract
    • Contract creating opcodes that are not CREATE
    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
    @pytest.mark.parametrize(\"create_opcode\", [Op.CREATE2])  # Can only recreate using CREATE2\n@pytest.mark.parametrize(\n    \"sendall_recipient_addresses\",\n    [\n        pytest.param(\n            [PRE_DEPLOY_CONTRACT_1],\n            id=\"selfdestruct_other_address\",\n        ),\n        pytest.param(\n            [SELF_ADDRESS],\n            id=\"selfdestruct_to_self\",\n        ),\n    ],\n    indirect=[\"sendall_recipient_addresses\"],\n)\n@pytest.mark.parametrize(\"selfdestruct_contract_initial_balance\", [0, 100_000])\n@pytest.mark.parametrize(\"recreate_times\", [1])\n@pytest.mark.parametrize(\"call_times\", [1])\n@pytest.mark.valid_from(\"Shanghai\")\ndef test_recreate_self_destructed_contract_different_txs(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Alloc,\n    sender: EOA,\n    selfdestruct_code: Bytecode,\n    selfdestruct_contract_initial_balance: int,\n    sendall_recipient_addresses: List[Address],\n    create_opcode: Op,\n    recreate_times: int,  # Number of times to recreate the contract in different transactions\n    call_times: int,  # Number of times to call the self-destructing contract in the same tx\n):\n    \"\"\"\n    Test that a contract can be recreated after it has self-destructed, over the lapse\n    of multiple transactions.\n\n    Behavior should be the same before and after EIP-6780.\n\n    Test using:\n        - Different initial balances for the self-destructing contract\n        - Contract creating opcodes that are not CREATE\n    \"\"\"\n    selfdestruct_contract_initcode = Initcode(deploy_code=selfdestruct_code)\n    initcode_copy_from_address = pre.deploy_contract(selfdestruct_contract_initcode)\n    entry_code_storage = Storage()\n    sendall_amount = selfdestruct_contract_initial_balance\n\n    # Bytecode used to create the contract\n    assert create_opcode != Op.CREATE, \"cannot recreate contract using CREATE opcode\"\n    create_bytecode = create_opcode(size=len(selfdestruct_contract_initcode))\n\n    # Entry code that will be executed, creates the contract and then calls it\n    entry_code = (\n        # Initcode is already deployed at initcode_copy_from_address, so just copy it\n        Op.EXTCODECOPY(\n            initcode_copy_from_address,\n            0,\n            0,\n            len(selfdestruct_contract_initcode),\n        )\n        + Op.MSTORE(0, create_bytecode)\n        + Op.SSTORE(\n            Op.CALLDATALOAD(0),\n            Op.MLOAD(0),\n        )\n    )\n\n    for i in range(call_times):\n        entry_code += Op.CALL(\n            Op.GASLIMIT,\n            Op.MLOAD(0),\n            i,\n            0,\n            0,\n            0,\n            0,\n        )\n        sendall_amount += i\n\n    entry_code += Op.STOP\n\n    entry_code_address = pre.deploy_contract(code=entry_code)\n    selfdestruct_contract_address = compute_create_address(\n        address=entry_code_address, initcode=selfdestruct_contract_initcode, opcode=create_opcode\n    )\n    pre.fund_address(selfdestruct_contract_address, selfdestruct_contract_initial_balance)\n    for i in range(len(sendall_recipient_addresses)):\n        if sendall_recipient_addresses[i] == SELF_ADDRESS:\n            sendall_recipient_addresses[i] = selfdestruct_contract_address\n\n    txs: List[Transaction] = []\n    for i in range(recreate_times + 1):\n        txs.append(\n            Transaction(\n                data=Hash(i),\n                sender=sender,\n                to=entry_code_address,\n                gas_limit=500_000,\n            )\n        )\n        entry_code_storage[i] = selfdestruct_contract_address\n\n    post: Dict[Address, Account] = {\n        entry_code_address: Account(\n            storage=entry_code_storage,\n        ),\n        selfdestruct_contract_address: Account.NONEXISTENT,  # type: ignore\n    }\n    if sendall_recipient_addresses[0] != selfdestruct_contract_address:\n        post[sendall_recipient_addresses[0]] = Account(balance=sendall_amount, storage={0: 1})\n\n    blockchain_test(genesis_environment=env, pre=pre, post=post, blocks=[Block(txs=txs)])\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/#tests.cancun.eip6780_selfdestruct.test_selfdestruct.test_selfdestruct_pre_existing","title":"test_selfdestruct_pre_existing(state_test, eip_enabled, env, pre, sender, selfdestruct_code, selfdestruct_contract_initial_balance, sendall_recipient_addresses, call_times)","text":"

    Test calling a previously created account that contains a selfdestruct, and verify its balance is sent to the destination address.

    After EIP-6780, the balance should be sent to the send-all recipient address, similar to the behavior before the EIP, but the account is not deleted.

    Test using
    • Different send-all recipient addresses: single, multiple, including self
    • Different initial balances for the self-destructing contract
    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
    @pytest.mark.parametrize(\n    \"call_times,sendall_recipient_addresses\",\n    [\n        pytest.param(\n            1,\n            [PRE_DEPLOY_CONTRACT_1],\n            id=\"single_call\",\n        ),\n        pytest.param(\n            1,\n            [SELF_ADDRESS],\n            id=\"single_call_self\",\n        ),\n        pytest.param(\n            2,\n            [PRE_DEPLOY_CONTRACT_1],\n            id=\"multiple_calls_single_sendall_recipient\",\n        ),\n        pytest.param(\n            2,\n            [SELF_ADDRESS],\n            id=\"multiple_calls_single_self_recipient\",\n        ),\n        pytest.param(\n            3,\n            [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3],\n            id=\"multiple_calls_multiple_sendall_recipients\",\n        ),\n        pytest.param(\n            3,\n            [SELF_ADDRESS, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3],\n            id=\"multiple_calls_multiple_sendall_recipients_including_self\",\n        ),\n        pytest.param(\n            3,\n            [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, SELF_ADDRESS],\n            id=\"multiple_calls_multiple_sendall_recipients_including_self_last\",\n        ),\n        pytest.param(\n            6,\n            [SELF_ADDRESS, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3],\n            id=\"multiple_calls_multiple_repeating_sendall_recipients_including_self\",\n        ),\n        pytest.param(\n            6,\n            [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, SELF_ADDRESS],\n            id=\"multiple_calls_multiple_repeating_sendall_recipients_including_self_last\",\n        ),\n    ],\n    indirect=[\"sendall_recipient_addresses\"],\n)\n@pytest.mark.parametrize(\"selfdestruct_contract_initial_balance\", [0, 100_000])\n@pytest.mark.valid_from(\"Shanghai\")\ndef test_selfdestruct_pre_existing(\n    state_test: StateTestFiller,\n    eip_enabled: bool,\n    env: Environment,\n    pre: Alloc,\n    sender: EOA,\n    selfdestruct_code: Bytecode,\n    selfdestruct_contract_initial_balance: int,\n    sendall_recipient_addresses: List[Address],\n    call_times: int,\n):\n    \"\"\"\n    Test calling a previously created account that contains a selfdestruct, and verify its balance\n    is sent to the destination address.\n\n    After EIP-6780, the balance should be sent to the send-all recipient address, similar to\n    the behavior before the EIP, but the account is not deleted.\n\n    Test using:\n        - Different send-all recipient addresses: single, multiple, including self\n        - Different initial balances for the self-destructing contract\n    \"\"\"\n    selfdestruct_contract_address = pre.deploy_contract(selfdestruct_code)\n    entry_code_storage = Storage()\n\n    for i in range(len(sendall_recipient_addresses)):\n        if sendall_recipient_addresses[i] == SELF_ADDRESS:\n            sendall_recipient_addresses[i] = selfdestruct_contract_address\n    if selfdestruct_contract_initial_balance > 0:\n        pre.fund_address(selfdestruct_contract_address, selfdestruct_contract_initial_balance)\n\n    # Create a dict to record the expected final balances\n    sendall_final_balances = dict(\n        zip(sendall_recipient_addresses, [0] * len(sendall_recipient_addresses))\n    )\n    selfdestruct_contract_current_balance = selfdestruct_contract_initial_balance\n\n    # Entry code in this case will simply call the pre-existing self-destructing contract,\n    # as many times as required\n    entry_code = Bytecode()\n\n    # Call the self-destructing contract multiple times as required, increasing the wei sent each\n    # time\n    entry_code_balance = 0\n    for i, sendall_recipient in zip(range(call_times), cycle(sendall_recipient_addresses)):\n        entry_code += Op.MSTORE(0, sendall_recipient)\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(1),\n            Op.CALL(\n                Op.GASLIMIT,  # Gas\n                selfdestruct_contract_address,  # Address\n                i,  # Value\n                0,\n                32,\n                0,\n                0,\n            ),\n        )\n        entry_code_balance += i\n        selfdestruct_contract_current_balance += i\n\n        # Balance is always sent to other contracts\n        if sendall_recipient != selfdestruct_contract_address:\n            sendall_final_balances[sendall_recipient] += selfdestruct_contract_current_balance\n\n        # Balance is only kept by the self-destructing contract if we are sending to self and the\n        # EIP is activated, otherwise the balance is destroyed\n        if sendall_recipient != selfdestruct_contract_address or not eip_enabled:\n            selfdestruct_contract_current_balance = 0\n\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(selfdestruct_contract_current_balance),\n            Op.BALANCE(selfdestruct_contract_address),\n        )\n\n    # Check the EXTCODE* properties of the self-destructing contract\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(len(selfdestruct_code)),\n        Op.EXTCODESIZE(selfdestruct_contract_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(selfdestruct_code.keccak256()),\n        Op.EXTCODEHASH(selfdestruct_contract_address),\n    )\n\n    # Lastly return zero so the entry point contract is created and we can retain the stored\n    # values for verification.\n    entry_code += Op.RETURN(32, 1)\n\n    tx = Transaction(\n        value=entry_code_balance,\n        data=entry_code,\n        sender=sender,\n        to=None,\n        gas_limit=500_000,\n    )\n\n    entry_code_address = tx.created_contract\n\n    post: Dict[Address, Account] = {\n        entry_code_address: Account(\n            storage=entry_code_storage,\n        ),\n    }\n\n    # Check the balances of the sendall recipients\n    for address, balance in sendall_final_balances.items():\n        if address != selfdestruct_contract_address:\n            post[address] = Account(balance=balance, storage={0: 1})\n\n    if eip_enabled:\n        balance = selfdestruct_contract_current_balance\n        post[selfdestruct_contract_address] = Account(\n            balance=balance,\n            storage={0: call_times},\n        )\n    else:\n        post[selfdestruct_contract_address] = Account.NONEXISTENT  # type: ignore\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/#tests.cancun.eip6780_selfdestruct.test_selfdestruct.test_selfdestruct_created_same_block_different_tx","title":"test_selfdestruct_created_same_block_different_tx(blockchain_test, eip_enabled, env, pre, sender, selfdestruct_contract_initial_balance, sendall_recipient_addresses, call_times)","text":"

    Test that if an account created in the same block that contains a selfdestruct is called, its balance is sent to the send-all address, but the account is not deleted.

    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
    @pytest.mark.parametrize(\"selfdestruct_contract_initial_balance\", [0, 1])\n@pytest.mark.parametrize(\"call_times\", [1, 10])\n@pytest.mark.valid_from(\"Shanghai\")\ndef test_selfdestruct_created_same_block_different_tx(\n    blockchain_test: BlockchainTestFiller,\n    eip_enabled: bool,\n    env: Environment,\n    pre: Alloc,\n    sender: EOA,\n    selfdestruct_contract_initial_balance: int,\n    sendall_recipient_addresses: List[Address],\n    call_times: int,\n):\n    \"\"\"\n    Test that if an account created in the same block that contains a selfdestruct is\n    called, its balance is sent to the send-all address, but the account is not deleted.\n    \"\"\"\n    selfdestruct_code = selfdestruct_code_preset(\n        sendall_recipient_addresses=sendall_recipient_addresses,\n    )\n    selfdestruct_contract_initcode = Initcode(deploy_code=selfdestruct_code)\n    selfdestruct_contract_address = compute_create_address(address=sender, nonce=0)\n    entry_code_address = compute_create_address(address=sender, nonce=1)\n    entry_code_storage = Storage()\n    sendall_amount = selfdestruct_contract_initial_balance\n    entry_code = Bytecode()\n\n    # Entry code in this case will simply call the pre-existing self-destructing contract,\n    # as many times as required\n\n    # Call the self-destructing contract multiple times as required, increasing the wei sent each\n    # time\n    entry_code_balance = 0\n    for i in range(call_times):\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(1),\n            Op.CALL(\n                Op.GASLIMIT,  # Gas\n                selfdestruct_contract_address,  # Address\n                i,  # Value\n                0,\n                0,\n                0,\n                0,\n            ),\n        )\n        entry_code_balance += i\n        sendall_amount += i\n\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(0),\n            Op.BALANCE(selfdestruct_contract_address),\n        )\n\n    # Check the EXTCODE* properties of the self-destructing contract\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(len(selfdestruct_code)),\n        Op.EXTCODESIZE(selfdestruct_contract_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(selfdestruct_code.keccak256()),\n        Op.EXTCODEHASH(selfdestruct_contract_address),\n    )\n\n    # Lastly return zero so the entry point contract is created and we can retain the stored\n    # values for verification.\n    entry_code += Op.RETURN(32, 1)\n\n    post: Dict[Address, Account] = {\n        entry_code_address: Account(\n            storage=entry_code_storage,\n        ),\n        sendall_recipient_addresses[0]: Account(balance=sendall_amount, storage={0: 1}),\n    }\n\n    if eip_enabled:\n        post[selfdestruct_contract_address] = Account(balance=0, storage={0: call_times})\n    else:\n        post[selfdestruct_contract_address] = Account.NONEXISTENT  # type: ignore\n\n    txs = [\n        Transaction(\n            value=selfdestruct_contract_initial_balance,\n            data=selfdestruct_contract_initcode,\n            sender=sender,\n            to=None,\n            gas_limit=500_000,\n        ),\n        Transaction(\n            value=entry_code_balance,\n            data=entry_code,\n            sender=sender,\n            to=None,\n            gas_limit=500_000,\n        ),\n    ]\n\n    blockchain_test(genesis_environment=env, pre=pre, post=post, blocks=[Block(txs=txs)])\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/#tests.cancun.eip6780_selfdestruct.test_selfdestruct.test_calling_from_new_contract_to_pre_existing_contract","title":"test_calling_from_new_contract_to_pre_existing_contract(state_test, env, pre, sender, sendall_recipient_addresses, create_opcode, call_opcode, call_times, selfdestruct_contract_initial_balance)","text":"

    Test that if an account created in the current transaction delegate-call a previously created account that executes self-destruct, the calling account is deleted.

    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
    @pytest.mark.parametrize(\"call_times\", [1])\n@pytest.mark.parametrize(\"selfdestruct_contract_initial_balance\", [0, 1])\n@pytest.mark.parametrize(\"call_opcode\", [Op.DELEGATECALL, Op.CALLCODE])\n@pytest.mark.parametrize(\"create_opcode\", [Op.CREATE])\n@pytest.mark.valid_from(\"Shanghai\")\ndef test_calling_from_new_contract_to_pre_existing_contract(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    sender: EOA,\n    sendall_recipient_addresses: List[Address],\n    create_opcode: Op,\n    call_opcode: Op,\n    call_times: int,\n    selfdestruct_contract_initial_balance: int,\n):\n    \"\"\"\n    Test that if an account created in the current transaction delegate-call a previously created\n    account that executes self-destruct, the calling account is deleted.\n    \"\"\"\n    pre_existing_selfdestruct_address = pre.deploy_contract(\n        selfdestruct_code_preset(\n            sendall_recipient_addresses=sendall_recipient_addresses,\n        ),\n    )\n    # Our entry point is an initcode that in turn creates a self-destructing contract\n    entry_code_storage = Storage()\n    sendall_amount = 0\n\n    entry_code_address = compute_create_address(address=sender, nonce=0)\n    selfdestruct_contract_address = compute_create_address(address=entry_code_address, nonce=1)\n\n    pre.fund_address(selfdestruct_contract_address, selfdestruct_contract_initial_balance)\n\n    # self-destructing call\n    selfdestruct_code = call_opcode(address=pre_existing_selfdestruct_address)\n    selfdestruct_contract_initcode = Initcode(deploy_code=selfdestruct_code)\n    initcode_copy_from_address = pre.deploy_contract(selfdestruct_contract_initcode)\n\n    # Bytecode used to create the contract, can be CREATE or CREATE2\n    create_bytecode = create_opcode(size=len(selfdestruct_contract_initcode))\n\n    # Entry code that will be executed, creates the contract and then calls it in the same tx\n    entry_code = (\n        # Initcode is already deployed at `initcode_copy_from_address`, so just copy it\n        Op.EXTCODECOPY(\n            initcode_copy_from_address,\n            0,\n            0,\n            len(selfdestruct_contract_initcode),\n        )\n        # And we store the created address for verification purposes\n        + Op.SSTORE(\n            entry_code_storage.store_next(selfdestruct_contract_address),\n            create_bytecode,\n        )\n    )\n\n    # Store the EXTCODE* properties of the created address\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(len(selfdestruct_code)),\n        Op.EXTCODESIZE(selfdestruct_contract_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(selfdestruct_code.keccak256()),\n        Op.EXTCODEHASH(selfdestruct_contract_address),\n    )\n\n    # Call the self-destructing contract multiple times as required, increasing the wei sent each\n    # time\n    entry_code_balance = 0\n    for i in range(call_times):\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(1),\n            Op.CALL(\n                Op.GASLIMIT,  # Gas\n                selfdestruct_contract_address,  # Address\n                i,  # Value\n                0,\n                0,\n                0,\n                0,\n            ),\n        )\n        entry_code_balance += i\n        sendall_amount += i\n\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(0),\n            Op.BALANCE(selfdestruct_contract_address),\n        )\n\n    # Check the EXTCODE* properties of the self-destructing contract again\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(len(selfdestruct_code)),\n        Op.EXTCODESIZE(selfdestruct_contract_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(selfdestruct_code.keccak256()),\n        Op.EXTCODEHASH(selfdestruct_contract_address),\n    )\n\n    # Lastly return zero so the entry point contract is created and we can retain the stored\n    # values for verification.\n    entry_code += Op.RETURN(max(len(selfdestruct_contract_initcode), 32), 1)\n\n    if selfdestruct_contract_initial_balance > 0:\n        # Address where the contract is created already had some balance,\n        # which must be included in the send-all operation\n        sendall_amount += selfdestruct_contract_initial_balance\n\n    post: Dict[Address, Account] = {\n        entry_code_address: Account(\n            storage=entry_code_storage,\n        ),\n        selfdestruct_contract_address: Account.NONEXISTENT,  # type: ignore\n        sendall_recipient_addresses[0]: Account(balance=sendall_amount, storage={0: 1}),\n    }\n\n    tx = Transaction(\n        value=entry_code_balance,\n        data=entry_code,\n        sender=sender,\n        to=None,\n        gas_limit=500_000,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/#tests.cancun.eip6780_selfdestruct.test_selfdestruct.test_calling_from_pre_existing_contract_to_new_contract","title":"test_calling_from_pre_existing_contract_to_new_contract(state_test, eip_enabled, env, pre, sender, selfdestruct_code, sendall_recipient_addresses, call_opcode, create_opcode, call_times, selfdestruct_contract_initial_balance, pre_existing_contract_initial_balance)","text":"

    Test that if an account created in the current transaction contains a self-destruct and is delegate-called by an account created before the current transaction, the calling account is not deleted.

    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
    @pytest.mark.parametrize(\"create_opcode\", [Op.CREATE, Op.CREATE2])\n@pytest.mark.parametrize(\"call_opcode\", [Op.DELEGATECALL, Op.CALLCODE])\n@pytest.mark.parametrize(\"call_times\", [1])\n@pytest.mark.parametrize(\"selfdestruct_contract_initial_balance\", [0, 1])\n@pytest.mark.parametrize(\"pre_existing_contract_initial_balance\", [0, 1])\n@pytest.mark.valid_from(\"Shanghai\")\ndef test_calling_from_pre_existing_contract_to_new_contract(\n    state_test: StateTestFiller,\n    eip_enabled: bool,\n    env: Environment,\n    pre: Alloc,\n    sender: EOA,\n    selfdestruct_code: Bytecode,\n    sendall_recipient_addresses: List[Address],\n    call_opcode: Op,\n    create_opcode: Op,\n    call_times: int,\n    selfdestruct_contract_initial_balance: int,\n    pre_existing_contract_initial_balance: int,\n):\n    \"\"\"\n    Test that if an account created in the current transaction contains a self-destruct and is\n    delegate-called by an account created before the current transaction, the calling account\n    is not deleted.\n    \"\"\"\n    selfdestruct_contract_initcode = Initcode(deploy_code=selfdestruct_code)\n    initcode_copy_from_address = pre.deploy_contract(\n        selfdestruct_contract_initcode,\n    )\n\n    selfdestruct_contract_address = compute_create_address(\n        address=compute_create_address(address=sender, nonce=0),\n        nonce=1,\n        salt=0,\n        initcode=selfdestruct_contract_initcode,\n        opcode=create_opcode,\n    )\n\n    # Add the contract that delegate calls to the newly created contract\n    caller_code = Op.SSTORE(1, Op.ADD(Op.SLOAD(1), 1)) + call_opcode(\n        address=selfdestruct_contract_address\n    )\n    caller_address = pre.deploy_contract(\n        caller_code,\n        balance=pre_existing_contract_initial_balance,\n    )\n\n    # Our entry point is an initcode that in turn creates a self-destructing contract\n    entry_code_storage = Storage()\n    sendall_amount = pre_existing_contract_initial_balance\n\n    # Entry code that will be executed, creates the contract and then calls it in the same tx\n    entry_code = (\n        # Initcode is already deployed at `initcode_copy_from_address`, so just copy it\n        Op.EXTCODECOPY(\n            initcode_copy_from_address,\n            0,\n            0,\n            len(selfdestruct_contract_initcode),\n        )\n        # And we store the created address for verification purposes\n        + Op.SSTORE(\n            entry_code_storage.store_next(selfdestruct_contract_address),\n            create_opcode(\n                value=selfdestruct_contract_initial_balance,\n                size=len(selfdestruct_contract_initcode),\n            ),\n        )\n    )\n\n    # Store the EXTCODE* properties of the pre-existing address\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(len(caller_code)),\n        Op.EXTCODESIZE(caller_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(caller_code.keccak256()),\n        Op.EXTCODEHASH(caller_address),\n    )\n\n    # Now instead of calling the newly created contract directly, we delegate call to it\n    # from a pre-existing contract, and the contract must not self-destruct\n    entry_code_balance = selfdestruct_contract_initial_balance\n    for i in range(call_times):\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(1),\n            Op.CALL(\n                Op.GASLIMIT,  # Gas\n                caller_address,  # Address\n                i,  # Value\n                0,\n                0,\n                0,\n                0,\n            ),\n        )\n        entry_code_balance += i\n        sendall_amount += i\n\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(0),\n            Op.BALANCE(caller_address),\n        )\n\n    # Check the EXTCODE* properties of the pre-existing address again\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(len(caller_code)),\n        Op.EXTCODESIZE(caller_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(caller_code.keccak256()),\n        Op.EXTCODEHASH(caller_address),\n    )\n\n    # Lastly return zero so the entry point contract is created and we can retain the stored\n    # values for verification.\n    entry_code += Op.RETURN(max(len(selfdestruct_contract_initcode), 32), 1)\n\n    tx = Transaction(\n        value=entry_code_balance,\n        data=entry_code,\n        sender=sender,\n        to=None,\n        gas_limit=500_000,\n    )\n\n    entry_code_address = tx.created_contract\n\n    post: Dict[Address, Account] = {\n        entry_code_address: Account(\n            storage=entry_code_storage,\n        ),\n        sendall_recipient_addresses[0]: Account(balance=sendall_amount, storage={0: 1}),\n    }\n\n    if eip_enabled:\n        post[caller_address] = Account(\n            storage={\n                0: call_times,\n                1: call_times,\n            },\n            balance=0,\n        )\n    else:\n        post[caller_address] = Account.NONEXISTENT  # type: ignore\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/#tests.cancun.eip6780_selfdestruct.test_selfdestruct.test_create_selfdestruct_same_tx_increased_nonce","title":"test_create_selfdestruct_same_tx_increased_nonce(state_test, env, pre, sender, selfdestruct_code, sendall_recipient_addresses, create_opcode, call_times, selfdestruct_contract_initial_balance)","text":"

    Verify that a contract can self-destruct if it was created in the same transaction, even when its nonce has been increased due to contract creation.

    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
    @pytest.mark.parametrize(\"create_opcode\", [Op.CREATE, Op.CREATE2])\n@pytest.mark.parametrize(\"selfdestruct_contract_initial_balance\", [0, 100_000])\n@pytest.mark.parametrize(\n    \"call_times,sendall_recipient_addresses\",\n    [\n        pytest.param(1, [PRE_DEPLOY_CONTRACT_1], id=\"single_call\"),\n        pytest.param(5, [PRE_DEPLOY_CONTRACT_1], id=\"multiple_calls_single beneficiary\"),\n    ],\n    indirect=[\"sendall_recipient_addresses\"],\n)\n@pytest.mark.valid_from(\"Shanghai\")\ndef test_create_selfdestruct_same_tx_increased_nonce(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    sender: EOA,\n    selfdestruct_code: Bytecode,\n    sendall_recipient_addresses: List[Address],\n    create_opcode: Op,\n    call_times: int,\n    selfdestruct_contract_initial_balance: int,\n):\n    \"\"\"\n    Verify that a contract can self-destruct if it was created in the same transaction, even when\n    its nonce has been increased due to contract creation.\n    \"\"\"\n    initcode = Op.RETURN(0, 1)\n    selfdestruct_pre_bytecode = Op.MSTORE(0, Op.PUSH32(bytes(initcode))) + Op.POP(\n        Op.CREATE(offset=32 - len(initcode), size=len(initcode))\n    )\n    selfdestruct_code = selfdestruct_pre_bytecode + selfdestruct_code\n    selfdestruct_contract_initcode = Initcode(deploy_code=selfdestruct_code)\n    initcode_copy_from_address = pre.deploy_contract(selfdestruct_contract_initcode)\n\n    selfdestruct_contract_address = compute_create_address(\n        address=compute_create_address(address=sender, nonce=0),\n        nonce=1,\n        initcode=selfdestruct_contract_initcode,\n        opcode=create_opcode,\n    )\n    if selfdestruct_contract_initial_balance > 0:\n        pre.fund_address(selfdestruct_contract_address, selfdestruct_contract_initial_balance)\n    # Our entry point is an initcode that in turn creates a self-destructing contract\n    entry_code_storage = Storage()\n\n    # Create a dict to record the expected final balances\n    sendall_final_balances = dict(\n        zip(sendall_recipient_addresses, [0] * len(sendall_recipient_addresses))\n    )\n    selfdestruct_contract_current_balance = selfdestruct_contract_initial_balance\n\n    # Bytecode used to create the contract, can be CREATE or CREATE2\n    create_bytecode = create_opcode(size=len(selfdestruct_contract_initcode))\n\n    # Entry code that will be executed, creates the contract and then calls it in the same tx\n    entry_code = (\n        # Initcode is already deployed at `initcode_copy_from_address`, so just copy it\n        Op.EXTCODECOPY(\n            initcode_copy_from_address,\n            0,\n            0,\n            len(selfdestruct_contract_initcode),\n        )\n        # And we store the created address for verification purposes\n        + Op.SSTORE(\n            entry_code_storage.store_next(selfdestruct_contract_address),\n            create_bytecode,\n        )\n    )\n\n    # Store the EXTCODE* properties of the created address\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(len(selfdestruct_code)),\n        Op.EXTCODESIZE(selfdestruct_contract_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(selfdestruct_code.keccak256()),\n        Op.EXTCODEHASH(selfdestruct_contract_address),\n    )\n\n    # Call the self-destructing contract multiple times as required, increasing the wei sent each\n    # time\n    entry_code_balance = 0\n    for i, sendall_recipient in zip(range(call_times), cycle(sendall_recipient_addresses)):\n        entry_code += Op.MSTORE(0, sendall_recipient)\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(1),\n            Op.CALL(\n                Op.GASLIMIT,  # Gas\n                selfdestruct_contract_address,  # Address\n                i,  # Value\n                0,\n                32,\n                0,\n                0,\n            ),\n        )\n        entry_code_balance += i\n        selfdestruct_contract_current_balance += i\n\n        # Balance is always sent to other contracts\n        if sendall_recipient != selfdestruct_contract_address:\n            sendall_final_balances[sendall_recipient] += selfdestruct_contract_current_balance\n\n        # Self-destructing contract must always have zero balance after the call because the\n        # self-destruct always happens in the same transaction in this test\n        selfdestruct_contract_current_balance = 0\n\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(0),\n            Op.BALANCE(selfdestruct_contract_address),\n        )\n\n    # Check the EXTCODE* properties of the self-destructing contract again\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(len(selfdestruct_code)),\n        Op.EXTCODESIZE(selfdestruct_contract_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(selfdestruct_code.keccak256()),\n        Op.EXTCODEHASH(selfdestruct_contract_address),\n    )\n\n    # Lastly return zero so the entry point contract is created and we can retain the stored\n    # values for verification.\n    entry_code += Op.RETURN(max(len(selfdestruct_contract_initcode), 32), 1)\n\n    tx = Transaction(\n        value=entry_code_balance,\n        data=entry_code,\n        sender=sender,\n        to=None,\n        gas_limit=1_000_000,\n    )\n\n    entry_code_address = tx.created_contract\n\n    post: Dict[Address, Account] = {\n        entry_code_address: Account(\n            code=\"0x00\",\n            storage=entry_code_storage,\n        ),\n        initcode_copy_from_address: Account(\n            code=selfdestruct_contract_initcode,\n        ),\n    }\n\n    # Check the balances of the sendall recipients\n    for address, balance in sendall_final_balances.items():\n        post[address] = Account(balance=balance, storage={0: 1})\n\n    # Check the new contracts created from the self-destructing contract were correctly created.\n    for address in [\n        compute_create_address(address=selfdestruct_contract_address, nonce=i + 1)\n        for i in range(call_times)\n    ]:\n        post[address] = Account(\n            code=b\"\\x00\",\n        )\n\n    post[selfdestruct_contract_address] = Account.NONEXISTENT  # type: ignore\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/index/test_cases/","title":"Test Selfdestruct - Test Cases","text":"

    Test cases generated from tests/cancun/eip6780_selfdestruct/test_selfdestruct.py

    Parametrized test cases generated from the test module tests/cancun/eip6780_selfdestruct/test_selfdestruct.py:

    test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-tx_value_100000]\ntest_recreate_self_destructed_contract_different_txs[fork_Shanghai-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Shanghai-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Shanghai-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Shanghai-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Shanghai-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Shanghai-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Shanghai-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Shanghai-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Cancun-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Cancun-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Cancun-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Cancun-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Cancun-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Cancun-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Cancun-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Cancun-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Prague-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Prague-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Prague-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Prague-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Prague-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Prague-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Prague-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Prague-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_to_self-create_opcode_CREATE2]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-single_call]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-single_call_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-single_call]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-single_call_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-single_call]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-single_call]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-single_call_self]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-single_call]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-single_call_self]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-single_call]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-single_call]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-single_call_self]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-single_call]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-single_call_self]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_created_same_block_different_tx[fork_Shanghai-blockchain_test-call_times_1-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Shanghai-blockchain_test-call_times_1-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Shanghai-blockchain_test-call_times_10-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Shanghai-blockchain_test-call_times_10-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Shanghai-blockchain_test_engine-call_times_1-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Shanghai-blockchain_test_engine-call_times_1-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Shanghai-blockchain_test_engine-call_times_10-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Shanghai-blockchain_test_engine-call_times_10-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Cancun-blockchain_test-call_times_1-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Cancun-blockchain_test-call_times_1-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Cancun-blockchain_test-call_times_10-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Cancun-blockchain_test-call_times_10-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Cancun-blockchain_test_engine-call_times_1-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Cancun-blockchain_test_engine-call_times_1-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Cancun-blockchain_test_engine-call_times_10-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Cancun-blockchain_test_engine-call_times_10-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Prague-blockchain_test-call_times_1-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Prague-blockchain_test-call_times_1-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Prague-blockchain_test-call_times_10-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Prague-blockchain_test-call_times_10-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Prague-blockchain_test_engine-call_times_1-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Prague-blockchain_test_engine-call_times_1-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Prague-blockchain_test_engine-call_times_10-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Prague-blockchain_test_engine-call_times_10-selfdestruct_contract_initial_balance_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-blockchain_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-blockchain_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-blockchain_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-blockchain_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-blockchain_test_engine-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-blockchain_test_engine-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-blockchain_test_engine-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-blockchain_test_engine-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-state_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-state_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-state_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-state_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-blockchain_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-blockchain_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-blockchain_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-blockchain_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-blockchain_test_engine-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-blockchain_test_engine-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-blockchain_test_engine-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-blockchain_test_engine-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-state_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-state_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-state_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-state_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-blockchain_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-blockchain_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-blockchain_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-blockchain_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-state_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-state_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-state_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-state_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-state_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-state_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-state_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-state_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-state_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-state_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-state_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-state_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-state_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-state_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-state_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-state_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip6780_selfdestruct/test_selfdestruct.py\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert/","title":"Test Selfdestruct Revert","text":"

    Documentation for tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py\n

    tests for selfdestruct interaction with revert

    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert/#tests.cancun.eip6780_selfdestruct.test_selfdestruct_revert.test_selfdestruct_created_in_same_tx_with_revert","title":"test_selfdestruct_created_in_same_tx_with_revert(state_test, env, pre, entry_code_address, selfdestruct_on_outer_call, selfdestruct_with_transfer_contract_code, selfdestruct_with_transfer_contract_initcode, selfdestruct_with_transfer_contract_address, selfdestruct_recipient_address, selfdestruct_with_transfer_initcode_copy_from_address, recursive_revert_contract_address, recursive_revert_contract_code)","text":"Given

    Contract A which has methods to receive balance and selfdestruct, and was created in current tx

    Test the following call sequence: Transfer value to A and call A.selfdestruct. Recurse into a new call from transfers value to A, calls A.selfdestruct, and reverts.

    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py
    @pytest.mark.parametrize(\n    \"selfdestruct_on_outer_call\",\n    [0, 1, 2],\n    ids=[\n        \"no_outer_selfdestruct\",\n        \"outer_selfdestruct_before_inner_call\",\n        \"outer_selfdestruct_after_inner_call\",\n    ],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_selfdestruct_created_in_same_tx_with_revert(  # noqa SC200\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Dict[Address, Account],\n    entry_code_address: Address,\n    selfdestruct_on_outer_call: int,\n    selfdestruct_with_transfer_contract_code: Bytecode,\n    selfdestruct_with_transfer_contract_initcode: Bytecode,\n    selfdestruct_with_transfer_contract_address: Address,\n    selfdestruct_recipient_address: Address,\n    selfdestruct_with_transfer_initcode_copy_from_address: Address,\n    recursive_revert_contract_address: Address,\n    recursive_revert_contract_code: Bytecode,\n):\n    \"\"\"\n    Given:\n        Contract A which has methods to receive balance and selfdestruct, and was created in current tx\n    Test the following call sequence:\n         Transfer value to A and call A.selfdestruct.\n         Recurse into a new call from transfers value to A, calls A.selfdestruct, and reverts.\n    \"\"\"  # noqa: E501\n    entry_code = Op.EXTCODECOPY(\n        selfdestruct_with_transfer_initcode_copy_from_address,\n        0,\n        0,\n        len(bytes(selfdestruct_with_transfer_contract_initcode)),\n    )\n\n    entry_code += Op.SSTORE(\n        0,\n        Op.CREATE(\n            0, 0, len(bytes(selfdestruct_with_transfer_contract_initcode))  # Value  # Offset\n        ),\n    )\n\n    entry_code += Op.CALL(\n        Op.GASLIMIT(),\n        recursive_revert_contract_address,\n        0,  # value\n        0,  # arg offset\n        0,  # arg length\n        0,  # ret offset\n        0,  # ret length\n    )\n\n    post: Dict[Address, Account] = {\n        entry_code_address: Account(\n            code=\"0x\",\n            storage=Storage(\n                {\n                    0: selfdestruct_with_transfer_contract_address,  # type: ignore\n                }\n            ),\n        ),\n        selfdestruct_with_transfer_initcode_copy_from_address: Account(\n            code=selfdestruct_with_transfer_contract_initcode,\n        ),\n        recursive_revert_contract_address: Account(\n            code=recursive_revert_contract_code,\n            storage=Storage({1: 1}),  # type: ignore\n        ),\n    }\n\n    if selfdestruct_on_outer_call > 0:\n        post[selfdestruct_with_transfer_contract_address] = Account.NONEXISTENT  # type: ignore\n        post[selfdestruct_recipient_address] = Account(\n            balance=1 if selfdestruct_on_outer_call == 1 else 2,\n        )\n    else:\n        post[selfdestruct_with_transfer_contract_address] = Account(\n            balance=1,\n            code=selfdestruct_with_transfer_contract_code,\n            storage=Storage(\n                {\n                    # 2 value transfers (1 in outer call, 1 in reverted inner call)\n                    0: 1,  # type: ignore\n                    # 1 selfdestruct in reverted inner call\n                    1: 0,  # type: ignore\n                }\n            ),\n        )\n        post[selfdestruct_recipient_address] = Account.NONEXISTENT  # type: ignore\n\n    nonce = count()\n    tx = Transaction(\n        ty=0x0,\n        value=0,\n        data=entry_code,\n        chain_id=0x0,\n        nonce=next(nonce),\n        to=None,\n        gas_limit=100_000_000,\n        gas_price=10,\n        protected=False,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert/#tests.cancun.eip6780_selfdestruct.test_selfdestruct_revert.test_selfdestruct_not_created_in_same_tx_with_revert","title":"test_selfdestruct_not_created_in_same_tx_with_revert(state_test, env, entry_code_address, selfdestruct_on_outer_call, selfdestruct_with_transfer_contract_code, selfdestruct_with_transfer_contract_address, selfdestruct_recipient_address, recursive_revert_contract_address, recursive_revert_contract_code)","text":"

    Same test as selfdestruct_created_in_same_tx_with_revert except selfdestructable contract is pre-existing

    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py
    @pytest.mark.parametrize(\n    \"selfdestruct_on_outer_call\",\n    [0, 1, 2],\n    ids=[\n        \"no_outer_selfdestruct\",\n        \"outer_selfdestruct_before_inner_call\",\n        \"outer_selfdestruct_after_inner_call\",\n    ],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_selfdestruct_not_created_in_same_tx_with_revert(\n    state_test: StateTestFiller,\n    env: Environment,\n    entry_code_address: Address,\n    selfdestruct_on_outer_call: int,\n    selfdestruct_with_transfer_contract_code: Bytecode,\n    selfdestruct_with_transfer_contract_address: Address,\n    selfdestruct_recipient_address: Address,\n    recursive_revert_contract_address: Address,\n    recursive_revert_contract_code: Bytecode,\n):\n    \"\"\"\n    Same test as selfdestruct_created_in_same_tx_with_revert except selfdestructable contract\n    is pre-existing\n    \"\"\"\n    entry_code = Op.CALL(\n        Op.GASLIMIT(),\n        recursive_revert_contract_address,\n        0,  # value\n        0,  # arg offset\n        0,  # arg length\n        0,  # ret offset\n        0,  # ret length\n    )\n\n    pre: Dict[Address, Account] = {\n        TestAddress: Account(balance=100_000_000_000_000_000_000),\n        selfdestruct_with_transfer_contract_address: Account(\n            code=selfdestruct_with_transfer_contract_code\n        ),\n        recursive_revert_contract_address: Account(\n            code=bytes(recursive_revert_contract_code), balance=2\n        ),\n    }\n\n    post: Dict[Address, Account] = {\n        entry_code_address: Account(code=\"0x\"),\n    }\n\n    if selfdestruct_on_outer_call > 0:\n        post[selfdestruct_with_transfer_contract_address] = Account(\n            balance=1 if selfdestruct_on_outer_call == 1 else 0,\n            code=selfdestruct_with_transfer_contract_code,\n            storage=Storage(\n                {\n                    # 2 value transfers: 1 in outer call, 1 in reverted inner call\n                    0: 1,  # type: ignore\n                    # 1 selfdestruct in reverted inner call\n                    1: 1,  # type: ignore\n                }\n            ),\n        )\n        post[selfdestruct_recipient_address] = Account(\n            balance=1 if selfdestruct_on_outer_call == 1 else 2\n        )\n    else:\n        post[selfdestruct_with_transfer_contract_address] = Account(\n            balance=1,\n            code=selfdestruct_with_transfer_contract_code,\n            storage=Storage(\n                {\n                    # 2 value transfers: 1 in outer call, 1 in reverted inner call\n                    0: 1,  # type: ignore\n                    # 2 selfdestructs: 1 in outer call, 1 in reverted inner call # noqa SC100\n                    1: 0,  # type: ignore\n                }\n            ),\n        )\n        post[selfdestruct_recipient_address] = Account.NONEXISTENT  # type: ignore\n\n    nonce = count()\n    tx = Transaction(\n        ty=0x0,\n        value=0,\n        data=entry_code,\n        chain_id=0x0,\n        nonce=next(nonce),\n        to=None,\n        gas_limit=100_000_000,\n        gas_price=10,\n        protected=False,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert/index/test_cases/","title":"Test Selfdestruct Revert - Test Cases","text":"

    Test cases generated from tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py

    Parametrized test cases generated from the test module tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py:

    test_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-no_outer_selfdestruct]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-blockchain_test_engine-no_outer_selfdestruct]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-blockchain_test_engine-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-blockchain_test_engine-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-state_test-no_outer_selfdestruct]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-state_test-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-state_test-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Prague-blockchain_test-no_outer_selfdestruct]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Prague-blockchain_test-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Prague-blockchain_test-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Prague-blockchain_test_engine-no_outer_selfdestruct]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Prague-blockchain_test_engine-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Prague-blockchain_test_engine-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Prague-state_test-no_outer_selfdestruct]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Prague-state_test-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Prague-state_test-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-no_outer_selfdestruct]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-blockchain_test_engine-no_outer_selfdestruct]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-blockchain_test_engine-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-blockchain_test_engine-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-state_test-no_outer_selfdestruct]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-state_test-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-state_test-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Prague-blockchain_test-no_outer_selfdestruct]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Prague-blockchain_test-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Prague-blockchain_test-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Prague-blockchain_test_engine-no_outer_selfdestruct]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Prague-blockchain_test_engine-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Prague-blockchain_test_engine-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Prague-state_test-no_outer_selfdestruct]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Prague-state_test-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Prague-state_test-outer_selfdestruct_after_inner_call]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py\n
    "},{"location":"tests/cancun/eip7516_blobgasfee/","title":"EIP-7516 Blobgasfee","text":"

    Documentation for tests/cancun/eip7516_blobgasfee.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip7516_blobgasfee\n

    Tests for EIP-7516: BLOBBASEFEE opcode

    "},{"location":"tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/","title":"Test Blobgasfee Opcode","text":"

    Documentation for tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py\n
    Tests EIP-7516: BLOBBASEFEE opcode

    Test BLOBGASFEE opcode EIP-7516: BLOBBASEFEE opcode

    "},{"location":"tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/#tests.cancun.eip7516_blobgasfee.test_blobgasfee_opcode.test_blobbasefee_stack_overflow","title":"test_blobbasefee_stack_overflow(state_test, pre, caller_address, callee_address, tx, call_fails)","text":"

    Tests that the BLOBBASEFEE opcode produces a stack overflow by using it repeatedly.

    Source code in tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py
    @pytest.mark.parametrize(\n    \"callee_code,call_fails\",\n    [\n        pytest.param(Op.BLOBBASEFEE * 1024, False, id=\"no_stack_overflow\"),\n        pytest.param(Op.BLOBBASEFEE * 1025, True, id=\"stack_overflow\"),\n    ],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_blobbasefee_stack_overflow(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    caller_address: Address,\n    callee_address: Address,\n    tx: Transaction,\n    call_fails: bool,\n):\n    \"\"\"\n    Tests that the BLOBBASEFEE opcode produces a stack overflow by using it repeatedly.\n    \"\"\"\n    post = {\n        caller_address: Account(\n            storage={1: 0 if call_fails else 1},\n        ),\n        callee_address: Account(\n            balance=0,\n        ),\n    }\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/#tests.cancun.eip7516_blobgasfee.test_blobgasfee_opcode.test_blobbasefee_out_of_gas","title":"test_blobbasefee_out_of_gas(state_test, pre, caller_address, callee_address, tx, call_fails)","text":"

    Tests that the BLOBBASEFEE opcode fails with insufficient gas.

    Source code in tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py
    @pytest.mark.parametrize(\n    \"call_gas,call_fails\",\n    [\n        pytest.param(BLOBBASEFEE_GAS, False, id=\"enough_gas\"),\n        pytest.param(BLOBBASEFEE_GAS - 1, True, id=\"out_of_gas\"),\n    ],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_blobbasefee_out_of_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    caller_address: Address,\n    callee_address: Address,\n    tx: Transaction,\n    call_fails: bool,\n):\n    \"\"\"\n    Tests that the BLOBBASEFEE opcode fails with insufficient gas.\n    \"\"\"\n    post = {\n        caller_address: Account(\n            storage={1: 0 if call_fails else 1},\n        ),\n        callee_address: Account(\n            balance=0,\n        ),\n    }\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/#tests.cancun.eip7516_blobgasfee.test_blobgasfee_opcode.test_blobbasefee_before_fork","title":"test_blobbasefee_before_fork(state_test, pre, caller_address, callee_address, tx)","text":"

    Tests that the BLOBBASEFEE opcode results on exception when called before the fork.

    Source code in tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py
    @pytest.mark.parametrize(\"caller_pre_storage\", [{1: 1}], ids=[\"\"])\n@pytest.mark.valid_at_transition_to(\"Cancun\")\ndef test_blobbasefee_before_fork(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    caller_address: Address,\n    callee_address: Address,\n    tx: Transaction,\n):\n    \"\"\"\n    Tests that the BLOBBASEFEE opcode results on exception when called before the fork.\n    \"\"\"\n    # Fork happens at timestamp 15_000\n    timestamp = 7_500\n    post = {\n        caller_address: Account(\n            storage={1: 0},\n        ),\n        callee_address: Account(\n            balance=0,\n        ),\n    }\n    state_test(\n        env=Environment(\n            timestamp=timestamp,\n        ),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/#tests.cancun.eip7516_blobgasfee.test_blobgasfee_opcode.test_blobbasefee_during_fork","title":"test_blobbasefee_during_fork(blockchain_test, pre, caller_address, callee_address, tx)","text":"

    Tests that the BLOBBASEFEE opcode results on exception when called before the fork and succeeds when called after the fork.

    Source code in tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py
    @pytest.mark.parametrize(\n    \"caller_pre_storage\",\n    [{block_number: 0xFF for block_number, _ in enumerate(timestamps, start=1)}],\n    ids=[\"\"],\n)\n@pytest.mark.valid_at_transition_to(\"Cancun\")\ndef test_blobbasefee_during_fork(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    caller_address: Address,\n    callee_address: Address,\n    tx: Transaction,\n):\n    \"\"\"\n    Tests that the BLOBBASEFEE opcode results on exception when called before the fork and\n    succeeds when called after the fork.\n    \"\"\"\n    code_caller_post_storage = Storage()\n\n    nonce = count(0)\n\n    blocks = []\n\n    for block_number, timestamp in enumerate(timestamps, start=1):\n        blocks.append(\n            Block(\n                txs=[tx.with_nonce(next(nonce))],\n                timestamp=timestamp,\n            ),\n        )\n        # pre-set storage just to make sure we detect the change\n        code_caller_post_storage[block_number] = 0 if timestamp < 15_000 else 1\n\n    post = {\n        caller_address: Account(\n            storage=code_caller_post_storage,\n        ),\n        callee_address: Account(\n            balance=0,\n        ),\n    }\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        blocks=blocks,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/index/test_cases/","title":"Test Blobgasfee Opcode - Test Cases","text":"

    Test cases generated from tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py

    Parametrized test cases generated from the test module tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py:

    test_blobbasefee_stack_overflow[fork_Cancun-blockchain_test-no_stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Cancun-blockchain_test-stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Cancun-blockchain_test_engine-no_stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Cancun-blockchain_test_engine-stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Cancun-state_test-no_stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Cancun-state_test-stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Prague-blockchain_test-no_stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Prague-blockchain_test-stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Prague-blockchain_test_engine-no_stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Prague-blockchain_test_engine-stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Prague-state_test-no_stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Prague-state_test-stack_overflow]\ntest_blobbasefee_out_of_gas[fork_Cancun-blockchain_test-enough_gas]\ntest_blobbasefee_out_of_gas[fork_Cancun-blockchain_test-out_of_gas]\ntest_blobbasefee_out_of_gas[fork_Cancun-blockchain_test_engine-enough_gas]\ntest_blobbasefee_out_of_gas[fork_Cancun-blockchain_test_engine-out_of_gas]\ntest_blobbasefee_out_of_gas[fork_Cancun-state_test-enough_gas]\ntest_blobbasefee_out_of_gas[fork_Cancun-state_test-out_of_gas]\ntest_blobbasefee_out_of_gas[fork_Prague-blockchain_test-enough_gas]\ntest_blobbasefee_out_of_gas[fork_Prague-blockchain_test-out_of_gas]\ntest_blobbasefee_out_of_gas[fork_Prague-blockchain_test_engine-enough_gas]\ntest_blobbasefee_out_of_gas[fork_Prague-blockchain_test_engine-out_of_gas]\ntest_blobbasefee_out_of_gas[fork_Prague-state_test-enough_gas]\ntest_blobbasefee_out_of_gas[fork_Prague-state_test-out_of_gas]\ntest_blobbasefee_before_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test-]\ntest_blobbasefee_before_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-]\ntest_blobbasefee_before_fork[fork_ShanghaiToCancunAtTime15k-state_test-]\ntest_blobbasefee_during_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test-]\ntest_blobbasefee_during_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py\n
    "},{"location":"tests/constantinople/","title":"Constantinople","text":"

    Documentation for tests/constantinople.

    Generate fixtures for these test cases with:

    fill -v tests/constantinople\n

    Test cases for EVM functionality introduced in Constantinople.

    "},{"location":"tests/constantinople/eip1014_create2/","title":"EIP-1014 Create2","text":"

    Documentation for tests/constantinople/eip1014_create2.

    Generate fixtures for these test cases with:

    fill -v tests/constantinople/eip1014_create2\n

    abstract: Test EIP-1014: Skinny CREATE2

    Tests for  [EIP-1014: Skinny CREATE2](https://eips.ethereum.org/EIPS/eip-1014).\n
    "},{"location":"tests/constantinople/eip1014_create2/spec/","title":"Spec","text":"

    Documentation for tests/constantinople/eip1014_create2/spec.py.

    Defines EIP-1014 specification constants and functions.

    "},{"location":"tests/constantinople/eip1014_create2/spec/#tests.constantinople.eip1014_create2.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-1014 specifications as defined at https://eips.ethereum.org/EIPS/eip-1014

    Source code in tests/constantinople/eip1014_create2/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-1014 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-1014\n    \"\"\"\n
    "},{"location":"tests/constantinople/eip1014_create2/test_create_returndata/","title":"Test Create Returndata","text":"

    Documentation for tests/constantinople/eip1014_create2/test_create_returndata.py.

    Generate fixtures for these test cases with:

    fill -v tests/constantinople/eip1014_create2/test_create_returndata.py\n

    Return data management around create2 Port call_outsize_then_create2_successful_then_returndatasizeFiller.json test Port call_then_create2_successful_then_returndatasizeFiller.json test

    "},{"location":"tests/constantinople/eip1014_create2/test_create_returndata/#tests.constantinople.eip1014_create2.test_create_returndata.test_create2_return_data","title":"test_create2_return_data(call_return_size, create_type, return_type, return_type_in_create, pre, state_test)","text":"

    Validate that create2 return data does not interfere with previously existing memory

    Source code in tests/constantinople/eip1014_create2/test_create_returndata.py
    @pytest.mark.valid_from(\"Istanbul\")\n@pytest.mark.parametrize(\"call_return_size\", [35, 32, 0])\n@pytest.mark.parametrize(\"create_type\", [Op.CREATE, Op.CREATE2])\n@pytest.mark.parametrize(\"return_type\", [Op.RETURN, Op.REVERT])\n@pytest.mark.parametrize(\"return_type_in_create\", [Op.RETURN, Op.REVERT])\ndef test_create2_return_data(\n    call_return_size: int,\n    create_type: Op,\n    return_type: Op,\n    return_type_in_create: Op,\n    pre: Alloc,\n    state_test: StateTestFiller,\n):\n    \"\"\"\n    Validate that create2 return data does not interfere with previously existing memory\n    \"\"\"\n    # Storage vars\n    slot_returndatasize_before_create = 0\n    slot_returndatasize_after_create = 1\n    slot_return_data_hash_before_create = 2\n    slot_return_data_hash_after_create = 3\n    slot_code_worked = 4\n    slot_returndatacopy_before_create = 5\n    slot_returndatacopy_before_create_2 = 6\n    slot_returndatacopy_after_create = 7\n    slot_begin_memory_after_create = 8\n\n    # CREATE2 Initcode\n    create2_salt = 1\n    return_data_in_create = 0xFFFAFB\n    initcode = Op.MSTORE(0, return_data_in_create) + return_type_in_create(0, 32)\n    call_return_data_value = 0x1122334455667788991011121314151617181920212223242526272829303132\n    expected_call_return_data = int.to_bytes(call_return_data_value, 32, byteorder=\"big\").ljust(\n        call_return_size, b\"\\0\"\n    )[0:call_return_size]\n    expected_returndatacopy = expected_call_return_data[0:32]\n    empty_data = b\"\"\n\n    address_call = pre.deploy_contract(\n        code=Op.MSTORE(0, call_return_data_value)\n        + Op.MSTORE(32, 0xFFFFFFFF)\n        + return_type(0, call_return_size),\n        storage={},\n    )\n    address_to = pre.deploy_contract(\n        balance=100_000_000,\n        code=Op.JUMPDEST()\n        + Op.MSTORE(0x100, Op.CALLDATALOAD(0))\n        + Op.CALL(0x0900000000, address_call, 0, 0, 0, 0, call_return_size)\n        #\n        #\n        + Op.SSTORE(slot_returndatasize_before_create, Op.RETURNDATASIZE())\n        + Op.RETURNDATACOPY(0x200, 0, call_return_size)\n        + Op.SSTORE(slot_returndatacopy_before_create, Op.MLOAD(0x200))\n        + Op.SSTORE(slot_returndatacopy_before_create_2, Op.MLOAD(0x220))\n        + Op.SSTORE(slot_return_data_hash_before_create, Op.SHA3(0, call_return_size))\n        #\n        #\n        + create_type(offset=0x100, size=Op.CALLDATASIZE(), salt=create2_salt)\n        + Op.SSTORE(slot_returndatasize_after_create, Op.RETURNDATASIZE())\n        + Op.RETURNDATACOPY(0x300, 0, Op.RETURNDATASIZE())\n        + Op.SSTORE(slot_returndatacopy_after_create, Op.MLOAD(0x300))\n        + Op.SSTORE(slot_return_data_hash_after_create, Op.SHA3(0x300, Op.RETURNDATASIZE()))\n        + Op.SSTORE(slot_begin_memory_after_create, Op.MLOAD(0))\n        + Op.SSTORE(slot_code_worked, 1)\n        + Op.STOP(),\n        storage={\n            slot_returndatasize_before_create: 0xFF,\n            slot_returndatasize_after_create: 0xFF,\n            slot_return_data_hash_before_create: 0xFF,\n            slot_return_data_hash_after_create: 0xFF,\n            slot_returndatacopy_before_create: 0xFF,\n            slot_returndatacopy_before_create_2: 0xFF,\n            slot_begin_memory_after_create: 0xFF,\n            slot_begin_memory_after_create: 0xFF,\n        },\n    )\n\n    post = {\n        address_to: Account(\n            storage={\n                slot_code_worked: 1,\n                slot_returndatacopy_before_create: expected_returndatacopy,\n                slot_returndatacopy_before_create_2: 0,\n                #\n                # the actual bytes returned by returndatacopy opcode after create\n                slot_returndatacopy_after_create: return_data_in_create\n                if return_type_in_create == Op.REVERT\n                else 0,\n                slot_returndatasize_before_create: call_return_size,\n                #\n                # return datasize value after create\n                slot_returndatasize_after_create: 0x20\n                if return_type_in_create == Op.REVERT\n                else 0,\n                #\n                slot_return_data_hash_before_create: keccak256(expected_call_return_data),\n                slot_return_data_hash_after_create: keccak256(empty_data)\n                if return_type_in_create == Op.RETURN\n                else keccak256(int.to_bytes(return_data_in_create, 32, byteorder=\"big\")),\n                #\n                # check that create 2 didn't mess up with initial memory space declared for return\n                slot_begin_memory_after_create: expected_returndatacopy,\n            }  # type: ignore\n        )\n    }\n\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        to=address_to,\n        protected=False,\n        data=initcode,\n        gas_limit=0x0A00000000,\n        value=0,\n    )  # type: ignore\n\n    state_test(env=Environment(), pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/constantinople/eip1014_create2/test_create_returndata/index/test_cases/","title":"Test Create Returndata - Test Cases","text":"

    Test cases generated from tests/constantinople/eip1014_create2/test_create_returndata.py

    Parametrized test cases generated from the test module tests/constantinople/eip1014_create2/test_create_returndata.py:

    test_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/constantinople/eip1014_create2/test_create_returndata.py\n
    "},{"location":"tests/constantinople/eip1014_create2/test_recreate/","title":"Test Recreate","text":"

    Documentation for tests/constantinople/eip1014_create2/test_recreate.py.

    Generate fixtures for these test cases with:

    fill -v tests/constantinople/eip1014_create2/test_recreate.py\n

    Test Account Self-destruction and Re-creation

    "},{"location":"tests/constantinople/eip1014_create2/test_recreate/#tests.constantinople.eip1014_create2.test_recreate.test_recreate","title":"test_recreate(blockchain_test, pre, fork, recreate_on_separate_block)","text":"

    Test that the storage is cleared when a contract is first destructed then re-created using CREATE2.

    Source code in tests/constantinople/eip1014_create2/test_recreate.py
    @pytest.mark.parametrize(\"recreate_on_separate_block\", [True, False])\n@pytest.mark.valid_from(\"Constantinople\")\n@pytest.mark.valid_until(\"Shanghai\")\ndef test_recreate(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    fork: Fork,\n    recreate_on_separate_block: bool,\n):\n    \"\"\"\n    Test that the storage is cleared when a contract is first destructed then re-created using\n    CREATE2.\n    \"\"\"\n    env = Environment()\n\n    creator_contract_code = Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.CREATE2(\n        0, 0, Op.CALLDATASIZE, 0\n    )\n    creator_address = pre.deploy_contract(creator_contract_code)\n    sender = pre.fund_eoa()\n\n    deploy_code = Yul(\n        \"\"\"\n        {\n            switch callvalue()\n            case 0 {\n                selfdestruct(0)\n            }\n            default {\n                sstore(0, callvalue())\n            }\n        }\n        \"\"\",\n        fork=fork,\n    )\n\n    initcode = Initcode(deploy_code=deploy_code)\n\n    create_tx = Transaction(\n        gas_limit=100000000,\n        to=creator_address,\n        data=initcode,\n        sender=sender,\n    )\n\n    created_contract_address = compute_create2_address(\n        address=creator_address, salt=0, initcode=initcode\n    )\n\n    set_storage_tx = Transaction(\n        gas_limit=100000000,\n        to=created_contract_address,\n        value=1,\n        sender=sender,\n    )\n\n    blocks = [Block(txs=[create_tx, set_storage_tx])]\n\n    destruct_tx = Transaction(\n        gas_limit=100000000,\n        to=created_contract_address,\n        value=0,\n        sender=sender,\n    )\n\n    balance = 1\n    send_funds_tx = Transaction(\n        gas_limit=100000000,\n        to=created_contract_address,\n        value=balance,\n        sender=sender,\n    )\n\n    re_create_tx = Transaction(\n        gas_limit=100000000,\n        to=creator_address,\n        data=initcode,\n        sender=sender,\n    )\n\n    if recreate_on_separate_block:\n        blocks.append(Block(txs=[destruct_tx, send_funds_tx]))\n        blocks.append(Block(txs=[re_create_tx]))\n    else:\n        blocks.append(Block(txs=[destruct_tx, send_funds_tx, re_create_tx]))\n\n    post = {\n        created_contract_address: Account(\n            nonce=1,\n            balance=balance,\n            code=deploy_code,\n            storage={},\n        ),\n    }\n\n    blockchain_test(genesis_environment=env, pre=pre, post=post, blocks=blocks)\n
    "},{"location":"tests/constantinople/eip1014_create2/test_recreate/index/test_cases/","title":"Test Recreate - Test Cases","text":"

    Test cases generated from tests/constantinople/eip1014_create2/test_recreate.py

    Parametrized test cases generated from the test module tests/constantinople/eip1014_create2/test_recreate.py:

    test_recreate[fork_Constantinople-blockchain_test-recreate_on_separate_block_True]\ntest_recreate[fork_Constantinople-blockchain_test-recreate_on_separate_block_False]\ntest_recreate[fork_ConstantinopleFix-blockchain_test-recreate_on_separate_block_True]\ntest_recreate[fork_ConstantinopleFix-blockchain_test-recreate_on_separate_block_False]\ntest_recreate[fork_Istanbul-blockchain_test-recreate_on_separate_block_True]\ntest_recreate[fork_Istanbul-blockchain_test-recreate_on_separate_block_False]\ntest_recreate[fork_Berlin-blockchain_test-recreate_on_separate_block_True]\ntest_recreate[fork_Berlin-blockchain_test-recreate_on_separate_block_False]\ntest_recreate[fork_London-blockchain_test-recreate_on_separate_block_True]\ntest_recreate[fork_London-blockchain_test-recreate_on_separate_block_False]\ntest_recreate[fork_Paris-blockchain_test-recreate_on_separate_block_True]\ntest_recreate[fork_Paris-blockchain_test-recreate_on_separate_block_False]\ntest_recreate[fork_Paris-blockchain_test_engine-recreate_on_separate_block_True]\ntest_recreate[fork_Paris-blockchain_test_engine-recreate_on_separate_block_False]\ntest_recreate[fork_Shanghai-blockchain_test-recreate_on_separate_block_True]\ntest_recreate[fork_Shanghai-blockchain_test-recreate_on_separate_block_False]\ntest_recreate[fork_Shanghai-blockchain_test_engine-recreate_on_separate_block_True]\ntest_recreate[fork_Shanghai-blockchain_test_engine-recreate_on_separate_block_False]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/constantinople/eip1014_create2/test_recreate.py\n
    "},{"location":"tests/frontier/","title":"Frontier","text":"

    Documentation for tests/frontier.

    Generate fixtures for these test cases with:

    fill -v tests/frontier\n

    Test cases for EVM functionality introduced in Frontier.

    "},{"location":"tests/frontier/opcodes/","title":"Opcodes","text":"

    Documentation for tests/frontier/opcodes.

    Generate fixtures for these test cases with:

    fill -v tests/frontier/opcodes\n

    Test for opcodes introduced in Frontier.

    "},{"location":"tests/frontier/opcodes/test_all_opcodes/","title":"Test All Opcodes","text":"

    Documentation for tests/frontier/opcodes/test_all_opcodes.py.

    Generate fixtures for these test cases with:

    fill -v tests/frontier/opcodes/test_all_opcodes.py\n

    Call every possible opcode and test that the subcall is successful if the opcode is supported by the fork supports and fails otherwise.

    "},{"location":"tests/frontier/opcodes/test_all_opcodes/#tests.frontier.opcodes.test_all_opcodes.test_all_opcodes","title":"test_all_opcodes(state_test, pre, fork)","text":"

    Test each possible opcode on the fork with a single contract that calls each opcode in succession. Check that each subcall passes if the opcode is supported and fails otherwise.

    Source code in tests/frontier/opcodes/test_all_opcodes.py
    @pytest.mark.valid_from(\"Frontier\")\ndef test_all_opcodes(state_test: StateTestFiller, pre: Alloc, fork: Fork):\n    \"\"\"\n    Test each possible opcode on the fork with a single contract that\n    calls each opcode in succession. Check that each subcall passes\n    if the opcode is supported and fails otherwise.\n    \"\"\"\n    code_worked = 1000\n\n    code_contract: Dict[Opcode, Address] = {}\n    for opcode in sorted(set(Op) | set(UndefinedOpcodes)):\n        code_contract[opcode] = pre.deploy_contract(\n            balance=10,\n            code=prepare_stack(opcode) + opcode + prepare_suffix(opcode),\n            storage={},\n        )\n\n    # EVM code to make the call and store the result\n    contract_address = pre.deploy_contract(\n        code=sum(\n            Op.SSTORE(\n                Op.PUSH1(opcode.int()),\n                Op.CALL(1_000_000, opcode_address, 0, 0, 0, 0, 0),\n            )\n            for opcode, opcode_address in code_contract.items()\n        )\n        + Op.SSTORE(code_worked, 1)\n        + Op.STOP,\n    )\n\n    post = {\n        contract_address: Account(\n            storage={**{opcode.int(): 1 for opcode in fork.valid_opcodes()}, code_worked: 1}\n        ),\n    }\n\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        gas_limit=500_000_000,\n        to=contract_address,\n        data=b\"\",\n        value=0,\n        protected=False,\n    )\n\n    state_test(env=Environment(), pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/frontier/opcodes/test_all_opcodes/#tests.frontier.opcodes.test_all_opcodes.test_cover_revert","title":"test_cover_revert(state_test, pre)","text":"

    Cover state revert from original tests for the coverage script

    Source code in tests/frontier/opcodes/test_all_opcodes.py
    @pytest.mark.valid_from(\"Cancun\")\ndef test_cover_revert(state_test: StateTestFiller, pre: Alloc):\n    \"\"\"Cover state revert from original tests for the coverage script\"\"\"\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        gas_limit=1_000_000,\n        data=Op.SSTORE(1, 1) + Op.REVERT,\n        to=b\"\",\n        value=0,\n        protected=False,\n    )\n\n    state_test(env=Environment(), pre=pre, post={}, tx=tx)\n
    "},{"location":"tests/frontier/opcodes/test_all_opcodes/index/test_cases/","title":"Test All Opcodes - Test Cases","text":"

    Test cases generated from tests/frontier/opcodes/test_all_opcodes.py

    Parametrized test cases generated from the test module tests/frontier/opcodes/test_all_opcodes.py:

    test_all_opcodes[fork_Frontier-blockchain_test]\ntest_all_opcodes[fork_Frontier-state_test]\ntest_all_opcodes[fork_Homestead-blockchain_test]\ntest_all_opcodes[fork_Homestead-state_test]\ntest_all_opcodes[fork_Byzantium-blockchain_test]\ntest_all_opcodes[fork_Byzantium-state_test]\ntest_all_opcodes[fork_Constantinople-blockchain_test]\ntest_all_opcodes[fork_Constantinople-state_test]\ntest_all_opcodes[fork_ConstantinopleFix-blockchain_test]\ntest_all_opcodes[fork_ConstantinopleFix-state_test]\ntest_all_opcodes[fork_Istanbul-blockchain_test]\ntest_all_opcodes[fork_Istanbul-state_test]\ntest_all_opcodes[fork_Berlin-blockchain_test]\ntest_all_opcodes[fork_Berlin-state_test]\ntest_all_opcodes[fork_London-blockchain_test]\ntest_all_opcodes[fork_London-state_test]\ntest_all_opcodes[fork_Paris-blockchain_test]\ntest_all_opcodes[fork_Paris-blockchain_test_engine]\ntest_all_opcodes[fork_Paris-state_test]\ntest_all_opcodes[fork_Shanghai-blockchain_test]\ntest_all_opcodes[fork_Shanghai-blockchain_test_engine]\ntest_all_opcodes[fork_Shanghai-state_test]\ntest_all_opcodes[fork_Cancun-blockchain_test]\ntest_all_opcodes[fork_Cancun-blockchain_test_engine]\ntest_all_opcodes[fork_Cancun-state_test]\ntest_all_opcodes[fork_Prague-blockchain_test]\ntest_all_opcodes[fork_Prague-blockchain_test_engine]\ntest_all_opcodes[fork_Prague-state_test]\ntest_cover_revert[fork_Cancun-blockchain_test]\ntest_cover_revert[fork_Cancun-blockchain_test_engine]\ntest_cover_revert[fork_Cancun-state_test]\ntest_cover_revert[fork_Prague-blockchain_test]\ntest_cover_revert[fork_Prague-blockchain_test_engine]\ntest_cover_revert[fork_Prague-state_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/frontier/opcodes/test_all_opcodes.py\n
    "},{"location":"tests/frontier/opcodes/test_call_and_callcode_gas_calculation/","title":"Test Call And Callcode Gas Calculation","text":"

    Documentation for tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py.

    Generate fixtures for these test cases with:

    fill -v tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py\n
    Tests the nested CALL/CALLCODE opcode gas consumption with a positive value transfer.

    This test is designed to investigate an issue identified in EthereumJS, as reported in: ethereumjs/ethereumjs-monorepo#3194.

    The issue pertains to the incorrect gas calculation for CALL/CALLCODE operations with a positive value transfer, due to the pre-addition of the gas stipend (2300) to the currently available gas instead of adding it to the new call frame. This bug was specific to the case where insufficient gas was provided for the CALL/CALLCODE operation. Due to the pre-addition of the stipend to the currently available gas, the case for insufficient gas was not properly failing with an out-of-gas error.

    Test setup: Given two smart contract accounts, 0x0A (caller) and 0x0B (callee): 1) An arbitrary transaction calls into the contract 0x0A. 2) Contract 0x0A executes a CALL to contract 0x0B with a specific gas limit (X). 3) Contract 0x0B then attempts a CALL/CALLCODE to a non-existent contract 0x0C, with a positive value transfer (activating the gas stipend). 4) If the gas X provided by contract 0x0A to 0x0B is sufficient, contract 0x0B will push 0x01 onto the stack after returning to the call frame in 0x0A. Otherwise, it should push 0x00, indicating the insufficiency of gas X (for the bug in EthereumJS, the CALL/CALLCODE operation would return 0x01 due to the pre-addition of the gas stipend). 5) The resulting stack value is saved into contract 0x0A's storage, allowing us to verify whether the provided gas was sufficient or insufficient.

    "},{"location":"tests/frontier/opcodes/test_call_and_callcode_gas_calculation/#tests.frontier.opcodes.test_call_and_callcode_gas_calculation.test_value_transfer_gas_calculation","title":"test_value_transfer_gas_calculation(state_test, pre, caller_tx, post)","text":"

    Tests the nested CALL/CALLCODE opcode gas consumption with a positive value transfer.

    Source code in tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py
    @pytest.mark.parametrize(\n    \"callee_opcode, caller_gas_limit, is_sufficient_gas\",\n    [\n        (Op.CALL, CALL_SUFFICIENT_GAS, True),\n        (Op.CALL, CALL_SUFFICIENT_GAS - 1, False),\n        (Op.CALLCODE, CALLCODE_SUFFICIENT_GAS, True),\n        (Op.CALLCODE, CALLCODE_SUFFICIENT_GAS - 1, False),\n    ],\n)\n@pytest.mark.valid_from(\"London\")\n@pytest.mark.valid_until(\"Shanghai\")\ndef test_value_transfer_gas_calculation(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    caller_tx: Transaction,\n    post: Dict[str, Account],\n):\n    \"\"\"\n    Tests the nested CALL/CALLCODE opcode gas consumption with a positive value transfer.\n    \"\"\"\n    state_test(env=Environment(), pre=pre, post=post, tx=caller_tx)\n
    "},{"location":"tests/frontier/opcodes/test_call_and_callcode_gas_calculation/index/test_cases/","title":"Test Call And Callcode Gas Calculation - Test Cases","text":"

    Test cases generated from tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py

    Parametrized test cases generated from the test module tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py:

    test_value_transfer_gas_calculation[fork_London-blockchain_test-callee_opcode_CALL-caller_gas_limit_36620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_London-blockchain_test-callee_opcode_CALL-caller_gas_limit_36619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_London-blockchain_test-callee_opcode_CALLCODE-caller_gas_limit_11620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_London-blockchain_test-callee_opcode_CALLCODE-caller_gas_limit_11619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_London-state_test-callee_opcode_CALL-caller_gas_limit_36620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_London-state_test-callee_opcode_CALL-caller_gas_limit_36619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_London-state_test-callee_opcode_CALLCODE-caller_gas_limit_11620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_London-state_test-callee_opcode_CALLCODE-caller_gas_limit_11619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Paris-blockchain_test-callee_opcode_CALL-caller_gas_limit_36620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Paris-blockchain_test-callee_opcode_CALL-caller_gas_limit_36619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Paris-blockchain_test-callee_opcode_CALLCODE-caller_gas_limit_11620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Paris-blockchain_test-callee_opcode_CALLCODE-caller_gas_limit_11619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Paris-blockchain_test_engine-callee_opcode_CALL-caller_gas_limit_36620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Paris-blockchain_test_engine-callee_opcode_CALL-caller_gas_limit_36619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Paris-blockchain_test_engine-callee_opcode_CALLCODE-caller_gas_limit_11620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Paris-blockchain_test_engine-callee_opcode_CALLCODE-caller_gas_limit_11619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Paris-state_test-callee_opcode_CALL-caller_gas_limit_36620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Paris-state_test-callee_opcode_CALL-caller_gas_limit_36619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Paris-state_test-callee_opcode_CALLCODE-caller_gas_limit_11620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Paris-state_test-callee_opcode_CALLCODE-caller_gas_limit_11619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Shanghai-blockchain_test-callee_opcode_CALL-caller_gas_limit_36620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Shanghai-blockchain_test-callee_opcode_CALL-caller_gas_limit_36619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Shanghai-blockchain_test-callee_opcode_CALLCODE-caller_gas_limit_11620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Shanghai-blockchain_test-callee_opcode_CALLCODE-caller_gas_limit_11619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Shanghai-blockchain_test_engine-callee_opcode_CALL-caller_gas_limit_36620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Shanghai-blockchain_test_engine-callee_opcode_CALL-caller_gas_limit_36619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Shanghai-blockchain_test_engine-callee_opcode_CALLCODE-caller_gas_limit_11620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Shanghai-blockchain_test_engine-callee_opcode_CALLCODE-caller_gas_limit_11619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Shanghai-state_test-callee_opcode_CALL-caller_gas_limit_36620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Shanghai-state_test-callee_opcode_CALL-caller_gas_limit_36619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Shanghai-state_test-callee_opcode_CALLCODE-caller_gas_limit_11620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Shanghai-state_test-callee_opcode_CALLCODE-caller_gas_limit_11619-is_sufficient_gas_False]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py\n
    "},{"location":"tests/frontier/opcodes/test_dup/","title":"Test DUP","text":"

    Documentation for tests/frontier/opcodes/test_dup.py.

    Generate fixtures for these test cases with:

    fill -v tests/frontier/opcodes/test_dup.py\n
    Test DUP

    Test the DUP opcodes.

    "},{"location":"tests/frontier/opcodes/test_dup/#tests.frontier.opcodes.test_dup.test_dup","title":"test_dup(state_test, fork, dup_opcode, pre)","text":"

    Test the DUP1-DUP16 opcodes.

    note: Test case ported from:

    - [ethereum/tests/GeneralStateTests/VMTests/vmTests/dup.json](https://github.com/ethereum/tests/blob/develop/GeneralStateTests/VMTests/vmTests/dup.json)\nby Ori Pomerantz.\n
    Source code in tests/frontier/opcodes/test_dup.py
    @pytest.mark.parametrize(\n    \"dup_opcode\",\n    [\n        Op.DUP1,\n        Op.DUP2,\n        Op.DUP3,\n        Op.DUP4,\n        Op.DUP5,\n        Op.DUP6,\n        Op.DUP7,\n        Op.DUP8,\n        Op.DUP9,\n        Op.DUP10,\n        Op.DUP11,\n        Op.DUP12,\n        Op.DUP13,\n        Op.DUP14,\n        Op.DUP15,\n        Op.DUP16,\n    ],\n    ids=lambda op: str(op),\n)\n@pytest.mark.with_all_evm_code_types\ndef test_dup(\n    state_test: StateTestFiller,\n    fork: str,\n    dup_opcode: Op,\n    pre: Alloc,\n):\n    \"\"\"\n    Test the DUP1-DUP16 opcodes.\n\n    note: Test case ported from:\n\n        - [ethereum/tests/GeneralStateTests/VMTests/vmTests/dup.json](https://github.com/ethereum/tests/blob/develop/GeneralStateTests/VMTests/vmTests/dup.json)\n        by Ori Pomerantz.\n    \"\"\"  # noqa: E501\n    env = Environment()\n    sender = pre.fund_eoa()\n    post = {}\n\n    # Push 0x00 - 0x10 onto the stack\n    account_code = sum(Op.PUSH1(i) for i in range(0x11))\n\n    # Use the DUP opcode\n    account_code += dup_opcode\n\n    # Save each stack value into different keys in storage\n    account_code += sum(Op.PUSH1(i) + Op.SSTORE for i in range(0x11))\n\n    account = pre.deploy_contract(account_code)\n\n    tx = Transaction(\n        ty=0x0,\n        nonce=0,\n        to=account,\n        gas_limit=500000,\n        gas_price=10,\n        protected=False if fork in [Frontier, Homestead] else True,\n        data=\"\",\n        sender=sender,\n    )\n\n    \"\"\"\n    Storage will be structured as follows:\n\n    0x00: 0x10-0x01 (Depending on DUP opcode)\n    0x01: 0x10\n    0x02: 0x0F\n    0x03: 0x0E\n    0x04: 0x0D\n    0x05: 0x0C\n    0x06: 0x0B\n    0x07: 0x0A\n    0x08: 0x09\n    0x09: 0x08\n    0x0A: 0x07\n    0x0B: 0x06\n    0x0C: 0x05\n    0x0D: 0x04\n    0x0E: 0x03\n    0x0F: 0x02\n    0x10: 0x01\n\n    DUP1 copies the first element of the stack (0x10).\n    DUP16 copies the 16th element of the stack (0x01).\n    \"\"\"\n    s: Storage.StorageDictType = dict(zip(range(1, 17), range(16, 0, -1)))\n    s[0] = 16 - (dup_opcode.int() - 0x80)\n\n    post[account] = Account(storage=s)\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/frontier/opcodes/test_dup/index/test_cases/","title":"Test DUP - Test Cases","text":"

    Test cases generated from tests/frontier/opcodes/test_dup.py

    Parametrized test cases generated from the test module tests/frontier/opcodes/test_dup.py:

    test_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP1]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP2]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP3]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP4]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP5]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP6]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP7]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP8]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP9]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP10]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP11]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP12]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP13]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP14]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP15]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP16]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP1]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP2]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP3]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP4]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP5]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP6]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP7]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP8]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP9]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP10]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP11]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP12]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP13]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP14]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP15]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP16]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP1]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP2]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP3]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP4]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP5]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP6]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP7]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP8]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP9]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP10]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP11]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP12]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP13]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP14]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP15]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP16]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP1]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP2]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP3]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP4]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP5]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP6]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP7]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP8]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP9]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP10]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP11]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP12]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP13]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP14]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP15]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP16]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP16]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/frontier/opcodes/test_dup.py\n
    "},{"location":"tests/frontier/opcodes/test_selfdestruct/","title":"Test Selfdestruct","text":"

    Documentation for tests/frontier/opcodes/test_selfdestruct.py.

    Generate fixtures for these test cases with:

    fill -v tests/frontier/opcodes/test_selfdestruct.py\n

    Test the SELFDESTRUCT opcode.

    "},{"location":"tests/frontier/opcodes/test_selfdestruct/#tests.frontier.opcodes.test_selfdestruct.test_double_kill","title":"test_double_kill(blockchain_test, pre)","text":"

    Test that when two transactions attempt to destruct a contract, the second transaction actually resurrects the contract as an empty account (prior to Spurious Dragon).

    Source code in tests/frontier/opcodes/test_selfdestruct.py
    @pytest.mark.valid_from(\"Frontier\")\n@pytest.mark.valid_until(\"Homestead\")\ndef test_double_kill(blockchain_test: BlockchainTestFiller, pre: Alloc):\n    \"\"\"\n    Test that when two transactions attempt to destruct a contract,\n    the second transaction actually resurrects the contract as an empty account (prior to Spurious\n    Dragon).\n    \"\"\"\n    env = Environment()\n    sender = pre.fund_eoa()\n\n    deploy_code = Op.SELFDESTRUCT(Op.ADDRESS)\n\n    initcode = Initcode(deploy_code=deploy_code)\n\n    create_tx = Transaction(\n        gas_limit=100000000,\n        protected=False,\n        to=None,\n        data=initcode,\n        sender=sender,\n    )\n\n    block_1 = Block(txs=[create_tx])\n\n    first_kill = Transaction(\n        gas_limit=100000000,\n        protected=False,\n        to=create_tx.created_contract,\n        sender=sender,\n    )\n\n    second_kill = Transaction(\n        gas_limit=100000000,\n        protected=False,\n        to=create_tx.created_contract,\n        sender=sender,\n    )\n\n    block_2 = Block(txs=[first_kill, second_kill])\n\n    post = {\n        create_tx.created_contract: Account(\n            nonce=0,\n            balance=0,\n            code=b\"\",\n            storage={},\n        ),\n    }\n\n    blockchain_test(genesis_environment=env, pre=pre, post=post, blocks=[block_1, block_2])\n
    "},{"location":"tests/frontier/opcodes/test_selfdestruct/index/test_cases/","title":"Test Selfdestruct - Test Cases","text":"

    Test cases generated from tests/frontier/opcodes/test_selfdestruct.py

    Parametrized test cases generated from the test module tests/frontier/opcodes/test_selfdestruct.py:

    test_double_kill[fork_Frontier-blockchain_test]\ntest_double_kill[fork_Homestead-blockchain_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/frontier/opcodes/test_selfdestruct.py\n
    "},{"location":"tests/homestead/","title":"Homestead","text":"

    Documentation for tests/homestead.

    Generate fixtures for these test cases with:

    fill -v tests/homestead\n

    Test cases for EVM functionality introduced in Homestead.

    "},{"location":"tests/homestead/coverage/","title":"Coverage","text":"

    Documentation for tests/homestead/coverage.

    Generate fixtures for these test cases with:

    fill -v tests/homestead/coverage\n

    Tests that fill coverage gaps when porting over from ethereum/tests.

    "},{"location":"tests/homestead/coverage/test_coverage/","title":"Test Coverage","text":"

    Documentation for tests/homestead/coverage/test_coverage.py.

    Generate fixtures for these test cases with:

    fill -v tests/homestead/coverage/test_coverage.py\n

    Tests that address coverage gaps that result from updating ethereum/tests into EEST tests.

    "},{"location":"tests/homestead/coverage/test_coverage/#tests.homestead.coverage.test_coverage.test_coverage","title":"test_coverage(state_test, pre, fork)","text":"

    This test covers gaps that result from transforming Yul code into ethereum_test_tools.vm.opcode.Opcodes bytecode.

    E.g. Yul tends to optimize stack items by using SWAP1 and DUP1 opcodes, which are not regularly used in python code.

    Modify this test to cover more Yul code if required in the future.

    Source code in tests/homestead/coverage/test_coverage.py
    @pytest.mark.valid_from(\"Homestead\")\ndef test_coverage(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    fork: Fork,\n):\n    \"\"\"\n    This test covers gaps that result from transforming Yul code into\n    `ethereum_test_tools.vm.opcode.Opcodes` bytecode.\n\n    E.g. Yul tends to optimize stack items by using `SWAP1` and `DUP1` opcodes, which are not\n    regularly used in python code.\n\n    Modify this test to cover more Yul code if required in the future.\n    \"\"\"\n    missed_coverage = pre.deploy_contract(\n        balance=0,\n        code=Op.SHL(0x0000000000000000000000000000000000000000000000000000000000000001, 0x00)\n        + Op.SHR(0x0000000000000000000000000000000000000000000000000000000000000001, 0x00)\n        + Op.PUSH1(0x0A)\n        + Op.PUSH1(0x0B)\n        + Op.PUSH1(0x0C)\n        + Op.PUSH1(0x0D)\n        + Op.PUSH1(0x0E)\n        + Op.SWAP1()\n        + Op.DUP1()\n        + Op.DUP2()\n        + Op.PUSH0()\n        + Op.PUSH2(0x0102)\n        + Op.PUSH3(0x010203)\n        + Op.PUSH4(0x01020304)\n        + Op.POP(0x01)\n        # lllc tests insert codecopy when using lll(seq())\n        + Op.CODECOPY(0, 16, 4),\n        storage={},\n    )\n    address_to = pre.deploy_contract(\n        balance=1_000_000_000_000_000_000,\n        code=Op.MSTORE(0, Op.CALL(Op.GAS, missed_coverage, 0, 0, 0, 0, 0)) + Op.RETURN(0, 32),\n    )\n\n    if fork >= Cancun:\n        tx = Transaction(\n            sender=pre.fund_eoa(7_000_000_000_000_000_000),\n            gas_limit=100000,\n            to=address_to,\n            data=b\"\",\n            value=0,\n            protected=False,\n            access_list=[],\n            max_fee_per_gas=10,\n            max_priority_fee_per_gas=5,\n        )\n    else:\n        tx = Transaction(\n            sender=pre.fund_eoa(7_000_000_000_000_000_000),\n            gas_limit=100000,\n            to=address_to,\n            data=b\"\",\n            value=0,\n            protected=False,\n        )\n\n    state_test(env=Environment(), pre=pre, post={}, tx=tx)\n
    "},{"location":"tests/homestead/coverage/test_coverage/index/test_cases/","title":"Test Coverage - Test Cases","text":"

    Test cases generated from tests/homestead/coverage/test_coverage.py

    Parametrized test cases generated from the test module tests/homestead/coverage/test_coverage.py:

    test_coverage[fork_Homestead-blockchain_test]\ntest_coverage[fork_Homestead-state_test]\ntest_coverage[fork_Byzantium-blockchain_test]\ntest_coverage[fork_Byzantium-state_test]\ntest_coverage[fork_Constantinople-blockchain_test]\ntest_coverage[fork_Constantinople-state_test]\ntest_coverage[fork_ConstantinopleFix-blockchain_test]\ntest_coverage[fork_ConstantinopleFix-state_test]\ntest_coverage[fork_Istanbul-blockchain_test]\ntest_coverage[fork_Istanbul-state_test]\ntest_coverage[fork_Berlin-blockchain_test]\ntest_coverage[fork_Berlin-state_test]\ntest_coverage[fork_London-blockchain_test]\ntest_coverage[fork_London-state_test]\ntest_coverage[fork_Paris-blockchain_test]\ntest_coverage[fork_Paris-blockchain_test_engine]\ntest_coverage[fork_Paris-state_test]\ntest_coverage[fork_Shanghai-blockchain_test]\ntest_coverage[fork_Shanghai-blockchain_test_engine]\ntest_coverage[fork_Shanghai-state_test]\ntest_coverage[fork_Cancun-blockchain_test]\ntest_coverage[fork_Cancun-blockchain_test_engine]\ntest_coverage[fork_Cancun-state_test]\ntest_coverage[fork_Prague-blockchain_test]\ntest_coverage[fork_Prague-blockchain_test_engine]\ntest_coverage[fork_Prague-state_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/homestead/coverage/test_coverage.py\n
    "},{"location":"tests/homestead/yul/","title":"Yul","text":"

    Documentation for tests/homestead/yul.

    Generate fixtures for these test cases with:

    fill -v tests/homestead/yul\n

    Tests using Yul source for contracts.

    "},{"location":"tests/homestead/yul/test_yul_example/","title":"Test Yul Example","text":"

    Documentation for tests/homestead/yul/test_yul_example.py.

    Generate fixtures for these test cases with:

    fill -v tests/homestead/yul/test_yul_example.py\n

    Test Yul Source Code Examples

    "},{"location":"tests/homestead/yul/test_yul_example/#tests.homestead.yul.test_yul_example.test_yul","title":"test_yul(state_test, pre, yul, fork)","text":"

    Test YUL compiled bytecode.

    Source code in tests/homestead/yul/test_yul_example.py
    @pytest.mark.valid_from(\"Homestead\")\ndef test_yul(state_test: StateTestFiller, pre: Alloc, yul: YulCompiler, fork: Fork):\n    \"\"\"\n    Test YUL compiled bytecode.\n    \"\"\"\n    env = Environment()\n\n    contract_address = pre.deploy_contract(\n        code=yul(\n            \"\"\"\n            {\n                function f(a, b) -> c {\n                    c := add(a, b)\n                }\n\n                sstore(0, f(1, 2))\n                return(0, 32)\n            }\n            \"\"\"\n        ),\n        balance=0x0BA1A9CE0BA1A9CE,\n    )\n    sender = pre.fund_eoa(amount=0x0BA1A9CE0BA1A9CE)\n\n    tx = Transaction(\n        ty=0x0,\n        chain_id=0x01,\n        sender=sender,\n        to=contract_address,\n        gas_limit=500000,\n        gas_price=10,\n        protected=False if fork in [Frontier, Homestead] else True,\n    )\n\n    post = {\n        contract_address: Account(\n            storage={\n                0x00: 0x03,\n            },\n        ),\n    }\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/homestead/yul/test_yul_example/index/test_cases/","title":"Test Yul Example - Test Cases","text":"

    Test cases generated from tests/homestead/yul/test_yul_example.py

    Parametrized test cases generated from the test module tests/homestead/yul/test_yul_example.py:

    test_yul[fork_Homestead-blockchain_test]\ntest_yul[fork_Homestead-state_test]\ntest_yul[fork_Byzantium-blockchain_test]\ntest_yul[fork_Byzantium-state_test]\ntest_yul[fork_Constantinople-blockchain_test]\ntest_yul[fork_Constantinople-state_test]\ntest_yul[fork_ConstantinopleFix-blockchain_test]\ntest_yul[fork_ConstantinopleFix-state_test]\ntest_yul[fork_Istanbul-blockchain_test]\ntest_yul[fork_Istanbul-state_test]\ntest_yul[fork_Berlin-blockchain_test]\ntest_yul[fork_Berlin-state_test]\ntest_yul[fork_London-blockchain_test]\ntest_yul[fork_London-state_test]\ntest_yul[fork_Paris-blockchain_test]\ntest_yul[fork_Paris-blockchain_test_engine]\ntest_yul[fork_Paris-state_test]\ntest_yul[fork_Shanghai-blockchain_test]\ntest_yul[fork_Shanghai-blockchain_test_engine]\ntest_yul[fork_Shanghai-state_test]\ntest_yul[fork_Cancun-blockchain_test]\ntest_yul[fork_Cancun-blockchain_test_engine]\ntest_yul[fork_Cancun-state_test]\ntest_yul[fork_Prague-blockchain_test]\ntest_yul[fork_Prague-blockchain_test_engine]\ntest_yul[fork_Prague-state_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/homestead/yul/test_yul_example.py\n
    "},{"location":"tests/istanbul/","title":"Istanbul","text":"

    Documentation for tests/istanbul.

    Generate fixtures for these test cases with:

    fill -v tests/istanbul\n

    Test cases for EVM functionality introduced in Istanbul.

    "},{"location":"tests/istanbul/eip1344_chainid/","title":"EIP-1344 CHAINID","text":"

    Documentation for tests/istanbul/eip1344_chainid.

    Generate fixtures for these test cases with:

    fill -v tests/istanbul/eip1344_chainid\n
    Tests EIP-1344: ChainID Opcode

    Test cases for EIP-1344: ChainID Opcode.

    "},{"location":"tests/istanbul/eip1344_chainid/test_chainid/","title":"Test CHAINID","text":"

    Documentation for tests/istanbul/eip1344_chainid/test_chainid.py.

    Generate fixtures for these test cases with:

    fill -v tests/istanbul/eip1344_chainid/test_chainid.py\n
    Tests EIP-1344: CHAINID opcode

    Test cases for EIP-1344: CHAINID opcode.

    "},{"location":"tests/istanbul/eip1344_chainid/test_chainid/#tests.istanbul.eip1344_chainid.test_chainid.test_chainid","title":"test_chainid(state_test, pre)","text":"

    Test CHAINID opcode.

    Source code in tests/istanbul/eip1344_chainid/test_chainid.py
    @pytest.mark.valid_from(\"Istanbul\")\ndef test_chainid(state_test: StateTestFiller, pre: Alloc):\n    \"\"\"\n    Test CHAINID opcode.\n    \"\"\"\n    env = Environment(\n        fee_recipient=\"0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba\",\n        difficulty=0x20000,\n        gas_limit=10000000000,\n        number=1,\n        timestamp=1000,\n    )\n\n    contract_address = pre.deploy_contract(Op.SSTORE(1, Op.CHAINID) + Op.STOP)\n    sender = pre.fund_eoa()\n\n    tx = Transaction(\n        ty=0x0,\n        chain_id=0x01,\n        to=contract_address,\n        gas_limit=100000000,\n        gas_price=10,\n        sender=sender,\n    )\n\n    post = {\n        contract_address: Account(storage={\"0x01\": \"0x01\"}),\n    }\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/istanbul/eip1344_chainid/test_chainid/index/test_cases/","title":"Test CHAINID - Test Cases","text":"

    Test cases generated from tests/istanbul/eip1344_chainid/test_chainid.py

    Parametrized test cases generated from the test module tests/istanbul/eip1344_chainid/test_chainid.py:

    test_chainid[fork_Istanbul-blockchain_test]\ntest_chainid[fork_Istanbul-state_test]\ntest_chainid[fork_Berlin-blockchain_test]\ntest_chainid[fork_Berlin-state_test]\ntest_chainid[fork_London-blockchain_test]\ntest_chainid[fork_London-state_test]\ntest_chainid[fork_Paris-blockchain_test]\ntest_chainid[fork_Paris-blockchain_test_engine]\ntest_chainid[fork_Paris-state_test]\ntest_chainid[fork_Shanghai-blockchain_test]\ntest_chainid[fork_Shanghai-blockchain_test_engine]\ntest_chainid[fork_Shanghai-state_test]\ntest_chainid[fork_Cancun-blockchain_test]\ntest_chainid[fork_Cancun-blockchain_test_engine]\ntest_chainid[fork_Cancun-state_test]\ntest_chainid[fork_Prague-blockchain_test]\ntest_chainid[fork_Prague-blockchain_test_engine]\ntest_chainid[fork_Prague-state_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/istanbul/eip1344_chainid/test_chainid.py\n
    "},{"location":"tests/paris/","title":"Paris","text":"

    Documentation for tests/paris.

    Generate fixtures for these test cases with:

    fill -v tests/paris\n

    Test cases for EVM functionality introduced in Paris (Merge).

    "},{"location":"tests/paris/security/","title":"Security","text":"

    Documentation for tests/paris/security.

    Generate fixtures for these test cases with:

    fill -v tests/paris/security\n

    Ethereum execution client tests related to security issues.

    "},{"location":"tests/paris/security/test_selfdestruct_balance_bug/","title":"Test Selfdestruct Balance Bug","text":"

    Documentation for tests/paris/security/test_selfdestruct_balance_bug.py.

    Generate fixtures for these test cases with:

    fill -v tests/paris/security/test_selfdestruct_balance_bug.py\n
    Tests the Consensus Flaw During Block Processing related to SELFDESTRUCT

    Tests the consensus-vulnerability reported in go-ethereum/security/advisories/GHSA-xw37-57qp-9mm4.

    To reproduce the issue with this test case:

    1. Fill the test with the most recent geth evm version.
    2. Run the fixture output within a vulnerable geth version: v1.9.20 > geth >= v1.9.4.
    "},{"location":"tests/paris/security/test_selfdestruct_balance_bug/#tests.paris.security.test_selfdestruct_balance_bug.test_tx_selfdestruct_balance_bug","title":"test_tx_selfdestruct_balance_bug(blockchain_test, pre)","text":"

    Test that the vulnerability is not present by checking the balance of the 0xaa contract after executing specific transactions:

    1. Start with contract 0xaa which has initial balance of 3 wei. 0xaa contract code simply performs a self-destruct to itself.

    2. Send a transaction (tx 1) to invoke caller contract 0xcc (which has a balance of 1 wei), which in turn invokes 0xaa with a 1 wei call.

    3. Store the balance of 0xaa after the first transaction is processed. 0xaa self-destructed. Expected outcome: 0 wei.

    4. Send another transaction (tx 2) to call 0xaa with 5 wei.

    5. Store the balance of 0xaa after the second transaction is processed. No self-destruct. Expected outcome: 5 wei.

    6. Verify that:

      • Call within tx 1 is successful, i.e 0xaa self-destructed.
      • The balances of 0xaa after each tx are correct.
      • During tx 2, code in 0xaa does not execute, hence self-destruct mechanism does not trigger.

    TODO: EOF - This test could be parametrized for EOFCREATE

    Source code in tests/paris/security/test_selfdestruct_balance_bug.py
    @pytest.mark.valid_from(\"Constantinople\")\ndef test_tx_selfdestruct_balance_bug(blockchain_test: BlockchainTestFiller, pre: Alloc):\n    \"\"\"\n    Test that the vulnerability is not present by checking the balance of the\n    `0xaa` contract after executing specific transactions:\n\n    1. Start with contract `0xaa` which has initial balance of 3 wei.\n        `0xaa` contract code simply performs a self-destruct to itself.\n\n    2. Send a transaction (tx 1) to invoke caller contract `0xcc` (which\n        has a balance of 1 wei), which in turn invokes `0xaa` with a 1 wei call.\n\n    3. Store the balance of `0xaa` after the first transaction\n        is processed. `0xaa` self-destructed. Expected outcome: 0 wei.\n\n    4. Send another transaction (tx 2) to call 0xaa with 5 wei.\n\n    5. Store the balance of `0xaa` after the second transaction\n        is processed. No self-destruct. Expected outcome: 5 wei.\n\n    6. Verify that:\n        - Call within tx 1 is successful, i.e `0xaa` self-destructed.\n        - The balances of `0xaa` after each tx are correct.\n        - During tx 2, code in `0xaa` does not execute,\n            hence self-destruct mechanism does not trigger.\n\n    TODO: EOF - This test could be parametrized for EOFCREATE\n    \"\"\"\n    deploy_code = Switch(\n        default_action=Op.REVERT(0, 0),\n        cases=[\n            CalldataCase(\n                value=0,\n                action=Op.SELFDESTRUCT(Op.ADDRESS),\n            ),\n            CalldataCase(\n                value=1,\n                action=Op.SSTORE(0, Op.SELFBALANCE),\n            ),\n        ],\n    )\n    aa_code = Initcode(\n        deploy_code=deploy_code,\n    )\n    cc_code = (\n        Op.CALLDATACOPY(size=Op.CALLDATASIZE)\n        + Op.MSTORE(\n            0,\n            Op.CREATE(\n                value=3,  # Initial balance of 3 wei\n                offset=0,\n                size=Op.CALLDATASIZE,\n            ),\n        )\n        + Op.SSTORE(0xCA1101, Op.CALL(gas=100000, address=Op.MLOAD(0), value=0))\n        + Op.CALL(gas=100000, address=Op.MLOAD(0), value=1)\n    )\n\n    cc_address = pre.deploy_contract(cc_code, balance=1000000000)\n    aa_location = compute_create_address(address=cc_address, nonce=1)\n    balance_code = Op.SSTORE(0xBA1AA, Op.BALANCE(aa_location))\n    balance_address_1 = pre.deploy_contract(balance_code)\n    balance_address_2 = pre.deploy_contract(balance_code)\n\n    sender = pre.fund_eoa()\n\n    blocks = [\n        Block(\n            txs=[\n                # Sender invokes caller, caller invokes 0xaa:\n                # calling with 1 wei call\n                Transaction(\n                    sender=sender,\n                    to=cc_address,\n                    data=aa_code,\n                    gas_limit=1000000,\n                ),\n                # Dummy tx to store balance of 0xaa after first TX.\n                Transaction(\n                    sender=sender,\n                    to=balance_address_1,\n                    gas_limit=100000,\n                ),\n                # Sender calls 0xaa with 5 wei.\n                Transaction(\n                    sender=sender,\n                    to=aa_location,\n                    gas_limit=100000,\n                    value=5,\n                ),\n                # Dummy tx to store balance of 0xaa after second TX.\n                Transaction(\n                    sender=sender,\n                    to=balance_address_2,\n                    gas_limit=100000,\n                ),\n            ],\n        ),\n    ]\n\n    post = {\n        # Check call from caller has succeeded.\n        cc_address: Account(nonce=2, storage={0xCA1101: 1}),\n        # Check balance of 0xaa after tx 1 is 0 wei, i.e self-destructed.\n        # Vulnerable versions should return 1 wei.\n        balance_address_1: Account(storage={0xBA1AA: 0}),\n        # Check that 0xaa exists and balance after tx 2 is 5 wei.\n        # Vulnerable versions should return 6 wei.\n        balance_address_2: Account(storage={0xBA1AA: 5}),\n        aa_location: Account(storage={0: 0}),\n    }\n\n    blockchain_test(pre=pre, post=post, blocks=blocks)\n
    "},{"location":"tests/paris/security/test_selfdestruct_balance_bug/index/test_cases/","title":"Test Selfdestruct Balance Bug - Test Cases","text":"

    Test cases generated from tests/paris/security/test_selfdestruct_balance_bug.py

    Parametrized test cases generated from the test module tests/paris/security/test_selfdestruct_balance_bug.py:

    test_tx_selfdestruct_balance_bug[fork_Constantinople-blockchain_test]\ntest_tx_selfdestruct_balance_bug[fork_ConstantinopleFix-blockchain_test]\ntest_tx_selfdestruct_balance_bug[fork_Istanbul-blockchain_test]\ntest_tx_selfdestruct_balance_bug[fork_Berlin-blockchain_test]\ntest_tx_selfdestruct_balance_bug[fork_London-blockchain_test]\ntest_tx_selfdestruct_balance_bug[fork_Paris-blockchain_test]\ntest_tx_selfdestruct_balance_bug[fork_Paris-blockchain_test_engine]\ntest_tx_selfdestruct_balance_bug[fork_Shanghai-blockchain_test]\ntest_tx_selfdestruct_balance_bug[fork_Shanghai-blockchain_test_engine]\ntest_tx_selfdestruct_balance_bug[fork_Cancun-blockchain_test]\ntest_tx_selfdestruct_balance_bug[fork_Cancun-blockchain_test_engine]\ntest_tx_selfdestruct_balance_bug[fork_Prague-blockchain_test]\ntest_tx_selfdestruct_balance_bug[fork_Prague-blockchain_test_engine]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/paris/security/test_selfdestruct_balance_bug.py\n
    "},{"location":"tests/prague/","title":"Prague","text":"

    Documentation for tests/prague.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Test cases for EVM functionality introduced in Prague.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/","title":"EIP-2537 Bls 12 381 Precompiles","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-2537: Precompile for BLS12-381 curve operations

    Tests for EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/spec.py.

    Defines EIP-2537 specification constants and functions.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/spec/#tests.prague.eip2537_bls_12_381_precompiles.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-2537 specifications as defined at https://eips.ethereum.org/EIPS/eip-2537

    Source code in tests/prague/eip2537_bls_12_381_precompiles/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-2537 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-2537\n    \"\"\"\n\n    # Addresses\n    G1ADD = 0x0B\n    G1MUL = 0x0C\n    G1MSM = 0x0D\n    G2ADD = 0x0E\n    G2MUL = 0x0F\n    G2MSM = 0x10\n    PAIRING = 0x11\n    MAP_FP_TO_G1 = 0x12\n    MAP_FP2_TO_G2 = 0x13\n\n    # Gas constants\n    G1ADD_GAS = 500\n    G1MUL_GAS = 12_000\n    G2ADD_GAS = 800\n    G2MUL_GAS = 45_000\n    MAP_FP_TO_G1_GAS = 5_500\n    MAP_FP2_TO_G2_GAS = 75_000\n    PAIRING_BASE_GAS = 65_000\n    PAIRING_PER_PAIR_GAS = 43_000\n\n    # Other constants\n    B_COEFFICIENT = 0x04\n    X = -0xD201000000010000\n    Q = X**4 - X**2 + 1\n    P = (X - 1) ** 2 * Q // 3 + X\n    LEN_PER_PAIR = len(PointG1() + PointG2())\n    MSM_MULTIPLIER = 1_000\n    MSM_DISCOUNT_TABLE = MSM_DISCOUNT_TABLE\n\n    # Test constants (from https://github.com/ethereum/bls12-381-tests/tree/eip-2537)\n    P1 = PointG1(  # random point in G1\n        0x112B98340EEE2777CC3C14163DEA3EC97977AC3DC5C70DA32E6E87578F44912E902CCEF9EFE28D4A78B8999DFBCA9426,  # noqa: E501\n        0x186B28D92356C4DFEC4B5201AD099DBDEDE3781F8998DDF929B4CD7756192185CA7B8F4EF7088F813270AC3D48868A21,  # noqa: E501\n    )\n    G1 = PointG1(\n        0x17F1D3A73197D7942695638C4FA9AC0FC3688C4F9774B905A14E3A3F171BAC586C55E83FF97A1AEFFB3AF00ADB22C6BB,  # noqa: E501\n        0x8B3F481E3AAA0F1A09E30ED741D8AE4FCF5E095D5D00AF600DB18CB2C04B3EDD03CC744A2888AE40CAA232946C5E7E1,  # noqa: E501\n    )\n    # point at infinity in G1\n    INF_G1 = PointG1(0, 0)\n    # random point in G2\n    P2 = PointG2(\n        (\n            0x103121A2CEAAE586D240843A398967325F8EB5A93E8FEA99B62B9F88D8556C80DD726A4B30E84A36EEABAF3592937F27,  # noqa: E501\n            0x86B990F3DA2AEAC0A36143B7D7C824428215140DB1BB859338764CB58458F081D92664F9053B50B3FBD2E4723121B68,  # noqa: E501\n        ),\n        (\n            0xF9E7BA9A86A8F7624AA2B42DCC8772E1AF4AE115685E60ABC2C9B90242167ACEF3D0BE4050BF935EED7C3B6FC7BA77E,  # noqa: E501\n            0xD22C3652D0DC6F0FC9316E14268477C2049EF772E852108D269D9C38DBA1D4802E8DAE479818184C08F9A569D878451,  # noqa: E501\n        ),\n    )\n    G2 = PointG2(\n        (\n            0x24AA2B2F08F0A91260805272DC51051C6E47AD4FA403B02B4510B647AE3D1770BAC0326A805BBEFD48056C8C121BDB8,  # noqa: E501\n            0x13E02B6052719F607DACD3A088274F65596BD0D09920B61AB5DA61BBDC7F5049334CF11213945D57E5AC7D055D042B7E,  # noqa: E501\n        ),\n        (\n            0xCE5D527727D6E118CC9CDC6DA2E351AADFD9BAA8CBDD3A76D429A695160D12C923AC9CC3BACA289E193548608B82801,  # noqa: E501\n            0x606C4A02EA734CC32ACD2B02BC28B99CB3E287E85A763AF267492AB572E99AB3F370D275CEC1DA1AAA9075FF05F79BE,  # noqa: E501\n        ),\n    )\n    # point at infinity in G2\n    INF_G2 = PointG2((0, 0), (0, 0))\n\n    # Other test constants\n    # point not in subgroup in curve Fp\n    P1_NOT_IN_SUBGROUP = PointG1(0, 2)\n    P1_NOT_IN_SUBGROUP_TIMES_2 = PointG1(0, P - 2)\n    # point not in subgroup in curve Fp2\n    P2_NOT_IN_SUBGROUP = PointG2(\n        (1, 1),\n        (\n            0x17FAA6201231304F270B858DAD9462089F2A5B83388E4B10773ABC1EEF6D193B9FCE4E8EA2D9D28E3C3A315AA7DE14CA,  # noqa: E501\n            0xCC12449BE6AC4E7F367E7242250427C4FB4C39325D3164AD397C1837A90F0EA1A534757DF374DD6569345EB41ED76E,  # noqa: E501\n        ),\n    )\n    P2_NOT_IN_SUBGROUP_TIMES_2 = PointG2(\n        (\n            0x919F97860ECC3E933E3477FCAC0E2E4FCC35A6E886E935C97511685232456263DEF6665F143CCCCB44C733333331553,  # noqa: E501\n            0x18B4376B50398178FA8D78ED2654B0FFD2A487BE4DBE6B69086E61B283F4E9D58389CCCB8EDC99995718A66666661555,  # noqa: E501\n        ),\n        (\n            0x26898F699C4B07A405AB4183A10B47F923D1C0FDA1018682DD2CCC88968C1B90D44534D6B9270CF57F8DC6D4891678A,  # noqa: E501\n            0x3270414330EAD5EC92219A03A24DFA059DBCBE610868BE1851CC13DAC447F60B40D41113FD007D3307B19ADD4B0F061,  # noqa: E501\n        ),\n    )\n\n    # Pairing precompile results\n    PAIRING_TRUE = int.to_bytes(1, length=32, byteorder=\"big\")\n    PAIRING_FALSE = int.to_bytes(0, length=32, byteorder=\"big\")\n\n    # Returned on precompile failure\n    INVALID = b\"\"\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/","title":"Test Bls12 G1add","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests BLS12_G1ADD precompile of EIP-2537: Precompile for BLS12-381 curve operations

    Tests BLS12_G1ADD precompile of EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1add.test_valid","title":"test_valid(state_test, pre, post, tx)","text":"

    Test the BLS12_G1ADD precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py
    @pytest.mark.parametrize(\n    \"input,expected_output\",\n    vectors_from_file(\"add_G1_bls.json\")\n    + [\n        pytest.param(\n            Spec.INF_G1 + Spec.INF_G1,\n            Spec.INF_G1,\n            id=\"inf_plus_inf\",\n        ),\n        pytest.param(\n            Spec.P1_NOT_IN_SUBGROUP + Spec.P1_NOT_IN_SUBGROUP,\n            Spec.P1_NOT_IN_SUBGROUP_TIMES_2,\n            id=\"not_in_subgroup_1\",\n        ),\n        pytest.param(\n            Spec.P1_NOT_IN_SUBGROUP + Spec.P1_NOT_IN_SUBGROUP_TIMES_2,\n            Spec.INF_G1,\n            id=\"not_in_subgroup_2\",\n        ),\n    ],\n)\ndef test_valid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1ADD precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1add.test_invalid","title":"test_invalid(state_test, pre, post, tx)","text":"

    Negative tests for the BLS12_G1ADD precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py
    @pytest.mark.parametrize(\n    \"input\",\n    vectors_from_file(\"fail-add_G1_bls.json\")\n    + [\n        pytest.param(\n            PointG1(0, 1) + Spec.INF_G1,\n            id=\"invalid_point_a_1\",\n        ),\n        pytest.param(\n            PointG1(Spec.P1.x, Spec.P1.y - 1) + Spec.INF_G1,\n            id=\"invalid_point_a_2\",\n        ),\n        pytest.param(\n            PointG1(Spec.P1.x, Spec.P1.y + 1) + Spec.INF_G1,\n            id=\"invalid_point_a_3\",\n        ),\n        pytest.param(\n            PointG1(Spec.P1.x, Spec.P1.x) + Spec.INF_G1,\n            id=\"invalid_point_a_4\",\n        ),\n        pytest.param(\n            PointG1(Spec.P1.x, Spec.P1.y - 1) + Spec.P1,\n            id=\"invalid_point_a_5\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + PointG1(0, 1),\n            id=\"invalid_point_b_1\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + PointG1(Spec.P1.x, Spec.P1.y - 1),\n            id=\"invalid_point_b_2\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + PointG1(Spec.P1.x, Spec.P1.y + 1),\n            id=\"invalid_point_b_3\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + PointG1(Spec.P1.x, Spec.P1.x),\n            id=\"invalid_point_b_4\",\n        ),\n        pytest.param(\n            Spec.P1 + PointG1(Spec.P1.x, Spec.P1.y - 1),\n            id=\"invalid_point_b_5\",\n        ),\n        pytest.param(\n            PointG1(Spec.P, 0) + Spec.INF_G1,\n            id=\"a_x_equal_to_p\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + PointG1(Spec.P, 0),\n            id=\"b_x_equal_to_p\",\n        ),\n        pytest.param(\n            PointG1(0, Spec.P) + Spec.INF_G1,\n            id=\"a_y_equal_to_p\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + PointG1(0, Spec.P),\n            id=\"b_y_equal_to_p\",\n        ),\n        pytest.param(\n            b\"\\x80\" + bytes(Spec.INF_G1)[1:] + Spec.INF_G1,\n            id=\"invalid_encoding_a\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + b\"\\x80\" + bytes(Spec.INF_G1)[1:],\n            id=\"invalid_encoding_b\",\n        ),\n        pytest.param(\n            (Spec.INF_G1 + PointG1(Spec.P1.x, Spec.P1.x))[:-1],\n            id=\"input_too_short\",\n        ),\n        pytest.param(\n            b\"\\x00\" + (Spec.INF_G1 + PointG1(Spec.P1.x, Spec.P1.x)),\n            id=\"input_too_long\",\n        ),\n        pytest.param(\n            b\"\",\n            id=\"zero_length_input\",\n        ),\n        pytest.param(\n            Spec.G1,\n            id=\"only_one_point\",\n        ),\n        pytest.param(\n            Spec.G2 + Spec.G2,\n            id=\"g2_points\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\ndef test_invalid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Negative tests for the BLS12_G1ADD precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1add.test_gas","title":"test_gas(state_test, pre, post, tx)","text":"

    Test the BLS12_G1ADD precompile gas requirements.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py
    @pytest.mark.parametrize(\n    \"input,expected_output,precompile_gas_modifier\",\n    [\n        pytest.param(\n            Spec.INF_G1 + Spec.INF_G1,\n            Spec.INF_G1,\n            1,\n            id=\"extra_gas\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + Spec.INF_G1,\n            Spec.INVALID,\n            -1,\n            id=\"insufficient_gas\",\n        ),\n    ],\n)\ndef test_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1ADD precompile gas requirements.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1add.test_call_types","title":"test_call_types(state_test, pre, post, tx)","text":"

    Test the BLS12_G1ADD precompile using different call types.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.STATICCALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"input,expected_output\",\n    [\n        pytest.param(\n            Spec.INF_G1 + Spec.INF_G1,\n            Spec.INF_G1,\n            id=\"inf_plus_inf\",\n        ),\n    ],\n)\ndef test_call_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1ADD precompile using different call types.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/index/test_cases/","title":"Test Bls12 G1add - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py:

    test_valid[fork_Prague-blockchain_test-bls_g1add_g1+p1-]\ntest_valid[fork_Prague-blockchain_test-bls_g1add_p1+g1-]\ntest_valid[fork_Prague-blockchain_test-bls_g1add_g1_wrong_order+g1-]\ntest_valid[fork_Prague-blockchain_test-bls_g1add_(g1+0=g1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1add_(p1+0=p1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1add_(g1-g1=0)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1add_(p1-p1=0)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1add_(g1+g1=2*g1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1add_(p1+p1=2*p1)-]\ntest_valid[fork_Prague-blockchain_test-inf_plus_inf-]\ntest_valid[fork_Prague-blockchain_test-not_in_subgroup_1-]\ntest_valid[fork_Prague-blockchain_test-not_in_subgroup_2-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1add_g1+p1-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1add_p1+g1-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1add_g1_wrong_order+g1-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1add_(g1+0=g1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1add_(p1+0=p1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1add_(g1-g1=0)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1add_(p1-p1=0)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1add_(g1+g1=2*g1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1add_(p1+p1=2*p1)-]\ntest_valid[fork_Prague-blockchain_test_engine-inf_plus_inf-]\ntest_valid[fork_Prague-blockchain_test_engine-not_in_subgroup_1-]\ntest_valid[fork_Prague-blockchain_test_engine-not_in_subgroup_2-]\ntest_valid[fork_Prague-state_test-bls_g1add_g1+p1-]\ntest_valid[fork_Prague-state_test-bls_g1add_p1+g1-]\ntest_valid[fork_Prague-state_test-bls_g1add_g1_wrong_order+g1-]\ntest_valid[fork_Prague-state_test-bls_g1add_(g1+0=g1)-]\ntest_valid[fork_Prague-state_test-bls_g1add_(p1+0=p1)-]\ntest_valid[fork_Prague-state_test-bls_g1add_(g1-g1=0)-]\ntest_valid[fork_Prague-state_test-bls_g1add_(p1-p1=0)-]\ntest_valid[fork_Prague-state_test-bls_g1add_(g1+g1=2*g1)-]\ntest_valid[fork_Prague-state_test-bls_g1add_(p1+p1=2*p1)-]\ntest_valid[fork_Prague-state_test-inf_plus_inf-]\ntest_valid[fork_Prague-state_test-not_in_subgroup_1-]\ntest_valid[fork_Prague-state_test-not_in_subgroup_2-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1add_empty_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1add_short_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1add_large_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1add_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2add_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1add_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_1-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_2-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_3-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_4-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_5-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_b_1-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_b_2-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_b_3-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_b_4-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_b_5-]\ntest_invalid[fork_Prague-blockchain_test--a_x_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--b_x_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--a_y_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--b_y_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding_a-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding_b-]\ntest_invalid[fork_Prague-blockchain_test--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test--only_one_point-]\ntest_invalid[fork_Prague-blockchain_test--g2_points-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1add_empty_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1add_short_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1add_large_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1add_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2add_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1add_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_3-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_4-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_5-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_b_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_b_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_b_3-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_b_4-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_b_5-]\ntest_invalid[fork_Prague-blockchain_test_engine--a_x_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--b_x_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--a_y_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--b_y_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding_a-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding_b-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test_engine--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--only_one_point-]\ntest_invalid[fork_Prague-blockchain_test_engine--g2_points-]\ntest_invalid[fork_Prague-state_test--bls_g1add_empty_input-]\ntest_invalid[fork_Prague-state_test--bls_g1add_short_input-]\ntest_invalid[fork_Prague-state_test--bls_g1add_large_input-]\ntest_invalid[fork_Prague-state_test--bls_g1add_point_not_on_curve-]\ntest_invalid[fork_Prague-state_test--bls_g2add_invalid_field_element-]\ntest_invalid[fork_Prague-state_test--bls_g1add_violate_top_bytes-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_1-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_2-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_3-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_4-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_5-]\ntest_invalid[fork_Prague-state_test--invalid_point_b_1-]\ntest_invalid[fork_Prague-state_test--invalid_point_b_2-]\ntest_invalid[fork_Prague-state_test--invalid_point_b_3-]\ntest_invalid[fork_Prague-state_test--invalid_point_b_4-]\ntest_invalid[fork_Prague-state_test--invalid_point_b_5-]\ntest_invalid[fork_Prague-state_test--a_x_equal_to_p-]\ntest_invalid[fork_Prague-state_test--b_x_equal_to_p-]\ntest_invalid[fork_Prague-state_test--a_y_equal_to_p-]\ntest_invalid[fork_Prague-state_test--b_y_equal_to_p-]\ntest_invalid[fork_Prague-state_test--invalid_encoding_a-]\ntest_invalid[fork_Prague-state_test--invalid_encoding_b-]\ntest_invalid[fork_Prague-state_test--input_too_short-]\ntest_invalid[fork_Prague-state_test--input_too_long-]\ntest_invalid[fork_Prague-state_test--zero_length_input-]\ntest_invalid[fork_Prague-state_test--only_one_point-]\ntest_invalid[fork_Prague-state_test--g2_points-]\ntest_gas[fork_Prague-blockchain_test-extra_gas-]\ntest_gas[fork_Prague-blockchain_test-insufficient_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-extra_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-insufficient_gas-]\ntest_gas[fork_Prague-state_test-extra_gas-]\ntest_gas[fork_Prague-state_test-insufficient_gas-]\ntest_call_types[fork_Prague-blockchain_test-inf_plus_inf-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test-inf_plus_inf-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test-inf_plus_inf-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_plus_inf-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_plus_inf-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_plus_inf-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-state_test-inf_plus_inf-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-state_test-inf_plus_inf-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-state_test-inf_plus_inf-call_opcode_CALLCODE-]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/","title":"Test Bls12 G1msm","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests BLS12_G1MSM precompile of EIP-2537: Precompile for BLS12-381 curve operations

    Tests BLS12_G1MSM precompile of EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1msm.test_valid","title":"test_valid(state_test, pre, post, tx)","text":"

    Test the BLS12_G1MSM precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py
    @pytest.mark.parametrize(\n    \"input,expected_output\",\n    vectors_from_file(\"multiexp_G1_bls.json\")\n    + [\n        pytest.param(\n            (Spec.P1 + Scalar(Spec.Q)) * (len(Spec.MSM_DISCOUNT_TABLE) - 1),\n            Spec.INF_G1,\n            id=\"max_discount\",\n        ),\n        pytest.param(\n            (Spec.P1 + Scalar(Spec.Q)) * len(Spec.MSM_DISCOUNT_TABLE),\n            Spec.INF_G1,\n            id=\"max_discount_plus_1\",\n        ),\n    ],\n)\ndef test_valid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1MSM precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1msm.test_invalid","title":"test_invalid(state_test, pre, post, tx)","text":"

    Test the BLS12_G1MSM precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py
    @pytest.mark.parametrize(\n    \"input\",\n    vectors_from_file(\"fail-multiexp_G1_bls.json\")\n    + [\n        pytest.param(\n            PointG1(0, 1) + Scalar(0),\n            id=\"invalid_point_1\",\n        ),\n        pytest.param(\n            PointG1(Spec.P1.x, Spec.P1.y - 1) + Scalar(0),\n            id=\"invalid_point_2\",\n        ),\n        pytest.param(\n            PointG1(Spec.P1.x, Spec.P1.y + 1) + Scalar(0),\n            id=\"invalid_point_3\",\n        ),\n        pytest.param(\n            PointG1(Spec.P1.x, Spec.P1.x) + Scalar(0),\n            id=\"invalid_point_4\",\n        ),\n        pytest.param(\n            b\"\\x80\" + bytes(Spec.INF_G1)[1:] + Scalar(0),\n            id=\"invalid_encoding\",\n        ),\n        pytest.param(\n            b\"\\x80\" + bytes(Spec.INF_G1)[1:] + Scalar(0),\n            id=\"invalid_encoding\",\n        ),\n        pytest.param(\n            Spec.P1_NOT_IN_SUBGROUP + Scalar(Spec.Q),\n            id=\"not_in_subgroup_1\",\n        ),\n        pytest.param(\n            Spec.P1_NOT_IN_SUBGROUP_TIMES_2 + Scalar(Spec.Q),\n            id=\"not_in_subgroup_2\",\n        ),\n        pytest.param(\n            Spec.G1,\n            id=\"bls_g1_truncated_input\",\n        ),\n    ],\n    # Input length tests can be found in ./test_bls12_variable_length_input_contracts.py\n)\n@pytest.mark.parametrize(\n    \"precompile_gas_modifier\", [100_000], ids=[\"\"]\n)  # Add gas so that won't be the cause of failure\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\ndef test_invalid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1MSM precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1msm.test_call_types","title":"test_call_types(state_test, pre, post, tx)","text":"

    Test the BLS12_G1MSM precompile using different call types.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.STATICCALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"input,expected_output\",\n    [\n        pytest.param(\n            Spec.INF_G1 + Scalar(0),\n            Spec.INF_G1,\n            id=\"inf_times_zero\",\n        ),\n    ],\n)\ndef test_call_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1MSM precompile using different call types.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/index/test_cases/","title":"Test Bls12 G1msm - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py:

    test_valid[fork_Prague-blockchain_test-bls_g1multiexp_(g1+g1=2*g1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_(p1+p1=2*p1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_(1*g1=g1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_(1*p1=p1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_(0*g1=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_(0*p1=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_(x*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_(2g1+inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_(inf+inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_(2g1+2p1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_multiple-]\ntest_valid[fork_Prague-blockchain_test-max_discount-]\ntest_valid[fork_Prague-blockchain_test-max_discount_plus_1-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(g1+g1=2*g1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(p1+p1=2*p1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(1*g1=g1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(1*p1=p1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(0*g1=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(0*p1=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(x*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(2g1+inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(inf+inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(2g1+2p1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_multiple-]\ntest_valid[fork_Prague-blockchain_test_engine-max_discount-]\ntest_valid[fork_Prague-blockchain_test_engine-max_discount_plus_1-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(g1+g1=2*g1)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(p1+p1=2*p1)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(1*g1=g1)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(1*p1=p1)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(0*g1=inf)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(0*p1=inf)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(x*inf=inf)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(2g1+inf)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(inf+inf)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(2g1+2p1)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_multiple-]\ntest_valid[fork_Prague-state_test-max_discount-]\ntest_valid[fork_Prague-state_test-max_discount_plus_1-]\ntest_invalid[fork_Prague-blockchain_test---bls_g1multiexp_empty_input-]\ntest_invalid[fork_Prague-blockchain_test---bls_g1multiexp_short_input-]\ntest_invalid[fork_Prague-blockchain_test---bls_g1multiexp_long_input-]\ntest_invalid[fork_Prague-blockchain_test---bls_g1multiexp_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test---bls_g1multiexp_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test---bls_g1multiexp_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test---bls_g1multiexp_g1_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test---invalid_point_1-]\ntest_invalid[fork_Prague-blockchain_test---invalid_point_2-]\ntest_invalid[fork_Prague-blockchain_test---invalid_point_3-]\ntest_invalid[fork_Prague-blockchain_test---invalid_point_4-]\ntest_invalid[fork_Prague-blockchain_test---invalid_encoding0-]\ntest_invalid[fork_Prague-blockchain_test---invalid_encoding1-]\ntest_invalid[fork_Prague-blockchain_test---not_in_subgroup_1-]\ntest_invalid[fork_Prague-blockchain_test---not_in_subgroup_2-]\ntest_invalid[fork_Prague-blockchain_test---bls_g1_truncated_input-]\ntest_invalid[fork_Prague-blockchain_test_engine---bls_g1multiexp_empty_input-]\ntest_invalid[fork_Prague-blockchain_test_engine---bls_g1multiexp_short_input-]\ntest_invalid[fork_Prague-blockchain_test_engine---bls_g1multiexp_long_input-]\ntest_invalid[fork_Prague-blockchain_test_engine---bls_g1multiexp_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test_engine---bls_g1multiexp_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test_engine---bls_g1multiexp_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test_engine---bls_g1multiexp_g1_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test_engine---invalid_point_1-]\ntest_invalid[fork_Prague-blockchain_test_engine---invalid_point_2-]\ntest_invalid[fork_Prague-blockchain_test_engine---invalid_point_3-]\ntest_invalid[fork_Prague-blockchain_test_engine---invalid_point_4-]\ntest_invalid[fork_Prague-blockchain_test_engine---invalid_encoding0-]\ntest_invalid[fork_Prague-blockchain_test_engine---invalid_encoding1-]\ntest_invalid[fork_Prague-blockchain_test_engine---not_in_subgroup_1-]\ntest_invalid[fork_Prague-blockchain_test_engine---not_in_subgroup_2-]\ntest_invalid[fork_Prague-blockchain_test_engine---bls_g1_truncated_input-]\ntest_invalid[fork_Prague-state_test---bls_g1multiexp_empty_input-]\ntest_invalid[fork_Prague-state_test---bls_g1multiexp_short_input-]\ntest_invalid[fork_Prague-state_test---bls_g1multiexp_long_input-]\ntest_invalid[fork_Prague-state_test---bls_g1multiexp_invalid_field_element-]\ntest_invalid[fork_Prague-state_test---bls_g1multiexp_violate_top_bytes-]\ntest_invalid[fork_Prague-state_test---bls_g1multiexp_point_not_on_curve-]\ntest_invalid[fork_Prague-state_test---bls_g1multiexp_g1_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-state_test---invalid_point_1-]\ntest_invalid[fork_Prague-state_test---invalid_point_2-]\ntest_invalid[fork_Prague-state_test---invalid_point_3-]\ntest_invalid[fork_Prague-state_test---invalid_point_4-]\ntest_invalid[fork_Prague-state_test---invalid_encoding0-]\ntest_invalid[fork_Prague-state_test---invalid_encoding1-]\ntest_invalid[fork_Prague-state_test---not_in_subgroup_1-]\ntest_invalid[fork_Prague-state_test---not_in_subgroup_2-]\ntest_invalid[fork_Prague-state_test---bls_g1_truncated_input-]\ntest_call_types[fork_Prague-blockchain_test-inf_times_zero-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test-inf_times_zero-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test-inf_times_zero-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_times_zero-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_times_zero-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_times_zero-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-state_test-inf_times_zero-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-state_test-inf_times_zero-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-state_test-inf_times_zero-call_opcode_CALLCODE-]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/","title":"Test Bls12 G1mul","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests BLS12_G1MUL precompile of EIP-2537: Precompile for BLS12-381 curve operations

    Tests BLS12_G1MUL precompile of EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1mul.test_valid","title":"test_valid(state_test, pre, post, tx)","text":"

    Test the BLS12_G1MUL precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py
    @pytest.mark.parametrize(\n    \"input,expected_output\",\n    vectors_from_file(\"mul_G1_bls.json\")\n    + [\n        pytest.param(\n            Spec.INF_G1 + Scalar(0),\n            Spec.INF_G1,\n            id=\"bls_g1mul_(0*inf=inf)\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + Scalar(2**256 - 1),\n            Spec.INF_G1,\n            id=\"bls_g1mul_(2**256-1*inf=inf)\",\n        ),\n        pytest.param(\n            Spec.P1 + Scalar(2**256 - 1),\n            PointG1(\n                0x3DA1F13DDEF2B8B5A46CD543CE56C0A90B8B3B0D6D43DEC95836A5FD2BACD6AA8F692601F870CF22E05DDA5E83F460B,  # noqa: E501\n                0x18D64F3C0E9785365CBDB375795454A8A4FA26F30B9C4F6E33CA078EB5C29B7AEA478B076C619BC1ED22B14C95569B2D,  # noqa: E501\n            ),\n            id=\"bls_g1mul_(2**256-1*P1)\",\n        ),\n        pytest.param(\n            Spec.P1 + Scalar(Spec.Q - 1),\n            -Spec.P1,  # negated P1\n            id=\"bls_g1mul_(q-1*P1)\",\n        ),\n        pytest.param(\n            Spec.P1 + Scalar(Spec.Q),\n            Spec.INF_G1,\n            id=\"bls_g1mul_(q*P1)\",\n        ),\n        pytest.param(\n            Spec.P1 + Scalar(Spec.Q + 1),\n            Spec.P1,\n            id=\"bls_g1mul_(q+1*P1)\",\n        ),\n        pytest.param(\n            Spec.P1 + Scalar(2 * Spec.Q),\n            Spec.INF_G1,\n            id=\"bls_g1mul_(2q*P1)\",\n        ),\n        pytest.param(\n            Spec.P1 + Scalar((2**256 // Spec.Q) * Spec.Q),\n            Spec.INF_G1,\n            id=\"bls_g1mul_(Nq*P1)\",\n        ),\n    ],\n)\ndef test_valid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1MUL precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1mul.test_invalid","title":"test_invalid(state_test, pre, post, tx)","text":"

    Negative tests for the BLS12_G1MUL precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py
    @pytest.mark.parametrize(\n    \"input\",\n    vectors_from_file(\"fail-mul_G1_bls.json\")\n    + [\n        pytest.param(\n            PointG1(0, 1) + Scalar(0),\n            id=\"invalid_point_1\",\n        ),\n        pytest.param(\n            PointG1(Spec.P1.x, Spec.P1.y - 1) + Scalar(0),\n            id=\"invalid_point_2\",\n        ),\n        pytest.param(\n            PointG1(Spec.P1.x, Spec.P1.y + 1) + Scalar(0),\n            id=\"invalid_point_3\",\n        ),\n        pytest.param(\n            PointG1(Spec.P1.x, Spec.P1.x) + Scalar(0),\n            id=\"invalid_point_4\",\n        ),\n        pytest.param(\n            b\"\\x80\" + bytes(Spec.INF_G1)[1:] + Scalar(0),\n            id=\"invalid_encoding\",\n        ),\n        pytest.param(\n            (Spec.INF_G1 + Scalar(0))[:-1],\n            id=\"input_too_short\",\n        ),\n        pytest.param(\n            b\"\\x00\" + (Spec.INF_G1 + Scalar(0)),\n            id=\"input_too_long\",\n        ),\n        pytest.param(\n            b\"\",\n            id=\"zero_length_input\",\n        ),\n        pytest.param(\n            Spec.P1_NOT_IN_SUBGROUP + Scalar(1),\n            id=\"bls_g1mul_not_in_subgroup_1\",\n        ),\n        pytest.param(\n            Spec.P1_NOT_IN_SUBGROUP_TIMES_2 + Scalar(1),\n            id=\"bls_g1mul_not_in_subgroup_2\",\n        ),\n        pytest.param(\n            Spec.P1_NOT_IN_SUBGROUP_TIMES_2 + Scalar(Spec.Q),\n            id=\"bls_g1mul_not_in_subgroup_times_q\",\n        ),\n        pytest.param(\n            Spec.P1_NOT_IN_SUBGROUP + Scalar(Spec.Q),\n            id=\"bls_g1mul_not_in_subgroup_times_q_2\",\n        ),\n        pytest.param(\n            Spec.G1 + Spec.G1,\n            id=\"bls_g1_add_input_invalid_length\",\n        ),\n        pytest.param(\n            Spec.G2 + Spec.G2,\n            id=\"bls_g2_add_input_invalid_length\",\n        ),\n        pytest.param(\n            Spec.G1,\n            id=\"bls_g1_truncated_input\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\ndef test_invalid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Negative tests for the BLS12_G1MUL precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1mul.test_gas","title":"test_gas(state_test, pre, post, tx)","text":"

    Test the BLS12_G1MUL precompile gas requirements.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py
    @pytest.mark.parametrize(\n    \"input,expected_output,precompile_gas_modifier\",\n    [\n        pytest.param(\n            Spec.INF_G1 + Scalar(0),\n            Spec.INF_G1,\n            1,\n            id=\"extra_gas\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + Scalar(0),\n            Spec.INVALID,\n            -1,\n            id=\"insufficient_gas\",\n        ),\n    ],\n)\ndef test_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1MUL precompile gas requirements.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1mul.test_call_types","title":"test_call_types(state_test, pre, post, tx)","text":"

    Test the BLS12_G1MUL precompile using different call types.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.STATICCALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"input,expected_output\",\n    [\n        pytest.param(\n            Spec.INF_G1 + Scalar(0),\n            Spec.INF_G1,\n            id=\"bls_g1mul_(0*inf=inf)\",\n        ),\n    ],\n)\ndef test_call_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1MUL precompile using different call types.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/index/test_cases/","title":"Test Bls12 G1mul - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py:

    test_valid[fork_Prague-blockchain_test-bls_g1mul_(g1+g1=2*g1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(p1+p1=2*p1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(1*g1=g1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(1*p1=p1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(0*g1=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(0*p1=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(x*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_random*g1-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_random*p1-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_random*g1_unnormalized_scalar-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_random*p1_unnormalized_scalar-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(0*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(2**256-1*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(2**256-1*P1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(q-1*P1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(q*P1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(q+1*P1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(2q*P1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(Nq*P1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(g1+g1=2*g1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(p1+p1=2*p1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(1*g1=g1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(1*p1=p1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(0*g1=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(0*p1=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(x*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_random*g1-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_random*p1-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_random*g1_unnormalized_scalar-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_random*p1_unnormalized_scalar-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(0*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(2**256-1*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(2**256-1*P1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(q-1*P1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(q*P1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(q+1*P1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(2q*P1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(Nq*P1)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(g1+g1=2*g1)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(p1+p1=2*p1)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(1*g1=g1)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(1*p1=p1)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(0*g1=inf)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(0*p1=inf)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(x*inf=inf)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_random*g1-]\ntest_valid[fork_Prague-state_test-bls_g1mul_random*p1-]\ntest_valid[fork_Prague-state_test-bls_g1mul_random*g1_unnormalized_scalar-]\ntest_valid[fork_Prague-state_test-bls_g1mul_random*p1_unnormalized_scalar-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(0*inf=inf)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(2**256-1*inf=inf)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(2**256-1*P1)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(q-1*P1)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(q*P1)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(q+1*P1)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(2q*P1)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(Nq*P1)-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_empty_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_short_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_large_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_g1_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_1-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_2-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_3-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_4-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding-]\ntest_invalid[fork_Prague-blockchain_test--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_not_in_subgroup_1-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_not_in_subgroup_2-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_not_in_subgroup_times_q-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_not_in_subgroup_times_q_2-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1_add_input_invalid_length-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2_add_input_invalid_length-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1_truncated_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_empty_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_short_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_large_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_g1_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_3-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_4-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test_engine--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_not_in_subgroup_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_not_in_subgroup_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_not_in_subgroup_times_q-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_not_in_subgroup_times_q_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1_add_input_invalid_length-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2_add_input_invalid_length-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1_truncated_input-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_empty_input-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_short_input-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_large_input-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_invalid_field_element-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_point_not_on_curve-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_violate_top_bytes-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_g1_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-state_test--invalid_point_1-]\ntest_invalid[fork_Prague-state_test--invalid_point_2-]\ntest_invalid[fork_Prague-state_test--invalid_point_3-]\ntest_invalid[fork_Prague-state_test--invalid_point_4-]\ntest_invalid[fork_Prague-state_test--invalid_encoding-]\ntest_invalid[fork_Prague-state_test--input_too_short-]\ntest_invalid[fork_Prague-state_test--input_too_long-]\ntest_invalid[fork_Prague-state_test--zero_length_input-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_not_in_subgroup_1-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_not_in_subgroup_2-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_not_in_subgroup_times_q-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_not_in_subgroup_times_q_2-]\ntest_invalid[fork_Prague-state_test--bls_g1_add_input_invalid_length-]\ntest_invalid[fork_Prague-state_test--bls_g2_add_input_invalid_length-]\ntest_invalid[fork_Prague-state_test--bls_g1_truncated_input-]\ntest_gas[fork_Prague-blockchain_test-extra_gas-]\ntest_gas[fork_Prague-blockchain_test-insufficient_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-extra_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-insufficient_gas-]\ntest_gas[fork_Prague-state_test-extra_gas-]\ntest_gas[fork_Prague-state_test-insufficient_gas-]\ntest_call_types[fork_Prague-blockchain_test-bls_g1mul_(0*inf=inf)-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test-bls_g1mul_(0*inf=inf)-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test-bls_g1mul_(0*inf=inf)-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-blockchain_test_engine-bls_g1mul_(0*inf=inf)-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-bls_g1mul_(0*inf=inf)-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-bls_g1mul_(0*inf=inf)-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-state_test-bls_g1mul_(0*inf=inf)-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-state_test-bls_g1mul_(0*inf=inf)-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-state_test-bls_g1mul_(0*inf=inf)-call_opcode_CALLCODE-]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/","title":"Test Bls12 G2add","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests BLS12_G2ADD precompile of EIP-2537: Precompile for BLS12-381 curve operations

    Tests BLS12_G2ADD precompile of EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2add.test_valid","title":"test_valid(state_test, pre, post, tx)","text":"

    Test the BLS12_G2ADD precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py
    @pytest.mark.parametrize(\n    \"input,expected_output\",\n    vectors_from_file(\"add_G2_bls.json\")\n    + [\n        pytest.param(\n            Spec.P2_NOT_IN_SUBGROUP + Spec.P2_NOT_IN_SUBGROUP,\n            Spec.P2_NOT_IN_SUBGROUP_TIMES_2,\n            id=\"not_in_subgroup\",\n        ),\n    ],\n)\ndef test_valid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G2ADD precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2add.test_invalid","title":"test_invalid(state_test, pre, post, tx)","text":"

    Negative tests for the BLS12_G2ADD precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py
    @pytest.mark.parametrize(\n    \"input\",\n    vectors_from_file(\"fail-add_G2_bls.json\")\n    + [\n        pytest.param(\n            PointG2((1, 0), (0, 0)) + Spec.INF_G2,\n            id=\"invalid_point_a_1\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (1, 0)) + Spec.INF_G2,\n            id=\"invalid_point_a_2\",\n        ),\n        pytest.param(\n            PointG2((0, 1), (0, 0)) + Spec.INF_G2,\n            id=\"invalid_point_a_3\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (0, 1)) + Spec.INF_G2,\n            id=\"invalid_point_a_4\",\n        ),\n        pytest.param(\n            PointG2(Spec.P2.x, (Spec.P2.y[0], Spec.P2.y[1] - 1)) + Spec.P2,\n            id=\"invalid_point_a_5\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + PointG2((1, 0), (0, 0)),\n            id=\"invalid_point_b_1\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + PointG2((0, 0), (1, 0)),\n            id=\"invalid_point_b_2\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + PointG2((0, 1), (0, 0)),\n            id=\"invalid_point_b_3\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + PointG2((0, 0), (0, 1)),\n            id=\"invalid_point_b_4\",\n        ),\n        pytest.param(\n            Spec.P2 + PointG2(Spec.P2.x, (Spec.P2.y[0], Spec.P2.y[1] - 1)),\n            id=\"invalid_point_b_5\",\n        ),\n        pytest.param(\n            PointG2((Spec.P, 0), (0, 0)) + Spec.INF_G2,\n            id=\"a_x_1_equal_to_p\",\n        ),\n        pytest.param(\n            PointG2((0, Spec.P), (0, 0)) + Spec.INF_G2,\n            id=\"a_x_2_equal_to_p\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (Spec.P, 0)) + Spec.INF_G2,\n            id=\"a_y_1_equal_to_p\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (0, Spec.P)) + Spec.INF_G2,\n            id=\"a_y_2_equal_to_p\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + PointG2((Spec.P, 0), (0, 0)),\n            id=\"b_x_1_equal_to_p\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + PointG2((0, Spec.P), (0, 0)),\n            id=\"b_x_2_equal_to_p\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + PointG2((0, 0), (Spec.P, 0)),\n            id=\"b_y_1_equal_to_p\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + PointG2((0, 0), (0, Spec.P)),\n            id=\"b_y_2_equal_to_p\",\n        ),\n        pytest.param(\n            b\"\\x80\" + bytes(Spec.INF_G2)[1:] + Spec.INF_G2,\n            id=\"invalid_encoding_a\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + b\"\\x80\" + bytes(Spec.INF_G2)[1:],\n            id=\"invalid_encoding_b\",\n        ),\n        pytest.param(\n            (Spec.INF_G2 + Spec.INF_G2)[:-1],\n            id=\"input_too_short\",\n        ),\n        pytest.param(\n            b\"\\x00\" + (Spec.INF_G2 + Spec.INF_G2),\n            id=\"input_too_long\",\n        ),\n        pytest.param(\n            b\"\",\n            id=\"zero_length_input\",\n        ),\n        pytest.param(\n            Spec.G2,\n            id=\"only_one_point\",\n        ),\n        pytest.param(\n            Spec.G1 + Spec.G1,\n            id=\"g1_points\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\ndef test_invalid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Negative tests for the BLS12_G2ADD precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2add.test_gas","title":"test_gas(state_test, pre, post, tx)","text":"

    Test the BLS12_G2ADD precompile gas requirements.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py
    @pytest.mark.parametrize(\n    \"input,expected_output,precompile_gas_modifier\",\n    [\n        pytest.param(\n            Spec.INF_G2 + Spec.INF_G2,\n            Spec.INF_G2,\n            1,\n            id=\"extra_gas\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + Spec.INF_G2,\n            Spec.INVALID,\n            -1,\n            id=\"insufficient_gas\",\n        ),\n    ],\n)\ndef test_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G2ADD precompile gas requirements.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2add.test_call_types","title":"test_call_types(state_test, pre, post, tx)","text":"

    Test the BLS12_G2ADD precompile using different call types.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.STATICCALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"input,expected_output\",\n    [\n        pytest.param(\n            Spec.INF_G2 + Spec.INF_G2,\n            Spec.INF_G2,\n            id=\"inf_plus_inf\",\n        ),\n    ],\n)\ndef test_call_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G2ADD precompile using different call types.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/index/test_cases/","title":"Test Bls12 G2add - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py:

    test_valid[fork_Prague-blockchain_test-bls_g2add_g2+p2-]\ntest_valid[fork_Prague-blockchain_test-bls_g2add_p2+g2-]\ntest_valid[fork_Prague-blockchain_test-bls_g2add_g2_wrong_order+g2-]\ntest_valid[fork_Prague-blockchain_test-bls_g2add_(g2+0=g2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2add_(p2+0=p2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2add_(g2-g2=0)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2add_(p2-p2=0)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2add_(g2+g2=2*g2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2add_(p2+p2=2*p2)-]\ntest_valid[fork_Prague-blockchain_test-not_in_subgroup-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2add_g2+p2-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2add_p2+g2-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2add_g2_wrong_order+g2-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2add_(g2+0=g2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2add_(p2+0=p2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2add_(g2-g2=0)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2add_(p2-p2=0)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2add_(g2+g2=2*g2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2add_(p2+p2=2*p2)-]\ntest_valid[fork_Prague-blockchain_test_engine-not_in_subgroup-]\ntest_valid[fork_Prague-state_test-bls_g2add_g2+p2-]\ntest_valid[fork_Prague-state_test-bls_g2add_p2+g2-]\ntest_valid[fork_Prague-state_test-bls_g2add_g2_wrong_order+g2-]\ntest_valid[fork_Prague-state_test-bls_g2add_(g2+0=g2)-]\ntest_valid[fork_Prague-state_test-bls_g2add_(p2+0=p2)-]\ntest_valid[fork_Prague-state_test-bls_g2add_(g2-g2=0)-]\ntest_valid[fork_Prague-state_test-bls_g2add_(p2-p2=0)-]\ntest_valid[fork_Prague-state_test-bls_g2add_(g2+g2=2*g2)-]\ntest_valid[fork_Prague-state_test-bls_g2add_(p2+p2=2*p2)-]\ntest_valid[fork_Prague-state_test-not_in_subgroup-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2add_empty_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2add_short_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2add_long_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2add_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2add_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2add_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_1-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_2-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_3-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_4-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_5-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_b_1-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_b_2-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_b_3-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_b_4-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_b_5-]\ntest_invalid[fork_Prague-blockchain_test--a_x_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--a_x_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--a_y_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--a_y_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--b_x_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--b_x_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--b_y_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--b_y_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding_a-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding_b-]\ntest_invalid[fork_Prague-blockchain_test--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test--only_one_point-]\ntest_invalid[fork_Prague-blockchain_test--g1_points-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2add_empty_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2add_short_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2add_long_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2add_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2add_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2add_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_3-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_4-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_5-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_b_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_b_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_b_3-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_b_4-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_b_5-]\ntest_invalid[fork_Prague-blockchain_test_engine--a_x_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--a_x_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--a_y_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--a_y_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--b_x_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--b_x_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--b_y_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--b_y_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding_a-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding_b-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test_engine--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--only_one_point-]\ntest_invalid[fork_Prague-blockchain_test_engine--g1_points-]\ntest_invalid[fork_Prague-state_test--bls_g2add_empty_input-]\ntest_invalid[fork_Prague-state_test--bls_g2add_short_input-]\ntest_invalid[fork_Prague-state_test--bls_g2add_long_input-]\ntest_invalid[fork_Prague-state_test--bls_g2add_point_not_on_curve-]\ntest_invalid[fork_Prague-state_test--bls_g2add_invalid_field_element-]\ntest_invalid[fork_Prague-state_test--bls_g2add_violate_top_bytes-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_1-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_2-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_3-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_4-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_5-]\ntest_invalid[fork_Prague-state_test--invalid_point_b_1-]\ntest_invalid[fork_Prague-state_test--invalid_point_b_2-]\ntest_invalid[fork_Prague-state_test--invalid_point_b_3-]\ntest_invalid[fork_Prague-state_test--invalid_point_b_4-]\ntest_invalid[fork_Prague-state_test--invalid_point_b_5-]\ntest_invalid[fork_Prague-state_test--a_x_1_equal_to_p-]\ntest_invalid[fork_Prague-state_test--a_x_2_equal_to_p-]\ntest_invalid[fork_Prague-state_test--a_y_1_equal_to_p-]\ntest_invalid[fork_Prague-state_test--a_y_2_equal_to_p-]\ntest_invalid[fork_Prague-state_test--b_x_1_equal_to_p-]\ntest_invalid[fork_Prague-state_test--b_x_2_equal_to_p-]\ntest_invalid[fork_Prague-state_test--b_y_1_equal_to_p-]\ntest_invalid[fork_Prague-state_test--b_y_2_equal_to_p-]\ntest_invalid[fork_Prague-state_test--invalid_encoding_a-]\ntest_invalid[fork_Prague-state_test--invalid_encoding_b-]\ntest_invalid[fork_Prague-state_test--input_too_short-]\ntest_invalid[fork_Prague-state_test--input_too_long-]\ntest_invalid[fork_Prague-state_test--zero_length_input-]\ntest_invalid[fork_Prague-state_test--only_one_point-]\ntest_invalid[fork_Prague-state_test--g1_points-]\ntest_gas[fork_Prague-blockchain_test-extra_gas-]\ntest_gas[fork_Prague-blockchain_test-insufficient_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-extra_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-insufficient_gas-]\ntest_gas[fork_Prague-state_test-extra_gas-]\ntest_gas[fork_Prague-state_test-insufficient_gas-]\ntest_call_types[fork_Prague-blockchain_test-inf_plus_inf-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test-inf_plus_inf-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test-inf_plus_inf-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_plus_inf-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_plus_inf-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_plus_inf-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-state_test-inf_plus_inf-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-state_test-inf_plus_inf-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-state_test-inf_plus_inf-call_opcode_CALLCODE-]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm/","title":"Test Bls12 G2msm","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests BLS12_G2MSM precompile of EIP-2537: Precompile for BLS12-381 curve operations

    Tests BLS12_G2MSM precompile of EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2msm.test_valid","title":"test_valid(state_test, pre, post, tx)","text":"

    Test the BLS12_G2MSM precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py
    @pytest.mark.parametrize(\"input,expected_output\", vectors_from_file(\"multiexp_G2_bls.json\"))\ndef test_valid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G2MSM precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2msm.test_invalid","title":"test_invalid(state_test, pre, post, tx)","text":"

    Negative tests for the BLS12_G2MSM precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py
    @pytest.mark.parametrize(\n    \"input\",\n    vectors_from_file(\"fail-multiexp_G2_bls.json\")\n    + [\n        pytest.param(\n            PointG2((1, 0), (0, 0)) + Scalar(0),\n            id=\"invalid_point_a_1\",\n        ),\n        pytest.param(\n            PointG2((0, 1), (0, 0)) + Scalar(0),\n            id=\"invalid_point_a_2\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (1, 0)) + Scalar(0),\n            id=\"invalid_point_a_3\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (0, 1)) + Scalar(0),\n            id=\"invalid_point_a_4\",\n        ),\n        pytest.param(\n            PointG2((Spec.P, 0), (0, 0)) + Scalar(0),\n            id=\"x_1_equal_to_p\",\n        ),\n        pytest.param(\n            PointG2((0, Spec.P), (0, 0)) + Scalar(0),\n            id=\"x_2_equal_to_p\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (Spec.P, 0)) + Scalar(0),\n            id=\"y_1_equal_to_p\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (0, Spec.P)) + Scalar(0),\n            id=\"y_2_equal_to_p\",\n        ),\n        pytest.param(\n            b\"\\x80\" + bytes(Spec.INF_G2)[1:] + Scalar(0),\n            id=\"invalid_encoding\",\n        ),\n        pytest.param(\n            Spec.P2_NOT_IN_SUBGROUP + Scalar(1),\n            id=\"bls_g2mul_not_in_subgroup\",\n        ),\n        pytest.param(\n            Spec.G2,\n            id=\"bls_g2_truncated_input\",\n        ),\n        # Input length tests can be found in ./test_bls12_variable_length_input_contracts.py\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\ndef test_invalid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Negative tests for the BLS12_G2MSM precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2msm.test_call_types","title":"test_call_types(state_test, pre, post, tx)","text":"

    Test the BLS12_G2MSM precompile using different call types.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.STATICCALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"input,expected_output\",\n    [\n        pytest.param(\n            Spec.INF_G2 + Scalar(0),\n            Spec.INF_G2,\n            id=\"inf_times_zero\",\n        ),\n    ],\n)\ndef test_call_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G2MSM precompile using different call types.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm/index/test_cases/","title":"Test Bls12 G2msm - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py:

    test_valid[fork_Prague-blockchain_test-bls_g2multiexp_(g2+g2=2*g2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2multiexp_(p2+p2=2*p2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2multiexp_(1*g2=g2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2multiexp_(1*p2=p2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2multiexp_(0*g2=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2multiexp_(0*p2=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2multiexp_(x*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2multiexp_(2g2+inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2multiexp_(2p2+inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_(inf+inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2multiexp_(2g2+2p2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2multiexp_multiple-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_(g2+g2=2*g2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_(p2+p2=2*p2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_(1*g2=g2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_(1*p2=p2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_(0*g2=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_(0*p2=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_(x*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_(2g2+inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_(2p2+inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(inf+inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_(2g2+2p2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_multiple-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_(g2+g2=2*g2)-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_(p2+p2=2*p2)-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_(1*g2=g2)-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_(1*p2=p2)-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_(0*g2=inf)-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_(0*p2=inf)-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_(x*inf=inf)-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_(2g2+inf)-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_(2p2+inf)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(inf+inf)-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_(2g2+2p2)-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_multiple-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2multiexp_empty_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2multiexp_short_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2multiexp_long_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2multiexp_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2multiexp_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2multiexp_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test--bls_pairing_g2_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_1-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_2-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_3-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_4-]\ntest_invalid[fork_Prague-blockchain_test--x_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--x_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--y_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--y_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_not_in_subgroup-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2_truncated_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2multiexp_empty_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2multiexp_short_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2multiexp_long_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2multiexp_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2multiexp_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2multiexp_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_pairing_g2_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_3-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_4-]\ntest_invalid[fork_Prague-blockchain_test_engine--x_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--x_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--y_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--y_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_not_in_subgroup-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2_truncated_input-]\ntest_invalid[fork_Prague-state_test--bls_g2multiexp_empty_input-]\ntest_invalid[fork_Prague-state_test--bls_g2multiexp_short_input-]\ntest_invalid[fork_Prague-state_test--bls_g2multiexp_long_input-]\ntest_invalid[fork_Prague-state_test--bls_g2multiexp_violate_top_bytes-]\ntest_invalid[fork_Prague-state_test--bls_g2multiexp_invalid_field_element-]\ntest_invalid[fork_Prague-state_test--bls_g2multiexp_point_not_on_curve-]\ntest_invalid[fork_Prague-state_test--bls_pairing_g2_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_1-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_2-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_3-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_4-]\ntest_invalid[fork_Prague-state_test--x_1_equal_to_p-]\ntest_invalid[fork_Prague-state_test--x_2_equal_to_p-]\ntest_invalid[fork_Prague-state_test--y_1_equal_to_p-]\ntest_invalid[fork_Prague-state_test--y_2_equal_to_p-]\ntest_invalid[fork_Prague-state_test--invalid_encoding-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_not_in_subgroup-]\ntest_invalid[fork_Prague-state_test--bls_g2_truncated_input-]\ntest_call_types[fork_Prague-blockchain_test-inf_times_zero-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test-inf_times_zero-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test-inf_times_zero-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_times_zero-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_times_zero-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_times_zero-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-state_test-inf_times_zero-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-state_test-inf_times_zero-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-state_test-inf_times_zero-call_opcode_CALLCODE-]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/","title":"Test Bls12 G2mul","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests BLS12_G2MUL precompile of EIP-2537: Precompile for BLS12-381 curve operations

    Tests BLS12_G2MUL precompile of EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2mul.test_valid","title":"test_valid(state_test, pre, post, tx)","text":"

    Test the BLS12_G2MUL precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py
    @pytest.mark.parametrize(\n    \"input,expected_output\",\n    vectors_from_file(\"mul_G2_bls.json\")\n    + [\n        pytest.param(\n            Spec.INF_G2 + Scalar(0),\n            Spec.INF_G2,\n            id=\"bls_g2mul_(0*inf=inf)\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + Scalar(2**256 - 1),\n            Spec.INF_G2,\n            id=\"bls_g2mul_(2**256-1*inf=inf)\",\n        ),\n        pytest.param(\n            Spec.P2 + Scalar(2**256 - 1),\n            PointG2(\n                (\n                    0x2663E1C3431E174CA80E5A84489569462E13B52DA27E7720AF5567941603475F1F9BC0102E13B92A0A21D96B94E9B22,  # noqa: E501\n                    0x6A80D056486365020A6B53E2680B2D72D8A93561FC2F72B960936BB16F509C1A39C4E4174A7C9219E3D7EF130317C05,  # noqa: E501\n                ),\n                (\n                    0xC49EAD39E9EB7E36E8BC25824299661D5B6D0E200BBC527ECCB946134726BF5DBD861E8E6EC946260B82ED26AFE15FB,  # noqa: E501\n                    0x5397DAD1357CF8333189821B737172B18099ECF7EE8BDB4B3F05EBCCDF40E1782A6C71436D5ACE0843D7F361CBC6DB2,  # noqa: E501\n                ),\n            ),\n            id=\"bls_g2mul_(2**256-1*P2)\",\n        ),\n        pytest.param(\n            Spec.P2 + Scalar(Spec.Q - 1),\n            -Spec.P2,  # negated P2\n            id=\"bls_g2mul_(q-1*P2)\",\n        ),\n        pytest.param(\n            Spec.P2 + Scalar(Spec.Q),\n            Spec.INF_G2,\n            id=\"bls_g2mul_(q*P2)\",\n        ),\n        pytest.param(\n            Spec.G2 + Scalar(Spec.Q),\n            Spec.INF_G2,\n            id=\"bls_g2mul_(q*G2)\",\n        ),\n        pytest.param(\n            Spec.P2 + Scalar(Spec.Q + 1),\n            Spec.P2,\n            id=\"bls_g2mul_(q+1*P2)\",\n        ),\n        pytest.param(\n            Spec.P2 + Scalar(2 * Spec.Q),\n            Spec.INF_G2,\n            id=\"bls_g2mul_(2q*P2)\",\n        ),\n        pytest.param(\n            Spec.P2 + Scalar((2**256 // Spec.Q) * Spec.Q),\n            Spec.INF_G2,\n            id=\"bls_g2mul_(Nq*P2)\",\n        ),\n    ],\n)\ndef test_valid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G2MUL precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2mul.test_invalid","title":"test_invalid(state_test, pre, post, tx)","text":"

    Negative tests for the BLS12_G2MUL precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py
    @pytest.mark.parametrize(\n    \"input\",\n    vectors_from_file(\"fail-mul_G2_bls.json\")\n    + [\n        pytest.param(\n            PointG2((1, 0), (0, 0)) + Scalar(0),\n            id=\"invalid_point_a_1\",\n        ),\n        pytest.param(\n            PointG2((0, 1), (0, 0)) + Scalar(0),\n            id=\"invalid_point_a_2\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (1, 0)) + Scalar(0),\n            id=\"invalid_point_a_3\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (0, 1)) + Scalar(0),\n            id=\"invalid_point_a_4\",\n        ),\n        pytest.param(\n            PointG2((Spec.P, 0), (0, 0)) + Scalar(0),\n            id=\"x_1_equal_to_p\",\n        ),\n        pytest.param(\n            PointG2((0, Spec.P), (0, 0)) + Scalar(0),\n            id=\"x_2_equal_to_p\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (Spec.P, 0)) + Scalar(0),\n            id=\"y_1_equal_to_p\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (0, Spec.P)) + Scalar(0),\n            id=\"y_2_equal_to_p\",\n        ),\n        pytest.param(\n            b\"\\x80\" + bytes(Spec.INF_G2)[1:] + Scalar(0),\n            id=\"invalid_encoding\",\n        ),\n        pytest.param(\n            (Spec.INF_G2 + Scalar(0))[:-1],\n            id=\"input_too_short\",\n        ),\n        pytest.param(\n            b\"\\x00\" + (Spec.INF_G2 + Scalar(0)),\n            id=\"input_too_long\",\n        ),\n        pytest.param(\n            b\"\",\n            id=\"zero_length_input\",\n        ),\n        pytest.param(\n            Spec.P2_NOT_IN_SUBGROUP + Scalar(1),\n            id=\"bls_g2mul_not_in_subgroup\",\n        ),\n        pytest.param(\n            Spec.P2_NOT_IN_SUBGROUP + Scalar(2),\n            id=\"bls_g2mul_not_in_subgroup_times_2\",\n        ),\n        pytest.param(\n            Spec.P2_NOT_IN_SUBGROUP + Scalar(Spec.Q),\n            id=\"bls_g2mul_not_in_subgroup_times_q\",\n        ),\n        pytest.param(\n            Spec.G1 + Spec.G1,\n            id=\"bls_g1_add_input_invalid_length\",\n        ),\n        pytest.param(\n            Spec.G2 + Spec.G2,\n            id=\"bls_g2_add_input_invalid_length\",\n        ),\n        pytest.param(\n            Spec.G2,\n            id=\"bls_g2_truncated_input\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\ndef test_invalid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Negative tests for the BLS12_G2MUL precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2mul.test_gas","title":"test_gas(state_test, pre, post, tx)","text":"

    Test the BLS12_G1MUL precompile gas requirements.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py
    @pytest.mark.parametrize(\n    \"input,expected_output,precompile_gas_modifier\",\n    [\n        pytest.param(\n            Spec.INF_G2 + Scalar(0),\n            Spec.INF_G2,\n            1,\n            id=\"extra_gas\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + Scalar(0),\n            Spec.INVALID,\n            -1,\n            id=\"insufficient_gas\",\n        ),\n    ],\n)\ndef test_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1MUL precompile gas requirements.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2mul.test_call_types","title":"test_call_types(state_test, pre, post, tx)","text":"

    Test the BLS12_G2MUL using different call types.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.STATICCALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"input,expected_output\",\n    [\n        pytest.param(\n            Spec.INF_G2 + Scalar(0),\n            Spec.INF_G2,\n            id=\"bls_g2mul_(0*inf=inf)\",\n        ),\n    ],\n)\ndef test_call_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G2MUL using different call types.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/index/test_cases/","title":"Test Bls12 G2mul - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py:

    test_valid[fork_Prague-blockchain_test-bls_g2mul_(g2+g2=2*g2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(p2+p2=2*p2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(1*g2=g2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(1*p2=p2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(0*g2=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(0*p2=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(x*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_random*g2-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_random*p2-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_random*g2_unnormalized_scalar-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_random*p2_unnormalized_scalar-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(0*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(2**256-1*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(2**256-1*P2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(q-1*P2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(q*P2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(q*G2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(q+1*P2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(2q*P2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(Nq*P2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(g2+g2=2*g2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(p2+p2=2*p2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(1*g2=g2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(1*p2=p2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(0*g2=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(0*p2=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(x*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_random*g2-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_random*p2-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_random*g2_unnormalized_scalar-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_random*p2_unnormalized_scalar-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(0*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(2**256-1*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(2**256-1*P2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(q-1*P2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(q*P2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(q*G2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(q+1*P2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(2q*P2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(Nq*P2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(g2+g2=2*g2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(p2+p2=2*p2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(1*g2=g2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(1*p2=p2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(0*g2=inf)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(0*p2=inf)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(x*inf=inf)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_random*g2-]\ntest_valid[fork_Prague-state_test-bls_g2mul_random*p2-]\ntest_valid[fork_Prague-state_test-bls_g2mul_random*g2_unnormalized_scalar-]\ntest_valid[fork_Prague-state_test-bls_g2mul_random*p2_unnormalized_scalar-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(0*inf=inf)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(2**256-1*inf=inf)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(2**256-1*P2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(q-1*P2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(q*P2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(q*G2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(q+1*P2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(2q*P2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(Nq*P2)-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_empty_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_short_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_large_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_g2_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_1-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_2-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_3-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_4-]\ntest_invalid[fork_Prague-blockchain_test--x_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--x_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--y_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--y_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding-]\ntest_invalid[fork_Prague-blockchain_test--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_not_in_subgroup-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_not_in_subgroup_times_2-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_not_in_subgroup_times_q-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1_add_input_invalid_length-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2_add_input_invalid_length-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2_truncated_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_empty_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_short_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_large_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_g2_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_3-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_4-]\ntest_invalid[fork_Prague-blockchain_test_engine--x_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--x_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--y_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--y_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test_engine--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_not_in_subgroup-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_not_in_subgroup_times_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_not_in_subgroup_times_q-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1_add_input_invalid_length-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2_add_input_invalid_length-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2_truncated_input-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_empty_input-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_short_input-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_large_input-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_invalid_field_element-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_point_not_on_curve-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_violate_top_bytes-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_g2_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_1-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_2-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_3-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_4-]\ntest_invalid[fork_Prague-state_test--x_1_equal_to_p-]\ntest_invalid[fork_Prague-state_test--x_2_equal_to_p-]\ntest_invalid[fork_Prague-state_test--y_1_equal_to_p-]\ntest_invalid[fork_Prague-state_test--y_2_equal_to_p-]\ntest_invalid[fork_Prague-state_test--invalid_encoding-]\ntest_invalid[fork_Prague-state_test--input_too_short-]\ntest_invalid[fork_Prague-state_test--input_too_long-]\ntest_invalid[fork_Prague-state_test--zero_length_input-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_not_in_subgroup-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_not_in_subgroup_times_2-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_not_in_subgroup_times_q-]\ntest_invalid[fork_Prague-state_test--bls_g1_add_input_invalid_length-]\ntest_invalid[fork_Prague-state_test--bls_g2_add_input_invalid_length-]\ntest_invalid[fork_Prague-state_test--bls_g2_truncated_input-]\ntest_gas[fork_Prague-blockchain_test-extra_gas-]\ntest_gas[fork_Prague-blockchain_test-insufficient_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-extra_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-insufficient_gas-]\ntest_gas[fork_Prague-state_test-extra_gas-]\ntest_gas[fork_Prague-state_test-insufficient_gas-]\ntest_call_types[fork_Prague-blockchain_test-bls_g2mul_(0*inf=inf)-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test-bls_g2mul_(0*inf=inf)-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test-bls_g2mul_(0*inf=inf)-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-blockchain_test_engine-bls_g2mul_(0*inf=inf)-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-bls_g2mul_(0*inf=inf)-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-bls_g2mul_(0*inf=inf)-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-state_test-bls_g2mul_(0*inf=inf)-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-state_test-bls_g2mul_(0*inf=inf)-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-state_test-bls_g2mul_(0*inf=inf)-call_opcode_CALLCODE-]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/","title":"Test Bls12 Map Fp2 To G2","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests BLS12_MAP_FP2_TO_G2 precompile of EIP-2537: Precompile for BLS12-381 curve operations

    Tests BLS12_MAP_FP2_TO_G2 precompile of EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_map_fp2_to_g2.test_valid","title":"test_valid(state_test, pre, post, tx)","text":"

    Test the BLS12_MAP_FP2_TO_G2 precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py
    @pytest.mark.parametrize(\n    \"input,expected_output\",\n    vectors_from_file(\"map_fp2_to_G2_bls.json\")\n    + [\n        pytest.param(\n            FP2((0, 0)),\n            G2_POINT_ZERO_FP,\n            id=\"fp_0\",\n        ),\n        pytest.param(\n            FP2((Spec.P - 1, Spec.P - 1)),\n            PointG2(\n                (\n                    0x9BF1B857D8C15F317F649ACCFA7023EF21CFC03059936B83B487DB476FF9D2FE64C6147140A5F0A436B875F51FFDF07,  # noqa: E501\n                    0xBB10E09BDF236CB2951BD7BCC044E1B9A6BB5FD4B2019DCC20FFDE851D52D4F0D1A32382AF9D7DA2C5BA27E0F1C69E6,  # noqa: E501\n                ),\n                (\n                    0xDD416A927AB1C15490AB753C973FD377387B12EFCBE6BED2BF768B9DC95A0CA04D1A8F0F30DBC078A2350A1F823CFD3,  # noqa: E501\n                    0x171565CE4FCD047B35EA6BCEE4EF6FDBFEC8CC73B7ACDB3A1EC97A776E13ACDFEFFC21ED6648E3F0EEC53DDB6C20FB61,  # noqa: E501\n                ),\n            ),\n            id=\"fp_p_minus_1\",\n        ),\n    ],\n)\ndef test_valid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_MAP_FP2_TO_G2 precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_map_fp2_to_g2.test_invalid","title":"test_invalid(state_test, pre, post, tx)","text":"

    Negative tests for the BLS12_MAP_FP_TO_G2 precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py
    @pytest.mark.parametrize(\n    \"input\",\n    vectors_from_file(\"fail-map_fp2_to_G2_bls.json\")\n    + [\n        pytest.param(b\"\\x80\" + bytes(FP2((0, 0)))[1:], id=\"invalid_encoding\"),\n        pytest.param(bytes(FP2((0, 0)))[1:], id=\"input_too_short\"),\n        pytest.param(b\"\\x00\" + FP2((0, 0)), id=\"input_too_long\"),\n        pytest.param(b\"\", id=\"zero_length_input\"),\n        pytest.param(FP2((Spec.P, 0)), id=\"fq_eq_q\"),\n        pytest.param(FP2((0, Spec.P)), id=\"fq_eq_q_2\"),\n        pytest.param(FP2((2**512 - 1, 0)), id=\"fq_eq_2_512_minus_1\"),\n        pytest.param(FP2((0, 2**512 - 1)), id=\"fq_eq_2_512_minus_1_2\"),\n        pytest.param(Spec.G2, id=\"g2_input\"),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\ndef test_invalid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Negative tests for the BLS12_MAP_FP_TO_G2 precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_map_fp2_to_g2.test_gas","title":"test_gas(state_test, pre, post, tx)","text":"

    Test the BLS12_MAP_FP_TO_G2 precompile gas requirements.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py
    @pytest.mark.parametrize(\n    \"input,expected_output,precompile_gas_modifier\",\n    [\n        pytest.param(\n            FP2((0, 0)),\n            G2_POINT_ZERO_FP,\n            1,\n            id=\"extra_gas\",\n        ),\n        pytest.param(\n            FP2((0, 0)),\n            Spec.INVALID,\n            -1,\n            id=\"insufficient_gas\",\n        ),\n    ],\n)\ndef test_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_MAP_FP_TO_G2 precompile gas requirements.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_map_fp2_to_g2.test_call_types","title":"test_call_types(state_test, pre, post, tx)","text":"

    Test the BLS12_MAP_FP_TO_G2 precompile using different call types.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.STATICCALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"input,expected_output\",\n    [\n        pytest.param(\n            FP2((0, 0)),\n            G2_POINT_ZERO_FP,\n            id=\"fp_0\",\n        ),\n    ],\n)\ndef test_call_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_MAP_FP_TO_G2 precompile using different call types.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/index/test_cases/","title":"Test Bls12 Map Fp2 To G2 - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py:

    test_valid[fork_Prague-blockchain_test-bls_g2map_-]\ntest_valid[fork_Prague-blockchain_test-bls_g2map_616263-]\ntest_valid[fork_Prague-blockchain_test-bls_g2map_6162636465663031-]\ntest_valid[fork_Prague-blockchain_test-bls_g2map_713132385f717171-]\ntest_valid[fork_Prague-blockchain_test-bls_g2map_613531325f616161-]\ntest_valid[fork_Prague-blockchain_test-fp_0-]\ntest_valid[fork_Prague-blockchain_test-fp_p_minus_1-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2map_-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2map_616263-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2map_6162636465663031-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2map_713132385f717171-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2map_613531325f616161-]\ntest_valid[fork_Prague-blockchain_test_engine-fp_0-]\ntest_valid[fork_Prague-blockchain_test_engine-fp_p_minus_1-]\ntest_valid[fork_Prague-state_test-bls_g2map_-]\ntest_valid[fork_Prague-state_test-bls_g2map_616263-]\ntest_valid[fork_Prague-state_test-bls_g2map_6162636465663031-]\ntest_valid[fork_Prague-state_test-bls_g2map_713132385f717171-]\ntest_valid[fork_Prague-state_test-bls_g2map_613531325f616161-]\ntest_valid[fork_Prague-state_test-fp_0-]\ntest_valid[fork_Prague-state_test-fp_p_minus_1-]\ntest_invalid[fork_Prague-blockchain_test--bls_mapg2_empty_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_mapg2_short_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_mapg2_long_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_mapg2_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test--bls_mapg2_invalid_fq_element-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding-]\ntest_invalid[fork_Prague-blockchain_test--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test--fq_eq_q-]\ntest_invalid[fork_Prague-blockchain_test--fq_eq_q_2-]\ntest_invalid[fork_Prague-blockchain_test--fq_eq_2_512_minus_1-]\ntest_invalid[fork_Prague-blockchain_test--fq_eq_2_512_minus_1_2-]\ntest_invalid[fork_Prague-blockchain_test--g2_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_mapg2_empty_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_mapg2_short_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_mapg2_long_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_mapg2_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_mapg2_invalid_fq_element-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test_engine--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--fq_eq_q-]\ntest_invalid[fork_Prague-blockchain_test_engine--fq_eq_q_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--fq_eq_2_512_minus_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--fq_eq_2_512_minus_1_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--g2_input-]\ntest_invalid[fork_Prague-state_test--bls_mapg2_empty_input-]\ntest_invalid[fork_Prague-state_test--bls_mapg2_short_input-]\ntest_invalid[fork_Prague-state_test--bls_mapg2_long_input-]\ntest_invalid[fork_Prague-state_test--bls_mapg2_top_bytes-]\ntest_invalid[fork_Prague-state_test--bls_mapg2_invalid_fq_element-]\ntest_invalid[fork_Prague-state_test--invalid_encoding-]\ntest_invalid[fork_Prague-state_test--input_too_short-]\ntest_invalid[fork_Prague-state_test--input_too_long-]\ntest_invalid[fork_Prague-state_test--zero_length_input-]\ntest_invalid[fork_Prague-state_test--fq_eq_q-]\ntest_invalid[fork_Prague-state_test--fq_eq_q_2-]\ntest_invalid[fork_Prague-state_test--fq_eq_2_512_minus_1-]\ntest_invalid[fork_Prague-state_test--fq_eq_2_512_minus_1_2-]\ntest_invalid[fork_Prague-state_test--g2_input-]\ntest_gas[fork_Prague-blockchain_test-extra_gas-]\ntest_gas[fork_Prague-blockchain_test-insufficient_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-extra_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-insufficient_gas-]\ntest_gas[fork_Prague-state_test-extra_gas-]\ntest_gas[fork_Prague-state_test-insufficient_gas-]\ntest_call_types[fork_Prague-blockchain_test-fp_0-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test-fp_0-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test-fp_0-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-blockchain_test_engine-fp_0-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-fp_0-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-fp_0-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-state_test-fp_0-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-state_test-fp_0-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-state_test-fp_0-call_opcode_CALLCODE-]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/","title":"Test Bls12 Map Fp To G1","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests BLS12_MAP_FP_TO_G1 precompile of EIP-2537: Precompile for BLS12-381 curve operations

    Tests BLS12_MAP_FP_TO_G1 precompile of EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_map_fp_to_g1.test_valid","title":"test_valid(state_test, pre, post, tx)","text":"

    Test the BLS12_MAP_FP_TO_G1 precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py
    @pytest.mark.parametrize(\n    \"input,expected_output\",\n    vectors_from_file(\"map_fp_to_G1_bls.json\")\n    + [\n        pytest.param(\n            FP(0),\n            G1_POINT_ZERO_FP,\n            id=\"fp_0\",\n        ),\n        pytest.param(\n            FP(Spec.P - 1),\n            PointG1(\n                0x1073311196F8EF19477219CCEE3A48035FF432295AA9419EED45D186027D88B90832E14C4F0E2AA4D15F54D1C3ED0F93,  # noqa: E501\n                0x16B3A3B2E3DDDF6A11459DDAF657FDE21C4F10282A56029D9B55AB3CE1F41E1CF39AD27E0EA35823C7D3250E81FF3D66,  # noqa: E501\n            ),\n            id=\"fp_p_minus_1\",\n        ),\n    ],\n)\ndef test_valid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_MAP_FP_TO_G1 precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_map_fp_to_g1.test_invalid","title":"test_invalid(state_test, pre, post, tx)","text":"

    Negative tests for the BLS12_MAP_FP_TO_G1 precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py
    @pytest.mark.parametrize(\n    \"input\",\n    vectors_from_file(\"fail-map_fp_to_G1_bls.json\")\n    + [\n        pytest.param(b\"\\x80\" + bytes(FP(0))[1:], id=\"invalid_encoding\"),\n        pytest.param(bytes(FP(0))[1:], id=\"input_too_short\"),\n        pytest.param(b\"\\x00\" + FP(0), id=\"input_too_long\"),\n        pytest.param(b\"\", id=\"zero_length_input\"),\n        pytest.param(FP(Spec.P), id=\"fq_eq_q\"),\n        pytest.param(FP(2**512 - 1), id=\"fq_eq_2_512_minus_1\"),\n        pytest.param(Spec.G1, id=\"g1_point_input\"),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\ndef test_invalid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Negative tests for the BLS12_MAP_FP_TO_G1 precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_map_fp_to_g1.test_gas","title":"test_gas(state_test, pre, post, tx)","text":"

    Test the BLS12_MAP_FP_TO_G1 precompile gas requirements.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py
    @pytest.mark.parametrize(\n    \"input,expected_output,precompile_gas_modifier\",\n    [\n        pytest.param(\n            FP(0),\n            G1_POINT_ZERO_FP,\n            1,\n            id=\"extra_gas\",\n        ),\n        pytest.param(\n            FP(0),\n            Spec.INVALID,\n            -1,\n            id=\"insufficient_gas\",\n        ),\n    ],\n)\ndef test_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_MAP_FP_TO_G1 precompile gas requirements.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_map_fp_to_g1.test_call_types","title":"test_call_types(state_test, pre, post, tx)","text":"

    Test the BLS12_MAP_FP_TO_G1 precompile using different call types.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.STATICCALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"input,expected_output\",\n    [\n        pytest.param(\n            FP(0),\n            G1_POINT_ZERO_FP,\n            id=\"fp_0\",\n        ),\n    ],\n)\ndef test_call_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_MAP_FP_TO_G1 precompile using different call types.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/index/test_cases/","title":"Test Bls12 Map Fp To G1 - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py:

    test_valid[fork_Prague-blockchain_test-bls_g1map_-]\ntest_valid[fork_Prague-blockchain_test-bls_g1map_616263-]\ntest_valid[fork_Prague-blockchain_test-bls_g1map_6162636465663031-]\ntest_valid[fork_Prague-blockchain_test-bls_g1map_713132385f717171-]\ntest_valid[fork_Prague-blockchain_test-bls_g1map_613531325f616161-]\ntest_valid[fork_Prague-blockchain_test-fp_0-]\ntest_valid[fork_Prague-blockchain_test-fp_p_minus_1-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1map_-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1map_616263-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1map_6162636465663031-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1map_713132385f717171-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1map_613531325f616161-]\ntest_valid[fork_Prague-blockchain_test_engine-fp_0-]\ntest_valid[fork_Prague-blockchain_test_engine-fp_p_minus_1-]\ntest_valid[fork_Prague-state_test-bls_g1map_-]\ntest_valid[fork_Prague-state_test-bls_g1map_616263-]\ntest_valid[fork_Prague-state_test-bls_g1map_6162636465663031-]\ntest_valid[fork_Prague-state_test-bls_g1map_713132385f717171-]\ntest_valid[fork_Prague-state_test-bls_g1map_613531325f616161-]\ntest_valid[fork_Prague-state_test-fp_0-]\ntest_valid[fork_Prague-state_test-fp_p_minus_1-]\ntest_invalid[fork_Prague-blockchain_test--bls_mapg1_empty_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_mapg1_short_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_mapg1_large_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_mapg1_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test--bls_invalid_fq_element-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding-]\ntest_invalid[fork_Prague-blockchain_test--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test--fq_eq_q-]\ntest_invalid[fork_Prague-blockchain_test--fq_eq_2_512_minus_1-]\ntest_invalid[fork_Prague-blockchain_test--g1_point_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_mapg1_empty_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_mapg1_short_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_mapg1_large_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_mapg1_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_invalid_fq_element-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test_engine--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--fq_eq_q-]\ntest_invalid[fork_Prague-blockchain_test_engine--fq_eq_2_512_minus_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--g1_point_input-]\ntest_invalid[fork_Prague-state_test--bls_mapg1_empty_input-]\ntest_invalid[fork_Prague-state_test--bls_mapg1_short_input-]\ntest_invalid[fork_Prague-state_test--bls_mapg1_large_input-]\ntest_invalid[fork_Prague-state_test--bls_mapg1_top_bytes-]\ntest_invalid[fork_Prague-state_test--bls_invalid_fq_element-]\ntest_invalid[fork_Prague-state_test--invalid_encoding-]\ntest_invalid[fork_Prague-state_test--input_too_short-]\ntest_invalid[fork_Prague-state_test--input_too_long-]\ntest_invalid[fork_Prague-state_test--zero_length_input-]\ntest_invalid[fork_Prague-state_test--fq_eq_q-]\ntest_invalid[fork_Prague-state_test--fq_eq_2_512_minus_1-]\ntest_invalid[fork_Prague-state_test--g1_point_input-]\ntest_gas[fork_Prague-blockchain_test-extra_gas-]\ntest_gas[fork_Prague-blockchain_test-insufficient_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-extra_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-insufficient_gas-]\ntest_gas[fork_Prague-state_test-extra_gas-]\ntest_gas[fork_Prague-state_test-insufficient_gas-]\ntest_call_types[fork_Prague-blockchain_test-fp_0-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test-fp_0-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test-fp_0-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-blockchain_test_engine-fp_0-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-fp_0-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-fp_0-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-state_test-fp_0-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-state_test-fp_0-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-state_test-fp_0-call_opcode_CALLCODE-]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing/","title":"Test Bls12 Pairing","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests BLS12_PAIRING precompile of EIP-2537: Precompile for BLS12-381 curve operations

    Tests BLS12_PAIRING precompile of EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_pairing.test_valid","title":"test_valid(state_test, pre, post, tx)","text":"

    Test the BLS12_PAIRING precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py
    @pytest.mark.parametrize(\n    \"input,expected_output\",\n    vectors_from_file(\"pairing_check_bls.json\")\n    + [\n        pytest.param(\n            Spec.INF_G1 + Spec.INF_G2,\n            Spec.PAIRING_TRUE,\n            id=\"inf_pair\",\n        ),\n        pytest.param(\n            (Spec.INF_G1 + Spec.INF_G2) * 1000,\n            Spec.PAIRING_TRUE,\n            id=\"multi_inf_pair\",\n        ),\n    ],\n)\ndef test_valid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_PAIRING precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_pairing.test_invalid","title":"test_invalid(state_test, pre, post, tx)","text":"

    Negative tests for the BLS12_PAIRING precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py
    @pytest.mark.parametrize(\n    \"input\",\n    vectors_from_file(\"fail-pairing_check_bls.json\")\n    + [\n        pytest.param(\n            PointG1(Spec.P, 0) + Spec.INF_G2,\n            id=\"g1_P_g2_inf_1\",\n        ),\n        pytest.param(\n            PointG1(0, Spec.P) + Spec.INF_G2,\n            id=\"g1_P_g2_inf_2\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + PointG2((Spec.P, 0), (0, 0)),\n            id=\"g1_inf_g2_P_1\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + PointG2((0, Spec.P), (0, 0)),\n            id=\"g1_inf_g2_P_2\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + PointG2((0, 0), (Spec.P, 0)),\n            id=\"g1_inf_g2_P_3\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + PointG2((0, 0), (0, Spec.P)),\n            id=\"g1_inf_g2_P_4\",\n        ),\n        pytest.param(\n            b\"\\x80\" + bytes(Spec.INF_G1)[1:] + Spec.INF_G2,\n            id=\"invalid_encoding_g1\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + b\"\\x80\" + bytes(Spec.INF_G2)[1:],\n            id=\"invalid_encoding_g2\",\n        ),\n        pytest.param(\n            (Spec.INF_G1 + Spec.INF_G2) * 1000 + PointG1(Spec.P, 0) + Spec.INF_G2,\n            id=\"multi_inf_plus_g1_P_g2_inf_1\",\n        ),\n        pytest.param(\n            Spec.P1_NOT_IN_SUBGROUP + Spec.INF_G2,\n            id=\"P1_not_in_subgroup\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + Spec.P2_NOT_IN_SUBGROUP,\n            id=\"P2_not_in_subgroup\",\n        ),\n        # Input length tests can be found in ./test_bls12_variable_length_input_contracts.py\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\ndef test_invalid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Negative tests for the BLS12_PAIRING precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_pairing.test_call_types","title":"test_call_types(state_test, pre, post, tx)","text":"

    Test the BLS12_PAIRING precompile using different call types.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.STATICCALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"input,expected_output\",\n    [\n        pytest.param(\n            Spec.INF_G1 + Spec.INF_G2,\n            Spec.PAIRING_TRUE,\n            id=\"inf_pair\",\n        ),\n    ],\n)\ndef test_call_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_PAIRING precompile using different call types.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing/index/test_cases/","title":"Test Bls12 Pairing - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py:

    test_valid[fork_Prague-blockchain_test-bls_pairing_e(G1,0)=e(0,G2)-]\ntest_valid[fork_Prague-blockchain_test-bls_pairing_non-degeneracy-]\ntest_valid[fork_Prague-blockchain_test-bls_pairing_bilinearity-]\ntest_valid[fork_Prague-blockchain_test-bls_pairing_e(G1,-G2)=e(-G1,G2)-]\ntest_valid[fork_Prague-blockchain_test-bls_pairing_e(aG1,bG2)=e(abG1,G2)-]\ntest_valid[fork_Prague-blockchain_test-bls_pairing_e(aG1,bG2)=e(G1,abG2)-]\ntest_valid[fork_Prague-blockchain_test-inf_pair-]\ntest_valid[fork_Prague-blockchain_test-multi_inf_pair-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_pairing_e(G1,0)=e(0,G2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_pairing_non-degeneracy-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_pairing_bilinearity-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_pairing_e(G1,-G2)=e(-G1,G2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_pairing_e(aG1,bG2)=e(abG1,G2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_pairing_e(aG1,bG2)=e(G1,abG2)-]\ntest_valid[fork_Prague-blockchain_test_engine-inf_pair-]\ntest_valid[fork_Prague-blockchain_test_engine-multi_inf_pair-]\ntest_valid[fork_Prague-state_test-bls_pairing_e(G1,0)=e(0,G2)-]\ntest_valid[fork_Prague-state_test-bls_pairing_non-degeneracy-]\ntest_valid[fork_Prague-state_test-bls_pairing_bilinearity-]\ntest_valid[fork_Prague-state_test-bls_pairing_e(G1,-G2)=e(-G1,G2)-]\ntest_valid[fork_Prague-state_test-bls_pairing_e(aG1,bG2)=e(abG1,G2)-]\ntest_valid[fork_Prague-state_test-bls_pairing_e(aG1,bG2)=e(G1,abG2)-]\ntest_valid[fork_Prague-state_test-inf_pair-]\ntest_valid[fork_Prague-state_test-multi_inf_pair-]\ntest_invalid[fork_Prague-blockchain_test--bls_pairing_empty_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_pairing_missing_data-]\ntest_invalid[fork_Prague-blockchain_test--bls_pairing_extra_data-]\ntest_invalid[fork_Prague-blockchain_test--bls_pairing_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test--bls_pairing_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test--bls_pairing_g1_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test--bls_pairing_g2_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test--bls_pairing_g1_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test--bls_pairing_g2_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test--g1_P_g2_inf_1-]\ntest_invalid[fork_Prague-blockchain_test--g1_P_g2_inf_2-]\ntest_invalid[fork_Prague-blockchain_test--g1_inf_g2_P_1-]\ntest_invalid[fork_Prague-blockchain_test--g1_inf_g2_P_2-]\ntest_invalid[fork_Prague-blockchain_test--g1_inf_g2_P_3-]\ntest_invalid[fork_Prague-blockchain_test--g1_inf_g2_P_4-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding_g1-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding_g2-]\ntest_invalid[fork_Prague-blockchain_test--multi_inf_plus_g1_P_g2_inf_1-]\ntest_invalid[fork_Prague-blockchain_test--P1_not_in_subgroup-]\ntest_invalid[fork_Prague-blockchain_test--P2_not_in_subgroup-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_pairing_empty_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_pairing_missing_data-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_pairing_extra_data-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_pairing_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_pairing_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_pairing_g1_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_pairing_g2_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_pairing_g1_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_pairing_g2_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test_engine--g1_P_g2_inf_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--g1_P_g2_inf_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--g1_inf_g2_P_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--g1_inf_g2_P_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--g1_inf_g2_P_3-]\ntest_invalid[fork_Prague-blockchain_test_engine--g1_inf_g2_P_4-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding_g1-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding_g2-]\ntest_invalid[fork_Prague-blockchain_test_engine--multi_inf_plus_g1_P_g2_inf_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--P1_not_in_subgroup-]\ntest_invalid[fork_Prague-blockchain_test_engine--P2_not_in_subgroup-]\ntest_invalid[fork_Prague-state_test--bls_pairing_empty_input-]\ntest_invalid[fork_Prague-state_test--bls_pairing_missing_data-]\ntest_invalid[fork_Prague-state_test--bls_pairing_extra_data-]\ntest_invalid[fork_Prague-state_test--bls_pairing_top_bytes-]\ntest_invalid[fork_Prague-state_test--bls_pairing_invalid_field_element-]\ntest_invalid[fork_Prague-state_test--bls_pairing_g1_not_on_curve-]\ntest_invalid[fork_Prague-state_test--bls_pairing_g2_not_on_curve-]\ntest_invalid[fork_Prague-state_test--bls_pairing_g1_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-state_test--bls_pairing_g2_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-state_test--g1_P_g2_inf_1-]\ntest_invalid[fork_Prague-state_test--g1_P_g2_inf_2-]\ntest_invalid[fork_Prague-state_test--g1_inf_g2_P_1-]\ntest_invalid[fork_Prague-state_test--g1_inf_g2_P_2-]\ntest_invalid[fork_Prague-state_test--g1_inf_g2_P_3-]\ntest_invalid[fork_Prague-state_test--g1_inf_g2_P_4-]\ntest_invalid[fork_Prague-state_test--invalid_encoding_g1-]\ntest_invalid[fork_Prague-state_test--invalid_encoding_g2-]\ntest_invalid[fork_Prague-state_test--multi_inf_plus_g1_P_g2_inf_1-]\ntest_invalid[fork_Prague-state_test--P1_not_in_subgroup-]\ntest_invalid[fork_Prague-state_test--P2_not_in_subgroup-]\ntest_call_types[fork_Prague-blockchain_test-inf_pair-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test-inf_pair-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test-inf_pair-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_pair-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_pair-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_pair-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-state_test-inf_pair-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-state_test-inf_pair-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-state_test-inf_pair-call_opcode_CALLCODE-]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork/","title":"Test Bls12 Precompiles Before Fork","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests BLS12 precompiles of EIP-2537: Precompile for BLS12-381 curve operations

    Tests BLS12 precompiles of EIP-2537: Precompile for BLS12-381 curve operations before the Prague hard fork is active

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_precompiles_before_fork.test_precompile_before_fork","title":"test_precompile_before_fork(state_test, pre, post, tx)","text":"

    Test all BLS12 precompiles before the Prague hard fork is active.

    The call must succeed but the output must be empty.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork.py
    @pytest.mark.parametrize(\n    \"precompile_address,input\",\n    [\n        pytest.param(\n            Spec.G1ADD,\n            Spec.INF_G1 + Spec.INF_G1,\n            id=\"G1ADD\",\n        ),\n        pytest.param(\n            Spec.G1MSM,\n            Spec.INF_G1 + Scalar(0),\n            id=\"G1MSM\",\n        ),\n        pytest.param(\n            Spec.G1MUL,\n            Spec.INF_G1 + Scalar(0),\n            id=\"G1MUL\",\n        ),\n        pytest.param(\n            Spec.G2ADD,\n            Spec.INF_G2 + Spec.INF_G2,\n            id=\"G2ADD\",\n        ),\n        pytest.param(\n            Spec.G2MSM,\n            Spec.INF_G2 + Scalar(0),\n            id=\"G2MSM\",\n        ),\n        pytest.param(\n            Spec.G2MUL,\n            Spec.INF_G2 + Scalar(0),\n            id=\"G2MUL\",\n        ),\n        pytest.param(\n            Spec.PAIRING,\n            Spec.INF_G1 + Spec.INF_G2,\n            id=\"PAIRING\",\n        ),\n        pytest.param(\n            Spec.MAP_FP_TO_G1,\n            FP(0),\n            id=\"MAP_FP_TO_G1\",\n        ),\n        pytest.param(\n            Spec.MAP_FP2_TO_G2,\n            FP2((0, 0)),\n            id=\"MAP_FP2_TO_G2\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output,call_succeeds\", [pytest.param(b\"\", True, id=\"\")])\ndef test_precompile_before_fork(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test all BLS12 precompiles before the Prague hard fork is active.\n\n    The call must succeed but the output must be empty.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork/index/test_cases/","title":"Test Bls12 Precompiles Before Fork - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork.py:

    test_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--G1ADD]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--G1MSM]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--G1MUL]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--G2ADD]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--G2MSM]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--G2MUL]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--PAIRING]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--MAP_FP_TO_G1]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--MAP_FP2_TO_G2]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test_engine--G1ADD]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test_engine--G1MSM]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test_engine--G1MUL]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test_engine--G2ADD]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test_engine--G2MSM]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test_engine--G2MUL]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test_engine--PAIRING]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test_engine--MAP_FP_TO_G1]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test_engine--MAP_FP2_TO_G2]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-state_test--G1ADD]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-state_test--G1MSM]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-state_test--G1MUL]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-state_test--G2ADD]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-state_test--G2MSM]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-state_test--G2MUL]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-state_test--PAIRING]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-state_test--MAP_FP_TO_G1]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-state_test--MAP_FP2_TO_G2]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/","title":"Test Bls12 Variable Length Input Contracts","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests minimum gas and input length for BLS12_G1MSM, BLS12_G2MSM, BLS12_PAIRING precompiles of EIP-2537: Precompile for BLS12-381 curve operations

    Tests minimum gas and input length for BLS12_G1MSM, BLS12_G2MSM, BLS12_PAIRING precompiles of EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_variable_length_input_contracts.test_valid_gas_g1msm","title":"test_valid_gas_g1msm(state_test, pre, post, tx)","text":"

    Test the BLS12_G1MSM discount gas table in full, by expecting the call to succeed for all possible input lengths because the appropriate amount of gas is provided.

    If any of the calls fail, the test will fail.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py
    @pytest.mark.parametrize(\n    \"precompile_gas_list,precompile_data_length_list\",\n    [\n        pytest.param(\n            [G1_GAS(i * G1_MSM_K_INPUT_LENGTH) for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            [i * G1_MSM_K_INPUT_LENGTH for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            id=\"exact_gas_full_discount_table\",\n        ),\n        pytest.param(\n            [\n                G1_GAS(i * G1_MSM_K_INPUT_LENGTH) + 1\n                for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))\n            ],\n            [i * G1_MSM_K_INPUT_LENGTH for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            id=\"one_extra_gas_full_discount_table\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [PointG1()], ids=[\"\"])\n@pytest.mark.parametrize(\"tx_gas_limit\", [100_000_000], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_address\", [Spec.G1MSM])\ndef test_valid_gas_g1msm(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1MSM discount gas table in full, by expecting the call to succeed for\n    all possible input lengths because the appropriate amount of gas is provided.\n\n    If any of the calls fail, the test will fail.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_variable_length_input_contracts.test_invalid_gas_g1msm","title":"test_invalid_gas_g1msm(state_test, pre, post, tx)","text":"

    Test the BLS12_G1MSM discount gas table in full, by expecting the call to fail for all possible input lengths because the appropriate amount of gas is not provided.

    If any of the calls succeeds, the test will fail.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py
    @pytest.mark.parametrize(\n    \"precompile_gas_list,precompile_data_length_list\",\n    [\n        pytest.param(\n            [0],\n            [G1_MSM_K_INPUT_LENGTH],\n            id=\"zero_gas_passed\",\n        ),\n        pytest.param(\n            [\n                G1_GAS(i * G1_MSM_K_INPUT_LENGTH) - 1\n                for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))\n            ],\n            [i * G1_MSM_K_INPUT_LENGTH for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            id=\"insufficient_gas_full_discount_table\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\n@pytest.mark.parametrize(\"tx_gas_limit\", [100_000_000], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_address\", [Spec.G1MSM])\ndef test_invalid_gas_g1msm(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1MSM discount gas table in full, by expecting the call to fail for\n    all possible input lengths because the appropriate amount of gas is not provided.\n\n    If any of the calls succeeds, the test will fail.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_variable_length_input_contracts.test_invalid_length_g1msm","title":"test_invalid_length_g1msm(state_test, pre, post, tx)","text":"

    Test the BLS12_G1MSM discount gas table in full, by expecting the call to fail for all possible input lengths provided because they are too long or short, or zero length.

    If any of the calls succeeds, the test will fail.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py
    @pytest.mark.parametrize(\n    \"precompile_gas_list,precompile_data_length_list\",\n    [\n        pytest.param(\n            [G1_GAS(G1_MSM_K_INPUT_LENGTH)],\n            [0],\n            id=\"zero_length_input\",\n        ),\n        pytest.param(\n            [G1_GAS(i * G1_MSM_K_INPUT_LENGTH) for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            [(i * G1_MSM_K_INPUT_LENGTH) - 1 for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            id=\"input_one_byte_too_short_full_discount_table\",\n        ),\n        pytest.param(\n            [G1_GAS(i * G1_MSM_K_INPUT_LENGTH) for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            [(i * G1_MSM_K_INPUT_LENGTH) + 1 for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            id=\"input_one_byte_too_long_full_discount_table\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\n@pytest.mark.parametrize(\"tx_gas_limit\", [100_000_000], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_address\", [Spec.G1MSM])\ndef test_invalid_length_g1msm(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1MSM discount gas table in full, by expecting the call to fail for\n    all possible input lengths provided because they are too long or short, or zero length.\n\n    If any of the calls succeeds, the test will fail.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_variable_length_input_contracts.test_valid_gas_g2msm","title":"test_valid_gas_g2msm(state_test, pre, post, tx)","text":"

    Test the BLS12_G2MSM discount gas table in full, by expecting the call to succeed for all possible input lengths because the appropriate amount of gas is provided.

    If any of the calls fail, the test will fail.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py
    @pytest.mark.parametrize(\n    \"precompile_gas_list,precompile_data_length_list\",\n    [\n        pytest.param(\n            [G2_GAS(i * G2_MSM_K_INPUT_LENGTH) for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            [i * G2_MSM_K_INPUT_LENGTH for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            id=\"exact_gas_full_discount_table\",\n        ),\n        pytest.param(\n            [\n                G2_GAS(i * G2_MSM_K_INPUT_LENGTH) + 1\n                for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))\n            ],\n            [i * G2_MSM_K_INPUT_LENGTH for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            id=\"one_extra_gas_full_discount_table\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [PointG2()], ids=[\"\"])\n@pytest.mark.parametrize(\"tx_gas_limit\", [100_000_000], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_address\", [Spec.G2MSM])\ndef test_valid_gas_g2msm(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G2MSM discount gas table in full, by expecting the call to succeed for\n    all possible input lengths because the appropriate amount of gas is provided.\n\n    If any of the calls fail, the test will fail.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_variable_length_input_contracts.test_invalid_gas_g2msm","title":"test_invalid_gas_g2msm(state_test, pre, post, tx)","text":"

    Test the BLS12_G2MSM discount gas table in full, by expecting the call to fail for all possible input lengths because the appropriate amount of gas is not provided.

    If any of the calls succeeds, the test will fail.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py
    @pytest.mark.parametrize(\n    \"precompile_gas_list,precompile_data_length_list\",\n    [\n        pytest.param(\n            [0],\n            [G2_MSM_K_INPUT_LENGTH],\n            id=\"zero_gas_passed\",\n        ),\n        pytest.param(\n            [\n                G2_GAS(i * G2_MSM_K_INPUT_LENGTH) - 1\n                for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))\n            ],\n            [i * G2_MSM_K_INPUT_LENGTH for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            id=\"insufficient_gas_full_discount_table\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\n@pytest.mark.parametrize(\"tx_gas_limit\", [100_000_000], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_address\", [Spec.G2MSM])\ndef test_invalid_gas_g2msm(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G2MSM discount gas table in full, by expecting the call to fail for\n    all possible input lengths because the appropriate amount of gas is not provided.\n\n    If any of the calls succeeds, the test will fail.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_variable_length_input_contracts.test_invalid_length_g2msm","title":"test_invalid_length_g2msm(state_test, pre, post, tx)","text":"

    Test the BLS12_G2MSM discount gas table in full, by expecting the call to fail for all possible input lengths provided because they are too long or short, or zero length.

    If any of the calls succeeds, the test will fail.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py
    @pytest.mark.parametrize(\n    \"precompile_gas_list,precompile_data_length_list\",\n    [\n        pytest.param(\n            [G2_GAS(G2_MSM_K_INPUT_LENGTH)],\n            [0],\n            id=\"zero_length_input\",\n        ),\n        pytest.param(\n            [G2_GAS(i * G2_MSM_K_INPUT_LENGTH) for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            [(i * G2_MSM_K_INPUT_LENGTH) - 1 for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            id=\"input_one_byte_too_short_full_discount_table\",\n        ),\n        pytest.param(\n            [G2_GAS(i * G2_MSM_K_INPUT_LENGTH) for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            [(i * G2_MSM_K_INPUT_LENGTH) + 1 for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            id=\"input_one_byte_too_long_full_discount_table\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\n@pytest.mark.parametrize(\"tx_gas_limit\", [100_000_000], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_address\", [Spec.G2MSM])\ndef test_invalid_length_g2msm(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G2MSM discount gas table in full, by expecting the call to fail for\n    all possible input lengths provided because they are too long or short, or zero length.\n\n    If any of the calls succeeds, the test will fail.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_variable_length_input_contracts.test_valid_gas_pairing","title":"test_valid_gas_pairing(state_test, pre, post, tx)","text":"

    Test the BLS12_PAIRING precompile, by expecting the call to succeed for all possible input lengths (up to k == PAIRINGS_TO_TEST).

    If any of the calls fails, the test will fail.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py
    @pytest.mark.parametrize(\n    \"precompile_gas_list,precompile_data_length_list\",\n    [\n        pytest.param(\n            [PAIRING_GAS(i * Spec.LEN_PER_PAIR) for i in range(1, PAIRINGS_TO_TEST + 1)],\n            [i * Spec.LEN_PER_PAIR for i in range(1, PAIRINGS_TO_TEST + 1)],\n            id=\"sufficient_gas\",\n        ),\n        pytest.param(\n            [PAIRING_GAS(i * Spec.LEN_PER_PAIR) + 1 for i in range(1, PAIRINGS_TO_TEST + 1)],\n            [i * Spec.LEN_PER_PAIR for i in range(1, PAIRINGS_TO_TEST + 1)],\n            id=\"extra_gas\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.PAIRING_TRUE], ids=[\"\"])\n@pytest.mark.parametrize(\"tx_gas_limit\", [100_000_000], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_address\", [Spec.PAIRING])\ndef test_valid_gas_pairing(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_PAIRING precompile, by expecting the call to succeed for all possible input\n    lengths (up to k == PAIRINGS_TO_TEST).\n\n    If any of the calls fails, the test will fail.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_variable_length_input_contracts.test_invalid_gas_pairing","title":"test_invalid_gas_pairing(state_test, pre, post, tx)","text":"

    Test the BLS12_PAIRING precompile, by expecting the call to fail for all possible input lengths (up to k == PAIRINGS_TO_TEST) because the appropriate amount of gas is not provided.

    If any of the calls succeeds, the test will fail.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py
    @pytest.mark.parametrize(\n    \"precompile_gas_list,precompile_data_length_list\",\n    [\n        pytest.param(\n            [0],\n            [Spec.LEN_PER_PAIR],\n            id=\"zero_gas_passed\",\n        ),\n        pytest.param(\n            [PAIRING_GAS(i * Spec.LEN_PER_PAIR) - 1 for i in range(1, PAIRINGS_TO_TEST + 1)],\n            [i * Spec.LEN_PER_PAIR for i in range(1, PAIRINGS_TO_TEST + 1)],\n            id=\"insufficient_gas\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\n@pytest.mark.parametrize(\"tx_gas_limit\", [100_000_000], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_address\", [Spec.PAIRING])\ndef test_invalid_gas_pairing(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_PAIRING precompile, by expecting the call to fail for all possible input\n    lengths (up to k == PAIRINGS_TO_TEST) because the appropriate amount of gas is not provided.\n\n    If any of the calls succeeds, the test will fail.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_variable_length_input_contracts.test_invalid_length_pairing","title":"test_invalid_length_pairing(state_test, pre, post, tx)","text":"

    Test the BLS12_PAIRING precompile, by expecting the call to fail for all possible input lengths (up to k == PAIRINGS_TO_TEST) because the incorrect input length was used.

    If any of the calls succeeds, the test will fail.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py
    @pytest.mark.parametrize(\n    \"precompile_gas_list,precompile_data_length_list\",\n    [\n        pytest.param(\n            [PAIRING_GAS(Spec.LEN_PER_PAIR)],\n            [0],\n            id=\"zero_length\",\n        ),\n        pytest.param(\n            [PAIRING_GAS(i * Spec.LEN_PER_PAIR) for i in range(1, PAIRINGS_TO_TEST + 1)],\n            [(i * Spec.LEN_PER_PAIR) - 1 for i in range(1, PAIRINGS_TO_TEST + 1)],\n            id=\"input_too_short\",\n        ),\n        pytest.param(\n            [PAIRING_GAS(i * Spec.LEN_PER_PAIR) for i in range(1, PAIRINGS_TO_TEST + 1)],\n            [(i * Spec.LEN_PER_PAIR) + 1 for i in range(1, PAIRINGS_TO_TEST + 1)],\n            id=\"input_too_long\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\n@pytest.mark.parametrize(\"tx_gas_limit\", [100_000_000], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_address\", [Spec.PAIRING])\ndef test_invalid_length_pairing(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_PAIRING precompile, by expecting the call to fail for all possible input\n    lengths (up to k == PAIRINGS_TO_TEST) because the incorrect input length was used.\n\n    If any of the calls succeeds, the test will fail.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/index/test_cases/","title":"Test Bls12 Variable Length Input Contracts - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py:

    test_valid_gas_g1msm[fork_Prague-blockchain_test-precompile_address_13---exact_gas_full_discount_table]\ntest_valid_gas_g1msm[fork_Prague-blockchain_test-precompile_address_13---one_extra_gas_full_discount_table]\ntest_valid_gas_g1msm[fork_Prague-blockchain_test_engine-precompile_address_13---exact_gas_full_discount_table]\ntest_valid_gas_g1msm[fork_Prague-blockchain_test_engine-precompile_address_13---one_extra_gas_full_discount_table]\ntest_valid_gas_g1msm[fork_Prague-state_test-precompile_address_13---exact_gas_full_discount_table]\ntest_valid_gas_g1msm[fork_Prague-state_test-precompile_address_13---one_extra_gas_full_discount_table]\ntest_invalid_gas_g1msm[fork_Prague-blockchain_test-precompile_address_13---zero_gas_passed]\ntest_invalid_gas_g1msm[fork_Prague-blockchain_test-precompile_address_13---insufficient_gas_full_discount_table]\ntest_invalid_gas_g1msm[fork_Prague-blockchain_test_engine-precompile_address_13---zero_gas_passed]\ntest_invalid_gas_g1msm[fork_Prague-blockchain_test_engine-precompile_address_13---insufficient_gas_full_discount_table]\ntest_invalid_gas_g1msm[fork_Prague-state_test-precompile_address_13---zero_gas_passed]\ntest_invalid_gas_g1msm[fork_Prague-state_test-precompile_address_13---insufficient_gas_full_discount_table]\ntest_invalid_length_g1msm[fork_Prague-blockchain_test-precompile_address_13---zero_length_input]\ntest_invalid_length_g1msm[fork_Prague-blockchain_test-precompile_address_13---input_one_byte_too_short_full_discount_table]\ntest_invalid_length_g1msm[fork_Prague-blockchain_test-precompile_address_13---input_one_byte_too_long_full_discount_table]\ntest_invalid_length_g1msm[fork_Prague-blockchain_test_engine-precompile_address_13---zero_length_input]\ntest_invalid_length_g1msm[fork_Prague-blockchain_test_engine-precompile_address_13---input_one_byte_too_short_full_discount_table]\ntest_invalid_length_g1msm[fork_Prague-blockchain_test_engine-precompile_address_13---input_one_byte_too_long_full_discount_table]\ntest_invalid_length_g1msm[fork_Prague-state_test-precompile_address_13---zero_length_input]\ntest_invalid_length_g1msm[fork_Prague-state_test-precompile_address_13---input_one_byte_too_short_full_discount_table]\ntest_invalid_length_g1msm[fork_Prague-state_test-precompile_address_13---input_one_byte_too_long_full_discount_table]\ntest_valid_gas_g2msm[fork_Prague-blockchain_test-precompile_address_16---exact_gas_full_discount_table]\ntest_valid_gas_g2msm[fork_Prague-blockchain_test-precompile_address_16---one_extra_gas_full_discount_table]\ntest_valid_gas_g2msm[fork_Prague-blockchain_test_engine-precompile_address_16---exact_gas_full_discount_table]\ntest_valid_gas_g2msm[fork_Prague-blockchain_test_engine-precompile_address_16---one_extra_gas_full_discount_table]\ntest_valid_gas_g2msm[fork_Prague-state_test-precompile_address_16---exact_gas_full_discount_table]\ntest_valid_gas_g2msm[fork_Prague-state_test-precompile_address_16---one_extra_gas_full_discount_table]\ntest_invalid_gas_g2msm[fork_Prague-blockchain_test-precompile_address_16---zero_gas_passed]\ntest_invalid_gas_g2msm[fork_Prague-blockchain_test-precompile_address_16---insufficient_gas_full_discount_table]\ntest_invalid_gas_g2msm[fork_Prague-blockchain_test_engine-precompile_address_16---zero_gas_passed]\ntest_invalid_gas_g2msm[fork_Prague-blockchain_test_engine-precompile_address_16---insufficient_gas_full_discount_table]\ntest_invalid_gas_g2msm[fork_Prague-state_test-precompile_address_16---zero_gas_passed]\ntest_invalid_gas_g2msm[fork_Prague-state_test-precompile_address_16---insufficient_gas_full_discount_table]\ntest_invalid_length_g2msm[fork_Prague-blockchain_test-precompile_address_16---zero_length_input]\ntest_invalid_length_g2msm[fork_Prague-blockchain_test-precompile_address_16---input_one_byte_too_short_full_discount_table]\ntest_invalid_length_g2msm[fork_Prague-blockchain_test-precompile_address_16---input_one_byte_too_long_full_discount_table]\ntest_invalid_length_g2msm[fork_Prague-blockchain_test_engine-precompile_address_16---zero_length_input]\ntest_invalid_length_g2msm[fork_Prague-blockchain_test_engine-precompile_address_16---input_one_byte_too_short_full_discount_table]\ntest_invalid_length_g2msm[fork_Prague-blockchain_test_engine-precompile_address_16---input_one_byte_too_long_full_discount_table]\ntest_invalid_length_g2msm[fork_Prague-state_test-precompile_address_16---zero_length_input]\ntest_invalid_length_g2msm[fork_Prague-state_test-precompile_address_16---input_one_byte_too_short_full_discount_table]\ntest_invalid_length_g2msm[fork_Prague-state_test-precompile_address_16---input_one_byte_too_long_full_discount_table]\ntest_valid_gas_pairing[fork_Prague-blockchain_test-precompile_address_17---sufficient_gas]\ntest_valid_gas_pairing[fork_Prague-blockchain_test-precompile_address_17---extra_gas]\ntest_valid_gas_pairing[fork_Prague-blockchain_test_engine-precompile_address_17---sufficient_gas]\ntest_valid_gas_pairing[fork_Prague-blockchain_test_engine-precompile_address_17---extra_gas]\ntest_valid_gas_pairing[fork_Prague-state_test-precompile_address_17---sufficient_gas]\ntest_valid_gas_pairing[fork_Prague-state_test-precompile_address_17---extra_gas]\ntest_invalid_gas_pairing[fork_Prague-blockchain_test-precompile_address_17---zero_gas_passed]\ntest_invalid_gas_pairing[fork_Prague-blockchain_test-precompile_address_17---insufficient_gas]\ntest_invalid_gas_pairing[fork_Prague-blockchain_test_engine-precompile_address_17---zero_gas_passed]\ntest_invalid_gas_pairing[fork_Prague-blockchain_test_engine-precompile_address_17---insufficient_gas]\ntest_invalid_gas_pairing[fork_Prague-state_test-precompile_address_17---zero_gas_passed]\ntest_invalid_gas_pairing[fork_Prague-state_test-precompile_address_17---insufficient_gas]\ntest_invalid_length_pairing[fork_Prague-blockchain_test-precompile_address_17---zero_length]\ntest_invalid_length_pairing[fork_Prague-blockchain_test-precompile_address_17---input_too_short]\ntest_invalid_length_pairing[fork_Prague-blockchain_test-precompile_address_17---input_too_long]\ntest_invalid_length_pairing[fork_Prague-blockchain_test_engine-precompile_address_17---zero_length]\ntest_invalid_length_pairing[fork_Prague-blockchain_test_engine-precompile_address_17---input_too_short]\ntest_invalid_length_pairing[fork_Prague-blockchain_test_engine-precompile_address_17---input_too_long]\ntest_invalid_length_pairing[fork_Prague-state_test-precompile_address_17---zero_length]\ntest_invalid_length_pairing[fork_Prague-state_test-precompile_address_17---input_too_short]\ntest_invalid_length_pairing[fork_Prague-state_test-precompile_address_17---input_too_long]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/vectors/test-vectors./","title":"Test Vectors for EIP-2537 - Precompile for BLS12-381 curve operations","text":"

    These test vectors are derived from BLS 12-381 tests

    "},{"location":"tests/prague/eip2935_historical_block_hashes_from_state/","title":"EIP-2935 Historical Block Hashes From State","text":"

    Documentation for tests/prague/eip2935_historical_block_hashes_from_state.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2935_historical_block_hashes_from_state --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2935_historical_block_hashes_from_state --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Cross-client EIP-2935 Tests

    "},{"location":"tests/prague/eip2935_historical_block_hashes_from_state/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip2935_historical_block_hashes_from_state/spec.py.

    Defines EIP-2935 specification constants and functions.

    "},{"location":"tests/prague/eip2935_historical_block_hashes_from_state/spec/#tests.prague.eip2935_historical_block_hashes_from_state.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-2935 specifications as defined at https://eips.ethereum.org/EIPS/eip-2935

    Source code in tests/prague/eip2935_historical_block_hashes_from_state/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-2935 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-2935\n    \"\"\"\n\n    FORK_TIMESTAMP = 15_000\n    HISTORY_STORAGE_ADDRESS = 0x0AAE40965E6800CD9B1F4B05FF21581047E3F91E\n    HISTORY_SERVE_WINDOW = 8192\n    BLOCKHASH_OLD_WINDOW = 256\n
    "},{"location":"tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes/","title":"Test Block Hashes","text":"

    Documentation for tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-2935: Serve historical block hashes from state

    Test EIP-2935: Serve historical block hashes from state

    "},{"location":"tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes/#tests.prague.eip2935_historical_block_hashes_from_state.test_block_hashes.test_block_hashes_history_at_transition","title":"test_block_hashes_history_at_transition(blockchain_test, pre, blocks_before_fork, blocks_after_fork)","text":"

    Tests that block hashes are stored correctly at the system contract address after the fork transition. Block hashes are stored incrementally at the transition until the HISTORY_SERVE_WINDOW ring buffer is full. Afterwards the oldest block hash is replaced by the new one.

    Note: The block hashes before the fork are no longer stored in the contract at the moment of the transition.

    Source code in tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py
    @pytest.mark.parametrize(\n    \"blocks_before_fork, blocks_after_fork\",\n    [\n        [1, 2],\n        [Spec.BLOCKHASH_OLD_WINDOW + 1, 10],\n        [1, Spec.BLOCKHASH_OLD_WINDOW + 1],\n    ],\n)\n@pytest.mark.valid_at_transition_to(\"Prague\")\ndef test_block_hashes_history_at_transition(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    blocks_before_fork: int,\n    blocks_after_fork: int,\n):\n    \"\"\"\n    Tests that block hashes are stored correctly at the system contract address after the fork\n    transition. Block hashes are stored incrementally at the transition until the\n    `HISTORY_SERVE_WINDOW` ring buffer is full. Afterwards the oldest block hash is replaced by the\n    new one.\n\n    Note: The block hashes before the fork are no longer stored in the contract at the moment of\n    the transition.\n    \"\"\"\n    blocks: List[Block] = []\n    assert blocks_before_fork >= 1 and blocks_before_fork < Spec.FORK_TIMESTAMP\n\n    sender = pre.fund_eoa(10_000_000_000)\n    post: Dict[Address, Account] = {}\n    current_block_number = 1\n    fork_block_number = current_block_number + blocks_before_fork\n\n    for i in range(blocks_before_fork):\n        txs: List[Transaction] = []\n        if i == blocks_before_fork - 1:\n            # On the last block before the fork, `BLOCKHASH` must return values for the last 256\n            # blocks but not for the blocks before that.\n            # And `HISTORY_STORAGE_ADDRESS` should be empty.\n            code = Bytecode()\n            storage = Storage()\n\n            # Check the last block before blockhash the window\n            code += generate_block_check_code(\n                check_block_number=current_block_number - Spec.BLOCKHASH_OLD_WINDOW - 1,\n                current_block_number=current_block_number,\n                fork_block_number=fork_block_number,\n                storage=storage,\n            )\n\n            # Check the first block inside blockhash the window\n            code += generate_block_check_code(\n                check_block_number=(\n                    current_block_number - Spec.BLOCKHASH_OLD_WINDOW\n                    if current_block_number > Spec.BLOCKHASH_OLD_WINDOW\n                    else 0  # Entire chain is inside the window, check genesis\n                ),\n                current_block_number=current_block_number,\n                fork_block_number=fork_block_number,\n                storage=storage,\n            )\n\n            check_blocks_before_fork_address = pre.deploy_contract(code)\n            txs.append(\n                Transaction(\n                    to=check_blocks_before_fork_address,\n                    gas_limit=10_000_000,\n                    sender=sender,\n                )\n            )\n            post[check_blocks_before_fork_address] = Account(storage=storage)\n        blocks.append(Block(timestamp=current_block_number, txs=txs))\n        current_block_number += 1\n\n    # Add blocks after the fork transition to gradually fill up the `HISTORY_SERVE_WINDOW`\n    for i in range(blocks_after_fork):\n        txs = []\n        # On these blocks, `BLOCKHASH` will still return values for the last 256 blocks, and\n        # `HISTORY_STORAGE_ADDRESS` should now serve values for the previous blocks in the new\n        # fork.\n        code = Bytecode()\n        storage = Storage()\n\n        # Check that each block can return previous blockhashes if `BLOCKHASH_OLD_WINDOW` and or\n        # `HISTORY_SERVE_WINDOW`.\n        for j in range(current_block_number):\n            code += generate_block_check_code(\n                check_block_number=j,\n                current_block_number=current_block_number,\n                fork_block_number=fork_block_number,\n                storage=storage,\n            )\n\n        check_blocks_after_fork_address = pre.deploy_contract(code)\n        txs.append(\n            Transaction(\n                to=check_blocks_after_fork_address,\n                gas_limit=10_000_000,\n                sender=sender,\n            )\n        )\n        post[check_blocks_after_fork_address] = Account(storage=storage)\n\n        blocks.append(Block(timestamp=Spec.FORK_TIMESTAMP + i, txs=txs))\n        current_block_number += 1\n\n    blockchain_test(\n        pre=pre,\n        blocks=blocks,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes/#tests.prague.eip2935_historical_block_hashes_from_state.test_block_hashes.test_block_hashes_history","title":"test_block_hashes_history(blockchain_test, pre, block_count, check_contract_first)","text":"

    Tests that block hashes are stored correctly at the system contract address after the fork transition. Block hashes are stored incrementally at the transition until the HISTORY_SERVE_WINDOW ring buffer is full. Afterwards the oldest block hash is replaced by the new one.

    Source code in tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py
    @pytest.mark.parametrize(\n    \"block_count,check_contract_first\",\n    [\n        pytest.param(1, False, id=\"single_block_check_blockhash_first\"),\n        pytest.param(1, True, id=\"single_block_check_contract_first\"),\n        pytest.param(2, False, id=\"two_blocks_check_blockhash_first\"),\n        pytest.param(2, True, id=\"two_blocks_check_contract_first\"),\n        pytest.param(\n            Spec.HISTORY_SERVE_WINDOW + 1,\n            False,\n            marks=pytest.mark.slow,\n            id=\"full_history_plus_one_check_blockhash_first\",\n        ),\n    ],\n)\n@pytest.mark.valid_from(\"Prague\")\ndef test_block_hashes_history(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    block_count: int,\n    check_contract_first: bool,\n):\n    \"\"\"\n    Tests that block hashes are stored correctly at the system contract address after the fork\n    transition. Block hashes are stored incrementally at the transition until the\n    `HISTORY_SERVE_WINDOW` ring buffer is full. Afterwards the oldest block hash is replaced by the\n    new one.\n    \"\"\"\n    blocks: List[Block] = []\n\n    sender = pre.fund_eoa(10_000_000_000)\n    post: Dict[Address, Account] = {}\n    current_block_number = 1\n    fork_block_number = 0  # We fork at genesis\n\n    for _ in range(block_count - 1):\n        # Generate empty blocks after the fork.\n        blocks.append(Block())\n        current_block_number += 1\n\n    txs = []\n    # On these blocks, `BLOCKHASH` will still return values for the last 256 blocks, and\n    # `HISTORY_STORAGE_ADDRESS` should now serve values for the previous blocks in the new\n    # fork.\n    code = Bytecode()\n    storage = Storage()\n\n    # Check the first block outside of the window if any\n    code += generate_block_check_code(\n        check_block_number=current_block_number - Spec.HISTORY_SERVE_WINDOW - 1,\n        current_block_number=current_block_number,\n        fork_block_number=fork_block_number,\n        storage=storage,\n        check_contract_first=check_contract_first,\n    )\n\n    # Check the first block inside the window\n    code += generate_block_check_code(\n        check_block_number=current_block_number - Spec.HISTORY_SERVE_WINDOW,\n        current_block_number=current_block_number,\n        fork_block_number=fork_block_number,\n        storage=storage,\n        check_contract_first=check_contract_first,\n    )\n\n    # Check the first block outside the BLOCKHASH window\n    code += generate_block_check_code(\n        check_block_number=current_block_number - Spec.BLOCKHASH_OLD_WINDOW - 1,\n        current_block_number=current_block_number,\n        fork_block_number=fork_block_number,\n        storage=storage,\n        check_contract_first=check_contract_first,\n    )\n\n    # Check the first block inside the BLOCKHASH window\n    code += generate_block_check_code(\n        check_block_number=current_block_number - Spec.BLOCKHASH_OLD_WINDOW,\n        current_block_number=current_block_number,\n        fork_block_number=fork_block_number,\n        storage=storage,\n        check_contract_first=check_contract_first,\n    )\n\n    # Check the previous block\n    code += generate_block_check_code(\n        check_block_number=current_block_number - 1,\n        current_block_number=current_block_number,\n        fork_block_number=fork_block_number,\n        storage=storage,\n        check_contract_first=check_contract_first,\n    )\n\n    check_blocks_after_fork_address = pre.deploy_contract(code)\n    txs.append(\n        Transaction(\n            to=check_blocks_after_fork_address,\n            gas_limit=10_000_000,\n            sender=sender,\n        )\n    )\n    post[check_blocks_after_fork_address] = Account(storage=storage)\n\n    blocks.append(Block(txs=txs))\n    current_block_number += 1\n\n    blockchain_test(\n        pre=pre,\n        blocks=blocks,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes/#tests.prague.eip2935_historical_block_hashes_from_state.test_block_hashes.test_invalid_history_contract_calls","title":"test_invalid_history_contract_calls(blockchain_test, pre, block_number, reverts)","text":"

    Test calling the history contract with invalid block numbers, such as blocks from the future or overflowing block numbers.

    Also test the BLOCKHASH opcode with the same block numbers, which should not affect the behavior of the opcode, even after verkle.

    Source code in tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py
    @pytest.mark.parametrize(\n    \"block_number,reverts\",\n    [\n        pytest.param(1, False, id=\"current_block\"),\n        pytest.param(2, False, id=\"future_block\"),\n        pytest.param(2**64 - 1, False, id=\"2**64-1\"),\n        pytest.param(2**64, True, id=\"2**64\"),\n    ],\n)\n@pytest.mark.valid_from(\"Prague\")\ndef test_invalid_history_contract_calls(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    block_number: int,\n    reverts: bool,\n):\n    \"\"\"\n    Test calling the history contract with invalid block numbers, such as blocks from the future\n    or overflowing block numbers.\n\n    Also test the BLOCKHASH opcode with the same block numbers, which should not affect the\n    behavior of the opcode, even after verkle.\n    \"\"\"\n    storage = Storage()\n\n    return_code_slot = storage.store_next(not reverts)\n    returned_block_hash_slot = storage.store_next(0)\n    block_hash_opcode_slot = storage.store_next(0)\n\n    # Check the first block outside of the window if any\n    code = (\n        Op.MSTORE(0, block_number)\n        + Op.SSTORE(\n            return_code_slot, Op.CALL(Op.GAS, Spec.HISTORY_STORAGE_ADDRESS, 0, 0, 32, 32, 64)\n        )\n        + Op.SSTORE(returned_block_hash_slot, Op.MLOAD(32))\n        + Op.SSTORE(block_hash_opcode_slot, Op.BLOCKHASH(block_number))\n    )\n    check_contract_address = pre.deploy_contract(code, storage=storage.canary())\n\n    txs = [\n        Transaction(\n            to=check_contract_address,\n            gas_limit=10_000_000,\n            sender=pre.fund_eoa(),\n        )\n    ]\n    post = {check_contract_address: Account(storage=storage)}\n\n    blocks = [Block(txs=txs)]\n    blockchain_test(\n        pre=pre,\n        blocks=blocks,\n        post=post,\n        reverts=reverts,\n    )\n
    "},{"location":"tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes/index/test_cases/","title":"Test Block Hashes - Test Cases","text":"

    Test cases generated from tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py

    Parametrized test cases generated from the test module tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py:

    test_block_hashes_history_at_transition[fork_CancunToPragueAtTime15k-blockchain_test-blocks_before_fork_1-blocks_after_fork_2]\ntest_block_hashes_history_at_transition[fork_CancunToPragueAtTime15k-blockchain_test-blocks_before_fork_257-blocks_after_fork_10]\ntest_block_hashes_history_at_transition[fork_CancunToPragueAtTime15k-blockchain_test-blocks_before_fork_1-blocks_after_fork_257]\ntest_block_hashes_history_at_transition[fork_CancunToPragueAtTime15k-blockchain_test_engine-blocks_before_fork_1-blocks_after_fork_2]\ntest_block_hashes_history_at_transition[fork_CancunToPragueAtTime15k-blockchain_test_engine-blocks_before_fork_257-blocks_after_fork_10]\ntest_block_hashes_history_at_transition[fork_CancunToPragueAtTime15k-blockchain_test_engine-blocks_before_fork_1-blocks_after_fork_257]\ntest_block_hashes_history[fork_Prague-blockchain_test-single_block_check_blockhash_first]\ntest_block_hashes_history[fork_Prague-blockchain_test-single_block_check_contract_first]\ntest_block_hashes_history[fork_Prague-blockchain_test-two_blocks_check_blockhash_first]\ntest_block_hashes_history[fork_Prague-blockchain_test-two_blocks_check_contract_first]\ntest_block_hashes_history[fork_Prague-blockchain_test-full_history_plus_one_check_blockhash_first]\ntest_block_hashes_history[fork_Prague-blockchain_test_engine-single_block_check_blockhash_first]\ntest_block_hashes_history[fork_Prague-blockchain_test_engine-single_block_check_contract_first]\ntest_block_hashes_history[fork_Prague-blockchain_test_engine-two_blocks_check_blockhash_first]\ntest_block_hashes_history[fork_Prague-blockchain_test_engine-two_blocks_check_contract_first]\ntest_block_hashes_history[fork_Prague-blockchain_test_engine-full_history_plus_one_check_blockhash_first]\ntest_invalid_history_contract_calls[fork_Prague-blockchain_test-current_block]\ntest_invalid_history_contract_calls[fork_Prague-blockchain_test-future_block]\ntest_invalid_history_contract_calls[fork_Prague-blockchain_test-2**64-1]\ntest_invalid_history_contract_calls[fork_Prague-blockchain_test-2**64]\ntest_invalid_history_contract_calls[fork_Prague-blockchain_test_engine-current_block]\ntest_invalid_history_contract_calls[fork_Prague-blockchain_test_engine-future_block]\ntest_invalid_history_contract_calls[fork_Prague-blockchain_test_engine-2**64-1]\ntest_invalid_history_contract_calls[fork_Prague-blockchain_test_engine-2**64]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py\n
    "},{"location":"tests/prague/eip6110_deposits/","title":"EIP-6110 Deposits","text":"

    Documentation for tests/prague/eip6110_deposits.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip6110_deposits --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip6110_deposits --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Cross-client EIP-6110 Tests

    "},{"location":"tests/prague/eip6110_deposits/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip6110_deposits/spec.py.

    Defines EIP-6110 specification constants and functions.

    "},{"location":"tests/prague/eip6110_deposits/spec/#tests.prague.eip6110_deposits.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-6110 specifications as defined at https://eips.ethereum.org/EIPS/eip-6110

    Source code in tests/prague/eip6110_deposits/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-6110 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-6110\n    \"\"\"\n\n    DEPOSIT_CONTRACT_ADDRESS = 0x00000000219AB540356CBB839CBE05303D7705FA\n
    "},{"location":"tests/prague/eip6110_deposits/test_deposits/","title":"Test Deposits","text":"

    Documentation for tests/prague/eip6110_deposits/test_deposits.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip6110_deposits/test_deposits.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip6110_deposits/test_deposits.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-6110: Supply validator deposits on chain

    Test EIP-6110: Supply validator deposits on chain.

    "},{"location":"tests/prague/eip6110_deposits/test_deposits/#tests.prague.eip6110_deposits.test_deposits.test_deposit","title":"test_deposit(blockchain_test, pre, blocks)","text":"

    Test making a deposit to the beacon chain deposit contract.

    Source code in tests/prague/eip6110_deposits/test_deposits.py
    @pytest.mark.parametrize(\n    \"requests\",\n    [\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n            ],\n            id=\"single_deposit_from_eoa\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=120_000_000_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                    sender_balance=120_000_001_000_000_000 * 10**9,\n                ),\n            ],\n            id=\"single_deposit_from_eoa_huge_amount\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x1,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"multiple_deposit_from_same_eoa\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=i,\n                        )\n                        for i in range(200)\n                    ],\n                )\n            ],\n            id=\"multiple_deposit_from_same_eoa_high_count\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x1,\n                        )\n                    ],\n                ),\n            ],\n            id=\"multiple_deposit_from_different_eoa\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=999_999_999,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"multiple_deposit_from_same_eoa_first_reverts\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=999_999_999,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"multiple_deposit_from_same_eoa_last_reverts\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                            # From traces, gas used by the first tx is 82,718 so reduce by one here\n                            gas_limit=0x1431D,\n                            valid=False,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"multiple_deposit_from_same_eoa_first_oog\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                            # From traces, gas used by the second tx is 68,594, reduce by one here\n                            gas_limit=0x10BF1,\n                            valid=False,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"multiple_deposit_from_same_eoa_last_oog\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                            calldata_modifier=lambda _: b\"\",\n                            valid=False,\n                        )\n                    ],\n                ),\n            ],\n            id=\"send_eth_from_eoa\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n            ],\n            id=\"single_deposit_from_contract\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x1,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"multiple_deposits_from_contract\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=i,\n                        )\n                        for i in range(1000)\n                    ],\n                    tx_gas_limit=60_000_000,\n                ),\n            ],\n            id=\"many_deposits_from_contract\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=999_999_999,\n                            signature=0x03,\n                            index=0x0,\n                            valid=False,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"multiple_deposits_from_contract_first_reverts\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=999_999_999,\n                            signature=0x03,\n                            index=0x1,\n                            valid=False,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"multiple_deposits_from_contract_last_reverts\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            gas_limit=100,\n                            index=0x0,\n                            valid=False,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            gas_limit=1_000_000,\n                            index=0x0,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"multiple_deposits_from_contract_first_oog\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                            gas_limit=1_000_000,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                            gas_limit=100,\n                            valid=False,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"multiple_deposits_from_contract_last_oog\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                            valid=False,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x1,\n                            valid=False,\n                        ),\n                    ],\n                    extra_code=Op.REVERT(0, 0),\n                ),\n            ],\n            id=\"multiple_deposits_from_contract_caller_reverts\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                            valid=False,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x1,\n                            valid=False,\n                        ),\n                    ],\n                    extra_code=Macros.OOG(),\n                ),\n            ],\n            id=\"multiple_deposits_from_contract_caller_oog\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=i,\n                            valid=False,\n                        )\n                        for i in range(1000)\n                    ],\n                    tx_gas_limit=23_738_700,\n                ),\n            ],\n            id=\"many_deposits_from_contract_oog\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                    ],\n                ),\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x1,\n                        )\n                    ],\n                ),\n            ],\n            id=\"single_deposit_from_contract_single_deposit_from_eoa\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x1,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"single_deposit_from_eoa_single_deposit_from_contract\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x1,\n                        ),\n                    ],\n                ),\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x2,\n                        )\n                    ],\n                ),\n            ],\n            id=\"single_deposit_from_contract_between_eoa_deposits\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                    ],\n                ),\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x1,\n                        )\n                    ],\n                ),\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x2,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"single_deposit_from_eoa_between_contract_deposits\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                            valid=False,\n                        )\n                    ],\n                    call_type=Op.DELEGATECALL,\n                ),\n            ],\n            id=\"single_deposit_from_contract_delegatecall\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                            valid=False,\n                        )\n                    ],\n                    call_type=Op.STATICCALL,\n                ),\n            ],\n            id=\"single_deposit_from_contract_staticcall\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                            valid=False,\n                        )\n                    ],\n                    call_type=Op.CALLCODE,\n                ),\n            ],\n            id=\"single_deposit_from_contract_callcode\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                    call_depth=3,\n                ),\n            ],\n            id=\"single_deposit_from_contract_call_depth_3\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                    call_depth=1024,\n                    tx_gas_limit=2_500_000_000_000,\n                ),\n            ],\n            id=\"single_deposit_from_contract_call_high_depth\",\n        ),\n        # TODO: Send eth with the transaction to the contract\n    ],\n)\ndef test_deposit(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    blocks: List[Block],\n):\n    \"\"\"\n    Test making a deposit to the beacon chain deposit contract.\n    \"\"\"\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post={},\n        blocks=blocks,\n    )\n
    "},{"location":"tests/prague/eip6110_deposits/test_deposits/#tests.prague.eip6110_deposits.test_deposits.test_deposit_negative","title":"test_deposit_negative(blockchain_test, pre, blocks)","text":"

    Test producing a block with the incorrect deposits in the body of the block, and/or Engine API payload.

    Source code in tests/prague/eip6110_deposits/test_deposits.py
    @pytest.mark.parametrize(\n    \"requests,block_body_override_requests,exception\",\n    [\n        pytest.param(\n            [],\n            [\n                DepositRequest(\n                    pubkey=0x01,\n                    withdrawal_credentials=0x02,\n                    amount=1_000_000_000,\n                    signature=0x03,\n                    index=0x0,\n                ),\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"no_deposits_non_empty_requests_list\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n            ],\n            [],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_deposit_empty_requests_list\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n            ],\n            [\n                DepositRequest(\n                    pubkey=0x02,\n                    withdrawal_credentials=0x02,\n                    amount=1_000_000_000,\n                    signature=0x03,\n                    index=0x0,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_deposit_pubkey_mismatch\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n            ],\n            [\n                DepositRequest(\n                    pubkey=0x01,\n                    withdrawal_credentials=0x03,\n                    amount=1_000_000_000,\n                    signature=0x03,\n                    index=0x0,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_deposit_credentials_mismatch\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n            ],\n            [\n                DepositRequest(\n                    pubkey=0x01,\n                    withdrawal_credentials=0x02,\n                    amount=2_000_000_000,\n                    signature=0x03,\n                    index=0x0,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_deposit_amount_mismatch\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n            ],\n            [\n                DepositRequest(\n                    pubkey=0x01,\n                    withdrawal_credentials=0x02,\n                    amount=1_000_000_000,\n                    signature=0x04,\n                    index=0x0,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_deposit_signature_mismatch\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n            ],\n            [\n                DepositRequest(\n                    pubkey=0x01,\n                    withdrawal_credentials=0x02,\n                    amount=1_000_000_000,\n                    signature=0x03,\n                    index=0x1,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_deposit_index_mismatch\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x1,\n                        ),\n                    ],\n                ),\n            ],\n            [\n                DepositRequest(\n                    pubkey=0x01,\n                    withdrawal_credentials=0x02,\n                    amount=1_000_000_000,\n                    signature=0x03,\n                    index=0x1,\n                ),\n                DepositRequest(\n                    pubkey=0x01,\n                    withdrawal_credentials=0x02,\n                    amount=1_000_000_000,\n                    signature=0x03,\n                    index=0x0,\n                ),\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"two_deposits_out_of_order\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n            ],\n            [\n                DepositRequest(\n                    pubkey=0x01,\n                    withdrawal_credentials=0x02,\n                    amount=1_000_000_000,\n                    signature=0x03,\n                    index=0x0,\n                ),\n                DepositRequest(\n                    pubkey=0x01,\n                    withdrawal_credentials=0x02,\n                    amount=1_000_000_000,\n                    signature=0x03,\n                    index=0x0,\n                ),\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_deposit_duplicate_in_requests_list\",\n        ),\n    ],\n)\ndef test_deposit_negative(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    blocks: List[Block],\n):\n    \"\"\"\n    Test producing a block with the incorrect deposits in the body of the block,\n    and/or Engine API payload.\n    \"\"\"\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post={},\n        blocks=blocks,\n    )\n
    "},{"location":"tests/prague/eip6110_deposits/test_deposits/index/test_cases/","title":"Test Deposits - Test Cases","text":"

    Test cases generated from tests/prague/eip6110_deposits/test_deposits.py

    Parametrized test cases generated from the test module tests/prague/eip6110_deposits/test_deposits.py:

    test_deposit[fork_Prague-blockchain_test-single_deposit_from_eoa]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_eoa_huge_amount]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_high_count]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposit_from_different_eoa]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_first_reverts]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_last_reverts]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_first_oog]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_last_oog]\ntest_deposit[fork_Prague-blockchain_test-send_eth_from_eoa]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_contract]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract]\ntest_deposit[fork_Prague-blockchain_test-many_deposits_from_contract]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract_first_reverts]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract_last_reverts]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract_first_oog]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract_last_oog]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract_caller_reverts]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract_caller_oog]\ntest_deposit[fork_Prague-blockchain_test-many_deposits_from_contract_oog]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_single_deposit_from_eoa]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_eoa_single_deposit_from_contract]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_between_eoa_deposits]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_eoa_between_contract_deposits]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_delegatecall]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_staticcall]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_callcode]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_call_depth_3]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_call_high_depth]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_eoa]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_eoa_huge_amount]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposit_from_same_eoa]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposit_from_same_eoa_high_count]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposit_from_different_eoa]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposit_from_same_eoa_first_reverts]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposit_from_same_eoa_last_reverts]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposit_from_same_eoa_first_oog]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposit_from_same_eoa_last_oog]\ntest_deposit[fork_Prague-blockchain_test_engine-send_eth_from_eoa]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_contract]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposits_from_contract]\ntest_deposit[fork_Prague-blockchain_test_engine-many_deposits_from_contract]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposits_from_contract_first_reverts]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposits_from_contract_last_reverts]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposits_from_contract_first_oog]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposits_from_contract_last_oog]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposits_from_contract_caller_reverts]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposits_from_contract_caller_oog]\ntest_deposit[fork_Prague-blockchain_test_engine-many_deposits_from_contract_oog]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_contract_single_deposit_from_eoa]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_eoa_single_deposit_from_contract]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_contract_between_eoa_deposits]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_eoa_between_contract_deposits]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_contract_delegatecall]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_contract_staticcall]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_contract_callcode]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_contract_call_depth_3]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_contract_call_high_depth]\ntest_deposit_negative[fork_Prague-blockchain_test-no_deposits_non_empty_requests_list]\ntest_deposit_negative[fork_Prague-blockchain_test-single_deposit_empty_requests_list]\ntest_deposit_negative[fork_Prague-blockchain_test-single_deposit_pubkey_mismatch]\ntest_deposit_negative[fork_Prague-blockchain_test-single_deposit_credentials_mismatch]\ntest_deposit_negative[fork_Prague-blockchain_test-single_deposit_amount_mismatch]\ntest_deposit_negative[fork_Prague-blockchain_test-single_deposit_signature_mismatch]\ntest_deposit_negative[fork_Prague-blockchain_test-single_deposit_index_mismatch]\ntest_deposit_negative[fork_Prague-blockchain_test-two_deposits_out_of_order]\ntest_deposit_negative[fork_Prague-blockchain_test-single_deposit_duplicate_in_requests_list]\ntest_deposit_negative[fork_Prague-blockchain_test_engine-no_deposits_non_empty_requests_list]\ntest_deposit_negative[fork_Prague-blockchain_test_engine-single_deposit_empty_requests_list]\ntest_deposit_negative[fork_Prague-blockchain_test_engine-single_deposit_pubkey_mismatch]\ntest_deposit_negative[fork_Prague-blockchain_test_engine-single_deposit_credentials_mismatch]\ntest_deposit_negative[fork_Prague-blockchain_test_engine-single_deposit_amount_mismatch]\ntest_deposit_negative[fork_Prague-blockchain_test_engine-single_deposit_signature_mismatch]\ntest_deposit_negative[fork_Prague-blockchain_test_engine-single_deposit_index_mismatch]\ntest_deposit_negative[fork_Prague-blockchain_test_engine-two_deposits_out_of_order]\ntest_deposit_negative[fork_Prague-blockchain_test_engine-single_deposit_duplicate_in_requests_list]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip6110_deposits/test_deposits.py\n
    "},{"location":"tests/prague/eip7002_el_triggerable_withdrawals/","title":"EIP-7002 El Triggerable Withdrawals","text":"

    Documentation for tests/prague/eip7002_el_triggerable_withdrawals.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7002_el_triggerable_withdrawals --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7002_el_triggerable_withdrawals --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Cross-client EIP-7002 Tests

    "},{"location":"tests/prague/eip7002_el_triggerable_withdrawals/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip7002_el_triggerable_withdrawals/spec.py.

    Common procedures to test EIP-7002: Execution layer triggerable withdrawals

    "},{"location":"tests/prague/eip7002_el_triggerable_withdrawals/spec/#tests.prague.eip7002_el_triggerable_withdrawals.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-7002 specifications as defined at https://eips.ethereum.org/EIPS/eip-7002#configuration

    If the parameter is not currently used within the tests, it is commented out.

    Source code in tests/prague/eip7002_el_triggerable_withdrawals/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-7002 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-7002#configuration\n\n    If the parameter is not currently used within the tests, it is commented\n    out.\n    \"\"\"\n\n    WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS = 0x00A3CA265EBCB825B45F985A16CEFB49958CE017\n    SYSTEM_ADDRESS = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE\n\n    EXCESS_WITHDRAWAL_REQUESTS_STORAGE_SLOT = 0\n    WITHDRAWAL_REQUEST_COUNT_STORAGE_SLOT = 1\n    WITHDRAWAL_REQUEST_QUEUE_HEAD_STORAGE_SLOT = (\n        2  # Pointer to head of the withdrawal request message queue\n    )\n    WITHDRAWAL_REQUEST_QUEUE_TAIL_STORAGE_SLOT = (\n        3  # Pointer to the tail of the withdrawal request message queue\n    )\n    WITHDRAWAL_REQUEST_QUEUE_STORAGE_OFFSET = (\n        4  # The start memory slot of the in-state withdrawal request message queue\n    )\n    MAX_WITHDRAWAL_REQUESTS_PER_BLOCK = (\n        16  # Maximum number of withdrawal requests that can be de-queued into a block\n    )\n    TARGET_WITHDRAWAL_REQUESTS_PER_BLOCK = 2\n    MIN_WITHDRAWAL_REQUEST_FEE = 1\n    WITHDRAWAL_REQUEST_FEE_UPDATE_FRACTION = 17\n    EXCESS_RETURN_GAS_STIPEND = 2300\n\n    MAX_AMOUNT = 2**64 - 1\n\n    @staticmethod\n    def fake_exponential(factor: int, numerator: int, denominator: int) -> int:\n        \"\"\"\n        Used to calculate the withdrawal request fee.\n        \"\"\"\n        i = 1\n        output = 0\n        numerator_accumulator = factor * denominator\n        while numerator_accumulator > 0:\n            output += numerator_accumulator\n            numerator_accumulator = (numerator_accumulator * numerator) // (denominator * i)\n            i += 1\n        return output // denominator\n\n    @staticmethod\n    def get_fee(excess_withdrawal_requests: int) -> int:\n        \"\"\"\n        Calculate the fee for the excess withdrawal requests.\n        \"\"\"\n        return Spec.fake_exponential(\n            Spec.MIN_WITHDRAWAL_REQUEST_FEE,\n            excess_withdrawal_requests,\n            Spec.WITHDRAWAL_REQUEST_FEE_UPDATE_FRACTION,\n        )\n\n    @staticmethod\n    def get_excess_withdrawal_requests(previous_excess: int, count: int) -> int:\n        \"\"\"\n        Calculate the new excess withdrawal requests.\n        \"\"\"\n        if previous_excess + count > Spec.TARGET_WITHDRAWAL_REQUESTS_PER_BLOCK:\n            return previous_excess + count - Spec.TARGET_WITHDRAWAL_REQUESTS_PER_BLOCK\n        return 0\n
    "},{"location":"tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests/","title":"Test Withdrawal Requests","text":"

    Documentation for tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-7002: Execution layer triggerable withdrawals

    Test execution layer triggered exits EIP-7002: Execution layer triggerable withdrawals

    "},{"location":"tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests/#tests.prague.eip7002_el_triggerable_withdrawals.test_withdrawal_requests.test_withdrawal_requests","title":"test_withdrawal_requests(blockchain_test, blocks, pre)","text":"

    Test making a withdrawal request to the beacon chain.

    Source code in tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py
    @pytest.mark.parametrize(\n    \"blocks_withdrawal_requests\",\n    [\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_single_withdrawal_request_from_eoa\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=0,\n                                valid=False,\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_single_withdrawal_request_from_eoa_insufficient_fee\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                                calldata_modifier=lambda x: x[:-1],\n                                valid=False,\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_single_withdrawal_request_from_eoa_input_too_short\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                                calldata_modifier=lambda x: x + b\"\\x00\",\n                                valid=False,\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_single_withdrawal_request_from_eoa_input_too_long\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                            ),\n                            WithdrawalRequest(\n                                validator_pubkey=0x02,\n                                amount=Spec.MAX_AMOUNT - 1,\n                                fee=Spec.get_fee(0),\n                            ),\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_request_from_same_eoa\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                            )\n                        ],\n                    ),\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x02,\n                                amount=Spec.MAX_AMOUNT - 1,\n                                fee=Spec.get_fee(0),\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_request_from_different_eoa\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=i + 1,\n                                amount=0 if i % 2 == 0 else Spec.MAX_AMOUNT,\n                                fee=Spec.get_fee(0),\n                            )\n                            for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK)\n                        ],\n                    )\n                ],\n            ],\n            id=\"single_block_max_withdrawal_requests_from_eoa\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=0,\n                            ),\n                            WithdrawalRequest(\n                                validator_pubkey=0x02,\n                                amount=Spec.MAX_AMOUNT - 1,\n                                fee=Spec.get_fee(0),\n                            ),\n                        ]\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_request_first_reverts\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                            ),\n                            WithdrawalRequest(\n                                validator_pubkey=0x02,\n                                amount=Spec.MAX_AMOUNT - 1,\n                                fee=0,\n                            ),\n                        ]\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_request_last_reverts\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                                # Value obtained from trace minus one\n                                gas_limit=114_247 - 1,\n                                valid=False,\n                            ),\n                            WithdrawalRequest(\n                                validator_pubkey=0x02,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                            ),\n                        ]\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_request_first_oog\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                            ),\n                            WithdrawalRequest(\n                                validator_pubkey=0x02,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                                # Value obtained from trace minus one\n                                gas_limit=80_047 - 1,\n                                valid=False,\n                            ),\n                        ]\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_request_last_oog\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=i + 1,\n                                amount=0 if i % 2 == 0 else Spec.MAX_AMOUNT,\n                                fee=Spec.get_fee(0),\n                            )\n                            for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK * 2)\n                        ]\n                    )\n                ],\n            ],\n            id=\"multiple_block_above_max_withdrawal_requests_from_eoa\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                            ),\n                        ]\n                    ),\n                ],\n            ],\n            id=\"single_block_single_withdrawal_request_from_contract\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=i + 1,\n                                amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0,\n                                fee=Spec.get_fee(0),\n                            )\n                            for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK)\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_requests_from_contract\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=1,\n                                amount=Spec.MAX_AMOUNT,\n                                fee=0,\n                            )\n                        ]\n                        + [\n                            WithdrawalRequest(\n                                validator_pubkey=i + 1,\n                                amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0,\n                                fee=Spec.get_fee(0),\n                            )\n                            for i in range(1, Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK)\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_requests_from_contract_first_reverts\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=i + 1,\n                                amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0,\n                                fee=Spec.get_fee(0),\n                            )\n                            for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK - 1)\n                        ]\n                        + [\n                            WithdrawalRequest(\n                                validator_pubkey=Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK,\n                                amount=Spec.MAX_AMOUNT - 1\n                                if (Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK - 1) % 2 == 0\n                                else 0,\n                                fee=0,\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_requests_from_contract_last_reverts\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=1,\n                                amount=Spec.MAX_AMOUNT - 1,\n                                gas_limit=100,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                        ]\n                        + [\n                            WithdrawalRequest(\n                                validator_pubkey=i + 1,\n                                amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0,\n                                gas_limit=1_000_000,\n                                fee=Spec.get_fee(0),\n                                valid=True,\n                            )\n                            for i in range(1, Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK)\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_requests_from_contract_first_oog\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=i + 1,\n                                amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0,\n                                fee=Spec.get_fee(0),\n                                gas_limit=1_000_000,\n                                valid=True,\n                            )\n                            for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK)\n                        ]\n                        + [\n                            WithdrawalRequest(\n                                validator_pubkey=Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK,\n                                amount=Spec.MAX_AMOUNT - 1,\n                                gas_limit=100,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_requests_from_contract_last_oog\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=i + 1,\n                                amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                            for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK)\n                        ],\n                        extra_code=Op.REVERT(0, 0),\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_requests_from_contract_caller_reverts\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=i + 1,\n                                amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                            for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK)\n                        ],\n                        extra_code=Macros.OOG(),\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_requests_from_contract_caller_oog\",\n        ),\n        pytest.param(\n            # Test the first 50 fee increments\n            get_n_fee_increment_blocks(50),\n            id=\"multiple_block_fee_increments\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                        ],\n                        call_type=Op.DELEGATECALL,\n                    ),\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                        ],\n                        call_type=Op.STATICCALL,\n                    ),\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                        ],\n                        call_type=Op.CALLCODE,\n                    ),\n                ],\n            ],\n            id=\"single_block_single_withdrawal_request_delegatecall_staticcall_callcode\",\n        ),\n    ],\n)\ndef test_withdrawal_requests(\n    blockchain_test: BlockchainTestFiller,\n    blocks: List[Block],\n    pre: Alloc,\n):\n    \"\"\"\n    Test making a withdrawal request to the beacon chain.\n    \"\"\"\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post={},\n        blocks=blocks,\n    )\n
    "},{"location":"tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests/#tests.prague.eip7002_el_triggerable_withdrawals.test_withdrawal_requests.test_withdrawal_requests_negative","title":"test_withdrawal_requests_negative(pre, blockchain_test, requests, block_body_override_requests, exception)","text":"

    Test blocks where the requests list and the actual withdrawal requests that happened in the block's transactions do not match.

    Source code in tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py
    @pytest.mark.parametrize(\n    \"requests,block_body_override_requests,exception\",\n    [\n        pytest.param(\n            [],\n            [\n                WithdrawalRequest(\n                    validator_pubkey=0x01,\n                    amount=0,\n                    source_address=Address(0),\n                ),\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"no_withdrawals_non_empty_requests_list\",\n        ),\n        pytest.param(\n            [\n                WithdrawalRequestTransaction(\n                    requests=[\n                        WithdrawalRequest(\n                            validator_pubkey=0x01,\n                            amount=0,\n                            fee=Spec.get_fee(0),\n                        ),\n                    ]\n                ),\n            ],\n            [],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_withdrawal_request_empty_requests_list\",\n        ),\n        pytest.param(\n            [\n                WithdrawalRequestTransaction(\n                    requests=[\n                        WithdrawalRequest(\n                            validator_pubkey=0x01,\n                            amount=0,\n                            fee=Spec.get_fee(0),\n                        ),\n                    ]\n                ),\n            ],\n            [\n                WithdrawalRequest(\n                    validator_pubkey=0x02,\n                    amount=0,\n                    source_address=TestAddress,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_withdrawal_request_public_key_mismatch\",\n        ),\n        pytest.param(\n            [\n                WithdrawalRequestTransaction(\n                    requests=[\n                        WithdrawalRequest(\n                            validator_pubkey=0x01,\n                            amount=0,\n                            fee=Spec.get_fee(0),\n                        )\n                    ],\n                ),\n            ],\n            [\n                WithdrawalRequest(\n                    validator_pubkey=0x01,\n                    amount=1,\n                    source_address=TestAddress,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_withdrawal_request_amount_mismatch\",\n        ),\n        pytest.param(\n            [\n                WithdrawalRequestTransaction(\n                    requests=[\n                        WithdrawalRequest(\n                            validator_pubkey=0x01,\n                            amount=0,\n                            fee=Spec.get_fee(0),\n                        )\n                    ],\n                ),\n            ],\n            [\n                WithdrawalRequest(\n                    validator_pubkey=0x01,\n                    amount=0,\n                    source_address=TestAddress2,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_withdrawal_request_source_address_mismatch\",\n        ),\n        pytest.param(\n            [\n                WithdrawalRequestTransaction(\n                    requests=[\n                        WithdrawalRequest(\n                            validator_pubkey=0x01,\n                            amount=0,\n                            fee=Spec.get_fee(0),\n                        ),\n                        WithdrawalRequest(\n                            validator_pubkey=0x02,\n                            amount=0,\n                            fee=Spec.get_fee(0),\n                        ),\n                    ],\n                ),\n            ],\n            [\n                WithdrawalRequest(\n                    validator_pubkey=0x02,\n                    amount=0,\n                    source_address=TestAddress,\n                ),\n                WithdrawalRequest(\n                    validator_pubkey=0x01,\n                    amount=0,\n                    source_address=TestAddress,\n                ),\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"two_withdrawal_requests_out_of_order\",\n        ),\n        pytest.param(\n            [\n                WithdrawalRequestTransaction(\n                    requests=[\n                        WithdrawalRequest(\n                            validator_pubkey=0x01,\n                            amount=0,\n                            fee=Spec.get_fee(0),\n                        )\n                    ],\n                ),\n            ],\n            [\n                WithdrawalRequest(\n                    validator_pubkey=0x01,\n                    amount=0,\n                    source_address=TestAddress,\n                ),\n                WithdrawalRequest(\n                    validator_pubkey=0x01,\n                    amount=0,\n                    source_address=TestAddress,\n                ),\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_withdrawal_requests_duplicate_in_requests_list\",\n        ),\n    ],\n)\ndef test_withdrawal_requests_negative(\n    pre: Alloc,\n    blockchain_test: BlockchainTestFiller,\n    requests: List[WithdrawalRequestInteractionBase],\n    block_body_override_requests: List[WithdrawalRequest],\n    exception: BlockException,\n):\n    \"\"\"\n    Test blocks where the requests list and the actual withdrawal requests that happened in the\n    block's transactions do not match.\n    \"\"\"\n    for d in requests:\n        d.update_pre(pre)\n\n    # No previous block so fee is the base\n    fee = 1\n    current_block_requests = []\n    for w in requests:\n        current_block_requests += w.valid_requests(fee)\n    included_requests = current_block_requests[: Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK]\n\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post={},\n        blocks=[\n            Block(\n                txs=sum((r.transactions() for r in requests), []),\n                header_verify=Header(\n                    requests_root=included_requests,\n                ),\n                requests=block_body_override_requests,\n                exception=exception,\n            )\n        ],\n    )\n
    "},{"location":"tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests/index/test_cases/","title":"Test Withdrawal Requests - Test Cases","text":"

    Test cases generated from tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py

    Parametrized test cases generated from the test module tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py:

    test_withdrawal_requests[fork_Prague-blockchain_test-single_block_single_withdrawal_request_from_eoa]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_single_withdrawal_request_from_eoa_insufficient_fee]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_single_withdrawal_request_from_eoa_input_too_short]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_single_withdrawal_request_from_eoa_input_too_long]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_request_from_same_eoa]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_request_from_different_eoa]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_max_withdrawal_requests_from_eoa]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_request_first_reverts]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_request_last_reverts]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_request_first_oog]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_request_last_oog]\ntest_withdrawal_requests[fork_Prague-blockchain_test-multiple_block_above_max_withdrawal_requests_from_eoa]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_single_withdrawal_request_from_contract]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_requests_from_contract]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_requests_from_contract_first_reverts]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_requests_from_contract_last_reverts]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_requests_from_contract_first_oog]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_requests_from_contract_last_oog]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_requests_from_contract_caller_reverts]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_requests_from_contract_caller_oog]\ntest_withdrawal_requests[fork_Prague-blockchain_test-multiple_block_fee_increments]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_single_withdrawal_request_delegatecall_staticcall_callcode]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_single_withdrawal_request_from_eoa]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_single_withdrawal_request_from_eoa_insufficient_fee]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_single_withdrawal_request_from_eoa_input_too_short]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_single_withdrawal_request_from_eoa_input_too_long]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_request_from_same_eoa]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_request_from_different_eoa]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_max_withdrawal_requests_from_eoa]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_request_first_reverts]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_request_last_reverts]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_request_first_oog]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_request_last_oog]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-multiple_block_above_max_withdrawal_requests_from_eoa]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_single_withdrawal_request_from_contract]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_requests_from_contract]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_requests_from_contract_first_reverts]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_requests_from_contract_last_reverts]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_requests_from_contract_first_oog]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_requests_from_contract_last_oog]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_requests_from_contract_caller_reverts]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_requests_from_contract_caller_oog]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-multiple_block_fee_increments]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_single_withdrawal_request_delegatecall_staticcall_callcode]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test-no_withdrawals_non_empty_requests_list]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test-single_withdrawal_request_empty_requests_list]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test-single_withdrawal_request_public_key_mismatch]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test-single_withdrawal_request_amount_mismatch]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test-single_withdrawal_request_source_address_mismatch]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test-two_withdrawal_requests_out_of_order]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test-single_withdrawal_requests_duplicate_in_requests_list]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test_engine-no_withdrawals_non_empty_requests_list]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test_engine-single_withdrawal_request_empty_requests_list]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test_engine-single_withdrawal_request_public_key_mismatch]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test_engine-single_withdrawal_request_amount_mismatch]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test_engine-single_withdrawal_request_source_address_mismatch]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test_engine-two_withdrawal_requests_out_of_order]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test_engine-single_withdrawal_requests_duplicate_in_requests_list]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py\n
    "},{"location":"tests/prague/eip7251_consolidations/","title":"EIP-7251 Consolidations","text":"

    Documentation for tests/prague/eip7251_consolidations.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7251_consolidations --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7251_consolidations --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Cross-client EIP-7251 Tests

    "},{"location":"tests/prague/eip7251_consolidations/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip7251_consolidations/spec.py.

    Defines EIP-7251 specification constants and functions.

    "},{"location":"tests/prague/eip7251_consolidations/spec/#tests.prague.eip7251_consolidations.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-7251 specifications as defined at https://eips.ethereum.org/EIPS/eip-7251#execution-layer

    Source code in tests/prague/eip7251_consolidations/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-7251 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-7251#execution-layer\n    \"\"\"\n\n    CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS = 0x00B42DBF2194E931E80326D950320F7D9DBEAC02\n    SYSTEM_ADDRESS = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE\n\n    EXCESS_CONSOLIDATION_REQUESTS_STORAGE_SLOT = 0\n    CONSOLIDATION_REQUEST_COUNT_STORAGE_SLOT = 1\n    CONSOLIDATION_REQUEST_QUEUE_HEAD_STORAGE_SLOT = (\n        2  # Pointer to head of the consolidation request message queue\n    )\n    CONSOLIDATION_REQUEST_QUEUE_TAIL_STORAGE_SLOT = (\n        3  # Pointer to the tail of the consolidation request message queue\n    )\n    CONSOLIDATION_REQUEST_QUEUE_STORAGE_OFFSET = (\n        4  # The start memory slot of the in-state consolidation request message queue\n    )\n    MAX_CONSOLIDATION_REQUESTS_PER_BLOCK = (\n        1  # Maximum number of consolidation requests that can be de-queued into a block\n    )\n    TARGET_CONSOLIDATION_REQUESTS_PER_BLOCK = 1\n    MIN_CONSOLIDATION_REQUEST_FEE = 1\n    CONSOLIDATION_REQUEST_FEE_UPDATE_FRACTION = 17\n    EXCESS_INHIBITOR = 1181\n\n    @staticmethod\n    def fake_exponential(factor: int, numerator: int, denominator: int) -> int:\n        \"\"\"\n        Used to calculate the consolidation request fee.\n        \"\"\"\n        i = 1\n        output = 0\n        numerator_accumulator = factor * denominator\n        while numerator_accumulator > 0:\n            output += numerator_accumulator\n            numerator_accumulator = (numerator_accumulator * numerator) // (denominator * i)\n            i += 1\n        return output // denominator\n\n    @staticmethod\n    def get_fee(excess_consolidation_requests: int) -> int:\n        \"\"\"\n        Calculate the fee for the excess consolidation requests.\n        \"\"\"\n        return Spec.fake_exponential(\n            Spec.MIN_CONSOLIDATION_REQUEST_FEE,\n            excess_consolidation_requests,\n            Spec.CONSOLIDATION_REQUEST_FEE_UPDATE_FRACTION,\n        )\n\n    @staticmethod\n    def get_excess_consolidation_requests(previous_excess: int, count: int) -> int:\n        \"\"\"\n        Calculate the new excess consolidation requests.\n        \"\"\"\n        if previous_excess + count > Spec.TARGET_CONSOLIDATION_REQUESTS_PER_BLOCK:\n            return previous_excess + count - Spec.TARGET_CONSOLIDATION_REQUESTS_PER_BLOCK\n        return 0\n
    "},{"location":"tests/prague/eip7251_consolidations/test_consolidations/","title":"Test Consolidations","text":"

    Documentation for tests/prague/eip7251_consolidations/test_consolidations.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7251_consolidations/test_consolidations.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7251_consolidations/test_consolidations.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-7251: Increase the MAX_EFFECTIVE_BALANCE

    Test execution layer triggered consolidations EIP-7251: Increase the MAX_EFFECTIVE_BALANCE

    "},{"location":"tests/prague/eip7251_consolidations/test_consolidations/#tests.prague.eip7251_consolidations.test_consolidations.test_consolidation_requests","title":"test_consolidation_requests(blockchain_test, blocks, pre)","text":"

    Test making a consolidation request to the beacon chain.

    Source code in tests/prague/eip7251_consolidations/test_consolidations.py
    @pytest.mark.parametrize(\n    \"blocks_consolidation_requests\",\n    [\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_single_consolidation_request_from_eoa\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x01,\n                                fee=Spec.get_fee(0),\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_single_consolidation_request_from_eoa_equal_pubkeys\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=-1,\n                                target_pubkey=-2,\n                                fee=Spec.get_fee(0),\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_single_consolidation_request_from_eoa_max_pubkeys\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=0,\n                                valid=False,\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_single_consolidation_request_from_eoa_insufficient_fee\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                                calldata_modifier=lambda x: x[:-1],\n                                valid=False,\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_single_consolidation_request_from_eoa_input_too_short\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                                calldata_modifier=lambda x: x + b\"\\x00\",\n                                valid=False,\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_single_consolidation_request_from_eoa_input_too_long\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                            ),\n                            ConsolidationRequest(\n                                source_pubkey=0x03,\n                                target_pubkey=0x04,\n                                fee=Spec.get_fee(0),\n                            ),\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_request_from_same_eoa\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                            )\n                        ],\n                    ),\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x03,\n                                target_pubkey=0x04,\n                                fee=Spec.get_fee(0),\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_request_from_different_eoa\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=i * 2,\n                                target_pubkey=i * 2 + 1,\n                                fee=Spec.get_fee(0),\n                            )\n                            for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK)\n                        ],\n                    )\n                ],\n            ],\n            marks=pytest.mark.skip(\n                reason=\"duplicate test due to MAX_CONSOLIDATION_REQUESTS_PER_BLOCK==1\"\n            ),\n            id=\"single_block_max_consolidation_requests_from_eoa\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=0,\n                            ),\n                            ConsolidationRequest(\n                                source_pubkey=0x03,\n                                target_pubkey=0x04,\n                                fee=Spec.get_fee(0),\n                            ),\n                        ]\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_request_first_reverts\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                            ),\n                            ConsolidationRequest(\n                                source_pubkey=0x03,\n                                target_pubkey=0x04,\n                                fee=0,\n                            ),\n                        ]\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_request_last_reverts\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                                gas_limit=136_534 - 1,\n                                valid=False,\n                            ),\n                            ConsolidationRequest(\n                                source_pubkey=0x03,\n                                target_pubkey=0x04,\n                                fee=Spec.get_fee(0),\n                            ),\n                        ]\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_request_first_oog\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                            ),\n                            ConsolidationRequest(\n                                source_pubkey=0x03,\n                                target_pubkey=0x04,\n                                fee=Spec.get_fee(0),\n                                gas_limit=102_334 - 1,\n                                valid=False,\n                            ),\n                        ]\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_request_last_oog\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=i * 2,\n                                target_pubkey=i * 2 + 1,\n                                fee=Spec.get_fee(0),\n                            )\n                            for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5)\n                        ]\n                    )\n                ],\n            ],\n            id=\"multiple_block_above_max_consolidation_requests_from_eoa\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                            ),\n                        ]\n                    ),\n                ],\n            ],\n            id=\"single_block_single_consolidation_request_from_contract\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=i * 2,\n                                target_pubkey=i * 2 + 1,\n                                fee=Spec.get_fee(0),\n                            )\n                            for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5)\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_requests_from_contract\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x00,\n                                target_pubkey=0x01,\n                                fee=0,\n                            )\n                        ]\n                        + [\n                            ConsolidationRequest(\n                                source_pubkey=i * 2,\n                                target_pubkey=i * 2 + 1,\n                                fee=Spec.get_fee(0),\n                            )\n                            for i in range(1, Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5)\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_requests_from_contract_first_reverts\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=i * 2,\n                                target_pubkey=i * 2 + 1,\n                                fee=Spec.get_fee(0),\n                            )\n                            for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5)\n                        ]\n                        + [\n                            ConsolidationRequest(\n                                source_pubkey=-1,\n                                target_pubkey=-2,\n                                fee=0,\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_requests_from_contract_last_reverts\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=-1,\n                                target_pubkey=-2,\n                                gas_limit=100,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                        ]\n                        + [\n                            ConsolidationRequest(\n                                source_pubkey=i * 2,\n                                target_pubkey=i * 2 + 1,\n                                gas_limit=1_000_000,\n                                fee=Spec.get_fee(0),\n                                valid=True,\n                            )\n                            for i in range(1, Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5)\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_requests_from_contract_first_oog\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=i * 2,\n                                target_pubkey=i * 2 + 1,\n                                fee=Spec.get_fee(0),\n                                gas_limit=1_000_000,\n                                valid=True,\n                            )\n                            for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5)\n                        ]\n                        + [\n                            ConsolidationRequest(\n                                source_pubkey=-1,\n                                target_pubkey=-2,\n                                gas_limit=100,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_requests_from_contract_last_oog\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=i * 2,\n                                target_pubkey=i * 2 + 1,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                            for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5)\n                        ],\n                        extra_code=Op.REVERT(0, 0),\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_requests_from_contract_caller_reverts\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=i * 2,\n                                target_pubkey=i * 2 + 1,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                            for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5)\n                        ],\n                        extra_code=Macros.OOG(),\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_requests_from_contract_caller_oog\",\n        ),\n        pytest.param(\n            # Test the first 50 fee increments\n            get_n_fee_increment_blocks(50),\n            id=\"multiple_block_fee_increments\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                        ],\n                        call_type=Op.DELEGATECALL,\n                    ),\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                        ],\n                        call_type=Op.STATICCALL,\n                    ),\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                        ],\n                        call_type=Op.CALLCODE,\n                    ),\n                ],\n            ],\n            id=\"single_block_single_consolidation_request_delegatecall_staticcall_callcode\",\n        ),\n    ],\n)\ndef test_consolidation_requests(\n    blockchain_test: BlockchainTestFiller,\n    blocks: List[Block],\n    pre: Alloc,\n):\n    \"\"\"\n    Test making a consolidation request to the beacon chain.\n    \"\"\"\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post={},\n        blocks=blocks,\n    )\n
    "},{"location":"tests/prague/eip7251_consolidations/test_consolidations/#tests.prague.eip7251_consolidations.test_consolidations.test_consolidation_requests_negative","title":"test_consolidation_requests_negative(pre, blockchain_test, requests, block_body_override_requests, exception)","text":"

    Test blocks where the requests list and the actual consolidation requests that happened in the block's transactions do not match.

    Source code in tests/prague/eip7251_consolidations/test_consolidations.py
    @pytest.mark.parametrize(\n    \"requests,block_body_override_requests,exception\",\n    [\n        pytest.param(\n            [],\n            [\n                ConsolidationRequest(\n                    source_pubkey=0x01,\n                    target_pubkey=0x02,\n                    source_address=Address(0),\n                ),\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"no_consolidations_non_empty_requests_list\",\n        ),\n        pytest.param(\n            [\n                ConsolidationRequestTransaction(\n                    requests=[\n                        ConsolidationRequest(\n                            source_pubkey=0x01,\n                            target_pubkey=0x02,\n                            fee=Spec.get_fee(0),\n                        ),\n                    ]\n                ),\n            ],\n            [],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_consolidation_request_empty_requests_list\",\n        ),\n        pytest.param(\n            [\n                ConsolidationRequestTransaction(\n                    requests=[\n                        ConsolidationRequest(\n                            source_pubkey=0x01,\n                            target_pubkey=0x02,\n                            fee=Spec.get_fee(0),\n                        ),\n                    ]\n                ),\n            ],\n            [\n                ConsolidationRequest(\n                    source_pubkey=0x00,\n                    target_pubkey=0x02,\n                    source_address=TestAddress,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_consolidation_request_source_public_key_mismatch\",\n        ),\n        pytest.param(\n            [\n                ConsolidationRequestTransaction(\n                    requests=[\n                        ConsolidationRequest(\n                            source_pubkey=0x01,\n                            target_pubkey=0x02,\n                            fee=Spec.get_fee(0),\n                        ),\n                    ]\n                ),\n            ],\n            [\n                ConsolidationRequest(\n                    source_pubkey=0x01,\n                    target_pubkey=0x00,\n                    source_address=TestAddress,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_consolidation_request_target_public_key_mismatch\",\n        ),\n        pytest.param(\n            [\n                ConsolidationRequestTransaction(\n                    requests=[\n                        ConsolidationRequest(\n                            source_pubkey=0x01,\n                            target_pubkey=0x02,\n                            fee=Spec.get_fee(0),\n                        ),\n                    ]\n                ),\n            ],\n            [\n                ConsolidationRequest(\n                    source_pubkey=0x02,\n                    target_pubkey=0x01,\n                    source_address=TestAddress,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_consolidation_request_pubkeys_swapped\",\n        ),\n        pytest.param(\n            [\n                ConsolidationRequestTransaction(\n                    requests=[\n                        ConsolidationRequest(\n                            source_pubkey=0x01,\n                            target_pubkey=0x02,\n                            fee=Spec.get_fee(0),\n                        )\n                    ],\n                ),\n            ],\n            [\n                ConsolidationRequest(\n                    source_pubkey=0x01,\n                    target_pubkey=0x02,\n                    source_address=TestAddress2,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_consolidation_request_source_address_mismatch\",\n        ),\n        pytest.param(\n            [\n                ConsolidationRequestTransaction(\n                    requests=[\n                        ConsolidationRequest(\n                            source_pubkey=0x01,\n                            target_pubkey=0x02,\n                            fee=Spec.get_fee(0),\n                        ),\n                        ConsolidationRequest(\n                            source_pubkey=0x03,\n                            target_pubkey=0x04,\n                            fee=Spec.get_fee(0),\n                        ),\n                    ],\n                ),\n            ],\n            [\n                ConsolidationRequest(\n                    source_pubkey=0x03,\n                    target_pubkey=0x04,\n                    source_address=TestAddress,\n                ),\n                ConsolidationRequest(\n                    source_pubkey=0x01,\n                    target_pubkey=0x02,\n                    source_address=TestAddress,\n                ),\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"two_consolidation_requests_out_of_order\",\n        ),\n        pytest.param(\n            [\n                ConsolidationRequestTransaction(\n                    requests=[\n                        ConsolidationRequest(\n                            source_pubkey=0x01,\n                            target_pubkey=0x02,\n                            fee=Spec.get_fee(0),\n                        )\n                    ],\n                ),\n            ],\n            [\n                ConsolidationRequest(\n                    source_pubkey=0x01,\n                    target_pubkey=0x02,\n                    source_address=TestAddress,\n                ),\n                ConsolidationRequest(\n                    source_pubkey=0x01,\n                    target_pubkey=0x02,\n                    source_address=TestAddress,\n                ),\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_consolidation_requests_duplicate_in_requests_list\",\n        ),\n    ],\n)\ndef test_consolidation_requests_negative(\n    pre: Alloc,\n    blockchain_test: BlockchainTestFiller,\n    requests: List[ConsolidationRequestInteractionBase],\n    block_body_override_requests: List[ConsolidationRequest],\n    exception: BlockException,\n):\n    \"\"\"\n    Test blocks where the requests list and the actual consolidation requests that happened in the\n    block's transactions do not match.\n    \"\"\"\n    for d in requests:\n        d.update_pre(pre)\n\n    # No previous block so fee is the base\n    fee = 1\n    current_block_requests = []\n    for w in requests:\n        current_block_requests += w.valid_requests(fee)\n    included_requests = current_block_requests[: Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK]\n\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post={},\n        blocks=[\n            Block(\n                txs=sum((r.transactions() for r in requests), []),\n                header_verify=Header(\n                    requests_root=included_requests,\n                ),\n                requests=block_body_override_requests,\n                exception=exception,\n            )\n        ],\n    )\n
    "},{"location":"tests/prague/eip7251_consolidations/test_consolidations/index/test_cases/","title":"Test Consolidations - Test Cases","text":"

    Test cases generated from tests/prague/eip7251_consolidations/test_consolidations.py

    Parametrized test cases generated from the test module tests/prague/eip7251_consolidations/test_consolidations.py:

    test_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_eoa]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_eoa_equal_pubkeys]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_eoa_max_pubkeys]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_eoa_insufficient_fee]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_eoa_input_too_short]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_eoa_input_too_long]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_request_from_same_eoa]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_request_from_different_eoa]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_max_consolidation_requests_from_eoa]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_request_first_reverts]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_request_last_reverts]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_request_first_oog]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_request_last_oog]\ntest_consolidation_requests[fork_Prague-blockchain_test-multiple_block_above_max_consolidation_requests_from_eoa]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_contract]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_requests_from_contract]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_requests_from_contract_first_reverts]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_requests_from_contract_last_reverts]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_requests_from_contract_first_oog]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_requests_from_contract_last_oog]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_requests_from_contract_caller_reverts]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_requests_from_contract_caller_oog]\ntest_consolidation_requests[fork_Prague-blockchain_test-multiple_block_fee_increments]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_delegatecall_staticcall_callcode]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_single_consolidation_request_from_eoa]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_single_consolidation_request_from_eoa_equal_pubkeys]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_single_consolidation_request_from_eoa_max_pubkeys]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_single_consolidation_request_from_eoa_insufficient_fee]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_single_consolidation_request_from_eoa_input_too_short]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_single_consolidation_request_from_eoa_input_too_long]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_request_from_same_eoa]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_request_from_different_eoa]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_max_consolidation_requests_from_eoa]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_request_first_reverts]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_request_last_reverts]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_request_first_oog]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_request_last_oog]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-multiple_block_above_max_consolidation_requests_from_eoa]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_single_consolidation_request_from_contract]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_requests_from_contract]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_requests_from_contract_first_reverts]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_requests_from_contract_last_reverts]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_requests_from_contract_first_oog]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_requests_from_contract_last_oog]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_requests_from_contract_caller_reverts]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_requests_from_contract_caller_oog]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-multiple_block_fee_increments]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_single_consolidation_request_delegatecall_staticcall_callcode]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test-no_consolidations_non_empty_requests_list]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test-single_consolidation_request_empty_requests_list]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test-single_consolidation_request_source_public_key_mismatch]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test-single_consolidation_request_target_public_key_mismatch]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test-single_consolidation_request_pubkeys_swapped]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test-single_consolidation_request_source_address_mismatch]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test-two_consolidation_requests_out_of_order]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test-single_consolidation_requests_duplicate_in_requests_list]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test_engine-no_consolidations_non_empty_requests_list]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test_engine-single_consolidation_request_empty_requests_list]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test_engine-single_consolidation_request_source_public_key_mismatch]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test_engine-single_consolidation_request_target_public_key_mismatch]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test_engine-single_consolidation_request_pubkeys_swapped]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test_engine-single_consolidation_request_source_address_mismatch]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test_engine-two_consolidation_requests_out_of_order]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test_engine-single_consolidation_requests_duplicate_in_requests_list]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip7251_consolidations/test_consolidations.py\n
    "},{"location":"tests/prague/eip7685_general_purpose_el_requests/","title":"EIP-7685 General Purpose El Requests","text":"

    Documentation for tests/prague/eip7685_general_purpose_el_requests.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7685_general_purpose_el_requests --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7685_general_purpose_el_requests --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Cross-client EIP-7685 Tests

    "},{"location":"tests/prague/eip7685_general_purpose_el_requests/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip7685_general_purpose_el_requests/spec.py.

    Common procedures to test EIP-7685: General purpose execution layer requests

    "},{"location":"tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations/","title":"Test Deposits Withdrawals Consolidations","text":"

    Documentation for tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-7685: General purpose execution layer requests

    Cross testing for withdrawal and deposit request for EIP-7685: General purpose execution layer requests

    "},{"location":"tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations/#tests.prague.eip7685_general_purpose_el_requests.test_deposits_withdrawals_consolidations.test_valid_deposit_withdrawal_consolidation_requests","title":"test_valid_deposit_withdrawal_consolidation_requests(blockchain_test, pre, blocks)","text":"

    Test making a deposit to the beacon chain deposit contract and a withdrawal in the same block.

    Source code in tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py
    @pytest.mark.parametrize(\n    \"requests\",\n    [\n        *get_eoa_permutations(),\n        *get_contract_permutations(),\n        pytest.param(\n            [\n                single_deposit_from_eoa(0),\n                single_withdrawal_from_eoa(0),\n                single_deposit_from_contract(1),\n            ],\n            id=\"deposit_from_eoa+withdrawal_from_eoa+deposit_from_contract\",\n        ),\n        pytest.param(\n            [\n                single_withdrawal_from_eoa(0),\n                single_deposit_from_eoa(0),\n                single_withdrawal_from_contract(1),\n            ],\n            id=\"withdrawal_from_eoa+deposit_from_eoa+withdrawal_from_contract\",\n        ),\n        pytest.param(\n            [\n                single_deposit_from_eoa(0),\n                single_consolidation_from_eoa(0),\n                single_deposit_from_contract(1),\n            ],\n            id=\"deposit_from_eoa+consolidation_from_eoa+deposit_from_contract\",\n        ),\n        pytest.param(\n            [\n                single_consolidation_from_eoa(0),\n                single_deposit_from_eoa(0),\n                single_consolidation_from_contract(1),\n            ],\n            marks=pytest.mark.skip(\"Only one consolidation request is allowed per block\"),\n            id=\"consolidation_from_eoa+deposit_from_eoa+consolidation_from_contract\",\n        ),\n        pytest.param(\n            [\n                single_consolidation_from_eoa(0),\n                single_withdrawal_from_eoa(0),\n                single_consolidation_from_contract(1),\n            ],\n            marks=pytest.mark.skip(\"Only one consolidation request is allowed per block\"),\n            id=\"consolidation_from_eoa+withdrawal_from_eoa+consolidation_from_contract\",\n        ),\n        pytest.param(\n            [\n                single_withdrawal_from_eoa(0),\n                single_consolidation_from_eoa(0),\n                single_withdrawal_from_contract(1),\n            ],\n            id=\"withdrawal_from_eoa+consolidation_from_eoa+withdrawal_from_contract\",\n        ),\n    ],\n)\ndef test_valid_deposit_withdrawal_consolidation_requests(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    blocks: List[Block],\n):\n    \"\"\"\n    Test making a deposit to the beacon chain deposit contract and a withdrawal in the same block.\n    \"\"\"\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post={},\n        blocks=blocks,\n    )\n
    "},{"location":"tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations/#tests.prague.eip7685_general_purpose_el_requests.test_deposits_withdrawals_consolidations.test_valid_deposit_withdrawal_consolidation_request_from_same_tx","title":"test_valid_deposit_withdrawal_consolidation_request_from_same_tx(blockchain_test, pre, requests)","text":"

    Test making a deposit to the beacon chain deposit contract and a withdrawal in the same tx.

    Source code in tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py
    @pytest.mark.parametrize(\"requests\", [*get_permutations()])\ndef test_valid_deposit_withdrawal_consolidation_request_from_same_tx(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    requests: List[DepositRequest | WithdrawalRequest | ConsolidationRequest],\n):\n    \"\"\"\n    Test making a deposit to the beacon chain deposit contract and a withdrawal in the same tx.\n    \"\"\"\n    withdrawal_request_fee = 1\n    consolidation_request_fee = 1\n\n    calldata = b\"\"\n    contract_code = Bytecode()\n    total_value = 0\n    storage = Storage()\n\n    for request in requests:\n        calldata_start = len(calldata)\n        current_calldata = request.calldata\n        calldata += current_calldata\n\n        contract_code += Op.CALLDATACOPY(0, calldata_start, len(current_calldata))\n\n        call_contract_address = 0\n        value = 0\n        if isinstance(request, DepositRequest):\n            call_contract_address = Spec_EIP6110.DEPOSIT_CONTRACT_ADDRESS\n            value = request.value\n        elif isinstance(request, WithdrawalRequest):\n            call_contract_address = Spec_EIP7002.WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS\n            value = withdrawal_request_fee\n        elif isinstance(request, ConsolidationRequest):\n            call_contract_address = Spec_EIP7251.CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS\n            value = consolidation_request_fee\n\n        total_value += value\n\n        contract_code += Op.SSTORE(\n            storage.store_next(1),\n            Op.CALL(\n                address=call_contract_address,\n                value=value,\n                args_offset=0,\n                args_size=len(current_calldata),\n            ),\n        )\n\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=contract_code,\n    )\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=contract_address,\n        value=total_value,\n        data=calldata,\n        sender=sender,\n    )\n\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post={\n            contract_address: Account(\n                storage=storage,\n            )\n        },\n        blocks=[\n            Block(\n                txs=[tx],\n                header_verify=Header(\n                    requests_root=[\n                        request.with_source_address(contract_address)\n                        for request in sorted(requests, key=lambda r: r.type_byte())\n                    ]\n                ),\n            )\n        ],\n    )\n
    "},{"location":"tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations/#tests.prague.eip7685_general_purpose_el_requests.test_deposits_withdrawals_consolidations.test_invalid_deposit_withdrawal_consolidation_requests","title":"test_invalid_deposit_withdrawal_consolidation_requests(blockchain_test, pre, blocks)","text":"

    Negative testing for deposits and withdrawals in the same block.

    Source code in tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py
    @pytest.mark.parametrize(\n    \"requests,block_body_override_requests,exception\",\n    [\n        pytest.param(\n            [\n                single_withdrawal_from_eoa(0),\n                single_deposit_from_eoa(0),\n            ],\n            [\n                single_withdrawal(0).with_source_address(TestAddress),\n                single_deposit(0),\n            ],\n            # TODO: on the Engine API, the issue should be detected as an invalid block hash\n            BlockException.INVALID_REQUESTS,\n            id=\"single_withdrawal_single_deposit_incorrect_order\",\n        ),\n        pytest.param(\n            [\n                single_consolidation_from_eoa(0),\n                single_deposit_from_eoa(0),\n            ],\n            [\n                single_consolidation(0).with_source_address(TestAddress),\n                single_deposit(0),\n            ],\n            # TODO: on the Engine API, the issue should be detected as an invalid block hash\n            BlockException.INVALID_REQUESTS,\n            id=\"single_consolidation_single_deposit_incorrect_order\",\n        ),\n        pytest.param(\n            [\n                single_consolidation_from_eoa(0),\n                single_withdrawal_from_eoa(0),\n            ],\n            [\n                single_consolidation(0).with_source_address(TestAddress),\n                single_withdrawal(0).with_source_address(TestAddress2),\n            ],\n            # TODO: on the Engine API, the issue should be detected as an invalid block hash\n            BlockException.INVALID_REQUESTS,\n            id=\"single_consolidation_single_withdrawal_incorrect_order\",\n        ),\n    ],\n)\ndef test_invalid_deposit_withdrawal_consolidation_requests(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    blocks: List[Block],\n):\n    \"\"\"\n    Negative testing for deposits and withdrawals in the same block.\n    \"\"\"\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post={},\n        blocks=blocks,\n    )\n
    "},{"location":"tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations/index/test_cases/","title":"Test Deposits Withdrawals Consolidations - Test Cases","text":"

    Test cases generated from tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py

    Parametrized test cases generated from the test module tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py:

    test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_eoa+withdrawal_from_eoa+consolidation_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_eoa+consolidation_from_eoa+withdrawal_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_eoa+deposit_from_eoa+consolidation_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_eoa+consolidation_from_eoa+deposit_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-consolidation_from_eoa+deposit_from_eoa+withdrawal_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-consolidation_from_eoa+withdrawal_from_eoa+deposit_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_contract+withdrawal_from_contract+consolidation_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_contract+consolidation_from_contract+withdrawal_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_contract+deposit_from_contract+consolidation_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_contract+consolidation_from_contract+deposit_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-consolidation_from_contract+deposit_from_contract+withdrawal_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-consolidation_from_contract+withdrawal_from_contract+deposit_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_eoa+withdrawal_from_eoa+deposit_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_eoa+deposit_from_eoa+withdrawal_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_eoa+consolidation_from_eoa+deposit_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-consolidation_from_eoa+deposit_from_eoa+consolidation_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-consolidation_from_eoa+withdrawal_from_eoa+consolidation_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_eoa+consolidation_from_eoa+withdrawal_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-deposit_from_eoa+withdrawal_from_eoa+consolidation_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-deposit_from_eoa+consolidation_from_eoa+withdrawal_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-withdrawal_from_eoa+deposit_from_eoa+consolidation_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-withdrawal_from_eoa+consolidation_from_eoa+deposit_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-consolidation_from_eoa+deposit_from_eoa+withdrawal_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-consolidation_from_eoa+withdrawal_from_eoa+deposit_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-deposit_from_contract+withdrawal_from_contract+consolidation_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-deposit_from_contract+consolidation_from_contract+withdrawal_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-withdrawal_from_contract+deposit_from_contract+consolidation_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-withdrawal_from_contract+consolidation_from_contract+deposit_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-consolidation_from_contract+deposit_from_contract+withdrawal_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-consolidation_from_contract+withdrawal_from_contract+deposit_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-deposit_from_eoa+withdrawal_from_eoa+deposit_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-withdrawal_from_eoa+deposit_from_eoa+withdrawal_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-deposit_from_eoa+consolidation_from_eoa+deposit_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-consolidation_from_eoa+deposit_from_eoa+consolidation_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-consolidation_from_eoa+withdrawal_from_eoa+consolidation_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-withdrawal_from_eoa+consolidation_from_eoa+withdrawal_from_contract]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test-deposit+withdrawal+consolidation]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test-deposit+consolidation+withdrawal]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test-withdrawal+deposit+consolidation]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test-withdrawal+consolidation+deposit]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test-consolidation+deposit+withdrawal]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test-consolidation+withdrawal+deposit]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test_engine-deposit+withdrawal+consolidation]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test_engine-deposit+consolidation+withdrawal]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test_engine-withdrawal+deposit+consolidation]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test_engine-withdrawal+consolidation+deposit]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test_engine-consolidation+deposit+withdrawal]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test_engine-consolidation+withdrawal+deposit]\ntest_invalid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-single_withdrawal_single_deposit_incorrect_order]\ntest_invalid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-single_consolidation_single_deposit_incorrect_order]\ntest_invalid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-single_consolidation_single_withdrawal_incorrect_order]\ntest_invalid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-single_withdrawal_single_deposit_incorrect_order]\ntest_invalid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-single_consolidation_single_deposit_incorrect_order]\ntest_invalid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-single_consolidation_single_withdrawal_incorrect_order]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/","title":"EIP-7692 Eof V1","text":"

    Documentation for tests/prague/eip7692_eof_v1.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1 --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1 --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Test cases for all EIPs mentioned in the EOF V1 meta-EIP.

    "},{"location":"tests/prague/eip7692_eof_v1/tracker./","title":"EOF Testing Coverage Tracker","text":"
    • Example Test Case 1
    • Example Test Case 2 (./eip3540_eof_v1/test_example_valid_invalid.py::test_example_valid_invalid)
    • Example Test Case 3 (ethereum/tests: ./src/EOFTestsFiller/validInvalidFiller.yml)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-3540-eof-evm-object-format-v1","title":"EIP-3540: EOF - EVM Object Format v1","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#validation","title":"Validation","text":"
    • Empty code is not a valid EOF (ethereum/tests: src/EOFTestsFiller/efValidation/validate_empty_code_Copier.json)
    • Valid container without data section (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/minimal_valid_EOF1_code_Copier.json)
    • Valid container with data section (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/minimal_valid_EOF1_code_with_data_Copier.json)
    • Valid container with truncated data section (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_truncated_section_Copier.json)
    • Valid container with data section truncated to empty (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Valid containers with multiple code sections (ethereum/tests: ./src/EOFTestsFiller/validInvalidFiller.yml src/EOFTestsFiller/efValidation/minimal_valid_EOF1_multiple_code_sections_Copier.json)
    • Valid containers with max number of code sections (ethereum/tests: src/EOFTestsFiller/efValidation/many_code_sections_1024_Copier.json src/EOFTestsFiller/EIP4750/validInvalidFiller.yml)
    • Too many code sections (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_too_many_code_sections_Copier.json src/EOFTestsFiller/efValidation/too_many_code_sections_Copier.json)
    • Truncated magic (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Valid container except magic (./eip3540_eof_v1/test_container_validation.py::test_magic_validation ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/validate_EOF_prefix_Copier.json)
    • Truncated before version (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Valid container except version (./eip3540_eof_v1/test_container_validation.py::test_version_validation ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/validate_EOF_version_Copier.json)
    • Truncated before type section header (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Truncated before type section size (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_incomplete_section_size_Copier.json)
    • Truncated type section size (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_incomplete_section_size_Copier.json)
    • No type section header (ethereum/tests: src/EOFTestsFiller/efValidation/EOF1_no_type_section_Copier.json)
    • Truncated before code section header (ethereum/tests: ./src/EOFTestsFiller/validInvalidFiller.yml)
    • Truncated before code section number (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml )
    • Truncated code section number (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_incomplete_section_size_Copier.json)
    • Truncated before code section size (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Truncated code section size (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_incomplete_section_size_Copier.json)
    • No code section header (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_code_section_missing_Copier.json)
    • 0 code section number (ethereum/tests: ./src/EOFTestsFiller/validInvalidFiller.yml)
    • 0 code section size (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml ./src/EOFTestsFiller/efValidation/EOF1_code_section_0_size_Copier.json)
    • 0 code section size with non-empty data section (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • No container sections, truncated before data section header (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Container sections present, truncated before data section header (ethereum/tests: ./src/EOFTestsFiller/validInvalidFiller.yml)
    • Truncated before data section size (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_incomplete_section_size_Copier.json)
    • Truncated data section size (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_incomplete_section_size_Copier.json)
    • Truncated before header terminator (ethereum/tests: src/EOFTestsFiller/efValidation/EOF1_header_not_terminated_Copier.json)
    • Truncated before header terminator (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Truncated before type section (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_truncated_section_Copier.json)
    • Type section truncated before outputs (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Type section truncated before max_stack_height (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Type section truncated max_stack_height (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_truncated_section_Copier.json)
    • Truncated before code sections (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Truncated code section (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_truncated_section_Copier.json)
    • Data section empty, trailing bytes (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_trailing_bytes_Copier.json)
    • Data section non-empty, trailing bytes (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_trailing_bytes_Copier.json)
    • Wrong order of sections (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_section_order_Copier.json ./src/EOFTestsFiller/efValidation/EOF1_data_section_before_code_section_Copier.json ./src/EOFTestsFiller/efValidation/EOF1_data_section_before_types_section_Copier.json src/EOFTestsFiller/efValidation/EOF1_type_section_not_first_Copier.json)
    • No data section header (ethereum/tests: ./src/EOFTestsFiller/validInvalidFiller.yml src/EOFTestsFiller/efValidation/data_section_missing_Copier.json)
    • Multiple data sections (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Unknown section id (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_unknown_section_Copier.json)
    • Type section size != 4 * code section number (ethereum/tests: ./src/EOFTestsFiller/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_invalid_type_section_size_Copier.json src/EOFTestsFiller/efValidation/EOF1_types_section_0_size_Copier.json)
    • Code section with max max_stack_height (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml)
    • Code section with max_stack_height above limit (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/efValidation/max_stack_height_Copier.json)
    • Valid code sections with inputs/outputs (ethereum/tests: ./src/EOFTestsFiller/EIP4750/validInvalidFiller.yml)
    • Valid code section with max inputs
    • Valid code section with max outputs
    • Code sections with invalid number of inputs/outputs (above limit)
    • 0 section with inputs/outputs (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_invalid_section_0_type_Copier.json src/EOFTestsFiller/EIP4750/validInvalidFiller.yml)
    • Multiple type section headers (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_multiple_type_sections_Copier.json)
    • Multiple code section headers (ethereum/tests: src/EOFTestsFiller/efValidation/multiple_code_sections_headers_Copier.json)
    • Multiple data section headers (ethereum/tests: src/EOFTestsFiller/efValidation/EOF1_multiple_data_sections_Copier.json)
    • Container without type section (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_type_section_missing_Copier.json src/EOFTestsFiller/efValidation/EOF1_types_section_missing_Copier.json)
    • Container without code sections (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Container without data section (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Valid containers without data section and with subcontainers (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_embedded_container_Copier.json)
    • Valid containers with data section and with subcontainers (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_embedded_container_Copier.json)
    • Valid container with maximum number of subcontainers (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_embedded_container_Copier.json)
    • Container with number of subcontainers above the limit (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_embedded_container_invalid_Copier.json)
    • Subcontainer section header truncated before subcontainer number (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_embedded_container_invalid_Copier.json)
    • Subcontainer section header truncated before subcontainer size (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_embedded_container_invalid_Copier.json)
    • Truncated subcontainer size (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_embedded_container_invalid_Copier.json)
    • 0 container section number (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_embedded_container_invalid_Copier.json)
    • 0 container size (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_embedded_container_invalid_Copier.json)
    • Truncated container section body (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_embedded_container_invalid_Copier.json)
    • Multiple container section headers
    • Invalid subcontainer
    • Invalid subcontainer on a deep nesting level
    • Max number of inputs/outputs in a section (ethereum/tests: src/EOFTestsFiller/efValidation/max_arguments_count_Copier.json)
    • Number of inputs/outputs in a section above the limit (ethereum/tests: src/EOFTestsFiller/efValidation/max_arguments_count_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#execution","title":"Execution","text":"
    • Execution of EOF contracts (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_ExecutionFiller.yml)
    • Legacy executing EXTCODESIZE of EOF contract (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_ExecutionFiller.yml)
    • Legacy executing EXTCODEHASH of EOF contract (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_ExecutionFiller.yml)
    • Legacy executing EXTCODECOPY of EOF contract (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_ExecutionFiller.yml)
    • *CALLs from legacy contracts to EOF contracts (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_CallsFiller.yml)
    • EXT*CALLs from EOF to legacy contracts (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_CallsFiller.yml)
    • EXTDELEGATECALL from EOF to EOF contract (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_CallsFiller.yml)
    • EXTDELEGATECALL from EOF to legacy contract failing (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_CallsFiller.yml)
    • EXTDELEGATECALL from EOF to EOA failing
    • EXTDELEGATECALL from EOF to empty account failing
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-3670-eof-code-validation","title":"EIP-3670: EOF - Code Validation","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#validation_1","title":"Validation","text":"
    • Code section with invalid opcodes is rejected (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_undefined_opcodes_Copier.json src/EOFTestsFiller/EIP3670/validInvalidFiller.yml)
    • INVALID opcode is valid (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml)
    • Truncated PUSH data (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_truncated_push_Copier.json src/EOFTestsFiller/EIP3670/validInvalidFiller.yml)
    • Opcodes deprecated in EOF are rejected (ethereum/tests: src/EOFTestsFiller/efValidation/deprecated_instructions_Copier.json ethereum/tests: src/EOFTestsFiller/EIP3670/validInvalidFiller.yml)
    • Codes with each valid opcodes (ethereum/tests: src/EOFTestsFiller/EIP3670/validInvalidFiller.yml)
    • Undefined instruction after terminating instruction (ethereum/tests: src/EOFTestsFiller/EIP3670/validInvalidFiller.yml)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-4200-eof-static-relative-jumps","title":"EIP-4200: EOF - Static relative jumps","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#validation_2","title":"Validation","text":"
    • Valid RJUMP with various offsets (ethereum/tests: src/EOFTestsFiller/efValidation/EOF1_valid_rjump_Copier.json src/EOFTestsFiller/EIP4200/validInvalidFiller.yml)
    • Valid RJUMP with maximum offset (ethereum/tests: src/EOFTestsFiller/EIP4200/validInvalidFiller.yml)
    • Valid RJUMP with minimum offset
    • Valid RJUMPI with various offsets (ethereum/tests: src/EOFTestsFiller/efValidation/EOF1_valid_rjumpi_Copier.json src/EOFTestsFiller/EIP4200/validInvalidFiller.yml)
    • Valid RJUMPI with maximum offset (ethereum/offset: src/EOFTestsFiller/EIP4200/validInvalidFiller.yml)
    • Valid RJUMPI with minimum offset
    • Valid RJUMPV with various number of offsets and various offsets (ethereum/tests: src/EOFTestsFiller/efValidation/EOF1_valid_rjumpv_Copier.json src/EOFTestsFiller/EIP4200/validInvalidFiller.yml)
    • Valid RJUMPV with table size 256 (ethereum/tests: src/EOFTestsFiller/EIP4200/validInvalidFiller.yml)
    • Valid RJUMPV containing maximum offset (ethereum/tests: src/EOFTestsFiller/EIP4200/validInvalidFiller.yml)
    • Valid RJUMPV containing minimum offset
    • Truncated before RJUMP immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjump_truncated_Copier.json)
    • Truncated RJUMP immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjump_truncated_Copier.json)
    • RJUMP out of container bounds (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjump_invalid_destination_Copier.json)
    • RJUMP out of section bounds (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjump_invalid_destination_Copier.json)
    • RJUMP into immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjump_invalid_destination_Copier.json)
    • Truncated before RJUMPI immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjumpi_truncated_Copier.json)
    • Truncated RJUMPI immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjumpi_truncated_Copier.json)
    • RJUMPI out of container bounds (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjumpi_invalid_destination_Copier.json)
    • RJUMPI out of section bounds (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjumpi_invalid_destination_Copier.json)
    • RJUMPI into immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjumpi_invalid_destination_Copier.json)
    • Truncated before RJUMPV immediate
    • Truncated RJUMPV immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjumpv_truncated_Copier.json)
    • RJUMPV out of container bounds (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjumpv_invalid_destination_Copier.json)
    • RJUMPV out of section bounds (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjumpv_invalid_destination_Copier.json)
    • RJUMPV into immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjumpv_invalid_destination_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#execution_1","title":"Execution","text":"
    • RJUMP forwards (eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_positive_negative)
    • RJUMP backwards (eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_positive_negative)
    • RJUMP with 0 offset (eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_zero)
    • RJUMPI forwards with condition true/false (eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_condition_forwards)
    • RJUMPI backwards with condition true/false (eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_condition_backwards)
    • RJUMPI with 0 offset with condition true/false (eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_condition_zero)
    • RJUMPV with different case values (eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_condition)
    • RJUMPV with case value out of table bounds (eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_condition)
    • RJUMPV with max cases number (eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_condition eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_full_table*)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-4750-eof-functions","title":"EIP-4750: EOF - Functions","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#validation_3","title":"Validation","text":"
    • Valid CALLFs (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml)
    • CALLFs to non-existing sections (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/efValidation/callf_invalid_code_section_index_Copier.json src/EOFTestsFiller/EIP4750/validInvalidFiller.yml)
    • Truncated CALLF immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_callf_truncated_Copier.json src/EOFTestsFiller/EIP4750/validInvalidFiller.yml)
    • Unreachable code sections (ethereum/tests: src/EOFTestsFiller/efValidation/unreachable_code_sections_Copier.json)
    • Sections reachable from other sections, but not reachable from section 0 (ethereum/tests: src/EOFTestsFiller/efValidation/unreachable_code_sections_Copier.json)
    • RETF with maximum number of outputs (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#execution_2","title":"Execution","text":"
    • CALLF/RETF execution (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP4200/CALLF_RETF_ExecutionFiller.yml)
    • Dispatch to CALLF to different functions based on calldata (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP4200/CALLF_RETF_ExecutionFiller.yml)
    • Maximum number of code sections, calling each section with CALLF (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP4200/CALLF_RETF_ExecutionFiller.yml)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-5450-eof-stack-validation","title":"EIP-5450: EOF - Stack Validation","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#validation_4","title":"Validation","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#terminating-instructions","title":"Terminating instructions","text":"
    • Check all terminating opcodes (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • Code section not terminating (executing beyond section end) (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/EIP5450/validInvalidFiller.yml src/EOFTestsFiller/efStack/no_terminating_instruction_Copier.json)
    • Code section ending with NOP (not terminating) (src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • Check that unreachable code is invalid after all terminating instructions (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml src/EOFTestsFiller/efStack/unreachable_instructions_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#jumps","title":"Jumps","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#rjump","title":"RJUMP","text":"
    • Valid RJUMP backwards in a constant stack segment (ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjump_Copier.json)
    • Invalid RJUMP backwards with mismatching stack in a constant stack segment(ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjump_Copier.json)
    • Valid RJUMP backwards in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjump_variable_stack_Copier.json)
    • Invalid RJUMP backwards with mismatching stack in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjump_variable_stack_Copier.json)
    • Valid RJUMP forwards (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjump_Copier.json)
    • Valid RJUMP forwards from different stack (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjump_Copier.json)
    • Valid RJUMP forwards in variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjump_variable_stack_Copier.json)
    • Valid RJUMP forwards from different stack in variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjump_variable_stack_Copier.json)
    • Valid empty infinite loop with RJUMP (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • Valid balanced infinite loop (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#rjumpi","title":"RJUMPI","text":"
    • Valid RJUMPI backwards in a constant stack segment (ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjumpi_Copier.json)
    • Invalid RJUMPI backwards with mismatching stack in a constant stack segment(ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjumpi_Copier.json)
    • Valid RJUMPI backwards in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjumpi_variable_stack_Copier.json)
    • Invalid RJUMPI backwards with mismatching stack in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjumpi_variable_stack_Copier.json)
    • RJUMPI forward with branches of equal stack height (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_Copier.json src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • RJUMPI forward with branches of equal stack height in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_variable_stack_Copier.json)
    • RJUMPI forward with branches of different stack height (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_Copier.json src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • RJUMPI forward with branches of different stack height in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_variable_stack_Copier.json)
    • Valid loop using RJUMPI (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • Valid loop with a break using RJUMPI - equal stack after break and normal loop end (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_Copier.json)
    • Valid loop with a break using RJUMPI - equal stack after break and normal loop end, variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_variable_stack_Copier.json)
    • Valid loop with a break using RJUMPI - different stack after break and normal loop end (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_Copier.json)
    • Valid loop with a break using RJUMPI - different stack after break and normal loop end, variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_variable_stack_Copier.json)
    • If-then-else with equal stack height in branches (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_Copier.json)
    • If-then-else with equal stack height in branches, variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_variable_stack_Copier.json)
    • If-then-else with different stack height in branches (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_Copier.json)
    • If-then-else with different stack height in branches, variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_variable_stack_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#rjumpv","title":"RJUMPV","text":"
    • Valid RJUMPV backwards in a constant stack segment (ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjumpv_Copier.json)
    • Invalid RJUMPV backwards with mismatching stack in a constant stack segment(ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjumpv_Copier.json)
    • Valid RJUMPV backwards in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjumpv_variable_stack_Copier.json)
    • Invalid RJUMPV backwards with mismatching stack in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjumpv_variable_stack_Copier.json)
    • RJUMPV forward with branches of equal stack height (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_Copier.json src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • RJUMPV forward with branches of equal stack height in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_variable_stack_Copier.json)
    • RJUMPV forward with branches of different stack height (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_Copier.json src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • RJUMPV forward with branches of different stack height in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_variable_stack_Copier.json)
    • Valid infinite loop using RJUMPV (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • Switch with equal stack height in branches (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_Copier.json)
    • Switch with equal stack height in branches, variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_variable_stack_Copier.json)
    • Switch with different stack height in branches (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_Copier.json)
    • Switch with different stack height in branches, variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_variable_stack_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#combinations","title":"Combinations","text":"
    • RJUMP and RJUMPI with the same target and equal stack height (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_Copier.json)
    • RJUMP and RJUMPI with the same target and equal stack height in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_variable_stack_Copier.json)
    • RJUMP and RJUMPI with the same target and different stack height (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_Copier.json)
    • RJUMP and RJUMPI with the same target and different stack height in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_variable_stack_Copier.json)
    • RJUMP and RJUMPV with the same target and equal stack height (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_Copier.json)
    • RJUMP and RJUMPV with the same target and equal stack height in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_variable_stack_Copier.json)
    • RJUMP and RJUMPV with the same target and different stack height (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_Copier.json)
    • RJUMP and RJUMPV with the same target and different stack height in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_variable_stack_Copier.json)
    • RJUMPI and RJUMPV with the same target

    • RJUMP* to self (ethereum/tests: src/EOFTestsFiller/efStack/self_referencing_jumps_Copier.json)

    • RJUMP* to self in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/self_referencing_jumps_variable_stack_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#stack-underflow","title":"Stack underflow","text":"
    • Stack underflows (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml )
    • Stack underflow with enough items available in caller stack - can't dig into caller frame (ethereum/tests: src/EOFTestsFiller/EIP4750/validInvalidFiller.yml)
    • Stack underflow in variable stack segment, only min underflow (ethereum/tests: src/EOFTestsFiller/efStack/underflow_variable_stack_Copier.json)
    • Stack underflow in variable stack segment, both min and max underflow (ethereum/tests: src/EOFTestsFiller/efStack/underflow_variable_stack_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#callf","title":"CALLF","text":"
    • Valid CALLFs to functions with inputs (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml src/EOFTestsFiller/efStack/callf_stack_validation_Copier.json)
    • CALLF stack underflows (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/EIP4750/validInvalidFiller.yml src/EOFTestsFiller/EIP5450/validInvalidFiller.yml src/EOFTestsFiller/efStack/callf_stack_validation_Copier.json)
    • CALLF stack underflow in variable stack segment, only min underflow (ethereum/tests: src/EOFTestsFiller/efStack/underflow_variable_stack_Copier.json)
    • CALLF stack underflow in variable stack segment, both min and max underflow (ethereum/tests: src/EOFTestsFiller/efStack/underflow_variable_stack_Copier.json)
    • Branching to CALLFs with the same number of outputs (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • Check that CALLF stack inputs/outputs equal to target section type definition
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#retf","title":"RETF","text":"
    • Valid RETF with correct number of items on stack (ethereum/tests: src/EOFTestsFiller/efStack/retf_stack_validation_Copier.json src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • Invalid RETF with extra items on stack (ethereum/tests: src/EOFTestsFiller/efStack/retf_stack_validation_Copier.json ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/EIP4750/validInvalidFiller.yml)
    • RETF stack underflow (ethereum/tests: src/EOFTestsFiller/efStack/retf_stack_validation_Copier.json)
    • RETF reached via different paths (ethereum/tests: src/EOFTestsFiller/efStack/retf_stack_validation_Copier.json)
    • RETF in variable stack segment is not allowed (ethereum/tests: src/EOFTestsFiller/efStack/retf_variable_stack_Copier.json)
    • Extra items on stack allowed for terminating instructions other than RETF (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#jumpf","title":"JUMPF","text":"
    • Extra items on stack are allowed for JUMPF to non-returning function (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_to_nonreturning_Copier.json src/EOFTestsFiller/efStack/jumpf_to_nonreturning_variable_stack_Copier.json)
    • JUMPF stack underflows (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_to_nonreturning_Copier.json src/EOFTestsFiller/efStack/jumpf_to_returning_Copier.json)
    • JUMPF stack underflow in a variable stack segment - only min underflow (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_to_nonreturning_variable_stack_Copier.json)
    • JUMPF stack underflow in a variable stack segment - both min and max underflow (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_to_nonreturning_variable_stack_Copier.json)
    • JUMPF into function with the same number of outputs (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_to_returning_Copier.json)
    • JUMPF into function with fewer outputs than current one (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_to_returning_Copier.json)
    • Extra items on stack are allowed for JUMPF to returning function (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_to_returning_Copier.json)
    • JUMPF to returning in a variable stack segment is not allowed (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_to_returning_variable_stack_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#stack-overflow","title":"Stack overflow","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#callf_1","title":"CALLF","text":"
    • Max allowed stack height reached in CALLF-ed function (ethereum/tests: src/EOFTestsFiller/efStack/callf_stack_overflow_Copier.json)
    • CALLF validation time stack overflow (ethereum/tests: src/EOFTestsFiller/EIP4750/validInvalidFiller.yml src/EOFTestsFiller/efStack/callf_stack_overflow_Copier.json)
    • Max allowed stack height reached in CALLF-ed function with inputs (ethereum/tests: src/EOFTestsFiller/efStack/callf_with_inputs_stack_overflow_Copier.json)
    • CALLF validation time stack overflow in function with inputs (ethereum/tests: src/EOFTestsFiller/EIP4750/validInvalidFiller.yml src/EOFTestsFiller/efStack/callf_with_inputs_stack_overflow_Copier.json)
    • Max allowed stack height reached in CALLF-ed function. CALLF in variable stack segment. (ethereum/tests: src/EOFTestsFiller/efStack/callf_stack_overflow_variable_stack_Copier.json)
    • CALLF validation time stack overflow in variable stack segment. (ethereum/tests: src/EOFTestsFiller/EIP4750/validInvalidFiller.yml src/EOFTestsFiller/efStack/callf_stack_overflow_variable_stack_Copier.json)
    • Max allowed stack height reached in CALLF-ed function with inputs. CALLF in variable stack segment. (ethereum/tests: src/EOFTestsFiller/efStack/callf_with_inputs_stack_overflow_variable_stack_Copier.json)
    • CALLF validation time stack overflow in function with inputs in variable stack segment. (ethereum/tests: src/EOFTestsFiller/EIP4750/validInvalidFiller.yml src/EOFTestsFiller/efStack/callf_with_inputs_stack_overflow_variable_stack_Copier.json)
    • Function inputs are accessible and accounted for (no stack underflow if they are popped) (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#jumpf_1","title":"JUMPF","text":"
    • Max allowed stack height reached in JUMPF-ed function (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_stack_overflow_Copier.json)
    • JUMPF validation time stack overflow (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_stack_overflow_Copier.json)
    • Max allowed stack height reached in JUMPF-ed function with inputs
    • JUMPF validation time stack overflow in function with inputs (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_with_inputs_stack_overflow_Copier.json)
    • JUMPF validation time stack overflow in function with inputs, variable stack segment, only max overflow (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_with_inputs_stack_overflow_variable_stack_Copier.json)
    • JUMPF validation time stack overflow in function with inputs, variable stack segment, both max and min overflow (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_with_inputs_stack_overflow_variable_stack_Copier.json)
    • Max allowed stack height reached in JUMPF-ed function. JUMPF in variable stack segment. (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_stack_overflow_variable_stack_Copier.json)
    • JUMPF validation time stack overflow in variable stack segment - only max overflow. (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_stack_overflow_variable_stack_Copier.json)
    • JUMPF validation time stack overflow in variable stack segment - both min and max overflow. (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_stack_overflow_variable_stack_Copier.json)
    • Max allowed stack height reached in JUMPF-ed function with inputs. JUMPF in variable stack segment.
    • JUMPF validation time stack overflow in function with inputs in variable stack segment.
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#swapndupnexchange","title":"SWAPN/DUPN/EXCHANGE","text":"
    • Valid DUPN with enough items on stack (ethereum/tests: src/EOFTestsFiller/efStack/dupn_stack_validation_Copier.json)
    • DUPN stack underflow (ethereum/tests: src/EOFTestsFiller/efStack/dupn_stack_validation_Copier.json)
    • Valid SWAPN with enough items on stack (ethereum/tests: src/EOFTestsFiller/efStack/swapn_stack_validation_Copier.json)
    • SWAPN stack underflow (ethereum/tests: src/EOFTestsFiller/efStack/swapn_stack_validation_Copier.json)
    • Valid EXCHANGE with enough items on stack (ethereum/tests: src/EOFTestsFiller/efStack/exchange_deep_stack_validation_Copier.json src/EOFTestsFiller/efStack/exchange_stack_validation_Copier.json)
    • EXCHANGE stack underflow (ethereum/tests: src/EOFTestsFiller/efStack/exchange_stack_validation_Copier.json src/EOFTestsFiller/efStack/exchange_empty_stack_validation_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#other","title":"Other","text":"
    • Wrong max_stack_height (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/efValidation/max_stack_height_Copier.json src/EOFTestsFiller/EIP4750/validInvalidFiller.yml)
    • All opcodes correctly account for stack inputs/outputs (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • Code reachable only via backwards jump is invalid
    • Maximally broad [0, 1023] stack range (ethereum/tests: src/EOFTestsFiller/efStack/stack_range_maximally_broad_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#execution_3","title":"Execution","text":"
    • Max stack size (1024) in CALLF-ed function (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP4200/EOF1_CALLF_ExecutionFiller.yml)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-6206-eof-jumpf-and-non-returning-functions","title":"EIP-6206: EOF - JUMPF and non-returning functions","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#validation_5","title":"Validation","text":"
    • 0 section returning (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/EIP4750/validInvalidFiller.yml)
    • 0 section declared non-returning but ends with RETF (ethereum/tests: src/EOFTestsFiller/EIP4750/validInvalidFiller.yml)
    • CALLF into non-returning function (ethereum/tests: src/EOFTestsFiller/efValidation/callf_into_nonreturning_Copier.json)
    • Valid JUMPF into sections with equal number of outputs (ethereum/tests: src/EOFTestsFiller/efValidation/jumpf_equal_outputs_Copier.json)
    • Valid JUMPF into sections with different but compatible number of outputs (ethereum/tests: src/EOFTestsFiller/efValidation/jumpf_compatible_outputs_Copier.json)
    • JUMPF into sections with incompatible outputs (ethereum/tests: src/EOFTestsFiller/efValidation/jumpf_incompatible_outputs_Copier.json)
    • Non-returning section without JUMPF (ethereum/tests: src/EOFTestsFiller/efValidation/non_returning_status_Copier.json)
    • Non-returning section with JUMPF (ethereum/tests: src/EOFTestsFiller/efValidation/non_returning_status_Copier.json)
    • Returning section with RETF (ethereum/tests: src/EOFTestsFiller/efValidation/non_returning_status_Copier.json)
    • Returning section with JUMPF (ethereum/tests: src/EOFTestsFiller/efValidation/non_returning_status_Copier.json)
    • Returning section with JUMPF to returning and RETF (ethereum/tests: src/EOFTestsFiller/efValidation/non_returning_status_Copier.json)
    • Returning section with JUMPF to non-returning and RETF (ethereum/tests: src/EOFTestsFiller/efValidation/non_returning_status_Copier.json)
    • Invalid non-returning flag (ethereum/tests: src/EOFTestsFiller/efValidation/non_returning_status_Copier.json)
    • Circular JUMPF between two sections (ethereum/tests: src/EOFTestsFiller/efValidation/non_returning_status_Copier.json)
    • JUMPF into non-existing section
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-7480-eof-data-section-access-instructions","title":"EIP-7480: EOF - Data section access instructions","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#validation_6","title":"Validation","text":"
    • Valid DATALOADN with various offsets (ethereum/tests: src/EOFTestsFiller/efValidation/dataloadn_Copier.json)
    • Truncated DATALOADN immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_dataloadn_truncated_Copier.json)
    • DATALOADN offset out of bounds (ethereum/tests: src/EOFTestsFiller/efValidation/dataloadn_Copier.json)
    • DATALOADN accessing not full word (ethereum/tests: src/EOFTestsFiller/efValidation/dataloadn_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-663-swapn-dupn-and-exchange-instructions","title":"EIP-663: SWAPN, DUPN and EXCHANGE instructions","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#validation_7","title":"Validation","text":"
    • A DUPN instruction causes stack overflow
    • A DUPN instruction causes stack underflow
    • A DUPN instruction causes max stack height mismatch
    • A SWAPN instruction causes stack underflow
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#execution_4","title":"Execution","text":"
    • Positive tests for DUPN instructions (./eip663_dupn_swapn_exchange/test_dupn.py::test_dupn_all_valid_immediates)
    • Positive tests for SWAPN instructions (./eip663_dupn_swapn_exchange/test_swapn.py::test_swapn_all_valid_immediates)
    • Positive tests for EXCHANGE instruction (./eip663_dupn_swapn_exchange/test_exchange_py.py::test_exchange_all_valid_immediates)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-7069-revamped-call-instructions","title":"EIP-7069: Revamped CALL instructions","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#execution_5","title":"Execution","text":"
    • EXTDELEGATECALL from EOF to EOF (evmone-tests: state_tests/state_transition/eof_calls/eof1_extdelegatecall_eof1.json)
    • EXTDELEGATECALL from EOF to legacy fails (evmone-tests: state_tests/state_transition/eof_calls/eof1_extdelegatecall_legacy.json)
    • EXTSTATICCALL forwards static mode (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_static.json)
    • EXTCALL with value success (evmone-tests: state_tests/state_transition/eof_calls/extcall_with_value.json)
    • EXTCALL with value from EXTSTATICCALL (evmone-tests: state_tests/state_transition/eof_calls/extcall_static_with_value.json)
    • EXTCALL with value, not enough balance (evmone-tests: state_tests/state_transition/eof_calls/extcall_failing_with_value_balance_check.json)
    • EXTCALL with value, check additional charge for value (evmone-tests: state_tests/state_transition/eof_calls/extcall_failing_with_value_additional_cost.json)
    • EXTCALL with gas not enough for callee to get 5000 gas (evmone-tests: state_tests/state_transition/eof_calls/extcall_min_callee_gas_failure_mode.json)
    • RETURNDATA* after EXTCALL (evmone-tests: state_tests/state_transition/eof_calls/extcall_output.json)
    • RETURNDATA* after EXTDELEGATECALL (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_output.json state_tests/state_transition/eof_calls/extdelegatecall_returndatasize.json state_tests/state_transition/eof_calls/returndatacopy.json state_tests/state_transition/eof_calls/returndataload.json)
    • RETURNDATA* after EXTSTATICCALL (evmone-tests: state_tests/state_transition/eof_calls/extstaticcall_output.json)
    • RETURNDATA* after aborted EXT*CALL (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_returndatasize_abort.json)
    • Failed EXTCALL clears returndata from previous EXTCALL (evmone-tests: state_tests/state_transition/eof_calls/extcall_clears_returndata.json)
    • EXTCALL not enough gas for input memory charge (evmone-tests: state_tests/state_transition/eof_calls/extcall_memory.json)
    • EXTDELEGATECALL not enough gas for input memory charge (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_memory.json)
    • EXTSTATICCALL not enough gas for input memory charge (evmone-tests: state_tests/state_transition/eof_calls/extstaticcall_memory.json)
    • EXTCALL exception due to target address overflow (bits set in high 12 bytes) (evmone-tests: state_tests/state_transition/eof_calls/extcall_ase_ready_violation.json)
    • EXTDELEGATECALL exception due to target address overflow (bits set in high 12 bytes) (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_ase_ready_violation.json)
    • EXTSTATICCALL exception due to target address overflow (bits set in high 12 bytes) (evmone-tests: state_tests/state_transition/eof_calls/extstaticcall_ase_ready_violation.json)
    • EXTCALL not enough gas for warming up target address (evmone-tests: state_tests/state_transition/eof_calls/extcall_cold_oog.json)
    • EXTDELEGATECALL not enough gas for warming up target address (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_cold_oog.json)
    • EXTSTATICCALL not enough gas for warming up target address (evmone-tests: state_tests/state_transition/eof_calls/extstaticcall_cold_oog.json)
    • EXTCALL not enough gas for account creation cost (transfer value to non-existing account) (evmone-tests: state_tests/state_transition/eof_calls/extcall_value_zero_to_nonexistent_account.json)
    • OOG after EXTCALL (evmone-tests: state_tests/state_transition/eof_calls/extcall_then_oog.json)
    • OOG after EXTDELEGATECALL (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_then_oog.json)
    • OOG after EXTSTATICCALL (evmone-tests: state_tests/state_transition/eof_calls/extstaticcall_then_oog.json)
    • REVERT inside EXTCALL (evmone-tests: state_tests/state_transition/eof_calls/extcall_callee_revert.json)
    • REVERT inside EXTDELEGATECALL (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_callee_revert.json)
    • REVERT inside EXTSTATICCALL (evmone-tests: state_tests/state_transition/eof_calls/extstaticcall_callee_revert.json)
    • EXTCALL with input (evmone-tests: state_tests/state_transition/eof_calls/extcall_input.json)
    • EXTDELEGATECALL with input (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_input.json)
    • EXTSTATICCALL with input (evmone-tests: state_tests/state_transition/eof_calls/extstaticcall_input.json)
    • EXTCALL with just enough gas for MIN_RETAINED_GAS and MIN_CALLEE_GAS (evmone-tests: state_tests/state_transition/eof_calls/extcall_with_value_enough_gas.json)
    • EXTCALL with not enough gas for MIN_CALLEE_GAS (evmone-tests: state_tests/state_transition/eof_calls/extcall_with_value_low_gas.json)
    • ADDRESS and CALLER inside EXTCALL (evmone-tests: state_tests/state_transition/eof_calls/extcall_recipient_and_code_address.json)
    • ADDRESS and CALLER inside EXTDELEGATECALL (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_recipient_and_code_address.json)
    • ADDRESS and CALLER inside EXTSTATICCALL (evmone-tests: state_tests/state_transition/eof_calls/extstaticcall_recipient_and_code_address.json)
    • Refund inside EXTCALL is applied after the transaction (evmone-tests: state_tests/state_transition/eof_calls/extcall_gas_refund_propagation.json)
    • Refund inside EXTDELEGATECALL is applied after the transaction (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_gas_refund_propagation.json)
    • EXTSTATICCALL from EOF to non-pure legacy contract failing (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_CallsFiller.yml)
    • EXTSTATICCALL from EOF to pure EOF contract (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_CallsFiller.yml)
    • EXTSTATICCALL from EOF to non-pure EOF contract failing (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_CallsFiller.yml)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-7620-eof-contract-creation","title":"EIP-7620: EOF Contract Creation","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#validation_8","title":"Validation","text":"
    • Valid EOFCREATEs referring to various container numbers (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_eofcreate_valid_Copier.json)
    • Truncated before EOFCREATE immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_eofcreate_invalid_Copier.json)
    • EOFCREATE is not a valid terminating instruction (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_eofcreate_invalid_Copier.json)
    • EOFCREATE immediate referring to non-existing container (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_eofcreate_invalid_Copier.json)
    • EOFCREATE immediate referring to container with truncated data (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_eofcreate_invalid_Copier.json)
    • Valid RETURNCONTRACTs referring to various container numbers (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_returncontract_valid_Copier.json)
    • Truncated before RETURNCONTRACT immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_returncontract_invalid_Copier.json)
    • RETURNCONTRACT immediate referring to non-existing container (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_returncontract_invalid_Copier.json)
    • Unreachable code after RETURNCONTRACT, check that RETURNCONTRACT is terminating (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_returncontract_invalid_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#execution_6","title":"Execution","text":"
    • CREATE with EOF initcode fails in Prague (evmone-tests: state_tests/state_transition/eof_create/create_with_eof_initcode.json)
    • CREATE with EOF initcode fails in Cancun (evmone-tests: state_tests/state_transition/eof_create/create_with_eof_initcode_cancun.json)
    • CREATE2 with EOF initcode fails in Prague (evmone-tests: state_tests/state_transition/eof_create/create2_with_eof_initcode.json)
    • CREATE2 with EOF initcode fails in Cancun (evmone-tests: state_tests/state_transition/eof_create/create2_with_eof_initcode_cancun.json)
    • CREATE with legacy initcode and EOF deploy code fails (evmone-tests: state_tests/state_transition/eof_create/create_deploying_eof.json)
    • CREATE2 with legacy initcode and EOF deploy code fails (evmone-tests: state_tests/state_transition/eof_create/create2_deploying_eof.json)
    • EOFCREATE success with empty aux data (evmone-tests: state_tests/state_transition/eof_create/eofcreate_empty_auxdata.json)
    • EOFCREATE success with aux data length equal to declared in deploy container (evmone-tests: state_tests/state_transition/eof_create/eofcreate_auxdata_equal_to_declared.json)
    • EOFCREATE success with aux data longer than size declared in deploy container (evmone-tests: state_tests/state_transition/eof_create/eofcreate_auxdata_longer_than_declared.json)
    • EOFCREATE with aux data shorter than size declared in deploy container fails (evmone-tests: state_tests/state_transition/eof_create/eofcreate_auxdata_shorter_than_declared.json)
    • EOFCREATE success deploying DATALOADN referring to aux data portion of deploy container data (evmone-tests: state_tests/state_transition/eof_create/eofcreate_dataloadn_referring_to_auxdata.json)
    • EOFCREATE success with deploy container having aux data and subcontainer (evmone-tests: state_tests/state_transition/eof_create/eofcreate_with_auxdata_and_subcontainer.json)
    • REVERT in initcontainer (evmone-tests: state_tests/state_transition/eof_create/eofcreate_revert_empty_returndata.json)
    • REVERT with return data in initcontainer (evmone-tests: state_tests/state_transition/eof_create/eofcreate_revert_non_empty_returndata.json)
    • Exceptional abort in initcontainer (evmone-tests: state_tests/state_transition/eof_create/eofcreate_initcontainer_aborts.json)
    • EOFCREATE with deploy container of max size 0x6000 (evmone-tests: state_tests/state_transition/eof_create/eofcreate_deploy_container_max_size.json)
    • EOFCREATE with deploy container size above limit (evmone-tests: state_tests/state_transition/eof_create/eofcreate_deploy_container_too_large.json)
    • EOFCREATE with deploy container data size above 64K after appending aux data (evmone-tests: state_tests/state_transition/eof_create/eofcreate_appended_data_size_larger_than_64K.json)
    • EOFCREATE with deploy container size above limit after appending aux data (evmone-tests: state_tests/state_transition/eof_create/eofcreate_deploy_container_with_aux_data_too_large.json)
    • EOFCREATE success nested in EOFCREATE initcode (evmone-tests: state_tests/state_transition/eof_create/eofcreate_nested_eofcreate.json)
    • EOFCREATE success nested in EOFCREATE initcode that reverts (evmone-tests: state_tests/state_transition/eof_create/eofcreate_nested_eofcreate_revert.json)
    • EOFCREATE with value success
    • EOFCREATE with value - not enough caller balance (evmone-tests: state_tests/state_transition/eof_create/eofcreate_caller_balance_too_low.json)
    • EOFCREATE not enough gas for initcode (EIP-3860) charge (evmone-tests: state_tests/state_transition/eof_create/eofcreate_not_enough_gas_for_initcode_charge.json)
    • EOFCREATE not enough gas for input memory expansion (evmone-tests: state_tests/state_transition/eof_create/eofcreate_not_enough_gas_for_mem_expansion.json)
    • RETURNCONTRACT not enough gas for aux data memory expansion (evmone-tests: state_tests/state_transition/eof_create/returncontract_not_enough_gas_for_mem_expansion.json)
    • Successful EOFCREATE clears returndata (evmone-tests: state_tests/state_transition/eof_create/eofcreate_clears_returndata.json)
    • Second EOFCREATE with the same container and salt fails (evmone-tests: state_tests/state_transition/eof_create/eofcreate_failure_after_eofcreate_success.json)
    • Call created contract after EOFCREATE (evmone-tests: state_tests/state_transition/eof_create/eofcreate_call_created_contract.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-7698-eof-creation-transaction","title":"EIP-7698: EOF - Creation transaction","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#execution_7","title":"Execution","text":"
    • Creation transaction success with empty deploy container data (evmone-tests: state_tests/state_transition/eof_create/creation_tx.json)
    • Creation transaction success with data in deploy container without aux data (evmone-tests: state_tests/state_transition/eof_create/creation_tx_deploy_data.json)
    • Creation transaction success with data in deploy container with aux data length equal to declared (evmone-tests: state_tests/state_transition/eof_create/creation_tx_static_auxdata_in_calldata.json)
    • Creation transaction success with data in deploy container with aux data longer than declared (evmone-tests: state_tests/state_transition/eof_create/creation_tx_dynamic_auxdata_in_calldata.json)
    • Creation transaction success deploying DATALOADN referring to aux data portion of deploy container data (evmone-tests: state_tests/state_transition/eof_create/creation_tx_dataloadn_referring_to_auxdata.json)
    • Exceptional abort in creation transaction initcode (evmone-tests: state_tests/state_transition/eof_create/creation_tx_initcontainer_aborts.json)
    • RETURN in creation transaction initcode fails (evmone-tests: state_tests/state_transition/eof_create/creation_tx_initcontainer_return.json)
    • STOP in creation transaction initcode fails (evmone-tests: state_tests/state_transition/eof_create/creation_tx_initcontainer_stop.json)
    • Creation transaction with initcode of max allowed size 0xc000 (evmone-tests: state_tests/state_transition/eof_create/creation_tx_initcontainer_max_size.json)
    • Creation transaction with initcode size above limit (evmone-tests: state_tests/state_transition/eof_create/creation_tx_initcontainer_too_large.json)
    • Creation transaction deploys container of max allowed size 0x6000 (evmone-tests: state_tests/state_transition/eof_create/creation_tx_deploy_container_max_size.json)
    • Creation transaction deploying container of size above limit fails (evmone-tests: state_tests/state_transition/eof_create/creation_tx_deploy_container_too_large.json)
    • EOFCREATE success nested in creation transaction initcode (evmone-tests: state_tests/state_transition/eof_create/creation_tx_nested_eofcreate.json)
    • Creation transaction with invalid initcontainer (invalid header) (evmone-tests: state_tests/state_transition/eof_create/creation_tx_invalid_initcode_header.json)
    • Creation transaction with invalid initcontainer (invalid EOF version) (evmone-tests: state_tests/state_transition/eof_create/creation_tx_invalid_eof_version.json)
    • Creation transaction with invalid initcontainer (invalid max stack height) (evmone-tests: state_tests/state_transition/eof_create/creation_tx_invalid_initcode.json)
    • Creation transaction fails if initcontainer has truncated data section (declared size > present data size ) (evmone-tests: state_tests/state_transition/eof_create/creation_tx_truncated_data_initcode.json)
    • Creation transaction with invalid deploy container (evmone-tests: state_tests/state_transition/eof_create/creation_tx_invalid_deploycode.json)
    • Create transaction with legacy initcode and EOF deploy code fails (evmone-tests: state_tests/state_transition/eof_create/creation_tx_deploying_eof.json)
    • EOF creation transaction fails before Prague (evmone-tests: state_tests/state_transition/eof_create/initcode_transaction_before_prague.json)
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/","title":"EIP-3540 Eof V1","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1 --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1 --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Cross-client EVM Object Format Tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/spec.py.

    EOF V1 Constants used throughout all tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/","title":"Test All Opcodes In Container","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF Container: check how every opcode behaves in the middle of the valid eof container code

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_all_opcodes_in_container.test_all_opcodes_in_container","title":"test_all_opcodes_in_container(eof_test, opcode)","text":"

    Test all opcodes inside valid container 257 because 0x5B is duplicated

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    sorted((all_opcodes | undefined_opcodes) - {Op.RETF}),\n)\ndef test_all_opcodes_in_container(\n    eof_test: EOFTestFiller,\n    opcode: Opcode,\n):\n    \"\"\"\n    Test all opcodes inside valid container\n    257 because 0x5B is duplicated\n    \"\"\"\n    data_portion = 1 if opcode == Op.CALLF else 0\n    opcode_with_data_portion = opcode[data_portion] if opcode.has_data_portion() else opcode\n\n    # opcode_with_data_portion has the correct minimum stack height\n    bytecode = Op.PUSH0 * opcode_with_data_portion.min_stack_height + opcode_with_data_portion\n\n    if opcode not in (halting_opcodes | section_terminating_opcodes):\n        bytecode += Op.STOP\n\n    sections = [Section.Code(code=bytecode)]\n\n    match opcode:\n        case Op.EOFCREATE | Op.RETURNCONTRACT:\n            sections.append(\n                Section.Container(\n                    container=Container(\n                        sections=[\n                            Section.Code(code=Op.REVERT(0, 0)),\n                        ]\n                    )\n                )\n            )\n        case Op.CALLF:\n            sections.append(\n                Section.Code(\n                    code=Op.RETF,\n                    code_outputs=0,\n                )\n            )\n    sections.append(Section.Data(\"1122334455667788\" * 4))\n\n    if opcode == Op.RETURNCONTRACT:\n        eof_code = Container(sections=sections, kind=ContainerKind.INITCODE)\n    else:\n        eof_code = Container(sections=sections)\n\n    eof_test(\n        data=eof_code,\n        expect_exception=(\n            None if opcode in valid_eof_opcodes else EOFException.UNDEFINED_INSTRUCTION\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_all_opcodes_in_container.test_all_invalid_terminating_opcodes","title":"test_all_invalid_terminating_opcodes(eof_test, opcode)","text":"

    Test all opcodes that are invalid as the last opcode in a container

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    sorted(\n        valid_eof_opcodes\n        - halting_opcodes\n        - section_terminating_opcodes\n        - {Op.RJUMP, Op.RJUMPI, Op.RJUMPV}\n    ),\n)\ndef test_all_invalid_terminating_opcodes(\n    eof_test: EOFTestFiller,\n    opcode: Opcode,\n):\n    \"\"\"\n    Test all opcodes that are invalid as the last opcode in a container\n    \"\"\"\n    if opcode.has_data_portion():\n        # Add the appropriate data portion to the opcode by using the get_item method.\n        # On the CALLF opcode we need to reference the second code section, hence the [1] index.\n        opcode = opcode[0] if opcode != Op.CALLF else opcode[1]\n\n    bytecode = (Op.PUSH0 * opcode.min_stack_height) + opcode\n\n    sections = [Section.Code(code=bytecode)]\n\n    if opcode == Op.CALLF[1]:\n        sections += [Section.Code(code=Op.RETF, code_outputs=0)]\n    elif opcode == Op.EOFCREATE[0]:\n        sections += [\n            Section.Container(\n                container=Container(\n                    sections=[\n                        Section.Code(code=Op.RETURNCONTRACT[0](0, 0)),\n                        Section.Container(Container.Code(code=Op.STOP)),\n                    ]\n                )\n            )\n        ]\n\n    sections += [Section.Data(b\"\\0\" * 32)]\n\n    eof_test(\n        data=Container(\n            sections=sections,\n        ),\n        expect_exception=EOFException.MISSING_STOP_OPCODE,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_all_opcodes_in_container.test_all_unreachable_terminating_opcodes_after_stop","title":"test_all_unreachable_terminating_opcodes_after_stop(eof_test, opcode)","text":"

    Test all terminating opcodes after stop.

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    sorted(halting_opcodes | section_terminating_opcodes),\n)\ndef test_all_unreachable_terminating_opcodes_after_stop(\n    eof_test: EOFTestFiller,\n    opcode: Opcode,\n):\n    \"\"\"\n    Test all terminating opcodes after stop.\n    \"\"\"\n    match opcode:\n        case Op.STOP:\n            sections = [Section.Code(code=Op.STOP + Op.STOP)]\n        case Op.RETF:\n            sections = [\n                Section.Code(code=Op.CALLF[1] + Op.STOP),\n                Section.Code(code=Op.STOP + Op.RETF, code_outputs=0),\n            ]\n        case Op.JUMPF:\n            sections = [\n                Section.Code(code=Op.STOP + Op.JUMPF[1]),\n                Section.Code(code=Op.STOP),\n            ]\n        case Op.RETURNCONTRACT:\n            sections = [\n                Section.Code(code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP),\n                Section.Container(\n                    container=Container(\n                        sections=[\n                            Section.Code(code=Op.STOP + Op.RETURNCONTRACT[0](0, 0)),\n                            Section.Container(Container.Code(code=Op.STOP)),\n                        ]\n                    )\n                ),\n            ]\n        case Op.RETURN | Op.REVERT | Op.INVALID:\n            sections = [\n                Section.Code(code=Op.PUSH0 + Op.PUSH0 + Op.STOP + opcode),\n            ]\n        case _:\n            raise NotImplementedError(f\"Opcode {opcode} is not implemented\")\n\n    eof_test(\n        data=Container(\n            sections=sections,\n        ),\n        expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS\n        if opcode != Op.RETURNCONTRACT\n        else EOFException.INCOMPATIBLE_CONTAINER_KIND,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_all_opcodes_in_container.test_all_unreachable_terminating_opcodes_before_stop","title":"test_all_unreachable_terminating_opcodes_before_stop(eof_test, opcode)","text":"

    Test all opcodes terminating opcodes before.

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    sorted((halting_opcodes | section_terminating_opcodes) - {Op.STOP}),\n)\ndef test_all_unreachable_terminating_opcodes_before_stop(\n    eof_test: EOFTestFiller,\n    opcode: Opcode,\n):\n    \"\"\"\n    Test all opcodes terminating opcodes before.\n    \"\"\"\n    match opcode:\n        case Op.RETF:\n            sections = [\n                Section.Code(code=Op.CALLF[1] + Op.STOP),\n                Section.Code(code=Op.RETF + Op.STOP, code_outputs=0),\n            ]\n        case Op.JUMPF:\n            sections = [\n                Section.Code(code=Op.JUMPF[1] + Op.STOP),\n                Section.Code(code=Op.STOP),\n            ]\n        case Op.RETURNCONTRACT:\n            sections = [\n                Section.Code(code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP),\n                Section.Container(\n                    container=Container(\n                        sections=[\n                            Section.Code(code=Op.RETURNCONTRACT[0](0, 0) + Op.STOP),\n                            Section.Container(Container.Code(code=Op.STOP)),\n                        ]\n                    )\n                ),\n            ]\n        case Op.RETURN | Op.REVERT | Op.INVALID:\n            sections = [\n                Section.Code(code=Op.PUSH1(0) + Op.PUSH1(0) + opcode + Op.STOP),\n            ]\n        case _:\n            raise NotImplementedError(f\"Opcode {opcode} is not implemented\")\n\n    eof_test(\n        data=Container(\n            sections=sections,\n        ),\n        expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS\n        if opcode != Op.RETURNCONTRACT\n        else EOFException.INCOMPATIBLE_CONTAINER_KIND,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_all_opcodes_in_container.test_all_opcodes_stack_underflow","title":"test_all_opcodes_stack_underflow(eof_test, opcode)","text":"

    Test stack underflow on all opcodes that require at least one item on the stack

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    sorted(op for op in valid_eof_opcodes if op.min_stack_height > 0)\n    + [\n        # Opcodes that have variable min_stack_height\n        Op.SWAPN[0x00],\n        Op.SWAPN[0xFF],\n        Op.DUPN[0x00],\n        Op.DUPN[0xFF],\n        Op.EXCHANGE[0x00],\n        Op.EXCHANGE[0xFF],\n    ],\n)\ndef test_all_opcodes_stack_underflow(\n    eof_test: EOFTestFiller,\n    opcode: Opcode,\n):\n    \"\"\"\n    Test stack underflow on all opcodes that require at least one item on the stack\n    \"\"\"\n    sections: List[Section]\n    if opcode == Op.EOFCREATE:\n        sections = [\n            Section.Code(code=Op.PUSH0 * (opcode.min_stack_height - 1) + opcode[0] + Op.STOP),\n            Section.Container(\n                container=Container(\n                    sections=[\n                        Section.Code(code=Op.RETURNCONTRACT[0](0, 0)),\n                        Section.Container(Container.Code(code=Op.STOP)),\n                    ]\n                )\n            ),\n        ]\n    elif opcode == Op.RETURNCONTRACT:\n        sections = [\n            Section.Code(code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP),\n            Section.Container(\n                container=Container(\n                    sections=[\n                        Section.Code(code=Op.PUSH0 * (opcode.min_stack_height - 1) + opcode[0]),\n                        Section.Container(Container.Code(code=Op.STOP)),\n                    ]\n                )\n            ),\n        ]\n    else:\n        bytecode = Op.PUSH0 * (opcode.min_stack_height - 1)\n        if opcode.has_data_portion():\n            bytecode += opcode[0]\n        else:\n            bytecode += opcode\n        bytecode += Op.STOP\n        sections = [Section.Code(code=bytecode)]\n    eof_code = Container(sections=sections)\n\n    eof_test(\n        data=eof_code,\n        expect_exception=EOFException.STACK_UNDERFLOW,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_all_opcodes_in_container.test_all_opcodes_stack_overflow","title":"test_all_opcodes_stack_overflow(eof_test, opcode, exception)","text":"

    Test stack overflow on all opcodes that push more items than they pop

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    sorted(op for op in valid_eof_opcodes if op.pushed_stack_items > op.popped_stack_items)\n    + [\n        Op.DUPN[0xFF],\n    ],\n)\n@pytest.mark.parametrize(\n    \"exception\",\n    # We test two types of exceptions here:\n    # 1. Invalid max stack height, where we modify the `max_stack_height` field of the code section\n    #    to the maximum stack height allowed by the EIP-3540, so the code still has to be checked\n    #    for stack overflow.\n    # 2. Max stack height above limit, where we don't modify the `max_stack_height` field of the\n    #    code section, so the actual code doesn't have to be verified for the stack overflow.\n    [EOFException.INVALID_MAX_STACK_HEIGHT, EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT],\n)\ndef test_all_opcodes_stack_overflow(\n    eof_test: EOFTestFiller,\n    opcode: Opcode,\n    exception: EOFException,\n):\n    \"\"\"\n    Test stack overflow on all opcodes that push more items than they pop\n    \"\"\"\n    opcode = opcode[0] if opcode.has_data_portion() else opcode\n\n    assert opcode.pushed_stack_items - opcode.popped_stack_items == 1\n    opcode_count = MAX_OPERAND_STACK_HEIGHT + 1 - opcode.min_stack_height\n\n    bytecode = Op.PUSH0 * opcode.min_stack_height\n    bytecode += opcode * opcode_count\n    bytecode += Op.STOP\n\n    kwargs: Dict[str, Any] = {\"code\": bytecode}\n\n    if exception == EOFException.INVALID_MAX_STACK_HEIGHT:\n        # Lie about the max stack height to make the code be checked for stack overflow.\n        kwargs[\"max_stack_height\"] = MAX_OPERAND_STACK_HEIGHT\n\n    sections = [Section.Code(**kwargs)]\n\n    if opcode == Op.DATALOADN[0]:\n        sections.append(Section.Data(b\"\\0\" * 32))\n    eof_code = Container(sections=sections)\n\n    eof_test(\n        data=eof_code,\n        expect_exception=exception,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/index/test_cases/","title":"Test All Opcodes In Container - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py:

    test_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_STOP]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_ADD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_MUL]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SUB]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DIV]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SDIV]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_MOD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SMOD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_ADDMOD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_MULMOD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_EXP]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SIGNEXTEND]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_0C]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_0D]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_0E]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_0F]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_LT]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_GT]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SLT]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SGT]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_EQ]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_ISZERO]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_AND]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OR]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_XOR]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_NOT]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_BYTE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SHL]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SHR]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SAR]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_1E]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_1F]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SHA3]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_21]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_22]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_23]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_24]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_25]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_26]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_27]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_28]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_29]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_2A]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_2B]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_2C]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_2D]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_2E]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_2F]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_ADDRESS]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_BALANCE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_ORIGIN]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CALLER]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CALLVALUE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CALLDATALOAD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CALLDATASIZE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CALLDATACOPY]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CODESIZE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CODECOPY]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_GASPRICE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_EXTCODESIZE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_EXTCODECOPY]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_RETURNDATASIZE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_RETURNDATACOPY]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_EXTCODEHASH]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_BLOCKHASH]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_COINBASE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_TIMESTAMP]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_NUMBER]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PREVRANDAO]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_GASLIMIT]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CHAINID]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SELFBALANCE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_BASEFEE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_BLOBHASH]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_BLOBBASEFEE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_4B]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_4C]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_4D]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_4E]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_4F]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_POP]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_MLOAD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_MSTORE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_MSTORE8]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SLOAD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SSTORE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_JUMP]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_JUMPI]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PC]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_MSIZE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_GAS]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_JUMPDEST]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_TLOAD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_TSTORE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_MCOPY]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH0]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH1]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH2]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH3]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH4]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH5]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH6]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH7]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH8]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH9]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH10]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH11]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH12]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH13]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH14]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH15]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH16]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH17]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH18]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH19]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH20]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH21]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH22]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH23]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH24]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH25]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH26]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH27]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH28]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH29]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH30]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH31]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH32]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP1]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP2]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP3]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP4]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP5]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP6]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP7]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP8]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP9]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP10]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP11]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP12]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP13]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP14]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP15]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP16]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP1]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP2]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP3]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP4]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP5]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP6]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP7]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP8]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP9]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP10]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP11]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP12]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP13]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP14]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP15]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP16]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_LOG0]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_LOG1]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_LOG2]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_LOG3]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_LOG4]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_A5]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_A6]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_A7]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_A8]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_A9]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_AA]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_AB]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_AC]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_AD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_AE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_AF]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_B0]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_B1]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_B2]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_B3]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_B4]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_B5]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_B6]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_B7]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_B8]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_B9]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_BA]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_BB]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_BC]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_BD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_BE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_BF]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_C0]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_C1]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_C2]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_C3]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_C4]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_C5]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_C6]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_C7]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_C8]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_C9]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_CA]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_CB]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_CC]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_CD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_CE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_CF]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DATALOAD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DATALOADN]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DATASIZE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DATACOPY]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_D4]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_D5]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_D6]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_D7]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_D8]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_D9]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_DA]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_DB]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_DC]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_DD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_DE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_DF]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_RJUMP]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_RJUMPI]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_RJUMPV]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CALLF]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_JUMPF]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUPN]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAPN]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_EXCHANGE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_E9]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_EA]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_EB]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_EOFCREATE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_ED]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_RETURNCONTRACT]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_EF]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CREATE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CALL]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CALLCODE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_RETURN]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DELEGATECALL]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CREATE2]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_F6]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_RETURNDATALOAD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_EXTCALL]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_EXTDELEGATECALL]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_STATICCALL]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_EXTSTATICCALL]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_FC]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_REVERT]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_INVALID]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SELFDESTRUCT]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_ADD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_MUL]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SUB]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DIV]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SDIV]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_MOD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SMOD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_ADDMOD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_MULMOD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_EXP]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SIGNEXTEND]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_LT]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_GT]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SLT]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SGT]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_EQ]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_ISZERO]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_AND]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_OR]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_XOR]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_NOT]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_BYTE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SHL]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SHR]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SAR]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SHA3]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_ADDRESS]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_BALANCE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_ORIGIN]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_CALLER]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_CALLVALUE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_CALLDATALOAD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_CALLDATASIZE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_CALLDATACOPY]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_GASPRICE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_RETURNDATASIZE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_RETURNDATACOPY]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_BLOCKHASH]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_COINBASE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_TIMESTAMP]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_NUMBER]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PREVRANDAO]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_GASLIMIT]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_CHAINID]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SELFBALANCE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_BASEFEE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_BLOBHASH]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_BLOBBASEFEE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_POP]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_MLOAD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_MSTORE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_MSTORE8]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SLOAD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SSTORE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_MSIZE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_JUMPDEST]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_TLOAD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_TSTORE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_MCOPY]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH0]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH1]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH2]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH3]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH4]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH5]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH6]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH7]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH8]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH9]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH10]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH11]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH12]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH13]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH14]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH15]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH16]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH17]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH18]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH19]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH20]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH21]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH22]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH23]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH24]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH25]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH26]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH27]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH28]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH29]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH30]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH31]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH32]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP1]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP2]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP3]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP4]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP5]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP6]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP7]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP8]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP9]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP10]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP11]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP12]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP13]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP14]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP15]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP16]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP1]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP2]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP3]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP4]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP5]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP6]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP7]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP8]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP9]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP10]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP11]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP12]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP13]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP14]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP15]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP16]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_LOG0]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_LOG1]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_LOG2]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_LOG3]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_LOG4]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DATALOAD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DATALOADN]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DATASIZE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DATACOPY]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_CALLF]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUPN]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAPN]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_EXCHANGE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_EOFCREATE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_RETURNDATALOAD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_EXTCALL]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_EXTDELEGATECALL]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_EXTSTATICCALL]\ntest_all_unreachable_terminating_opcodes_after_stop[fork_CancunEIP7692-eof_test-opcode_STOP]\ntest_all_unreachable_terminating_opcodes_after_stop[fork_CancunEIP7692-eof_test-opcode_RETF]\ntest_all_unreachable_terminating_opcodes_after_stop[fork_CancunEIP7692-eof_test-opcode_JUMPF]\ntest_all_unreachable_terminating_opcodes_after_stop[fork_CancunEIP7692-eof_test-opcode_RETURNCONTRACT]\ntest_all_unreachable_terminating_opcodes_after_stop[fork_CancunEIP7692-eof_test-opcode_RETURN]\ntest_all_unreachable_terminating_opcodes_after_stop[fork_CancunEIP7692-eof_test-opcode_REVERT]\ntest_all_unreachable_terminating_opcodes_after_stop[fork_CancunEIP7692-eof_test-opcode_INVALID]\ntest_all_unreachable_terminating_opcodes_before_stop[fork_CancunEIP7692-eof_test-opcode_RETF]\ntest_all_unreachable_terminating_opcodes_before_stop[fork_CancunEIP7692-eof_test-opcode_JUMPF]\ntest_all_unreachable_terminating_opcodes_before_stop[fork_CancunEIP7692-eof_test-opcode_RETURNCONTRACT]\ntest_all_unreachable_terminating_opcodes_before_stop[fork_CancunEIP7692-eof_test-opcode_RETURN]\ntest_all_unreachable_terminating_opcodes_before_stop[fork_CancunEIP7692-eof_test-opcode_REVERT]\ntest_all_unreachable_terminating_opcodes_before_stop[fork_CancunEIP7692-eof_test-opcode_INVALID]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_ADD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_MUL]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SUB]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DIV]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SDIV]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_MOD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SMOD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_ADDMOD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_MULMOD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_EXP]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SIGNEXTEND]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_LT]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_GT]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SLT]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SGT]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_EQ]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_ISZERO]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_AND]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_OR]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_XOR]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_NOT]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_BYTE]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SHL]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SHR]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SAR]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SHA3]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_BALANCE]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_CALLDATALOAD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_CALLDATACOPY]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_RETURNDATACOPY]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_BLOCKHASH]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_BLOBHASH]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_POP]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_MLOAD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_MSTORE]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_MSTORE8]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SLOAD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SSTORE]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_TLOAD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_TSTORE]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_MCOPY]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP1]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP2]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP3]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP4]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP5]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP6]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP7]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP8]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP9]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP10]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP11]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP12]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP13]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP14]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP15]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP16]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP1]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP2]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP3]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP4]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP5]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP6]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP7]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP8]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP9]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP10]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP11]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP12]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP13]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP14]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP15]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP16]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_LOG0]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_LOG1]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_LOG2]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_LOG3]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_LOG4]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DATALOAD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DATACOPY]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_RJUMPI]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_RJUMPV]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_EOFCREATE]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_RETURNCONTRACT]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_RETURN]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_RETURNDATALOAD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_EXTCALL]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_EXTDELEGATECALL]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_EXTSTATICCALL]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_REVERT]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAPN_0x00]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAPN_0xff]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUPN_0x00]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUPN_0xff]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_EXCHANGE_0x00]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_EXCHANGE_0xff]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_ADDRESS]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_ORIGIN]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_CALLER]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_CALLVALUE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_CALLDATASIZE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_GASPRICE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_RETURNDATASIZE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_COINBASE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_TIMESTAMP]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_NUMBER]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PREVRANDAO]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_GASLIMIT]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_CHAINID]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_SELFBALANCE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_BASEFEE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_BLOBBASEFEE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_MSIZE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH0]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH1]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH2]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH3]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH4]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH5]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH6]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH7]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH8]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH9]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH10]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH11]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH12]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH13]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH14]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH15]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH16]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH17]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH18]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH19]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH20]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH21]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH22]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH23]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH24]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH25]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH26]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH27]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH28]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH29]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH30]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH31]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH32]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP1]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP2]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP3]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP4]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP5]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP6]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP7]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP8]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP9]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP10]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP11]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP12]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP13]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP14]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP15]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP16]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DATALOADN]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DATASIZE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUPN]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUPN_0xff]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_ADDRESS]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_ORIGIN]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_CALLER]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_CALLVALUE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_CALLDATASIZE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_GASPRICE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_RETURNDATASIZE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_COINBASE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_TIMESTAMP]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_NUMBER]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PREVRANDAO]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_GASLIMIT]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_CHAINID]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_SELFBALANCE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_BASEFEE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_BLOBBASEFEE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_MSIZE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH0]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH1]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH2]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH3]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH4]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH5]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH6]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH7]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH8]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH9]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH10]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH11]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH12]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH13]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH14]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH15]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH16]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH17]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH18]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH19]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH20]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH21]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH22]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH23]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH24]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH25]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH26]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH27]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH28]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH29]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH30]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH31]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH32]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP1]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP2]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP3]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP4]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP5]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP6]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP7]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP8]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP9]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP10]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP11]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP12]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP13]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP14]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP15]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP16]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DATALOADN]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DATASIZE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUPN]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUPN_0xff]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation/","title":"Test Code Validation","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF V1 Code Validation tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_code_validation.test_legacy_initcode_valid_eof_v1_contract","title":"test_legacy_initcode_valid_eof_v1_contract(eof_test, container)","text":"

    Test creating various types of valid EOF V1 contracts using legacy initcode and a contract creating transaction.

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py
    @pytest.mark.parametrize(\n    \"container\",\n    VALID,\n    ids=container_name,\n)\ndef test_legacy_initcode_valid_eof_v1_contract(\n    eof_test: EOFTestFiller,\n    container: Container,\n):\n    \"\"\"\n    Test creating various types of valid EOF V1 contracts using legacy\n    initcode and a contract creating transaction.\n    \"\"\"\n    assert (\n        container.validity_error is None\n    ), f\"Valid container with validity error: {container.validity_error}\"\n    eof_test(\n        data=bytes(container),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_code_validation.test_legacy_initcode_invalid_eof_v1_contract","title":"test_legacy_initcode_invalid_eof_v1_contract(eof_test, container)","text":"

    Test creating various types of valid EOF V1 contracts using legacy initcode and a contract creating transaction.

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py
    @pytest.mark.parametrize(\n    \"container\",\n    INVALID,\n    ids=container_name,\n)\ndef test_legacy_initcode_invalid_eof_v1_contract(\n    eof_test: EOFTestFiller,\n    container: Container,\n):\n    \"\"\"\n    Test creating various types of valid EOF V1 contracts using legacy\n    initcode and a contract creating transaction.\n    \"\"\"\n    assert container.validity_error is not None, \"Invalid container without validity error\"\n    eof_test(\n        data=bytes(container),\n        expect_exception=container.validity_error,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation/index/test_cases/","title":"Test Code Validation - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py:

    test_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_max_stack_size]\ntest_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_input_maximum]\ntest_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_output_maximum]\ntest_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-multiple_code_section_max_inputs_max_outputs]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_no_data_section]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-incomplete_magic]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_version]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_type_header]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_type_section_size]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_code_header]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-code_section_size_incomplete_1]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-code_section_size_incomplete_2]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-code_section_size_incomplete_3]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-code_section_size_incomplete_4]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-code_section_count_0x8000_truncated]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-code_section_count_0xFFFF_truncated]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-code_section_count_0x8000]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-code_section_count_0xFFFF]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-code_section_size_0x8000_truncated]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-code_section_size_0xFFFF_truncated]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-terminator_incomplete]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_data_section_size]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-data_section_size_incomplete]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_sections]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_code_section]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-too_many_code_sections]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-zero_code_sections_header]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_1]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_2]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_3]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_section_bodies_ok_1]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_section_bodies_ok_2]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_nonzero]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_nonzero_1]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_nonzero_2]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_nonzero_3]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_nonzero_4]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_code_section_contents]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-incomplete_code_section_contents]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-trailing_bytes_after_code_section]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-empty_code_section]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-empty_code_section_with_non_empty_data]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_data_section_contents]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-data_section_contents_incomplete]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-data_section_preceding_code_section]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-data_section_without_code_section]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_3a]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_4a]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-trailing_bytes_after_data_section]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-multiple_data_sections]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-multiple_code_and_data_sections]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-unknown_section_1]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-unknown_section_2]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-unknown_section_empty]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_type_section]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-too_many_type_sections]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-empty_type_section]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-type_section_too_small_1]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-type_section_too_small_2]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-type_section_too_big]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_non_zero_inputs]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_non_zero_outputs]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-multiple_code_section_non_zero_inputs]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-multiple_code_section_non_zero_outputs]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-data_section_before_code_with_type]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-data_section_listed_in_type]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_incomplete_type]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_input_too_large]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-invalid_inputs_to_non_returning_code_section_2]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_output_too_large]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_max_stack_size_too_large]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size/","title":"Test Container Size","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF validation tests for EIP-3540 container size

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_container_size.test_max_size","title":"test_max_size(eof_test, over_limit)","text":"

    Verify EOF container valid at maximum size, invalid above

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py
    @pytest.mark.parametrize(\n    \"over_limit\",\n    [0, 1, 2, 2**16 - MAX_INITCODE_SIZE],\n)\ndef test_max_size(\n    eof_test: EOFTestFiller,\n    over_limit: int,\n):\n    \"\"\"\n    Verify EOF container valid at maximum size, invalid above\n    \"\"\"\n    # Expand the minimal EOF code by more noop code, reaching the desired target container size.\n    code = Container(\n        sections=[\n            Section.Code(\n                code=Op.JUMPDEST * (MAX_INITCODE_SIZE - len(VALID_CONTAINER) + over_limit)\n                + Op.STOP\n            )\n        ]\n    )\n    assert len(code) == MAX_INITCODE_SIZE + over_limit\n    eof_test(\n        data=bytes(code),\n        expect_exception=None if over_limit == 0 else EOFException.CONTAINER_SIZE_ABOVE_LIMIT,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_container_size.test_above_max_size_raw","title":"test_above_max_size_raw(eof_test, size)","text":"

    Verify EOF container invalid above maximum size, regardless of header contents

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py
    @pytest.mark.parametrize(\n    \"size\",\n    [MAX_INITCODE_SIZE + 1, MAX_INITCODE_SIZE * 2],\n)\ndef test_above_max_size_raw(\n    eof_test: EOFTestFiller,\n    size: int,\n):\n    \"\"\"\n    Verify EOF container invalid above maximum size, regardless of header contents\n    \"\"\"\n    code = Op.INVALID * size\n    eof_test(\n        data=bytes(code),\n        expect_exception=EOFException.CONTAINER_SIZE_ABOVE_LIMIT,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_container_size.test_section_after_end_of_container","title":"test_section_after_end_of_container(eof_test, code)","text":"

    Verify EOF container is invalid if any of sections declares above container size

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py
    @pytest.mark.parametrize(\n    \"code\",\n    [\n        pytest.param(\n            Container(sections=[Section.Code(code=Op.STOP, custom_size=MAX_INITCODE_SIZE)]),\n            id=\"1st_code_section\",\n        ),\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(code=Op.STOP),\n                    Section.Code(code=Op.STOP, custom_size=MAX_INITCODE_SIZE),\n                ]\n            ),\n            id=\"2nd_code_section\",\n        ),\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(code=Op.STOP),\n                    Section.Container(container=Op.STOP, custom_size=MAX_INITCODE_SIZE),\n                ]\n            ),\n            id=\"1st_container_section\",\n        ),\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(code=Op.STOP),\n                    Section.Container(container=Op.STOP),\n                    Section.Container(container=Op.STOP, custom_size=MAX_INITCODE_SIZE),\n                ]\n            ),\n            id=\"2nd_container_section\",\n        ),\n    ],\n)\ndef test_section_after_end_of_container(\n    eof_test: EOFTestFiller,\n    code: Container,\n):\n    \"\"\"\n    Verify EOF container is invalid if any of sections declares above container size\n    \"\"\"\n    eof_test(\n        data=bytes(code),\n        expect_exception=EOFException.INVALID_SECTION_BODIES_SIZE,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size/index/test_cases/","title":"Test Container Size - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py:

    test_max_size[fork_CancunEIP7692-eof_test-over_limit_0]\ntest_max_size[fork_CancunEIP7692-eof_test-over_limit_1]\ntest_max_size[fork_CancunEIP7692-eof_test-over_limit_2]\ntest_max_size[fork_CancunEIP7692-eof_test-over_limit_16384]\ntest_above_max_size_raw[fork_CancunEIP7692-eof_test-size_49153]\ntest_above_max_size_raw[fork_CancunEIP7692-eof_test-size_98304]\ntest_section_after_end_of_container[fork_CancunEIP7692-eof_test-1st_code_section]\ntest_section_after_end_of_container[fork_CancunEIP7692-eof_test-2nd_code_section]\ntest_section_after_end_of_container[fork_CancunEIP7692-eof_test-1st_container_section]\ntest_section_after_end_of_container[fork_CancunEIP7692-eof_test-2nd_container_section]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/","title":"Test Container Validation","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF validation tests for EIP-3540 container format

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_container_validation.test_magic_validation","title":"test_magic_validation(eof_test, magic_0, magic_1)","text":"

    Verify EOF container 2-byte magic

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py
    @pytest.mark.parametrize(\"magic_0\", [0, 1, 0xEE, 0xEF, 0xF0, 0xFF])\n@pytest.mark.parametrize(\"magic_1\", [0, 1, 2, 0xFE, 0xFF])\ndef test_magic_validation(\n    eof_test: EOFTestFiller,\n    magic_0: int,\n    magic_1: int,\n):\n    \"\"\"\n    Verify EOF container 2-byte magic\n    \"\"\"\n    code = bytearray(bytes(VALID_CONTAINER))\n    code[0] = magic_0\n    code[1] = magic_1\n    eof_test(\n        data=bytes(code),\n        expect_exception=None if magic_0 == 0xEF and magic_1 == 0 else EOFException.INVALID_MAGIC,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_container_validation.test_version_validation","title":"test_version_validation(eof_test, version)","text":"

    Verify EOF container version

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py
    @pytest.mark.parametrize(\"version\", [0, 1, 2, 0xFE, 0xFF])\ndef test_version_validation(\n    eof_test: EOFTestFiller,\n    version: int,\n):\n    \"\"\"\n    Verify EOF container version\n    \"\"\"\n    code = bytearray(bytes(VALID_CONTAINER))\n    code[2] = version\n    eof_test(\n        data=bytes(code),\n        expect_exception=None if version == 1 else EOFException.INVALID_VERSION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_container_validation.test_single_code_section","title":"test_single_code_section(eof_test, plus_data, plus_container)","text":"

    Verify EOF container maximum number of code sections

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py
    @pytest.mark.parametrize(\"plus_data\", [False, True])\n@pytest.mark.parametrize(\"plus_container\", [False, True])\ndef test_single_code_section(\n    eof_test: EOFTestFiller,\n    plus_data: bool,\n    plus_container: bool,\n):\n    \"\"\"\n    Verify EOF container maximum number of code sections\n    \"\"\"\n    sections = [Section.Code(Op.RETURNCONTRACT[0](0, 0) if plus_container else Op.STOP)]\n    if plus_container:\n        sections.append(\n            Section.Container(\n                container=Container(\n                    sections=[\n                        Section.Code(Op.JUMPF[i + 1] if i < (MAX_CODE_SECTIONS - 1) else Op.STOP)\n                        for i in range(MAX_CODE_SECTIONS)\n                    ],\n                )\n            )\n        )\n    if plus_data:\n        sections.append(Section.Data(data=b\"\\0\"))\n    eof_test(\n        data=Container(\n            name=\"max_code_sections\",\n            sections=sections,\n            kind=ContainerKind.INITCODE if plus_container else ContainerKind.RUNTIME,\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_container_validation.test_max_code_sections","title":"test_max_code_sections(eof_test, plus_data, plus_container)","text":"

    Verify EOF container maximum number of code sections

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py
    @pytest.mark.parametrize(\"plus_data\", [False, True])\n@pytest.mark.parametrize(\"plus_container\", [False, True])\ndef test_max_code_sections(\n    eof_test: EOFTestFiller,\n    plus_data: bool,\n    plus_container: bool,\n):\n    \"\"\"\n    Verify EOF container maximum number of code sections\n    \"\"\"\n    if plus_container:\n        sections = [\n            Section.Code(\n                Op.JUMPF[i + 1] if i < (MAX_CODE_SECTIONS - 1) else Op.RETURNCONTRACT[0](0, 0)\n            )\n            for i in range(MAX_CODE_SECTIONS)\n        ]\n        sections.append(\n            Section.Container(\n                container=Container(\n                    sections=[\n                        Section.Code(Op.JUMPF[i + 1] if i < (MAX_CODE_SECTIONS - 1) else Op.STOP)\n                        for i in range(MAX_CODE_SECTIONS)\n                    ],\n                )\n            )\n        )\n    else:\n        sections = [\n            Section.Code(Op.JUMPF[i + 1] if i < (MAX_CODE_SECTIONS - 1) else Op.STOP)\n            for i in range(MAX_CODE_SECTIONS)\n        ]\n    if plus_data:\n        sections.append(Section.Data(data=b\"\\0\"))\n    eof_test(\n        data=Container(\n            name=\"max_code_sections\",\n            sections=sections,\n            kind=ContainerKind.INITCODE if plus_container else ContainerKind.RUNTIME,\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/index/test_cases/","title":"Test Container Validation - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py:

    test_magic_validation[fork_CancunEIP7692-eof_test-magic_1_0-magic_0_0]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_0-magic_0_1]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_0-magic_0_238]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_0-magic_0_239]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_0-magic_0_240]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_0-magic_0_255]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_1-magic_0_0]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_1-magic_0_1]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_1-magic_0_238]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_1-magic_0_239]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_1-magic_0_240]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_1-magic_0_255]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_2-magic_0_0]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_2-magic_0_1]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_2-magic_0_238]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_2-magic_0_239]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_2-magic_0_240]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_2-magic_0_255]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_254-magic_0_0]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_254-magic_0_1]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_254-magic_0_238]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_254-magic_0_239]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_254-magic_0_240]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_254-magic_0_255]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_255-magic_0_0]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_255-magic_0_1]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_255-magic_0_238]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_255-magic_0_239]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_255-magic_0_240]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_255-magic_0_255]\ntest_version_validation[fork_CancunEIP7692-eof_test-version_0]\ntest_version_validation[fork_CancunEIP7692-eof_test-version_1]\ntest_version_validation[fork_CancunEIP7692-eof_test-version_2]\ntest_version_validation[fork_CancunEIP7692-eof_test-version_254]\ntest_version_validation[fork_CancunEIP7692-eof_test-version_255]\ntest_single_code_section[fork_CancunEIP7692-eof_test-plus_container_False-plus_data_False]\ntest_single_code_section[fork_CancunEIP7692-eof_test-plus_container_False-plus_data_True]\ntest_single_code_section[fork_CancunEIP7692-eof_test-plus_container_True-plus_data_False]\ntest_single_code_section[fork_CancunEIP7692-eof_test-plus_container_True-plus_data_True]\ntest_max_code_sections[fork_CancunEIP7692-eof_test-plus_container_False-plus_data_False]\ntest_max_code_sections[fork_CancunEIP7692-eof_test-plus_container_False-plus_data_True]\ntest_max_code_sections[fork_CancunEIP7692-eof_test-plus_container_True-plus_data_False]\ntest_max_code_sections[fork_CancunEIP7692-eof_test-plus_container_True-plus_data_True]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example/","title":"Test Eof Example","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF Classes example use

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_eof_example.test_eof_example","title":"test_eof_example(eof_test)","text":"

    Example of python EOF classes

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py
    def test_eof_example(eof_test: EOFTestFiller):\n    \"\"\"\n    Example of python EOF classes\n    \"\"\"\n    # Lets construct an EOF container code\n    eof_code = Container(\n        name=\"valid_container_example\",\n        sections=[\n            # TYPES section is constructed automatically based on CODE\n            # CODE section\n            Section.Code(\n                code=Op.CALLF[1](Op.PUSH0) + Op.STOP,  # bytecode to be deployed in the body\n                # Code: call section 1 with a single zero as input, then stop.\n                max_stack_height=1,  # define code header (in body) stack size\n            ),\n            # There can be multiple code sections\n            Section.Code(\n                # Remove input and call section 2 with no inputs, then remove output and return\n                code=Op.POP + Op.CALLF[2]() + Op.POP + Op.RETF,\n                code_inputs=1,\n                code_outputs=0,\n                max_stack_height=1,\n            ),\n            Section.Code(\n                # Call section 3 with two inputs (address twice), return\n                code=Op.CALLF[3](Op.DUP1, Op.ADDRESS) + Op.POP + Op.POP + Op.RETF,\n                code_outputs=1,\n                max_stack_height=3,\n            ),\n            Section.Code(\n                # Duplicate one input and return\n                code=Op.DUP1 + Op.RETF,\n                code_inputs=2,\n                code_outputs=3,\n                max_stack_height=3,\n            ),\n            # DATA section\n            Section.Data(\"0xef\"),\n        ],\n    )\n\n    # This will construct a valid EOF container with these bytes\n    assert bytes(eof_code) == bytes.fromhex(\n        \"ef0001010010020004000500060008000204000100008000010100000100010003020300035fe300010050\"\n        \"e3000250e43080e300035050e480e4ef\"\n    )\n\n    eof_test(\n        data=eof_code,\n        expect_exception=eof_code.validity_error,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_eof_example.test_eof_example_custom_fields","title":"test_eof_example_custom_fields(eof_test)","text":"

    Example of python EOF container class tuning

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py
    def test_eof_example_custom_fields(eof_test: EOFTestFiller):\n    \"\"\"\n    Example of python EOF container class tuning\n    \"\"\"\n    # if you need to overwrite certain structure bytes, you can use customization\n    # this is useful for unit testing the eof structure format, you can reorganize sections\n    # and overwrite the header bytes for testing purposes\n    # most of the combinations are covered by the unit tests\n\n    # This features are subject for development and will change in the future\n\n    eof_code = Container(\n        name=\"valid_container_example_2\",\n        magic=b\"\\xef\\x00\",  # magic can be overwritten for test purposes, (default is 0xEF00)\n        version=b\"\\x01\",  # version can be overwritten for testing purposes (default is 0x01)\n        header_terminator=b\"\\x00\",  # terminator byte can be overwritten (default is 0x00)\n        extra=b\"\",  # extra bytes to be trailed after the container body bytes (default is None)\n        sections=[\n            # TYPES section is constructed automatically based on CODE\n            # CODE section\n            Section.Code(\n                code=Op.PUSH1(2)\n                + Op.STOP,  # this is the actual bytecode to be deployed in the body\n                max_stack_height=1,  # define code header (in body) stack size\n            ),\n            # DATA section\n            Section.Data(\n                data=\"0xef\",\n                # custom_size overrides the size bytes, so you can put only 1 byte into data\n                # but still make the header size of 2 to produce invalid section\n                # if custom_size != len(data), the section will be invalid\n                custom_size=1,\n            ),\n        ],\n        # auto generate types section based on provided code sections\n        # AutoSection.ONLY_BODY - means the section will be generated only for the body bytes\n        # AutoSection.ONLY_BODY - means the section will be generated only for the header bytes\n        auto_type_section=AutoSection.AUTO,\n        # auto generate default data section (0x empty), by default is True\n        auto_data_section=True,\n        # auto sort section by order 01 02 03 04\n        # AutoSection.ONLY_BODY - means the sorting will be done only for the body bytes\n        # AutoSection.ONLY_BODY - means the section will be done only for the header bytes\n        auto_sort_sections=AutoSection.AUTO,\n    )\n\n    eof_test(\n        data=eof_code,\n        expect_exception=eof_code.validity_error,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_eof_example.test_eof_example_parameters","title":"test_eof_example_parameters(eof_test, data_section_bytes, code_section_code, exception)","text":"

    Example of python EOF classes

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py
    @pytest.mark.parametrize(\n    \"data_section_bytes\",\n    (b\"\\x01\", b\"\\xef\"),\n)\n@pytest.mark.parametrize(\n    \"code_section_code, exception\",\n    [(Op.PUSH1(10) + Op.STOP, None), (Op.PUSH1(14), EOFException.MISSING_STOP_OPCODE)],\n)\ndef test_eof_example_parameters(\n    eof_test: EOFTestFiller,\n    data_section_bytes: bytes,\n    code_section_code: Bytecode,\n    exception: EOFException,\n):\n    \"\"\"\n    Example of python EOF classes\n    \"\"\"\n    eof_code = Container(\n        name=\"parametrized_eof_example\",\n        sections=[\n            Section.Code(\n                code=code_section_code,\n                max_stack_height=1,\n            ),\n            Section.Data(data_section_bytes),\n        ],\n        validity_error=exception,\n    )\n\n    eof_test(\n        data=eof_code,\n        expect_exception=eof_code.validity_error,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example/index/test_cases/","title":"Test Eof Example - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py:

    test_eof_example[fork_CancunEIP7692-eof_test]\ntest_eof_example_custom_fields[fork_CancunEIP7692-eof_test]\ntest_eof_example_parameters[fork_CancunEIP7692-eof_test-code_section_code_-exception_None-data_section_bytes_b'\\x01']\ntest_eof_example_parameters[fork_CancunEIP7692-eof_test-code_section_code_-exception_None-data_section_bytes_b'\\xef']\ntest_eof_example_parameters[fork_CancunEIP7692-eof_test-code_section_code_-exception_EOFException.MISSING_STOP_OPCODE-data_section_bytes_b'\\x01']\ntest_eof_example_parameters[fork_CancunEIP7692-eof_test-code_section_code_-exception_EOFException.MISSING_STOP_OPCODE-data_section_bytes_b'\\xef']\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function/","title":"Test Execution Function","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Execution of CALLF, RETF opcodes within EOF V1 containers tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_execution_function.test_eof_functions_contract_call_succeed","title":"test_eof_functions_contract_call_succeed(state_test, pre, container)","text":"

    Test simple contracts that are simply expected to succeed on call.

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py
    @pytest.mark.parametrize(\"container\", CALL_SUCCEED_CONTRACTS, ids=lambda x: x.name)\ndef test_eof_functions_contract_call_succeed(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    container: Container,\n):\n    \"\"\"\n    Test simple contracts that are simply expected to succeed on call.\n    \"\"\"\n    env = Environment()\n\n    sender = pre.fund_eoa()\n    container_address = pre.deploy_contract(container)\n    caller_contract = Op.SSTORE(0, Op.CALL(Op.GAS, container_address, 0, 0, 0, 0, 0)) + Op.STOP()\n    caller_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        to=caller_address,\n        gas_limit=50000000,\n        gas_price=10,\n        protected=False,\n        data=\"\",\n        sender=sender,\n    )\n\n    post = {caller_address: Account(storage={0: 1})}\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_execution_function.test_eof_functions_contract_call_fail","title":"test_eof_functions_contract_call_fail(state_test, pre, container)","text":"

    Test simple contracts that are simply expected to fail on call.

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py
    @pytest.mark.parametrize(\"container\", CALL_FAIL_CONTRACTS, ids=lambda x: x.name)\ndef test_eof_functions_contract_call_fail(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    container: Container,\n):\n    \"\"\"\n    Test simple contracts that are simply expected to fail on call.\n    \"\"\"\n    env = Environment()\n\n    sender = pre.fund_eoa()\n    container_address = pre.deploy_contract(container)\n    caller_contract = Op.SSTORE(Op.CALL(Op.GAS, container_address, 0, 0, 0, 0, 0), 1) + Op.STOP()\n    caller_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        to=caller_address,\n        gas_limit=50000000,\n        gas_price=10,\n        protected=False,\n        data=\"\",\n        sender=sender,\n    )\n\n    post = {caller_address: Account(storage={0: 1})}\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_execution_function.test_eof_functions_contract_call_within_deep_nested","title":"test_eof_functions_contract_call_within_deep_nested(state_test, pre)","text":"

    Test performing a call within a nested callf and verify correct behavior of return stack in calling contract.

    TODO: This test belongs in EIP-7069 test folder, not code validation.

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py
    def test_eof_functions_contract_call_within_deep_nested(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Test performing a call within a nested callf and verify correct behavior of\n    return stack in calling contract.\n\n    TODO: This test belongs in EIP-7069 test folder, not code validation.\n    \"\"\"\n    env = Environment()\n\n    nested_callee_address = pre.deploy_contract(code=Op.SSTORE(0, 1) + Op.STOP())\n    contract_call_within_deep_nested_callf = Container(\n        name=\"contract_call_within_deep_nested_callf\",\n        sections=[\n            Section.Code(\n                code=Op.CALLF[1] + Op.SSTORE(0, 1) + Op.STOP,\n            )\n        ]\n        + [\n            # All sections call next section and on return, store a 1\n            # to their call stack height key\n            Section.Code(\n                code=(Op.CALLF[i] + Op.SSTORE(i - 1, 1) + Op.RETF),\n                code_outputs=0,\n            )\n            for i in range(2, MAX_CODE_SECTIONS)\n        ]\n        + [\n            # Last section makes external contract call\n            Section.Code(\n                code=(\n                    Op.EXTCALL(nested_callee_address, 0, 0, 0)\n                    + Op.ISZERO\n                    + Op.PUSH2(MAX_CODE_SECTIONS - 1)\n                    + Op.SSTORE\n                    + Op.RETF\n                ),\n                code_outputs=0,\n            )\n        ],\n    )\n    callee_address = pre.deploy_contract(contract_call_within_deep_nested_callf)\n    sender = pre.fund_eoa()\n\n    tx = Transaction(\n        to=callee_address,\n        gas_limit=50000000,\n        gas_price=10,\n        protected=False,\n        data=\"\",\n        sender=sender,\n    )\n    post = {\n        callee_address: Account(storage={i: 1 for i in range(MAX_CODE_SECTIONS)}),\n        nested_callee_address: Account(\n            storage={\n                0: 1,\n            }\n        ),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function/index/test_cases/","title":"Test Execution Function - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py:

    test_eof_functions_contract_call_succeed[fork_CancunEIP7692-blockchain_test-function_finishes_contract_execution]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-blockchain_test-max_recursive_callf]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-blockchain_test-max_recursive_callf_sstore]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-blockchain_test-max_recursive_callf_memory]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-blockchain_test_engine-function_finishes_contract_execution]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-blockchain_test_engine-max_recursive_callf]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-blockchain_test_engine-max_recursive_callf_sstore]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-blockchain_test_engine-max_recursive_callf_memory]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-state_test-function_finishes_contract_execution]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-state_test-max_recursive_callf]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-state_test-max_recursive_callf_sstore]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-state_test-max_recursive_callf_memory]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-blockchain_test-invalid_opcode]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-blockchain_test-overflow_recursive_callf]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-blockchain_test-overflow_recursive_callf_sstore]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-blockchain_test-overflow_recursive_callf_memory]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-blockchain_test_engine-invalid_opcode]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-blockchain_test_engine-overflow_recursive_callf]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-blockchain_test_engine-overflow_recursive_callf_sstore]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-blockchain_test_engine-overflow_recursive_callf_memory]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-state_test-invalid_opcode]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-state_test-overflow_recursive_callf]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-state_test-overflow_recursive_callf_sstore]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-state_test-overflow_recursive_callf_memory]\ntest_eof_functions_contract_call_within_deep_nested[fork_CancunEIP7692-blockchain_test]\ntest_eof_functions_contract_call_within_deep_nested[fork_CancunEIP7692-blockchain_test_engine]\ntest_eof_functions_contract_call_within_deep_nested[fork_CancunEIP7692-state_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode/","title":"Test Extcode","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    test execution semantics changes

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_extcode.test_legacy_calls_eof_sstore","title":"test_legacy_calls_eof_sstore(state_test, pre)","text":"

    Test EXTCODE* opcodes calling EOF and legacy contracts

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py
    def test_legacy_calls_eof_sstore(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"Test EXTCODE* opcodes calling EOF and legacy contracts\"\"\"\n    env = Environment()\n    address_eof_contract = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.RJUMP[0] + Op.STOP,\n                )\n            ]\n        )\n    )\n    legacy_code = Op.PUSH1(2) + Op.JUMPDEST + Op.STOP\n    address_legacy_contract = pre.deploy_contract(legacy_code)\n\n    storage_test = Storage()\n    test_contract_code = (\n        Op.SSTORE(storage_test.store_next(4), Op.EXTCODESIZE(address_legacy_contract))\n        + Op.EXTCODECOPY(address_legacy_contract, 0, 0, Op.EXTCODESIZE(address_legacy_contract))\n        + Op.SSTORE(\n            storage_test.store_next(bytes(legacy_code) + (b\"\\0\" * (32 - len(legacy_code)))),\n            Op.MLOAD(0),\n        )\n        + Op.SSTORE(\n            storage_test.store_next(legacy_code.keccak256()),\n            Op.EXTCODEHASH(address_legacy_contract),\n        )\n        + Op.SSTORE(storage_test.store_next(2), Op.EXTCODESIZE(address_eof_contract))\n        + Op.EXTCODECOPY(address_eof_contract, 0x20, 0, 6)\n        + Op.SSTORE(storage_test.store_next(b\"\\xef\" + (b\"\\0\" * 31)), Op.MLOAD(0x20))\n        + Op.SSTORE(\n            storage_test.store_next(keccak256(b\"\\xef\\x00\")),\n            Op.EXTCODEHASH(address_eof_contract),\n        )\n    )\n    address_test_contract = pre.deploy_contract(test_contract_code)\n\n    sender = pre.fund_eoa()\n\n    tx = Transaction(\n        sender=sender,\n        to=address_test_contract,\n        gas_limit=50_000_000,\n        gas_price=10,\n        protected=False,\n        data=\"\",\n    )\n\n    post = {\n        address_test_contract: Account(storage=storage_test),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode/index/test_cases/","title":"Test Extcode - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py:

    test_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test_engine]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-state_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid/","title":"Test Migrated Valid Invalid","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF validation tests for EIP-3540 migrated from ethereum/tests/src/EOFTestsFiller/EIP3540/validInvalidFiller.yml

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_migrated_valid_invalid.test_migrated_valid_invalid","title":"test_migrated_valid_invalid(eof_test, eof_code, exception)","text":"

    Verify EOF container construction and exception

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py
    @pytest.mark.parametrize(\n    \"eof_code,exception\",\n    [\n        pytest.param(\n            # Deployed code without data section\n            Container(\n                name=\"EOF1V3540_0001\",\n                sections=[\n                    Section.Code(code=Op.PUSH1[0] + Op.POP + Op.STOP),\n                ],\n            ),\n            None,\n            id=\"EOF1V3540_0001_deployed_code_without_data_section\",\n        ),\n        pytest.param(\n            # Deployed code with data section\n            Container(\n                name=\"EOF1V3540_0002\",\n                sections=[\n                    Section.Code(code=Op.PUSH1[0] + Op.POP + Op.STOP),\n                    Section.Data(\"aabbccdd\"),\n                ],\n            ),\n            None,\n            id=\"EOF1V3540_0002_deployed_code_with_data_section\",\n        ),\n        pytest.param(\n            # No data section contents\n            Container(\n                name=\"EOF1V3540_0003\",\n                sections=[\n                    Section.Code(code=Op.INVALID),\n                    Section.Data(custom_size=2),\n                ],\n            ),\n            EOFException.TOPLEVEL_CONTAINER_TRUNCATED,\n            id=\"EOF1V3540_0003_no_data_section_contents\",\n        ),\n        pytest.param(\n            # Data section contents incomplete\n            Container(\n                name=\"EOF1V3540_0004\",\n                sections=[\n                    Section.Code(code=Op.INVALID),\n                    Section.Data(\"aa\", custom_size=2),\n                ],\n            ),\n            EOFException.TOPLEVEL_CONTAINER_TRUNCATED,\n            id=\"EOF1V3540_0004_data_section_contents_incomplete\",\n        ),\n        pytest.param(\n            # Type section size incomplete\n            bytes.fromhex(\"ef00010100\"),\n            [EOFException.INCOMPLETE_SECTION_SIZE, EOFException.INVALID_TYPE_SECTION_SIZE],\n            id=\"EOF1I3540_0011_type_section_size_incomplete\",\n        ),\n        pytest.param(\n            # Empty code section with non-empty data section\n            Container(\n                sections=[Section.Code(code_outputs=0), Section.Data(\"aabb\")],\n                expected_bytecode=\"ef000101000402000100000400020000000000aabb\",\n            ),\n            EOFException.ZERO_SECTION_SIZE,\n            id=\"EOF1I3540_0012_empty_code_section_with_non_empty_data_section\",\n        ),\n        pytest.param(\n            Container(\n                name=\"EOF1I3540_0014 (Invalid) Total of code sections incomplete\",\n                raw_bytes=\"ef00010100040200\",\n            ),\n            EOFException.INCOMPLETE_SECTION_NUMBER,\n            id=\"EOF1I3540_0014_total_of_code_sections_incomplete\",\n        ),\n        pytest.param(\n            Container(\n                name=\"EOF1I3540_0016 (Invalid) Code section size incomplete\",\n                raw_bytes=\"0xef000101000402000100\",\n            ),\n            [EOFException.INCOMPLETE_SECTION_SIZE, EOFException.ZERO_SECTION_SIZE],\n            id=\"EOF1I3540_0016_code_section_size_incomplete\",\n        ),\n        pytest.param(\n            # No data section after code section size\n            bytes.fromhex(\"ef00010100040200010001\"),\n            EOFException.MISSING_HEADERS_TERMINATOR,\n            id=\"EOF1I3540_0017_no_data_section_after_code_section_size\",\n        ),\n        pytest.param(\n            # No data size\n            bytes.fromhex(\"ef0001010004020001000104\"),\n            [EOFException.MISSING_HEADERS_TERMINATOR, EOFException.INCOMPLETE_DATA_HEADER],\n            id=\"EOF1I3540_0018_no_data_size\",\n        ),\n        pytest.param(\n            # Data size incomplete\n            bytes.fromhex(\"ef000101000402000100010400\"),\n            [EOFException.INCOMPLETE_SECTION_SIZE, EOFException.INCOMPLETE_DATA_HEADER],\n            id=\"EOF1I3540_0019_data_size_incomplete\",\n        ),\n        pytest.param(\n            # No section terminator after data section size\n            bytes.fromhex(\"ef00010100040200010001040002\"),\n            EOFException.MISSING_HEADERS_TERMINATOR,\n            id=\"EOF1I3540_0020_no_section_terminator_after_data_section_size\",\n        ),\n        pytest.param(\n            # No type section contents\n            bytes.fromhex(\"ef0001010004020001000104000200\"),\n            EOFException.INVALID_SECTION_BODIES_SIZE,\n            id=\"EOF1I3540_0021_no_type_section_contents\",\n        ),\n        pytest.param(\n            # Type section contents (no outputs and max stack)\n            bytes.fromhex(\"ef000101000402000100010400020000\"),\n            EOFException.INVALID_SECTION_BODIES_SIZE,\n            id=\"EOF1I3540_0022_invalid_type_section_no_outputs_and_max_stack\",\n        ),\n        pytest.param(\n            # Type section contents (no max stack)\n            bytes.fromhex(\"ef00010100040200010001040002000000\"),\n            EOFException.INVALID_SECTION_BODIES_SIZE,\n            id=\"EOF1I3540_0023_invalid_type_section_no_max_stack\",\n        ),\n        pytest.param(\n            # Type section contents (max stack incomplete)\n            bytes.fromhex(\"ef0001010004020001000104000200000000\"),\n            EOFException.INVALID_SECTION_BODIES_SIZE,\n            id=\"EOF1I3540_0024_invalid_type_section_max_stack_incomplete\",\n        ),\n        pytest.param(\n            # No code section contents\n            bytes.fromhex(\"ef000101000402000100010400020000000000\"),\n            EOFException.INVALID_SECTION_BODIES_SIZE,\n            id=\"EOF1I3540_0025_no_code_section_contents\",\n        ),\n        pytest.param(\n            # Code section contents incomplete\n            bytes.fromhex(\"ef0001010004020001002904000000000000027f\"),\n            EOFException.INVALID_SECTION_BODIES_SIZE,\n            id=\"EOF1I3540_0026_code_section_contents_incomplete\",\n        ),\n        pytest.param(\n            # Trailing bytes after code section\n            bytes.fromhex(\"ef0001 010004 0200010001 040000 00 00800000 fe aabbcc\"),\n            EOFException.INVALID_SECTION_BODIES_SIZE,\n            id=\"EOF1I3540_0027_trailing_bytes_after_code_section\",\n        ),\n        pytest.param(\n            # Trailing bytes after code section with wrong first section type\n            bytes.fromhex(\"ef0001 010004 0200010001 040000 00 00000000 fe aabbcc\"),\n            EOFException.INVALID_FIRST_SECTION_TYPE,\n            id=\"EOF1I3540_0027_trailing_bytes_after_code_section_with_wrong_first_section_type\",\n        ),\n        pytest.param(\n            # Empty code section\n            bytes.fromhex(\"ef000101000402000100000400000000000000\"),\n            EOFException.ZERO_SECTION_SIZE,\n            id=\"EOF1I3540_0028_empty_code_section\",\n        ),\n        pytest.param(\n            # Code section preceding type section\n            bytes.fromhex(\"ef000102000100010100040400020000000000feaabb\"),\n            [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0030_code_section_preceding_type_section\",\n        ),\n        pytest.param(\n            # Data section preceding type section\n            bytes.fromhex(\"ef000104000201000402000100010000000000feaabb\"),\n            [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0031_data_section_preceding_type_section\",\n        ),\n        pytest.param(\n            # Data section preceding code section\n            bytes.fromhex(\"ef000101000404000202000100010000000000feaabb\"),\n            [EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0032_data_section_preceding_code_section\",\n        ),\n        pytest.param(\n            # Data section without code section\n            bytes.fromhex(\"ef00010100040400020000000000aabb\"),\n            [EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0033_data_section_without_code_section\",\n        ),\n        pytest.param(\n            # No data section\n            bytes.fromhex(\"ef000101000402000100010000000000fe\"),\n            [EOFException.MISSING_DATA_SECTION, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0034_no_data_section\",\n        ),\n        pytest.param(\n            # Trailing bytes after data section\n            Container(\n                sections=[\n                    Section.Code(Op.INVALID),\n                    Section.Data(\"aabb\"),\n                ],\n                extra=\"ccdd\",\n                expected_bytecode=\"ef0001 010004 0200010001 040002 00 00800000 fe aabbccdd\",\n            ),\n            EOFException.INVALID_SECTION_BODIES_SIZE,\n            id=\"EOF1I3540_0035_trailing_bytes_after_data_section\",\n        ),\n        pytest.param(\n            # Trailing bytes after data section with wrong first section type\n            bytes.fromhex(\"ef0001 010004 0200010001 040002 00 00000000 fe aabbccdd\"),\n            EOFException.INVALID_FIRST_SECTION_TYPE,\n            id=\"EOF1I3540_0035_trailing_bytes_after_data_section_with_wrong_first_section_type\",\n        ),\n        pytest.param(\n            # Multiple data sections\n            bytes.fromhex(\"ef000101000402000100010400020400020000000000feaabbaabb\"),\n            [EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0036_multiple_data_sections\",\n        ),\n        pytest.param(\n            # Multiple code and data sections\n            bytes.fromhex(\"ef000101000802000200010001040002040002000000000000000000fefeaabbaabb\"),\n            [EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0037_multiple_code_and_data_sections\",\n        ),\n        pytest.param(\n            # Unknown section ID (at the beginning)\n            bytes.fromhex(\"ef000105000101000402000100010400000000000000fe\"),\n            [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0038_unknown_section_id_at_the_beginning_05\",\n        ),\n        pytest.param(\n            # Unknown section ID (at the beginning)\n            bytes.fromhex(\"ef000106000101000402000100010400000000000000fe\"),\n            [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0039_unknown_section_id_at_the_beginning_06\",\n        ),\n        pytest.param(\n            # Unknown section ID (at the beginning)\n            bytes.fromhex(\"ef0001ff000101000402000100010400000000000000fe\"),\n            [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0040_unknown_section_id_at_the_beginning_ff\",\n        ),\n        pytest.param(\n            # Unknown section ID (after types section)\n            bytes.fromhex(\"ef000101000405000102000100010400000000000000fe\"),\n            [EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0041_unknown_section_id_after_types_section_05\",\n        ),\n        pytest.param(\n            # Unknown section ID (after types section)\n            bytes.fromhex(\"ef000101000406000102000100010400000000000000fe\"),\n            [EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0042_unknown_section_id_after_types_section_06\",\n        ),\n        pytest.param(\n            # Unknown section ID (after types section)\n            bytes.fromhex(\"ef0001010004ff000102000100010400000000000000fe\"),\n            [EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0043_unknown_section_id_after_types_section_ff\",\n        ),\n        pytest.param(\n            # Unknown section ID (after code section)\n            bytes.fromhex(\"ef000101000402000100010500010400000000000000fe\"),\n            [EOFException.MISSING_DATA_SECTION, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0044_unknown_section_id_after_code_section_05\",\n        ),\n        pytest.param(\n            # Unknown section ID (after code section)\n            bytes.fromhex(\"ef000101000402000100010600010400000000000000fe\"),\n            [EOFException.MISSING_DATA_SECTION, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0045_unknown_section_id_after_code_section_06\",\n        ),\n        pytest.param(\n            # Unknown section ID (after code section)\n            bytes.fromhex(\"ef00010100040200010001ff00010400000000000000fe\"),\n            [EOFException.MISSING_DATA_SECTION, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0046_unknown_section_id_after_code_section_ff\",\n        ),\n        pytest.param(\n            # Unknown section ID (after data section)\n            bytes.fromhex(\"ef000101000402000100010400000500010000000000fe\"),\n            [EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0047_unknown_section_id_after_data_section_05\",\n        ),\n        pytest.param(\n            # Unknown section ID (after data section)\n            bytes.fromhex(\"ef000101000402000100010400000600010000000000fe\"),\n            [EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0048_unknown_section_id_after_data_section_06\",\n        ),\n        pytest.param(\n            # Unknown section ID (after data section)\n            bytes.fromhex(\"ef00010100040200010001040000ff00010000000000fe\"),\n            [EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0049_unknown_section_id_after_data_section_ff\",\n        ),\n        # TODO: Duplicated tests\n        # The following test cases are duplicates but added to confirm test coverage is retained.\n        pytest.param(\n            Container(\n                name=\"EOF1I3540_0001 (Invalid) No magic\",\n                raw_bytes=\"ef\",\n            ),\n            EOFException.INVALID_MAGIC,\n            id=\"EOF1I3540_0001_invalid_no_magic\",\n        ),\n        pytest.param(\n            Container(\n                name=\"EOF1I3540_0002 (Invalid) Invalid magic\",\n                raw_bytes=\"ef010101000402000100010400000000000000fe\",\n            ),\n            EOFException.INVALID_MAGIC,\n            id=\"EOF1I3540_0002_invalid_incorrect_magic_01\",\n        ),\n        pytest.param(\n            Container(\n                name=\"EOF1I3540_0003\",\n                raw_bytes=\"ef020101000402000100010400000000000000fe\",\n            ),\n            EOFException.INVALID_MAGIC,\n            id=\"EOF1I3540_0003_invalid_incorrect_magic_02\",\n        ),\n        pytest.param(\n            Container(\n                name=\"EOF1I3540_0004\",\n                raw_bytes=\"efff0101000402000100010400000000000000fe\",\n            ),\n            EOFException.INVALID_MAGIC,\n            id=\"EOF1I3540_0004_invalid_incorrect_magic_ff\",\n        ),\n        pytest.param(\n            Container(\n                name=\"EOF1I3540_0005 (Invalid) No version\",\n                raw_bytes=\"ef00\",\n            ),\n            [EOFException.INVALID_VERSION, EOFException.INVALID_MAGIC],\n            id=\"EOF1I3540_0005_invalid_no_version\",\n        ),\n        pytest.param(\n            Container(\n                name=\"EOF1I3540_0006 (Invalid) Invalid version\",\n                raw_bytes=\"ef000001000402000100010400000000000000fe\",\n            ),\n            EOFException.INVALID_VERSION,\n            id=\"EOF1I3540_0006_invalid_incorrect_version_00\",\n        ),\n        pytest.param(\n            Container(\n                name=\"EOF1I3540_0007\",\n                raw_bytes=\"ef000201000402000100010400000000000000fe\",\n            ),\n            EOFException.INVALID_VERSION,\n            id=\"EOF1I3540_0007_invalid_incorrect_version_02\",\n        ),\n        pytest.param(\n            Container(\n                name=\"EOF1I3540_0008\",\n                raw_bytes=\"ef00ff01000402000100010400000000000000fe\",\n            ),\n            EOFException.INVALID_VERSION,\n            id=\"EOF1I3540_0008_invalid_incorrect_version_ff\",\n        ),\n    ],\n)\ndef test_migrated_valid_invalid(\n    eof_test: EOFTestFiller,\n    eof_code: Container | bytes,\n    exception: EOFExceptionInstanceOrList | None,\n):\n    \"\"\"\n    Verify EOF container construction and exception\n    \"\"\"\n    eof_test(\n        data=eof_code,\n        expect_exception=exception,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid/index/test_cases/","title":"Test Migrated Valid Invalid - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py:

    test_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1V3540_0001_deployed_code_without_data_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1V3540_0002_deployed_code_with_data_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1V3540_0003_no_data_section_contents]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1V3540_0004_data_section_contents_incomplete]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0011_type_section_size_incomplete]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0012_empty_code_section_with_non_empty_data_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0014_total_of_code_sections_incomplete]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0016_code_section_size_incomplete]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0017_no_data_section_after_code_section_size]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0018_no_data_size]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0019_data_size_incomplete]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0020_no_section_terminator_after_data_section_size]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0021_no_type_section_contents]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0022_invalid_type_section_no_outputs_and_max_stack]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0023_invalid_type_section_no_max_stack]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0024_invalid_type_section_max_stack_incomplete]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0025_no_code_section_contents]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0026_code_section_contents_incomplete]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0027_trailing_bytes_after_code_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0027_trailing_bytes_after_code_section_with_wrong_first_section_type]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0028_empty_code_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0030_code_section_preceding_type_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0031_data_section_preceding_type_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0032_data_section_preceding_code_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0033_data_section_without_code_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0034_no_data_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0035_trailing_bytes_after_data_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0035_trailing_bytes_after_data_section_with_wrong_first_section_type]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0036_multiple_data_sections]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0037_multiple_code_and_data_sections]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0038_unknown_section_id_at_the_beginning_05]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0039_unknown_section_id_at_the_beginning_06]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0040_unknown_section_id_at_the_beginning_ff]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0041_unknown_section_id_after_types_section_05]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0042_unknown_section_id_after_types_section_06]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0043_unknown_section_id_after_types_section_ff]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0044_unknown_section_id_after_code_section_05]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0045_unknown_section_id_after_code_section_06]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0046_unknown_section_id_after_code_section_ff]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0047_unknown_section_id_after_data_section_05]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0048_unknown_section_id_after_data_section_06]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0049_unknown_section_id_after_data_section_ff]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0001_invalid_no_magic]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0002_invalid_incorrect_magic_01]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0003_invalid_incorrect_magic_02]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0004_invalid_incorrect_magic_ff]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0005_invalid_no_version]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0006_invalid_incorrect_version_00]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0007_invalid_incorrect_version_02]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0008_invalid_incorrect_version_ff]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch/","title":"Test Section Header Body Mismatch","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF Container construction test

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_section_header_body_mismatch.test_code_section_header_body_mismatch","title":"test_code_section_header_body_mismatch(eof_test, skip_header_listing, skip_body_listing, skip_types_body_listing, skip_types_header_listing, expected_code, expected_exception)","text":"

    Inconsistent number of code sections (between types and code)

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch.py
    @pytest.mark.parametrize(\n    **extend_with_defaults(\n        defaults=dict(\n            skip_header_listing=False,  # second section is mentioned in code header array\n            skip_body_listing=False,  # second section code is in container's body\n            skip_types_body_listing=False,  # code input bytes not listed in container's body\n            skip_types_header_listing=False,  # code input bytes size not added to types section size  # noqa: E501\n            expected_code=\"\",\n            expected_exception=None,\n        ),\n        cases=[\n            pytest.param(\n                dict(\n                    skip_header_listing=True,\n                    skip_body_listing=True,\n                    expected_code=\"ef000101000802000100030400040000800001000000003050000bad60A7\",\n                    expected_exception=[\n                        EOFException.INVALID_TYPE_SECTION_SIZE,\n                        EOFException.INVALID_SECTION_BODIES_SIZE,\n                    ],\n                ),\n                id=\"drop_code_section_and_header\",\n            ),\n            pytest.param(\n                dict(\n                    skip_header_listing=True,\n                    skip_body_listing=False,\n                    expected_code=\"ef000101000802000100030400040000800001000000003050003050000bad60A7\",  # noqa: E501\n                    expected_exception=[\n                        EOFException.INVALID_TYPE_SECTION_SIZE,\n                        EOFException.INVALID_SECTION_BODIES_SIZE,\n                    ],\n                ),\n                id=\"drop_code_header\",\n            ),\n            pytest.param(\n                dict(\n                    skip_header_listing=False,\n                    skip_body_listing=True,\n                    expected_code=\"ef0001010008020002000300030400040000800001000000003050000bad60A7\",  # noqa: E501\n                    expected_exception=[\n                        EOFException.UNREACHABLE_CODE_SECTIONS,\n                        EOFException.TOPLEVEL_CONTAINER_TRUNCATED,\n                    ],\n                ),\n                id=\"drop_code_section\",\n            ),\n            pytest.param(\n                dict(\n                    skip_header_listing=False,\n                    skip_body_listing=False,\n                    expected_code=\"ef0001010008020002000300030400040000800001000000003050003050000bad60A7\",  # noqa: E501\n                    expected_exception=EOFException.UNREACHABLE_CODE_SECTIONS,\n                ),\n                id=\"layout_ok_code_bad\",\n            ),\n            pytest.param(\n                dict(\n                    skip_header_listing=True,\n                    skip_body_listing=True,\n                    skip_types_body_listing=True,\n                    expected_code=\"ef0001010008020001000304000400008000013050000bad60a7\",\n                    expected_exception=[\n                        EOFException.INVALID_TYPE_SECTION_SIZE,\n                        EOFException.INVALID_SECTION_BODIES_SIZE,\n                    ],\n                ),\n                id=\"drop_types_header\",\n            ),\n            pytest.param(\n                dict(\n                    skip_header_listing=True,\n                    skip_body_listing=True,\n                    skip_types_body_listing=True,\n                    skip_types_header_listing=True,\n                    expected_code=\"ef0001010004020001000304000400008000013050000bad60a7\",\n                    expected_exception=None,\n                ),\n                id=\"drop_everything\",\n            ),\n        ],\n    )\n)\ndef test_code_section_header_body_mismatch(\n    eof_test: EOFTestFiller,\n    skip_header_listing: bool,\n    skip_body_listing: bool,\n    skip_types_body_listing: bool,\n    skip_types_header_listing: bool,\n    expected_code: str,\n    expected_exception: EOFExceptionInstanceOrList | None,\n):\n    \"\"\"\n    Inconsistent number of code sections (between types and code)\n    \"\"\"\n    eof_code = Container(\n        name=\"EOF1I0018\",\n        sections=[\n            Section.Code(\n                code=Op.ADDRESS + Op.POP + Op.STOP,\n            ),\n            Section.Code(\n                code=Op.ADDRESS + Op.POP + Op.STOP,\n                code_inputs=0,\n                code_outputs=0,\n                max_stack_height=0,\n                # whether to not mention it in code section header list\n                skip_header_listing=skip_header_listing,\n                # whether to not print its code in containers body\n                skip_body_listing=skip_body_listing,\n                # whether to not print its input bytes in containers body\n                skip_types_body_listing=skip_types_body_listing,\n                # whether to not calculate its input bytes size in types section's header\n                skip_types_header_listing=skip_types_header_listing,\n            ),\n            Section.Data(\"0x0bad60A7\"),\n        ],\n    )\n\n    # TODO remove this after Container class implementation is reliable\n    assert bytes(eof_code).hex() == bytes.fromhex(expected_code).hex()\n\n    eof_test(\n        data=eof_code,\n        expect_exception=expected_exception,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch/index/test_cases/","title":"Test Section Header Body Mismatch - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch.py:

    test_code_section_header_body_mismatch[fork_CancunEIP7692-eof_test-drop_code_section_and_header]\ntest_code_section_header_body_mismatch[fork_CancunEIP7692-eof_test-drop_code_header]\ntest_code_section_header_body_mismatch[fork_CancunEIP7692-eof_test-drop_code_section]\ntest_code_section_header_body_mismatch[fork_CancunEIP7692-eof_test-layout_ok_code_bad]\ntest_code_section_header_body_mismatch[fork_CancunEIP7692-eof_test-drop_types_header]\ntest_code_section_header_body_mismatch[fork_CancunEIP7692-eof_test-drop_everything]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order/","title":"Test Section Order","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Different variations of EOF sections displacement

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_section_order.test_section_order","title":"test_section_order(eof_test, section_kind, section_test, test_position)","text":"

    Test sections order and it appearance in body and header

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py
    @pytest.mark.parametrize(\"section_kind\", [SectionKind.TYPE, SectionKind.CODE, SectionKind.DATA])\n@pytest.mark.parametrize(\"section_test\", [SectionTest.MISSING, SectionTest.WRONG_ORDER])\n@pytest.mark.parametrize(\n    \"test_position\", [CasePosition.BODY, CasePosition.HEADER, CasePosition.BODY_AND_HEADER]\n)\ndef test_section_order(\n    eof_test: EOFTestFiller,\n    section_kind: SectionKind,\n    section_test: SectionTest,\n    test_position: CasePosition,\n):\n    \"\"\"\n    Test sections order and it appearance in body and header\n    \"\"\"\n\n    def calculate_skip_flag(kind, position) -> bool:\n        return (\n            False\n            if (section_kind != kind)\n            else (\n                True\n                if section_test == SectionTest.MISSING\n                and (test_position == position or test_position == CasePosition.BODY_AND_HEADER)\n                else False\n            )\n        )\n\n    def make_section_order(kind) -> List[Section]:\n        if section_test != SectionTest.WRONG_ORDER:\n            return [section_type, section_code, section_data]\n        if kind == SectionKind.TYPE:\n            return [section_code, section_type, section_data]\n        if kind == SectionKind.CODE:\n            return [section_type, section_data, section_code]\n        if kind == SectionKind.DATA:\n            return [section_data, section_type, section_code]\n        return [section_type, section_code, section_data]\n\n    section_code = Section.Code(\n        code=Op.ADDRESS + Op.POP + Op.STOP,\n        skip_header_listing=calculate_skip_flag(SectionKind.CODE, CasePosition.HEADER),\n        skip_body_listing=calculate_skip_flag(SectionKind.CODE, CasePosition.BODY),\n    )\n    section_type = Section(\n        kind=SectionKind.TYPE,\n        data=bytes.fromhex(\"00800001\"),\n        custom_size=4,\n        skip_header_listing=calculate_skip_flag(SectionKind.TYPE, CasePosition.HEADER),\n        skip_body_listing=calculate_skip_flag(SectionKind.TYPE, CasePosition.BODY),\n    )\n    section_data = Section.Data(\n        \"ef\",\n        skip_header_listing=calculate_skip_flag(SectionKind.DATA, CasePosition.HEADER),\n        skip_body_listing=calculate_skip_flag(SectionKind.DATA, CasePosition.BODY),\n    )\n\n    expected_code, expected_exception = get_expected_code_exception(\n        section_kind, section_test, test_position\n    )\n\n    eof_code = Container(\n        sections=make_section_order(section_kind),\n        auto_type_section=AutoSection.NONE,\n        auto_sort_sections=(\n            AutoSection.AUTO\n            if section_test != SectionTest.WRONG_ORDER\n            else (\n                AutoSection.ONLY_BODY\n                if test_position == CasePosition.HEADER\n                else (\n                    AutoSection.ONLY_HEADER\n                    if test_position == CasePosition.BODY\n                    else AutoSection.NONE\n                )\n            )\n        ),\n        expected_bytecode=expected_code,\n    )\n\n    eof_test(\n        data=eof_code,\n        expect_exception=expected_exception,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_section_order.test_container_section_order","title":"test_container_section_order(eof_test, container_position, test_position)","text":"

    Test containers section being out of order in the header and/or body. This extends and follows the convention of the test_section_order() for the optional container section.

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py
    @pytest.mark.parametrize(\"container_position\", range(4))\n@pytest.mark.parametrize(\n    \"test_position\", [CasePosition.BODY, CasePosition.HEADER, CasePosition.BODY_AND_HEADER]\n)\ndef test_container_section_order(\n    eof_test: EOFTestFiller,\n    container_position: int,\n    test_position: CasePosition,\n):\n    \"\"\"\n    Test containers section being out of order in the header and/or body.\n    This extends and follows the convention of the test_section_order()\n    for the optional container section.\n    \"\"\"\n    section_code = Section.Code(\n        code=Op.EOFCREATE[0](0, 0, 0, 0)\n        # TODO: Migrated tests had the following infinite loop, so it is kept here\n        #       to equalize code coverage.\n        + Op.RJUMP[0]\n        + Op.STOP()\n    )\n    section_type = Section(kind=SectionKind.TYPE, data=bytes.fromhex(\"00800004\"))\n    section_data = Section.Data(\"ef\")\n    section_container = Section.Container(Container.Code(Op.INVALID))\n\n    sections = [section_type, section_code, section_data]\n    sections.insert(container_position, section_container)\n    eof_code = Container(\n        sections=sections,\n        auto_type_section=AutoSection.NONE,\n        auto_sort_sections=(\n            AutoSection.ONLY_BODY\n            if test_position == CasePosition.HEADER\n            else (\n                AutoSection.ONLY_HEADER if test_position == CasePosition.BODY else AutoSection.NONE\n            )\n        ),\n    )\n\n    def get_expected_exception():\n        match container_position, test_position:\n            case 2, _:\n                return None  # Valid containers section position\n            case 0, CasePosition.BODY:  # Messes up with the type section\n                return EOFException.INVALID_FIRST_SECTION_TYPE\n            case 1, CasePosition.BODY:  # Messes up with the code section\n                return EOFException.UNDEFINED_INSTRUCTION\n            case 3, CasePosition.BODY:  # Data section messes up with the container section\n                return EOFException.INVALID_MAGIC\n            case 0, CasePosition.HEADER | CasePosition.BODY_AND_HEADER:\n                return EOFException.MISSING_TYPE_HEADER\n            case 1, CasePosition.HEADER | CasePosition.BODY_AND_HEADER:\n                return EOFException.MISSING_CODE_HEADER\n            case 3, CasePosition.HEADER | CasePosition.BODY_AND_HEADER:\n                return EOFException.MISSING_TERMINATOR\n\n    eof_test(\n        data=eof_code,\n        expect_exception=get_expected_exception(),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order/index/test_cases/","title":"Test Section Order - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py:

    test_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-section_test_SectionTest.MISSING-section_kind_TYPE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-section_test_SectionTest.MISSING-section_kind_CODE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-section_test_SectionTest.MISSING-section_kind_DATA]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-section_test_SectionTest.WRONG_ORDER-section_kind_TYPE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-section_test_SectionTest.WRONG_ORDER-section_kind_CODE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-section_test_SectionTest.WRONG_ORDER-section_kind_DATA]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.HEADER-section_test_SectionTest.MISSING-section_kind_TYPE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.HEADER-section_test_SectionTest.MISSING-section_kind_CODE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.HEADER-section_test_SectionTest.MISSING-section_kind_DATA]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.HEADER-section_test_SectionTest.WRONG_ORDER-section_kind_TYPE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.HEADER-section_test_SectionTest.WRONG_ORDER-section_kind_CODE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.HEADER-section_test_SectionTest.WRONG_ORDER-section_kind_DATA]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY_AND_HEADER-section_test_SectionTest.MISSING-section_kind_TYPE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY_AND_HEADER-section_test_SectionTest.MISSING-section_kind_CODE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY_AND_HEADER-section_test_SectionTest.MISSING-section_kind_DATA]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY_AND_HEADER-section_test_SectionTest.WRONG_ORDER-section_kind_TYPE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY_AND_HEADER-section_test_SectionTest.WRONG_ORDER-section_kind_CODE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY_AND_HEADER-section_test_SectionTest.WRONG_ORDER-section_kind_DATA]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-container_position_0]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-container_position_1]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-container_position_2]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-container_position_3]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.HEADER-container_position_0]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.HEADER-container_position_1]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.HEADER-container_position_2]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.HEADER-container_position_3]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY_AND_HEADER-container_position_0]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY_AND_HEADER-container_position_1]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY_AND_HEADER-container_position_2]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY_AND_HEADER-container_position_3]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size/","title":"Test Section Size","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF Container, test custom_size field for sections

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_section_size.test_section_size","title":"test_section_size(eof_test, section_size, section_kind, exception)","text":"

    Test custom_size is auto, more or less then the actual size of the section

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py
    @pytest.mark.parametrize(\n    \"section_kind, section_size, exception\",\n    [\n        pytest.param(SectionKind.DATA, SectionSize.NORMAL, None),\n        pytest.param(SectionKind.DATA, SectionSize.ZERO, EOFException.INVALID_SECTION_BODIES_SIZE),\n        pytest.param(\n            SectionKind.DATA, SectionSize.UNDERSIZE, EOFException.INVALID_SECTION_BODIES_SIZE\n        ),\n        pytest.param(\n            SectionKind.DATA, SectionSize.OVERSIZE, EOFException.TOPLEVEL_CONTAINER_TRUNCATED\n        ),\n        pytest.param(\n            SectionKind.DATA, SectionSize.HUGE, EOFException.TOPLEVEL_CONTAINER_TRUNCATED\n        ),\n        pytest.param(SectionKind.DATA, SectionSize.MAX, EOFException.TOPLEVEL_CONTAINER_TRUNCATED),\n        pytest.param(SectionKind.CODE, SectionSize.NORMAL, None),\n        pytest.param(SectionKind.CODE, SectionSize.ZERO, EOFException.ZERO_SECTION_SIZE),\n        pytest.param(\n            SectionKind.CODE, SectionSize.UNDERSIZE, EOFException.INVALID_SECTION_BODIES_SIZE\n        ),\n        pytest.param(\n            SectionKind.CODE, SectionSize.OVERSIZE, EOFException.INVALID_SECTION_BODIES_SIZE\n        ),\n        pytest.param(SectionKind.CODE, SectionSize.HUGE, EOFException.INVALID_SECTION_BODIES_SIZE),\n        pytest.param(SectionKind.CODE, SectionSize.MAX, EOFException.INVALID_SECTION_BODIES_SIZE),\n        pytest.param(SectionKind.TYPE, SectionSize.NORMAL, None),\n        pytest.param(\n            SectionKind.TYPE,\n            SectionSize.ZERO,\n            [EOFException.ZERO_SECTION_SIZE, EOFException.INVALID_SECTION_BODIES_SIZE],\n            id=\"type_size_zero\",\n        ),\n        pytest.param(\n            SectionKind.TYPE, SectionSize.UNDERSIZE, EOFException.INVALID_TYPE_SECTION_SIZE\n        ),\n        pytest.param(\n            SectionKind.TYPE, SectionSize.OVERSIZE, EOFException.INVALID_SECTION_BODIES_SIZE\n        ),\n        pytest.param(SectionKind.TYPE, SectionSize.HUGE, EOFException.INVALID_SECTION_BODIES_SIZE),\n        pytest.param(\n            SectionKind.TYPE,\n            SectionSize.MAX,\n            [EOFException.INVALID_SECTION_BODIES_SIZE, EOFException.INVALID_TYPE_SECTION_SIZE],\n            id=\"type_size_max\",\n        ),\n    ],\n)\ndef test_section_size(\n    eof_test: EOFTestFiller,\n    section_size: SectionSize,\n    section_kind: SectionKind,\n    exception: EOFExceptionInstanceOrList,\n):\n    \"\"\"\n    Test custom_size is auto, more or less then the actual size of the section\n    \"\"\"\n    eof_code = Container()\n\n    if section_size != SectionSize.NORMAL and section_kind == SectionKind.TYPE:\n        eof_code.sections.append(\n            Section(\n                kind=SectionKind.TYPE,\n                data=\"0x00800001\",\n                custom_size=section_size,\n            ),\n        )\n\n    if section_size != SectionSize.NORMAL and section_kind == SectionKind.CODE:\n        eof_code.sections.append(\n            Section.Code(\n                code=Op.ADDRESS + Op.POP + Op.STOP,\n                max_stack_height=1,\n                custom_size=section_size,\n            )\n        )\n    else:\n        eof_code.sections.append(\n            Section.Code(\n                code=Op.ADDRESS + Op.POP + Op.STOP,\n                max_stack_height=1,\n            )\n        )\n\n    if section_size != SectionSize.NORMAL and section_kind == SectionKind.DATA:\n        eof_code.sections.append(Section.Data(\"0x00daaa\", custom_size=section_size))\n    else:\n        eof_code.sections.append(Section.Data(\"0x00aaaa\"))\n\n    eof_test(\n        data=eof_code,\n        expect_exception=exception,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_section_size.test_truncated_container_without_data","title":"test_truncated_container_without_data(eof_test, truncation_len, exception)","text":"

    This test takes a semi-valid container and removes some bytes from its tail. Migrated from EOFTests/efValidation/EOF1_truncated_section_.json (cases without data section).

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py
    @pytest.mark.parametrize(\n    \"truncation_len, exception\",\n    [\n        # The original container is not valid by itself because its 2-byte code section\n        # starts with the terminating instruction: INVALID.\n        pytest.param(0, EOFException.UNREACHABLE_INSTRUCTIONS),\n        pytest.param(1, EOFException.INVALID_SECTION_BODIES_SIZE, id=\"EOF1_truncated_section_2\"),\n        pytest.param(3, EOFException.INVALID_SECTION_BODIES_SIZE, id=\"EOF1_truncated_section_1\"),\n        pytest.param(6, EOFException.INVALID_SECTION_BODIES_SIZE, id=\"EOF1_truncated_section_0\"),\n    ],\n)\ndef test_truncated_container_without_data(\n    eof_test: EOFTestFiller,\n    truncation_len: int,\n    exception: EOFException,\n):\n    \"\"\"\n    This test takes a semi-valid container and removes some bytes from its tail.\n    Migrated from EOFTests/efValidation/EOF1_truncated_section_.json (cases without data section).\n    \"\"\"\n    container = Container(sections=[Section.Code(Op.INVALID + Op.INVALID)])\n    bytecode = bytes(container)\n    eof_test(\n        data=bytecode[: len(bytecode) - truncation_len],\n        expect_exception=exception,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_section_size.test_truncated_container_with_data","title":"test_truncated_container_with_data(eof_test, truncation_len, exception)","text":"

    This test takes a valid container with data and removes some bytes from its tail. Migrated from EOFTests/efValidation/EOF1_truncated_section_.json (cases with data section).

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py
    @pytest.mark.parametrize(\n    \"truncation_len, exception\",\n    [\n        pytest.param(0, None),\n        pytest.param(1, EOFException.TOPLEVEL_CONTAINER_TRUNCATED, id=\"EOF1_truncated_section_4\"),\n        pytest.param(2, EOFException.TOPLEVEL_CONTAINER_TRUNCATED, id=\"EOF1_truncated_section_3\"),\n    ],\n)\ndef test_truncated_container_with_data(\n    eof_test: EOFTestFiller,\n    truncation_len: int,\n    exception: EOFException,\n):\n    \"\"\"\n    This test takes a valid container with data and removes some bytes from its tail.\n    Migrated from EOFTests/efValidation/EOF1_truncated_section_.json (cases with data section).\n    \"\"\"\n    container = Container(sections=[Section.Code(Op.INVALID), Section.Data(\"aabb\")])\n    bytecode = bytes(container)\n    eof_test(\n        data=bytecode[: len(bytecode) - truncation_len],\n        expect_exception=exception,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size/index/test_cases/","title":"Test Section Size - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py:

    test_section_size[fork_CancunEIP7692-eof_test-section_kind_DATA-section_size_NORMAL-exception_None]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_DATA-section_size_ZERO-exception_EOFException.INVALID_SECTION_BODIES_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_DATA-section_size_UNDERSIZE-exception_EOFException.INVALID_SECTION_BODIES_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_DATA-section_size_OVERSIZE-exception_EOFException.TOPLEVEL_CONTAINER_TRUNCATED]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_DATA-section_size_HUGE-exception_EOFException.TOPLEVEL_CONTAINER_TRUNCATED]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_DATA-section_size_MAX-exception_EOFException.TOPLEVEL_CONTAINER_TRUNCATED]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_CODE-section_size_NORMAL-exception_None]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_CODE-section_size_ZERO-exception_EOFException.ZERO_SECTION_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_CODE-section_size_UNDERSIZE-exception_EOFException.INVALID_SECTION_BODIES_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_CODE-section_size_OVERSIZE-exception_EOFException.INVALID_SECTION_BODIES_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_CODE-section_size_HUGE-exception_EOFException.INVALID_SECTION_BODIES_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_CODE-section_size_MAX-exception_EOFException.INVALID_SECTION_BODIES_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_TYPE-section_size_NORMAL-exception_None]\ntest_section_size[fork_CancunEIP7692-eof_test-type_size_zero]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_TYPE-section_size_UNDERSIZE-exception_EOFException.INVALID_TYPE_SECTION_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_TYPE-section_size_OVERSIZE-exception_EOFException.INVALID_SECTION_BODIES_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_TYPE-section_size_HUGE-exception_EOFException.INVALID_SECTION_BODIES_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-type_size_max]\ntest_truncated_container_without_data[fork_CancunEIP7692-eof_test-truncation_len_0-exception_EOFException.UNREACHABLE_INSTRUCTIONS]\ntest_truncated_container_without_data[fork_CancunEIP7692-eof_test-EOF1_truncated_section_2]\ntest_truncated_container_without_data[fork_CancunEIP7692-eof_test-EOF1_truncated_section_1]\ntest_truncated_container_without_data[fork_CancunEIP7692-eof_test-EOF1_truncated_section_0]\ntest_truncated_container_with_data[fork_CancunEIP7692-eof_test-truncation_len_0-exception_None]\ntest_truncated_container_with_data[fork_CancunEIP7692-eof_test-EOF1_truncated_section_4]\ntest_truncated_container_with_data[fork_CancunEIP7692-eof_test-EOF1_truncated_section_3]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/","title":"EIP-4200 Relative Jumps","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip4200_relative_jumps.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip4200_relative_jumps --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip4200_relative_jumps --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF tests for EIP-4200 relative jumps

    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/","title":"Test Rjump","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF JUMPF tests covering stack and code validation rules.

    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_positive_negative","title":"test_rjump_positive_negative(eof_state_test)","text":"

    EOF1V4200_0001 (Valid) EOF code containing RJUMP (Positive, Negative)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_positive_negative(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0001 (Valid) EOF code containing RJUMP (Positive, Negative)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0\n                    + Op.RJUMPI[3]\n                    + Op.RJUMP[7]\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                    + Op.RJUMP[-10],\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_positive_negative_with_data","title":"test_rjump_positive_negative_with_data(eof_state_test)","text":"

    EOF1V4200_0001 (Valid) EOF code containing RJUMP (Positive, Negative)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_positive_negative_with_data(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0001 (Valid) EOF code containing RJUMP (Positive, Negative)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0\n                    + Op.RJUMPI[3]\n                    + Op.RJUMP[7]\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                    + Op.RJUMP[-10],\n                ),\n                Section.Data(data=b\"\\xde\\xad\\xbe\\xef\"),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_zero","title":"test_rjump_zero(eof_state_test)","text":"

    EOF1V4200_0002 (Valid) EOF code containing RJUMP (Zero)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_zero(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0002 (Valid) EOF code containing RJUMP (Zero)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RJUMP[0] + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_maxes","title":"test_rjump_maxes(eof_state_test)","text":"

    EOF1V4200_0003 EOF with RJUMP containing the maximum positive and negative offset (32767)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_maxes(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0003 EOF with RJUMP containing the maximum positive and negative offset (32767)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0\n                    + Op.RJUMPI[\n                        RJUMP_LEN\n                    ]  # The push/jumpi is to allow the NOOPs to be forward referenced\n                    + Op.RJUMP[0x7FFF]\n                    + Op.NOOP * (0x7FFF - 7)\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                    + Op.RJUMP[0x8000],\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_max_bytecode_size","title":"test_rjump_max_bytecode_size(eof_test)","text":"

    EOF1V4200_0003 EOF with RJUMP containing the maximum offset that does not exceed the maximum bytecode size

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_max_bytecode_size(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1V4200_0003 EOF with RJUMP containing the maximum offset that does not exceed the maximum\n    bytecode size\n    \"\"\"\n    NOOP_COUNT = MAX_BYTECODE_SIZE - 27\n    code = (\n        Op.RJUMPI[RJUMP_LEN](Op.ORIGIN)  # The jumpi is to allow the NOOPs to be forward referenced\n        + Op.RJUMP[len(Op.NOOP) * NOOP_COUNT]\n        + (Op.NOOP * NOOP_COUNT)\n        + Op.STOP\n    )\n    container = Container.Code(code=code)\n    assert len(container) == MAX_BYTECODE_SIZE\n    eof_test(data=container)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_truncated_rjump","title":"test_rjump_truncated_rjump(eof_test)","text":"

    EOF1I4200_0001 (Invalid) EOF code containing truncated RJUMP

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_truncated_rjump(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF1I4200_0001 (Invalid) EOF code containing truncated RJUMP\"\"\"\n    eof_test(\n        data=Container(\n            sections=[Section.Code(code=Op.RJUMP)],\n        ),\n        expect_exception=EOFException.TRUNCATED_INSTRUCTION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_truncated_rjump_2","title":"test_rjump_truncated_rjump_2(eof_test)","text":"

    EOF1I4200_0002 (Invalid) EOF code containing truncated RJUMP

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_truncated_rjump_2(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF1I4200_0002 (Invalid) EOF code containing truncated RJUMP\"\"\"\n    eof_test(\n        data=Container(\n            sections=[Section.Code(code=Op.RJUMP + Op.STOP)],\n        ),\n        expect_exception=EOFException.TRUNCATED_INSTRUCTION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_header","title":"test_rjump_into_header(eof_test)","text":"

    EOF1I4200_0003 (Invalid) EOF code containing RJUMP with target outside code bounds (Jumping into header)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_header(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0003 (Invalid) EOF code containing RJUMP with target outside code bounds\n    (Jumping into header)\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.RJUMP[-5]),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_before_header","title":"test_rjump_before_header(eof_test)","text":"

    EOF1I4200_0004 (Invalid) EOF code containing RJUMP with target outside code bounds (Jumping before code begin)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_before_header(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0004 (Invalid) EOF code containing RJUMP with target outside code bounds\n    (Jumping before code begin)\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.RJUMP[-23]),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_data","title":"test_rjump_into_data(eof_test)","text":"

    EOF1I4200_0005 (Invalid) EOF code containing RJUMP with target outside code bounds (Jumping into data section)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_data(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0005 (Invalid) EOF code containing RJUMP with target outside code bounds\n    (Jumping into data section)\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.RJUMP[2]),\n                Section.Data(data=b\"\\xaa\\xbb\\xcc\"),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_outside_other_section_before","title":"test_rjump_outside_other_section_before(eof_test)","text":"

    EOF code containing RJUMP with target outside code bounds (prior code section)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_outside_other_section_before(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target outside code bounds (prior code section)\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.JUMPF[1]),\n                Section.Code(code=Op.RJUMP[-6]),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_outside_other_section_after","title":"test_rjump_outside_other_section_after(eof_test)","text":"

    EOF code containing RJUMP with target outside code bounds (Subsequent code section)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_outside_other_section_after(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target outside code bounds (Subsequent code section)\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.JUMPF[1]),\n                Section.Code(code=Op.RJUMP[3] + Op.JUMPF[2]),\n                Section.Code(code=Op.STOP),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_after_container","title":"test_rjump_after_container(eof_test)","text":"

    EOF1I4200_0006 (Invalid) EOF code containing RJUMP with target outside code bounds (Jumping after code end)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_after_container(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0006 (Invalid) EOF code containing RJUMP with target outside code bounds\n    (Jumping after code end)\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.RJUMP[2]),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_to_code_end","title":"test_rjump_to_code_end(eof_test)","text":"

    EOF1I4200_0007 (Invalid) EOF code containing RJUMP with target outside code bounds (Jumping to code end)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_to_code_end(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0007 (Invalid) EOF code containing RJUMP with target outside code bounds\n    (Jumping to code end)\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.RJUMP[1] + Op.STOP),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_self_data_portion","title":"test_rjump_into_self_data_portion(eof_test, offset)","text":"

    EOF1I4200_0008 (Invalid) EOF code containing RJUMP with target self RJUMP immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    @pytest.mark.parametrize(\"offset\", range(1, Op.RJUMP.data_portion_length + 1))\ndef test_rjump_into_self_data_portion(\n    eof_test: EOFTestFiller,\n    offset: int,\n):\n    \"\"\"EOF1I4200_0008 (Invalid) EOF code containing RJUMP with target self RJUMP immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.RJUMP[-offset] + Op.STOP),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_self_remaining_code","title":"test_rjump_into_self_remaining_code(eof_test)","text":"

    EOF1I4200_0008 (Invalid) EOF code containing RJUMP with target self RJUMP but remaining unreachable code

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_self_remaining_code(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0008 (Invalid) EOF code containing RJUMP with target self RJUMP but remaining\n    unreachable code\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.RJUMP[-len(Op.RJUMP[0])] + Op.STOP),\n            ],\n        ),\n        expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_self","title":"test_rjump_into_self(eof_test)","text":"

    EOF code containing RJUMP with target self RJUMP

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_self(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target self RJUMP\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.RJUMP[-len(Op.RJUMP[0])]),\n            ],\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_self_pre_code","title":"test_rjump_into_self_pre_code(eof_test)","text":"

    EOF code containing RJUMP with target self RJUMP with non-zero stack before RJUMP

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_self_pre_code(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target self RJUMP with non-zero stack before RJUMP\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.PUSH1(0) + Op.RJUMP[-len(Op.RJUMP[0])]),\n            ],\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_stack_height_diff","title":"test_rjump_into_stack_height_diff(eof_test)","text":"

    EOF code containing RJUMP with target instruction that causes stack height difference

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_stack_height_diff(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target instruction that causes stack height difference\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.PUSH1(0) + Op.RJUMP[-(len(Op.RJUMP[0]) + len(Op.PUSH1(0)))]),\n            ],\n        ),\n        expect_exception=EOFException.STACK_HEIGHT_MISMATCH,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_stack_height_diff_2","title":"test_rjump_into_stack_height_diff_2(eof_test)","text":"

    EOF code containing RJUMP with target instruction that cause stack height difference

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_stack_height_diff_2(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target instruction that cause stack height difference\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0) + Op.POP + Op.RJUMP[-(len(Op.RJUMP[0]) + len(Op.POP))]\n                ),\n            ],\n        ),\n        expect_exception=EOFException.STACK_HEIGHT_MISMATCH,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_stack_underflow","title":"test_rjump_into_stack_underflow(eof_test)","text":"

    EOF code containing RJUMP with target instruction that cause stack underflow

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_stack_underflow(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target instruction that cause stack underflow\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.ORIGIN\n                    + Op.RJUMPI[len(Op.RJUMP[0])]\n                    + Op.RJUMP[len(Op.STOP)]\n                    + Op.STOP\n                    + Op.POP\n                    + Op.STOP\n                ),\n            ],\n        ),\n        expect_exception=EOFException.STACK_UNDERFLOW,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_rjump","title":"test_rjump_into_rjump(eof_test)","text":"

    EOF1I4200_0009 (Invalid) EOF code containing RJUMP with target other RJUMP immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_rjump(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF1I4200_0009 (Invalid) EOF code containing RJUMP with target other RJUMP immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.RJUMP[1] + Op.RJUMP[0]),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_rjumpi","title":"test_rjump_into_rjumpi(eof_test)","text":"

    EOF1I4200_0010 (Invalid) EOF code containing RJUMP with target RJUMPI immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_rjumpi(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF1I4200_0010 (Invalid) EOF code containing RJUMP with target RJUMPI immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RJUMP[5] + Op.STOP + Op.PUSH1(1) + Op.RJUMPI[-6] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_push_1","title":"test_rjump_into_push_1(eof_test, jump)","text":"

    EOF1I4200_0011 (Invalid) EOF code containing RJUMP with target PUSH1 immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    @pytest.mark.parametrize(\"jump\", [JumpDirection.FORWARD, JumpDirection.BACKWARD])\ndef test_rjump_into_push_1(eof_test: EOFTestFiller, jump: JumpDirection):\n    \"\"\"EOF1I4200_0011 (Invalid) EOF code containing RJUMP with target PUSH1 immediate\"\"\"\n    code = (\n        Op.PUSH1[1] + Op.RJUMP[-4] if jump == JumpDirection.BACKWARD else Op.RJUMP[1] + Op.PUSH1[1]\n    ) + Op.STOP\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=code),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_push_n","title":"test_rjump_into_push_n(eof_test, opcode, jump, data_portion_end)","text":"

    EOF1I4200_0011 (Invalid) EOF code containing RJUMP with target PUSH2+ immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.PUSH2,\n        Op.PUSH3,\n        Op.PUSH4,\n        Op.PUSH5,\n        Op.PUSH6,\n        Op.PUSH7,\n        Op.PUSH8,\n        Op.PUSH9,\n        Op.PUSH10,\n        Op.PUSH11,\n        Op.PUSH12,\n        Op.PUSH13,\n        Op.PUSH14,\n        Op.PUSH15,\n        Op.PUSH16,\n        Op.PUSH17,\n        Op.PUSH18,\n        Op.PUSH19,\n        Op.PUSH20,\n        Op.PUSH21,\n        Op.PUSH22,\n        Op.PUSH23,\n        Op.PUSH24,\n        Op.PUSH25,\n        Op.PUSH26,\n        Op.PUSH27,\n        Op.PUSH28,\n        Op.PUSH29,\n        Op.PUSH30,\n        Op.PUSH31,\n        Op.PUSH32,\n    ],\n)\n@pytest.mark.parametrize(\"jump\", [JumpDirection.FORWARD, JumpDirection.BACKWARD])\n@pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjump_into_push_n(\n    eof_test: EOFTestFiller,\n    opcode: Op,\n    jump: JumpDirection,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0011 (Invalid) EOF code containing RJUMP with target PUSH2+ immediate\"\"\"\n    data_portion_length = int.from_bytes(opcode, byteorder=\"big\") - 0x5F\n    if jump == JumpDirection.FORWARD:\n        offset = data_portion_length if data_portion_end else 1\n        code = Op.RJUMP[offset] + opcode[0] + Op.STOP\n    else:\n        offset = -4 if data_portion_end else -4 - data_portion_length + 1\n        code = opcode[0] + Op.RJUMP[offset]\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=code),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_rjumpv","title":"test_rjump_into_rjumpv(eof_test, target_rjumpv_table_size, data_portion_end)","text":"

    EOF1I4200_0012 (Invalid) EOF code containing RJUMP with target RJUMPV immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    @pytest.mark.parametrize(\"target_rjumpv_table_size\", [1, 256])\n@pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjump_into_rjumpv(\n    eof_test: EOFTestFiller,\n    target_rjumpv_table_size: int,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0012 (Invalid) EOF code containing RJUMP with target RJUMPV immediate\"\"\"\n    invalid_destination = 4 + (2 * target_rjumpv_table_size) if data_portion_end else 4\n    target_jump_table = [0 for _ in range(target_rjumpv_table_size)]\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RJUMP[invalid_destination]\n                    + Op.STOP\n                    + Op.PUSH1(1)\n                    + Op.RJUMPV[target_jump_table]\n                    + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_callf","title":"test_rjump_into_callf(eof_test, data_portion_end)","text":"

    EOF1I4200_0013 (Invalid) EOF code containing RJUMP with target CALLF immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    @pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjump_into_callf(\n    eof_test: EOFTestFiller,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0013 (Invalid) EOF code containing RJUMP with target CALLF immediate\"\"\"\n    invalid_destination = 2 if data_portion_end else 1\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RJUMP[invalid_destination] + Op.CALLF[1] + Op.STOP,\n                ),\n                Section.Code(\n                    code=Op.SSTORE(1, 1) + Op.RETF,\n                    code_outputs=0,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_dupn","title":"test_rjump_into_dupn(eof_test)","text":"

    EOF code containing RJUMP with target DUPN immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_dupn(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target DUPN immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.PUSH1(1)\n                    + Op.RJUMP[1]\n                    + Op.DUPN[1]\n                    + Op.SSTORE\n                    + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_swapn","title":"test_rjump_into_swapn(eof_test)","text":"

    EOF code containing RJUMP with target SWAPN immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_swapn(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target SWAPN immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.PUSH1(1)\n                    + Op.RJUMP[1]\n                    + Op.SWAPN[1]\n                    + Op.SSTORE\n                    + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_exchange","title":"test_rjump_into_exchange(eof_test)","text":"

    EOF code containing RJUMP with target EXCHANGE immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_exchange(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target EXCHANGE immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.PUSH1(2)\n                    + Op.PUSH1(3)\n                    + Op.RJUMP[1]\n                    + Op.EXCHANGE[0x00]\n                    + Op.SSTORE\n                    + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_eofcreate","title":"test_rjump_into_eofcreate(eof_test)","text":"

    EOF code containing RJUMP with target EOFCREATE immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_eofcreate(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target EOFCREATE immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RJUMP[1] + Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP,\n                ),\n                Section.Container(\n                    container=Container(\n                        sections=[\n                            Section.Code(\n                                code=Op.RETURNCONTRACT[0](0, 0),\n                            ),\n                            Section.Container(\n                                container=Container(\n                                    sections=[\n                                        Section.Code(code=Op.STOP),\n                                    ]\n                                )\n                            ),\n                        ]\n                    )\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_returncontract","title":"test_rjump_into_returncontract(eof_test)","text":"

    EOF code containing RJUMP with target RETURNCONTRACT immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_returncontract(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target RETURNCONTRACT immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP,\n                ),\n                Section.Container(\n                    container=Container(\n                        sections=[\n                            Section.Code(\n                                code=Op.RJUMP[5] + Op.RETURNCONTRACT[0](0, 0),\n                            ),\n                            Section.Container(\n                                container=Container(\n                                    sections=[\n                                        Section.Code(code=Op.STOP),\n                                    ]\n                                )\n                            ),\n                        ]\n                    )\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_unreachable_code","title":"test_rjump_unreachable_code(eof_test)","text":"

    EOF code containing instructions skipped by RJUMP

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_unreachable_code(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF code containing instructions skipped by RJUMP\n    \"\"\"\n    container = Container.Code(code=(Op.RJUMP[len(Op.STOP)] + Op.STOP + Op.STOP))\n    eof_test(\n        data=container,\n        expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_backwards_reference_only","title":"test_rjump_backwards_reference_only(eof_test)","text":"

    EOF code containing instructions only reachable by backwards RJUMP

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_backwards_reference_only(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF code containing instructions only reachable by backwards RJUMP\n    \"\"\"\n    container = Container.Code(\n        code=(Op.RJUMP[RJUMP_LEN] + Op.RJUMP[RJUMP_LEN] + Op.RJUMP[-(2 * RJUMP_LEN)] + Op.STOP)\n    )\n    eof_test(\n        data=container,\n        expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_backwards_illegal_stack_height","title":"test_rjump_backwards_illegal_stack_height(eof_test)","text":"

    Invalid backward jump, found via fuzzing coverage

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_backwards_illegal_stack_height(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    Invalid backward jump, found via fuzzing coverage\n    \"\"\"\n    eof_test(\n        data=Container.Code(\n            code=(\n                Op.PUSH0\n                + Op.RJUMPI[3]\n                + Op.RJUMP(7)\n                + Op.PUSH2(0x2015)\n                + Op.PUSH3(0x015500)\n                + Op.RJUMP[-10]\n            ),\n            max_stack_height=0x24,\n        ),\n        expect_exception=EOFException.STACK_HEIGHT_MISMATCH,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_backwards_infinite_loop","title":"test_rjump_backwards_infinite_loop(eof_test)","text":"

    Validate that a backwards RJUMP as terminal operation is valid

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_backwards_infinite_loop(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    Validate that a backwards RJUMP as terminal operation is valid\n    \"\"\"\n    eof_test(\n        data=Container(\n            name=\"backwards_rjump_terminal\",\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0\n                    + Op.RJUMPI[3]\n                    + Op.RJUMP[7]\n                    + Op.SSTORE(1, 0x2015)\n                    + Op.STOP\n                    + Op.RJUMP[-10]\n                ),\n                Section.Data(data=\"0xdeadbeef\"),\n            ],\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/index/test_cases/","title":"Test Rjump - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py:

    test_rjump_positive_negative[fork_CancunEIP7692-eof_test]\ntest_rjump_positive_negative[fork_CancunEIP7692-state_test]\ntest_rjump_positive_negative[fork_CancunEIP7692-blockchain_test]\ntest_rjump_positive_negative[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjump_positive_negative_with_data[fork_CancunEIP7692-eof_test]\ntest_rjump_positive_negative_with_data[fork_CancunEIP7692-state_test]\ntest_rjump_positive_negative_with_data[fork_CancunEIP7692-blockchain_test]\ntest_rjump_positive_negative_with_data[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjump_zero[fork_CancunEIP7692-eof_test]\ntest_rjump_zero[fork_CancunEIP7692-state_test]\ntest_rjump_zero[fork_CancunEIP7692-blockchain_test]\ntest_rjump_zero[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjump_maxes[fork_CancunEIP7692-eof_test]\ntest_rjump_maxes[fork_CancunEIP7692-state_test]\ntest_rjump_maxes[fork_CancunEIP7692-blockchain_test]\ntest_rjump_maxes[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjump_max_bytecode_size[fork_CancunEIP7692-eof_test]\ntest_rjump_truncated_rjump[fork_CancunEIP7692-eof_test]\ntest_rjump_truncated_rjump_2[fork_CancunEIP7692-eof_test]\ntest_rjump_into_header[fork_CancunEIP7692-eof_test]\ntest_rjump_before_header[fork_CancunEIP7692-eof_test]\ntest_rjump_into_data[fork_CancunEIP7692-eof_test]\ntest_rjump_outside_other_section_before[fork_CancunEIP7692-eof_test]\ntest_rjump_outside_other_section_after[fork_CancunEIP7692-eof_test]\ntest_rjump_after_container[fork_CancunEIP7692-eof_test]\ntest_rjump_to_code_end[fork_CancunEIP7692-eof_test]\ntest_rjump_into_self_data_portion[fork_CancunEIP7692-eof_test-offset_1]\ntest_rjump_into_self_data_portion[fork_CancunEIP7692-eof_test-offset_2]\ntest_rjump_into_self_remaining_code[fork_CancunEIP7692-eof_test]\ntest_rjump_into_self[fork_CancunEIP7692-eof_test]\ntest_rjump_into_self_pre_code[fork_CancunEIP7692-eof_test]\ntest_rjump_into_stack_height_diff[fork_CancunEIP7692-eof_test]\ntest_rjump_into_stack_height_diff_2[fork_CancunEIP7692-eof_test]\ntest_rjump_into_stack_underflow[fork_CancunEIP7692-eof_test]\ntest_rjump_into_rjump[fork_CancunEIP7692-eof_test]\ntest_rjump_into_rjumpi[fork_CancunEIP7692-eof_test]\ntest_rjump_into_push_1[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD]\ntest_rjump_into_push_1[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH2]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH3]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH4]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH5]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH6]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH7]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH8]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH9]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH10]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH11]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH12]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH13]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH14]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH15]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH16]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH17]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH18]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH19]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH20]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH21]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH22]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH23]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH24]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH25]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH26]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH27]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH28]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH29]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH30]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH31]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH32]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH2]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH3]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH4]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH5]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH6]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH7]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH8]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH9]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH10]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH11]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH12]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH13]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH14]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH15]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH16]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH17]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH18]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH19]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH20]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH21]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH22]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH23]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH24]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH25]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH26]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH27]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH28]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH29]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH30]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH31]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH32]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH2]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH3]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH4]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH5]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH6]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH7]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH8]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH9]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH10]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH11]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH12]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH13]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH14]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH15]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH16]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH17]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH18]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH19]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH20]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH21]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH22]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH23]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH24]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH25]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH26]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH27]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH28]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH29]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH30]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH31]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH32]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH2]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH3]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH4]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH5]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH6]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH7]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH8]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH9]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH10]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH11]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH12]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH13]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH14]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH15]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH16]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH17]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH18]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH19]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH20]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH21]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH22]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH23]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH24]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH25]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH26]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH27]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH28]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH29]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH30]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH31]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH32]\ntest_rjump_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_end-target_rjumpv_table_size_1]\ntest_rjump_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_end-target_rjumpv_table_size_256]\ntest_rjump_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_start-target_rjumpv_table_size_1]\ntest_rjump_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_start-target_rjumpv_table_size_256]\ntest_rjump_into_callf[fork_CancunEIP7692-eof_test-data_portion_end]\ntest_rjump_into_callf[fork_CancunEIP7692-eof_test-data_portion_start]\ntest_rjump_into_dupn[fork_CancunEIP7692-eof_test]\ntest_rjump_into_swapn[fork_CancunEIP7692-eof_test]\ntest_rjump_into_exchange[fork_CancunEIP7692-eof_test]\ntest_rjump_into_eofcreate[fork_CancunEIP7692-eof_test]\ntest_rjump_into_returncontract[fork_CancunEIP7692-eof_test]\ntest_rjump_unreachable_code[fork_CancunEIP7692-eof_test]\ntest_rjump_backwards_reference_only[fork_CancunEIP7692-eof_test]\ntest_rjump_backwards_illegal_stack_height[fork_CancunEIP7692-eof_test]\ntest_rjump_backwards_infinite_loop[fork_CancunEIP7692-eof_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/","title":"Test Rjumpi","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF JUMPF tests covering stack and code validation rules.

    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_condition_forwards","title":"test_rjumpi_condition_forwards(state_test, pre, calldata)","text":"

    Test RJUMPI contract switching based on external input

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    @pytest.mark.parametrize(\n    \"calldata\",\n    [pytest.param(b\"\\x00\", id=\"False\"), pytest.param(b\"\\x01\", id=\"True\")],\n)\ndef test_rjumpi_condition_forwards(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    calldata: bytes,\n):\n    \"\"\"Test RJUMPI contract switching based on external input\"\"\"\n    env = Environment()\n    sender = pre.fund_eoa(10**18)\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0)\n                    + Op.CALLDATALOAD\n                    + Op.RJUMPI[6]\n                    + Op.SSTORE(slot_conditional_result, value_calldata_false)\n                    + Op.STOP\n                    + Op.SSTORE(slot_conditional_result, value_calldata_true)\n                    + Op.STOP,\n                )\n            ]\n        ),\n    )\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        data=calldata,\n        sender=sender,\n    )\n    post = {\n        contract_address: Account(\n            storage={\n                slot_conditional_result: value_calldata_false\n                if calldata == b\"\\0\"\n                else value_calldata_true\n            }\n        )\n    }\n    state_test(env=env, tx=tx, pre=pre, post=post)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_condition_backwards","title":"test_rjumpi_condition_backwards(state_test, pre, calldata)","text":"

    Test RJUMPI contract switching based on external input

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    @pytest.mark.parametrize(\n    \"calldata\",\n    [pytest.param(b\"\\x00\", id=\"False\"), pytest.param(b\"\\x01\", id=\"True\")],\n)\ndef test_rjumpi_condition_backwards(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    calldata: bytes,\n):\n    \"\"\"Test RJUMPI contract switching based on external input\"\"\"\n    env = Environment()\n    sender = pre.fund_eoa(10**18)\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.RJUMPI[6]\n                    + Op.SSTORE(slot_conditional_result, value_calldata_true)\n                    + Op.STOP\n                    + Op.PUSH0\n                    + Op.CALLDATALOAD\n                    + Op.RJUMPI[-11]\n                    + Op.SSTORE(slot_conditional_result, value_calldata_false)\n                    + Op.STOP,\n                )\n            ]\n        )\n    )\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        data=calldata,\n        sender=sender,\n    )\n    post = {\n        contract_address: Account(\n            storage={\n                slot_conditional_result: value_calldata_false\n                if calldata == b\"\\0\"\n                else value_calldata_true\n            }\n        )\n    }\n    state_test(env=env, tx=tx, pre=pre, post=post)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_condition_zero","title":"test_rjumpi_condition_zero(state_test, pre, calldata)","text":"

    Test RJUMPI contract switching based on external input

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    @pytest.mark.parametrize(\n    \"calldata\",\n    [pytest.param(b\"\\x00\", id=\"False\"), pytest.param(b\"\\x01\", id=\"True\")],\n)\ndef test_rjumpi_condition_zero(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    calldata: bytes,\n):\n    \"\"\"Test RJUMPI contract switching based on external input\"\"\"\n    env = Environment()\n    sender = pre.fund_eoa(10**18)\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0\n                    + Op.CALLDATALOAD\n                    + Op.RJUMPI[0]\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ]\n        ),\n    )\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        data=calldata,\n        sender=sender,\n    )\n    post = {contract_address: Account(storage={slot_code_worked: value_code_worked})}\n    state_test(env=env, tx=tx, pre=pre, post=post)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_forwards","title":"test_rjumpi_forwards(eof_state_test)","text":"

    EOF1V4200_0004 (Valid) EOF code containing RJUMPI (Positive)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_forwards(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0004 (Valid) EOF code containing RJUMPI (Positive)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.RJUMPI[3]\n                    + Op.NOOP\n                    + Op.NOOP\n                    + Op.STOP\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_backwards","title":"test_rjumpi_backwards(eof_state_test)","text":"

    EOF1V4200_0005 (Valid) EOF code containing RJUMPI (Negative)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_backwards(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0005 (Valid) EOF code containing RJUMPI (Negative)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.RJUMPI[7]\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                    + Op.PUSH1(1)\n                    + Op.RJUMPI[-12]\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_zero","title":"test_rjumpi_zero(eof_state_test)","text":"

    EOF1V4200_0006 (Valid) EOF code containing RJUMPI (Zero)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_zero(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0006 (Valid) EOF code containing RJUMPI (Zero)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.RJUMPI[0]\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_max_forward","title":"test_rjumpi_max_forward(eof_state_test)","text":"

    EOF1V4200_0007 (Valid) EOF with RJUMPI containing the maximum offset (32767)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_max_forward(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0007 (Valid) EOF with RJUMPI containing the maximum offset (32767)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.RJUMPI[32767]\n                    + Op.NOOP * 32768\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_max_backward","title":"test_rjumpi_max_backward(eof_state_test)","text":"

    EOF with RJUMPI containing the maximum negative offset (-32768)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_max_backward(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF with RJUMPI containing the maximum negative offset (-32768)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0\n                    + Op.RJUMPI[0x7FFF]\n                    + Op.NOOP * (0x7FFF - 7)\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                    + Op.PUSH0\n                    + Op.RJUMPI[0x8000]\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    ),\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_max_bytecode_size","title":"test_rjumpi_max_bytecode_size(eof_test)","text":"

    EOF1V4200_0003 EOF with RJUMPI containing the maximum offset that does not exceed the maximum bytecode size

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_max_bytecode_size(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1V4200_0003 EOF with RJUMPI containing the maximum offset that does not exceed the maximum\n    bytecode size\n    \"\"\"\n    NOOP_COUNT = MAX_BYTECODE_SIZE - 24\n    code = Op.RJUMPI[len(Op.NOOP) * NOOP_COUNT](Op.ORIGIN) + (Op.NOOP * NOOP_COUNT) + Op.STOP\n    container = Container.Code(code=code)\n    assert len(container) == MAX_BYTECODE_SIZE\n    eof_test(data=container)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_truncated","title":"test_rjumpi_truncated(eof_test)","text":"

    EOF1I4200_0014 (Invalid) EOF code containing truncated RJUMPI

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_truncated(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF1I4200_0014 (Invalid) EOF code containing truncated RJUMPI\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0) + Op.RJUMPI,\n                )\n            ],\n        ),\n        expect_exception=EOFException.TRUNCATED_INSTRUCTION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_truncated_2","title":"test_rjumpi_truncated_2(eof_test)","text":"

    EOF1I4200_0015 (Invalid) EOF code containing truncated RJUMPI

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_truncated_2(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF1I4200_0015 (Invalid) EOF code containing truncated RJUMPI\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0) + Op.RJUMPI + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.TRUNCATED_INSTRUCTION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_header","title":"test_rjumpi_into_header(eof_test)","text":"

    EOF1I4200_0016 (Invalid) EOF code containing RJUMPI with target outside code bounds (Jumping into header)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_header(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0016 (Invalid) EOF code containing RJUMPI with target outside code bounds\n    (Jumping into header)\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPI[-7] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_jump_before_header","title":"test_rjumpi_jump_before_header(eof_test)","text":"

    EOF1I4200_0017 (Invalid) EOF code containing RJUMPI with target outside code bounds (Jumping to before code begin)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_jump_before_header(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0017 (Invalid) EOF code containing RJUMPI with target outside code bounds\n    (Jumping to before code begin)\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPI[-25] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_data","title":"test_rjumpi_into_data(eof_test)","text":"

    EOF1I4200_0018 (Invalid) EOF code containing RJUMPI with target outside code bounds (Jumping into data section)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_data(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0018 (Invalid) EOF code containing RJUMPI with target outside code bounds\n    (Jumping into data section)\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPI[2] + Op.STOP,\n                ),\n                Section.Data(data=b\"\\xaa\\xbb\\xcc\"),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_after_container","title":"test_rjumpi_after_container(eof_test)","text":"

    EOF1I4200_0019 (Invalid) EOF code containing RJUMPI with target outside code bounds (Jumping to after code end)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_after_container(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0019 (Invalid) EOF code containing RJUMPI with target outside code bounds\n    (Jumping to after code end)\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPI[2] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_to_code_end","title":"test_rjumpi_to_code_end(eof_test)","text":"

    EOF1I4200_0020 (Invalid) EOF code containing RJUMPI with target outside code bounds (Jumping to code end)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_to_code_end(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0020 (Invalid) EOF code containing RJUMPI with target outside code bounds\n    (Jumping to code end)\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPI[1] + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_self_data_portion","title":"test_rjumpi_into_self_data_portion(eof_test, offset)","text":"

    EOF1I4200_0021 (Invalid) EOF code containing RJUMPI with target same RJUMPI immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    @pytest.mark.parametrize(\"offset\", range(1, Op.RJUMP.data_portion_length + 1))\ndef test_rjumpi_into_self_data_portion(\n    eof_test: EOFTestFiller,\n    offset: int,\n):\n    \"\"\"EOF1I4200_0021 (Invalid) EOF code containing RJUMPI with target same RJUMPI immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPI[-offset] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_self","title":"test_rjumpi_into_self(eof_test)","text":"

    EOF1I4200_0021 (Invalid) EOF code containing RJUMPI with target same RJUMPI immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_self(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF1I4200_0021 (Invalid) EOF code containing RJUMPI with target same RJUMPI immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPI[-len(Op.RJUMPI[0])] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.STACK_HEIGHT_MISMATCH,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_stack_height_diff","title":"test_rjumpi_into_stack_height_diff(eof_test)","text":"

    EOF code containing RJUMPI with target instruction that causes stack height difference

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_stack_height_diff(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMPI with target instruction that causes stack height difference\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0)\n                    + Op.PUSH1(0)\n                    + Op.RJUMPI[-(len(Op.RJUMPI[0]) + len(Op.PUSH1(0)) + len(Op.PUSH1(0)))]\n                    + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.STACK_HEIGHT_MISMATCH,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_stack_underflow","title":"test_rjumpi_into_stack_underflow(eof_test)","text":"

    EOF code containing RJUMPI with target instruction that cause stack underflow

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_stack_underflow(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMPI with target instruction that cause stack underflow\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.ORIGIN + Op.RJUMPI[len(Op.STOP)] + Op.STOP + Op.POP + Op.STOP\n                ),\n            ],\n        ),\n        expect_exception=EOFException.STACK_UNDERFLOW,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_skips_stack_underflow","title":"test_rjumpi_skips_stack_underflow(eof_test)","text":"

    EOF code containing RJUMPI where the default path produces a stack underflow

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_skips_stack_underflow(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMPI where the default path produces a stack underflow\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.ORIGIN + Op.RJUMPI[len(Op.POP)] + Op.POP + Op.STOP),\n            ],\n        ),\n        expect_exception=EOFException.STACK_UNDERFLOW,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_rjump","title":"test_rjumpi_into_rjump(eof_test)","text":"

    EOF1I4200_0023 (Invalid) EOF code containing RJUMPI with target RJUMP immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_rjump(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF1I4200_0023 (Invalid) EOF code containing RJUMPI with target RJUMP immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPI[3] + Op.STOP + Op.RJUMP[-9],\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_rjumpi","title":"test_rjumpi_into_rjumpi(eof_test)","text":"

    EOF1I4200_0022 (Invalid) EOF code containing RJUMPI with target other RJUMPI immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_rjumpi(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF1I4200_0022 (Invalid) EOF code containing RJUMPI with target other RJUMPI immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.RJUMPI[5]\n                    + Op.STOP\n                    + Op.PUSH1(1)\n                    + Op.RJUMPI[-11]\n                    + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_push_1","title":"test_rjumpi_into_push_1(eof_test, jump)","text":"

    EOF1I4200_0024 (Invalid) EOF code containing RJUMPI with target PUSH1 immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    @pytest.mark.parametrize(\"jump\", [JumpDirection.FORWARD, JumpDirection.BACKWARD])\ndef test_rjumpi_into_push_1(\n    eof_test: EOFTestFiller,\n    jump: JumpDirection,\n):\n    \"\"\"EOF1I4200_0024 (Invalid) EOF code containing RJUMPI with target PUSH1 immediate\"\"\"\n    code = (\n        Op.PUSH1(1) + Op.RJUMPI[-4] + Op.STOP\n        if jump == JumpDirection.BACKWARD\n        else Op.PUSH1(1) + Op.RJUMPI[1] + Op.STOP\n    )\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=code),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_push_n","title":"test_rjumpi_into_push_n(eof_test, opcode, jump, data_portion_end)","text":"

    EOF1I4200_0024 (Invalid) EOF code containing RJUMPI with target PUSH2+ immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.PUSH2,\n        Op.PUSH3,\n        Op.PUSH4,\n        Op.PUSH5,\n        Op.PUSH6,\n        Op.PUSH7,\n        Op.PUSH8,\n        Op.PUSH9,\n        Op.PUSH10,\n        Op.PUSH11,\n        Op.PUSH12,\n        Op.PUSH13,\n        Op.PUSH14,\n        Op.PUSH15,\n        Op.PUSH16,\n        Op.PUSH17,\n        Op.PUSH18,\n        Op.PUSH19,\n        Op.PUSH20,\n        Op.PUSH21,\n        Op.PUSH22,\n        Op.PUSH23,\n        Op.PUSH24,\n        Op.PUSH25,\n        Op.PUSH26,\n        Op.PUSH27,\n        Op.PUSH28,\n        Op.PUSH29,\n        Op.PUSH30,\n        Op.PUSH31,\n        Op.PUSH32,\n    ],\n)\n@pytest.mark.parametrize(\"jump\", [JumpDirection.FORWARD, JumpDirection.BACKWARD])\n@pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjumpi_into_push_n(\n    eof_test: EOFTestFiller,\n    opcode: Op,\n    jump: JumpDirection,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0024 (Invalid) EOF code containing RJUMPI with target PUSH2+ immediate\"\"\"\n    data_portion_length = int.from_bytes(opcode, byteorder=\"big\") - 0x5F\n    if jump == JumpDirection.FORWARD:\n        offset = data_portion_length if data_portion_end else 1\n        code = Op.PUSH1(1) + Op.RJUMPI[offset] + opcode[0] + Op.STOP\n    else:\n        offset = -4 if data_portion_end else -4 - data_portion_length + 1\n        code = opcode[0] + Op.RJUMPI[offset] + Op.STOP\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=code),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_rjumpv","title":"test_rjumpi_into_rjumpv(eof_test, target_rjumpv_table_size, data_portion_end)","text":"

    EOF1I4200_0025 (Invalid) EOF code containing RJUMPI with target RJUMPV immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    @pytest.mark.parametrize(\"target_rjumpv_table_size\", [1, 256])\n@pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjumpi_into_rjumpv(\n    eof_test: EOFTestFiller,\n    target_rjumpv_table_size: int,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0025 (Invalid) EOF code containing RJUMPI with target RJUMPV immediate\"\"\"\n    invalid_destination = 4 + (2 * target_rjumpv_table_size) if data_portion_end else 4\n    target_jump_table = [0 for _ in range(target_rjumpv_table_size)]\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.RJUMPI[invalid_destination]\n                    + Op.STOP\n                    + Op.PUSH1(1)\n                    + Op.RJUMPV[target_jump_table]\n                    + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_callf","title":"test_rjumpi_into_callf(eof_test, data_portion_end)","text":"

    EOF1I4200_0026 (Invalid) EOF code containing RJUMPI with target CALLF immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    @pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjumpi_into_callf(\n    eof_test: EOFTestFiller,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0026 (Invalid) EOF code containing RJUMPI with target CALLF immediate\"\"\"\n    invalid_destination = 2 if data_portion_end else 1\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPI[invalid_destination] + Op.CALLF[1] + Op.STOP,\n                ),\n                Section.Code(\n                    code=Op.SSTORE(1, 1) + Op.RETF,\n                    code_outputs=0,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_dupn","title":"test_rjumpi_into_dupn(eof_test)","text":"

    EOF code containing RJUMP with target DUPN immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_dupn(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target DUPN immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.PUSH1(1)\n                    + Op.PUSH1(1)\n                    + Op.RJUMPI[1]\n                    + Op.DUPN[1]\n                    + Op.SSTORE\n                    + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_swapn","title":"test_rjumpi_into_swapn(eof_test)","text":"

    EOF code containing RJUMP with target SWAPN immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_swapn(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target SWAPN immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.PUSH1(1)\n                    + Op.PUSH1(1)\n                    + Op.RJUMPI[1]\n                    + Op.SWAPN[1]\n                    + Op.SSTORE\n                    + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_exchange","title":"test_rjumpi_into_exchange(eof_test)","text":"

    EOF code containing RJUMP with target EXCHANGE immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_exchange(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target EXCHANGE immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.PUSH1(2)\n                    + Op.PUSH1(3)\n                    + Op.PUSH1(1)\n                    + Op.RJUMPI[1]\n                    + Op.EXCHANGE[0x00]\n                    + Op.SSTORE\n                    + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_eofcreate","title":"test_rjumpi_into_eofcreate(eof_test)","text":"

    EOF code containing RJUMP with target EOFCREATE immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_eofcreate(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target EOFCREATE immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 + Op.RJUMPI[9] + Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP,\n                ),\n                Section.Container(\n                    container=Container(\n                        sections=[\n                            Section.Code(\n                                code=Op.RETURNCONTRACT[0](0, 0),\n                            ),\n                            Section.Container(\n                                container=Container(\n                                    sections=[\n                                        Section.Code(code=Op.STOP),\n                                    ]\n                                )\n                            ),\n                        ]\n                    )\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_returncontract","title":"test_rjumpi_into_returncontract(eof_test)","text":"

    EOF code containing RJUMP with target RETURNCONTRACT immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_returncontract(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target RETURNCONTRACT immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP,\n                ),\n                Section.Container(\n                    container=Container(\n                        sections=[\n                            Section.Code(\n                                code=Op.PUSH0 + Op.RJUMPI[5] + Op.RETURNCONTRACT[0](0, 0),\n                            ),\n                            Section.Container(\n                                container=Container(\n                                    sections=[\n                                        Section.Code(code=Op.STOP),\n                                    ]\n                                )\n                            ),\n                        ]\n                    )\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_backwards_reference_only","title":"test_rjumpi_backwards_reference_only(eof_test)","text":"

    EOF code containing instructions only reachable by backwards RJUMPI

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_backwards_reference_only(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF code containing instructions only reachable by backwards RJUMPI\n    \"\"\"\n    container = Container.Code(\n        code=(\n            Op.RJUMP[RJUMP_LEN]\n            + Op.RJUMP[RJUMPI_LEN + len(Op.ORIGIN)]\n            + Op.ORIGIN\n            + Op.RJUMPI[-(RJUMP_LEN + RJUMPI_LEN + len(Op.ORIGIN))]\n            + Op.STOP\n        )\n    )\n    eof_test(\n        data=container,\n        expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_stack_validation","title":"test_rjumpi_stack_validation(eof_test)","text":"

    Check that you can get to the same opcode with two different stack heights Spec now allows this: 4.b in https://github.com/ipsilon/eof/blob/main/spec/eof.md#stack-validation

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_stack_validation(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    Check that you can get to the same opcode with two different stack heights\n    Spec now allows this:\n    4.b in https://github.com/ipsilon/eof/blob/main/spec/eof.md#stack-validation\n    \"\"\"\n    container = Container.Code(code=Op.RJUMPI[1](1) + Op.ADDRESS + Op.NOOP + Op.STOP)\n    eof_test(\n        data=container,\n        expect_exception=None,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_at_the_end","title":"test_rjumpi_at_the_end(eof_test)","text":"

    https://github.com/ipsilon/eof/blob/main/spec/eof.md#stack-validation 4.i: This implies that the last instruction may be a terminating instruction or RJUMP

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_at_the_end(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    https://github.com/ipsilon/eof/blob/main/spec/eof.md#stack-validation 4.i:\n    This implies that the last instruction may be a terminating instruction or RJUMP\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0) + Op.PUSH1(0) + Op.RJUMPI[1] + Op.STOP + Op.RJUMPI[-4],\n                )\n            ],\n        ),\n        expect_exception=EOFException.MISSING_STOP_OPCODE,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_tangled_rjumpi","title":"test_tangled_rjumpi(eof_test)","text":"

    EOF code containing tangled RJUMPI paths

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_tangled_rjumpi(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF code containing tangled RJUMPI paths\n    \"\"\"\n    container = Container.Code(\n        code=(\n            Op.PUSH0  # [0,0]\n            + Op.PUSH0  # [1,1]\n            + Op.RJUMPI[8]  # [2,2]\n            + Op.PUSH1(127)  # [1,1]\n            + Op.RJUMPI[7]  # [2,2]\n            + Op.RJUMP[5]  # [1,1]\n            + Op.PUSH0  # [1,1]\n            + Op.RJUMP[0]  # [2,1]\n            + Op.LT  # [1,x]\n            + Op.STOP  # [1,x]\n        )\n    )\n    eof_test(\n        data=container,\n        expect_exception=EOFException.STACK_UNDERFLOW,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_backwards_onto_dup","title":"test_rjumpi_backwards_onto_dup(eof_test)","text":"

    Backwards jumpi onto a dup

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_backwards_onto_dup(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    Backwards jumpi onto a dup\n    \"\"\"\n    container = Container.Code(\n        code=(Op.PUSH0 + Op.DUP1 + Op.RJUMPI[-4] + Op.STOP),\n        max_stack_height=2,\n    )\n    eof_test(\n        data=container,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/index/test_cases/","title":"Test Rjumpi - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py:

    test_rjumpi_condition_forwards[fork_CancunEIP7692-blockchain_test-False]\ntest_rjumpi_condition_forwards[fork_CancunEIP7692-blockchain_test-True]\ntest_rjumpi_condition_forwards[fork_CancunEIP7692-blockchain_test_engine-False]\ntest_rjumpi_condition_forwards[fork_CancunEIP7692-blockchain_test_engine-True]\ntest_rjumpi_condition_forwards[fork_CancunEIP7692-state_test-False]\ntest_rjumpi_condition_forwards[fork_CancunEIP7692-state_test-True]\ntest_rjumpi_condition_backwards[fork_CancunEIP7692-blockchain_test-False]\ntest_rjumpi_condition_backwards[fork_CancunEIP7692-blockchain_test-True]\ntest_rjumpi_condition_backwards[fork_CancunEIP7692-blockchain_test_engine-False]\ntest_rjumpi_condition_backwards[fork_CancunEIP7692-blockchain_test_engine-True]\ntest_rjumpi_condition_backwards[fork_CancunEIP7692-state_test-False]\ntest_rjumpi_condition_backwards[fork_CancunEIP7692-state_test-True]\ntest_rjumpi_condition_zero[fork_CancunEIP7692-blockchain_test-False]\ntest_rjumpi_condition_zero[fork_CancunEIP7692-blockchain_test-True]\ntest_rjumpi_condition_zero[fork_CancunEIP7692-blockchain_test_engine-False]\ntest_rjumpi_condition_zero[fork_CancunEIP7692-blockchain_test_engine-True]\ntest_rjumpi_condition_zero[fork_CancunEIP7692-state_test-False]\ntest_rjumpi_condition_zero[fork_CancunEIP7692-state_test-True]\ntest_rjumpi_forwards[fork_CancunEIP7692-eof_test]\ntest_rjumpi_forwards[fork_CancunEIP7692-state_test]\ntest_rjumpi_forwards[fork_CancunEIP7692-blockchain_test]\ntest_rjumpi_forwards[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpi_backwards[fork_CancunEIP7692-eof_test]\ntest_rjumpi_backwards[fork_CancunEIP7692-state_test]\ntest_rjumpi_backwards[fork_CancunEIP7692-blockchain_test]\ntest_rjumpi_backwards[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpi_zero[fork_CancunEIP7692-eof_test]\ntest_rjumpi_zero[fork_CancunEIP7692-state_test]\ntest_rjumpi_zero[fork_CancunEIP7692-blockchain_test]\ntest_rjumpi_zero[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpi_max_forward[fork_CancunEIP7692-eof_test]\ntest_rjumpi_max_forward[fork_CancunEIP7692-state_test]\ntest_rjumpi_max_forward[fork_CancunEIP7692-blockchain_test]\ntest_rjumpi_max_forward[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpi_max_backward[fork_CancunEIP7692-eof_test]\ntest_rjumpi_max_backward[fork_CancunEIP7692-state_test]\ntest_rjumpi_max_backward[fork_CancunEIP7692-blockchain_test]\ntest_rjumpi_max_backward[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpi_max_bytecode_size[fork_CancunEIP7692-eof_test]\ntest_rjumpi_truncated[fork_CancunEIP7692-eof_test]\ntest_rjumpi_truncated_2[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_header[fork_CancunEIP7692-eof_test]\ntest_rjumpi_jump_before_header[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_data[fork_CancunEIP7692-eof_test]\ntest_rjumpi_after_container[fork_CancunEIP7692-eof_test]\ntest_rjumpi_to_code_end[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_self_data_portion[fork_CancunEIP7692-eof_test-offset_1]\ntest_rjumpi_into_self_data_portion[fork_CancunEIP7692-eof_test-offset_2]\ntest_rjumpi_into_self[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_stack_height_diff[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_stack_underflow[fork_CancunEIP7692-eof_test]\ntest_rjumpi_skips_stack_underflow[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_rjump[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_rjumpi[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_push_1[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD]\ntest_rjumpi_into_push_1[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH2]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH3]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH4]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH5]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH6]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH7]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH8]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH9]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH10]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH11]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH12]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH13]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH14]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH15]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH16]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH17]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH18]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH19]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH20]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH21]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH22]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH23]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH24]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH25]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH26]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH27]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH28]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH29]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH30]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH31]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH32]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH2]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH3]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH4]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH5]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH6]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH7]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH8]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH9]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH10]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH11]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH12]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH13]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH14]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH15]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH16]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH17]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH18]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH19]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH20]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH21]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH22]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH23]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH24]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH25]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH26]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH27]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH28]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH29]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH30]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH31]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH32]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH2]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH3]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH4]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH5]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH6]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH7]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH8]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH9]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH10]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH11]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH12]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH13]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH14]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH15]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH16]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH17]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH18]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH19]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH20]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH21]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH22]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH23]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH24]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH25]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH26]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH27]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH28]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH29]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH30]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH31]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH32]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH2]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH3]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH4]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH5]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH6]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH7]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH8]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH9]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH10]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH11]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH12]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH13]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH14]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH15]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH16]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH17]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH18]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH19]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH20]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH21]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH22]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH23]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH24]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH25]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH26]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH27]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH28]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH29]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH30]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH31]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH32]\ntest_rjumpi_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_end-target_rjumpv_table_size_1]\ntest_rjumpi_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_end-target_rjumpv_table_size_256]\ntest_rjumpi_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_start-target_rjumpv_table_size_1]\ntest_rjumpi_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_start-target_rjumpv_table_size_256]\ntest_rjumpi_into_callf[fork_CancunEIP7692-eof_test-data_portion_end]\ntest_rjumpi_into_callf[fork_CancunEIP7692-eof_test-data_portion_start]\ntest_rjumpi_into_dupn[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_swapn[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_exchange[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_eofcreate[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_returncontract[fork_CancunEIP7692-eof_test]\ntest_rjumpi_backwards_reference_only[fork_CancunEIP7692-eof_test]\ntest_rjumpi_stack_validation[fork_CancunEIP7692-eof_test]\ntest_rjumpi_at_the_end[fork_CancunEIP7692-eof_test]\ntest_tangled_rjumpi[fork_CancunEIP7692-eof_test]\ntest_rjumpi_backwards_onto_dup[fork_CancunEIP7692-eof_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/","title":"Test Rjumpv","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF JUMPF tests covering stack and code validation rules.

    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_condition","title":"test_rjumpv_condition(eof_state_test, calldata, table_size)","text":"

    Test RJUMPV contract switching based on external input

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"calldata\",\n    [\n        pytest.param(0, id=\"c0\"),\n        pytest.param(1, id=\"c1\"),\n        pytest.param(3, id=\"c3\"),\n        pytest.param(255, id=\"c255\"),\n        pytest.param(256, id=\"c256\"),\n        pytest.param(2**256 - 1, id=\"c2^256-1\"),\n    ],\n)\n@pytest.mark.parametrize(\n    \"table_size\",\n    [\n        pytest.param(1, id=\"t1\"),\n        pytest.param(3, id=\"t3\"),\n        pytest.param(256, id=\"t256\"),\n    ],\n)\ndef test_rjumpv_condition(\n    eof_state_test: EOFStateTestFiller,\n    calldata: int,\n    table_size: int,\n):\n    \"\"\"Test RJUMPV contract switching based on external input\"\"\"\n    value_fall_through = 0xFFFF\n    value_base = 0x1000  # Force a `PUSH2` instruction to be used on all targets\n    target_length = 7\n    jump_table = [(i + 1) * target_length for i in range(table_size)]\n\n    jump_targets = sum(\n        (Op.SSTORE(slot_conditional_result, i + value_base) + Op.STOP) for i in range(table_size)\n    )\n\n    fall_through_case = Op.SSTORE(slot_conditional_result, value_fall_through) + Op.STOP\n\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0\n                    + Op.CALLDATALOAD\n                    + Op.RJUMPV[jump_table]\n                    + fall_through_case\n                    + jump_targets,\n                )\n            ]\n        ),\n        tx_data=calldata.to_bytes(32, \"big\"),\n        container_post=Account(\n            storage={\n                slot_conditional_result: calldata + value_base\n                if calldata < table_size\n                else value_fall_through,\n            }\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_forwards","title":"test_rjumpv_forwards(eof_state_test)","text":"

    EOF1V4200_0008 (Valid) EOF with RJUMPV table size 1 (Positive)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_forwards(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0008 (Valid) EOF with RJUMPV table size 1 (Positive)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0)\n                    + Op.RJUMPV[3]\n                    + Op.NOOP\n                    + Op.NOOP\n                    + Op.STOP\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_backwards","title":"test_rjumpv_backwards(eof_state_test)","text":"

    EOF1V4200_0009 (Valid) EOF with RJUMPV table size 1 (Negative)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_backwards(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0009 (Valid) EOF with RJUMPV table size 1 (Negative)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0)\n                    + Op.RJUMPI[7]\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                    + Op.PUSH1(0)\n                    + Op.RJUMPV[-13]\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_backwards_onto_dup","title":"test_rjumpv_backwards_onto_dup(eof_test)","text":"

    Backwards jump vector onto a dup

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_backwards_onto_dup(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    Backwards jump vector onto a dup\n    \"\"\"\n    container = Container.Code(\n        code=(Op.PUSH0 + Op.DUP1 + Op.RJUMPV[-5] + Op.STOP),\n        max_stack_height=2,\n    )\n    eof_test(\n        data=container,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_backwards_large_table","title":"test_rjumpv_backwards_large_table(eof_test, len)","text":"

    Backwards jump vector with a large table

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\"len\", [8, 9])\ndef test_rjumpv_backwards_large_table(\n    eof_test: EOFTestFiller,\n    len: int,\n):\n    \"\"\"\n    Backwards jump vector with a large table\n    \"\"\"\n    jump_table = [0] * len\n    jump_table += [len * -2 - 6]\n    container = Container.Code(\n        code=(Op.RJUMPV[jump_table](len) + Op.STOP),\n        max_stack_height=1,\n    )\n    eof_test(\n        data=container,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_zero","title":"test_rjumpv_zero(eof_state_test)","text":"

    EOF1V4200_0010 (Valid) EOF with RJUMPV table size 1 (Zero)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_zero(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0010 (Valid) EOF with RJUMPV table size 1 (Zero)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0)\n                    + Op.RJUMPV[0]\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_size_3","title":"test_rjumpv_size_3(eof_state_test)","text":"

    EOF1V4200_0011 (Valid) EOF with RJUMPV table size 3

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_size_3(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0011 (Valid) EOF with RJUMPV table size 3\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0)\n                    + Op.RJUMPV[3, 0, -10]\n                    + Op.NOOP\n                    + Op.NOOP\n                    + Op.STOP\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_full_table","title":"test_rjumpv_full_table(eof_state_test)","text":"

    EOF1V4200_0012 (Valid) EOF with RJUMPV table size 256 (Target 0)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_full_table(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0012 (Valid) EOF with RJUMPV table size 256 (Target 0)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0)\n                    + Op.RJUMPV[range(256)]\n                    + Op.NOOP * 256\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_full_table_mid","title":"test_rjumpv_full_table_mid(eof_state_test)","text":"

    EOF1V4200_0013 (Valid) EOF with RJUMPV table size 256 (Target 100)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_full_table_mid(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0013 (Valid) EOF with RJUMPV table size 256 (Target 100)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(100)\n                    + Op.RJUMPV[range(256)]\n                    + Op.NOOP * 256\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_full_table_end","title":"test_rjumpv_full_table_end(eof_state_test)","text":"

    EOF1V4200_0014 (Valid) EOF with RJUMPV table size 256 (Target 254)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_full_table_end(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0014 (Valid) EOF with RJUMPV table size 256 (Target 254)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(254)\n                    + Op.RJUMPV[range(256)]\n                    + Op.NOOP * 256\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_full_table_last","title":"test_rjumpv_full_table_last(eof_state_test)","text":"

    EOF1V4200_0015 (Valid) EOF with RJUMPV table size 256 (Target 256)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_full_table_last(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0015 (Valid) EOF with RJUMPV table size 256 (Target 256)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH2(256)\n                    + Op.RJUMPV[range(256)]\n                    + Op.NOOP * 256\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_max_forwards","title":"test_rjumpv_max_forwards(eof_state_test)","text":"

    EOF1V4200_0016 (Valid) EOF with RJUMPV containing the maximum offset (32767)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_max_forwards(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0016 (Valid) EOF with RJUMPV containing the maximum offset (32767)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.RJUMPV[32767]\n                    + Op.NOOP * 32768\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_truncated_empty","title":"test_rjumpv_truncated_empty(eof_test)","text":"

    EOF1I4200_0027 (Invalid) EOF code containing RJUMPV with max_index 0 but no immediates

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_truncated_empty(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF1I4200_0027 (Invalid) EOF code containing RJUMPV with max_index 0 but no immediates\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPV,\n                )\n            ],\n        ),\n        expect_exception=EOFException.TRUNCATED_INSTRUCTION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_truncated","title":"test_rjumpv_truncated(eof_test, branches, byte_count_last_branch)","text":"

    EOF1I4200_0028/29/30/31 (Invalid) EOF code containing truncated RJUMPV

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"branches\",\n    [1, 2, 256],\n)\n@pytest.mark.parametrize(\n    \"byte_count_last_branch\",\n    [0, 1],\n)\ndef test_rjumpv_truncated(\n    eof_test: EOFTestFiller,\n    branches: int,\n    byte_count_last_branch: int,\n):\n    \"\"\"EOF1I4200_0028/29/30/31 (Invalid) EOF code containing truncated RJUMPV\"\"\"\n    rjumpv_bytes = int.to_bytes(branches - 1, 1, \"big\")\n    rjumpv_bytes += b\"\\0\" * ((2 * (branches - 1)) + byte_count_last_branch)\n\n    eof_test(\n        data=Container.Code(code=Op.PUSH1(1) + Op.RJUMPV[rjumpv_bytes]),\n        expect_exception=EOFException.TRUNCATED_INSTRUCTION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_header","title":"test_rjumpv_into_header(eof_test, table_size, invalid_index)","text":"

    EOF1I4200_0031 (Invalid) EOF code containing RJUMPV with target outside code bounds (Jumping into header)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_into_header(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"\n    EOF1I4200_0031 (Invalid) EOF code containing RJUMPV with target outside code bounds\n    (Jumping into header)\n    \"\"\"\n    invalid_destination = -5 - (2 * table_size)\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_before_container","title":"test_rjumpv_before_container(eof_test, table_size, invalid_index)","text":"

    EOF1I4200_0032 (Invalid) EOF code containing RJUMPV with target outside code bounds (Jumping to before code begin)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_before_container(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"\n    EOF1I4200_0032 (Invalid) EOF code containing RJUMPV with target outside code bounds\n    (Jumping to before code begin)\n    \"\"\"\n    invalid_destination = -13 - (2 * table_size)\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_data","title":"test_rjumpv_into_data(eof_test, table_size, invalid_index)","text":"

    EOF1I4200_0033 (Invalid) EOF code containing RJUMPV with target outside code bounds (Jumping into data section)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_into_data(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"\n    EOF1I4200_0033 (Invalid) EOF code containing RJUMPV with target outside code bounds\n    (Jumping into data section)\n    \"\"\"\n    invalid_destination = 2\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP,\n                ),\n                Section.Data(data=b\"\\xaa\\xbb\\xcc\"),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_after_container","title":"test_rjumpv_after_container(eof_test, table_size, invalid_index)","text":"

    EOF1I4200_0034 (Invalid) EOF code containing RJUMPV with target outside code bounds (Jumping to after code end)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_after_container(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"\n    EOF1I4200_0034 (Invalid) EOF code containing RJUMPV with target outside code bounds\n    (Jumping to after code end)\n    \"\"\"\n    invalid_destination = 2\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_at_end","title":"test_rjumpv_at_end(eof_test, table_size, invalid_index)","text":"

    EOF1I4200_0035 (Invalid) EOF code containing RJUMPV with target outside code bounds (Jumping to code end)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_at_end(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"\n    EOF1I4200_0035 (Invalid) EOF code containing RJUMPV with target outside code bounds\n    (Jumping to code end)\n    \"\"\"\n    invalid_destination = 1\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_self_data_portion","title":"test_rjumpv_into_self_data_portion(eof_test, table_size, invalid_index, data_portion_end)","text":"

    EOF1I4200_0036 (Invalid) EOF code containing RJUMPV with target same RJUMPV immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\n@pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjumpv_into_self_data_portion(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0036 (Invalid) EOF code containing RJUMPV with target same RJUMPV immediate\"\"\"\n    invalid_destination = -1 if data_portion_end else -(2 * table_size) - 1\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_self","title":"test_rjumpv_into_self(eof_test, table_size, invalid_index)","text":"

    EOF code containing RJUMPV with target same RJUMPV immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_into_self(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"EOF code containing RJUMPV with target same RJUMPV immediate\"\"\"\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = -len(Op.RJUMPV[jump_table])\n\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.STACK_HEIGHT_MISMATCH,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_stack_height_diff","title":"test_rjumpv_into_stack_height_diff(eof_test, table_size, invalid_index)","text":"

    EOF code containing RJUMPV with target instruction that causes stack height difference

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_into_stack_height_diff(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"EOF code containing RJUMPV with target instruction that causes stack height difference\"\"\"\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = -(len(Op.RJUMPV[jump_table]) + len(Op.PUSH1(0)) + len(Op.PUSH1(0)))\n\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0) + Op.PUSH1(0) + Op.RJUMPV[jump_table] + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.STACK_HEIGHT_MISMATCH,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_stack_underflow","title":"test_rjumpv_into_stack_underflow(eof_test, table_size, invalid_index)","text":"

    EOF code containing RJUMPV with target instruction that cause stack underflow

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_into_stack_underflow(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"EOF code containing RJUMPV with target instruction that cause stack underflow\"\"\"\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = 1\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.ORIGIN + Op.RJUMPV[jump_table] + Op.STOP + Op.POP + Op.STOP),\n            ],\n        ),\n        expect_exception=EOFException.STACK_UNDERFLOW,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_skips_stack_underflow","title":"test_rjumpv_skips_stack_underflow(eof_test, table_size)","text":"

    EOF code containing RJUMPV where the default path produces a stack underflow

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size\",\n    [\n        pytest.param(1, id=\"t1\"),\n        pytest.param(256, id=\"t256\"),\n    ],\n)\ndef test_rjumpv_skips_stack_underflow(\n    eof_test: EOFTestFiller,\n    table_size: int,\n):\n    \"\"\"EOF code containing RJUMPV where the default path produces a stack underflow\"\"\"\n    jump_table = [1 for _ in range(table_size)]\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.ORIGIN + Op.RJUMPV[jump_table] + Op.POP + Op.STOP),\n            ],\n        ),\n        expect_exception=EOFException.STACK_UNDERFLOW,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_rjump","title":"test_rjumpv_into_rjump(eof_test, table_size, invalid_index, data_portion_end)","text":"

    EOF1I4200_0037 (Invalid) EOF code containing RJUMPV with target RJUMP immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\n@pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjumpv_into_rjump(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0037 (Invalid) EOF code containing RJUMPV with target RJUMP immediate\"\"\"\n    invalid_destination = 3 if data_portion_end else 2\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    if table_size > 1:\n        valid_index = 0\n        if valid_index == invalid_index:\n            valid_index += 1\n        jump_table[valid_index] = 1\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP + Op.RJUMP[0] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_rjumpi","title":"test_rjumpv_into_rjumpi(eof_test, table_size, invalid_index, data_portion_end)","text":"

    EOF1I4200_0038 (Invalid) EOF code containing RJUMPV with target RJUMPI immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\n@pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjumpv_into_rjumpi(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0038 (Invalid) EOF code containing RJUMPV with target RJUMPI immediate\"\"\"\n    invalid_destination = 5 if data_portion_end else 4\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    if table_size > 1:\n        valid_index = 0\n        if valid_index == invalid_index:\n            valid_index += 1\n        jump_table[valid_index] = 1\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.RJUMPV[jump_table]\n                    + Op.STOP\n                    + Op.PUSH1(1)\n                    + Op.RJUMPI[0]\n                    + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_push_1","title":"test_rjumpv_into_push_1(eof_test, jump, table_size, invalid_index)","text":"

    EOF1I4200_0039 (Invalid) EOF code containing RJUMPV with target PUSH1 immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\n@pytest.mark.parametrize(\"jump\", [JumpDirection.FORWARD, JumpDirection.BACKWARD])\ndef test_rjumpv_into_push_1(\n    eof_test: EOFTestFiller,\n    jump: JumpDirection,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"EOF1I4200_0039 (Invalid) EOF code containing RJUMPV with target PUSH1 immediate\"\"\"\n    if jump == JumpDirection.FORWARD:\n        invalid_destination = 2\n        jump_table = [0 for _ in range(table_size)]\n        jump_table[invalid_index] = invalid_destination\n        code = (\n            Op.PUSH1(1)\n            + Op.RJUMPV[jump_table]\n            + Op.STOP\n            + Op.PUSH1(1)\n            + Op.PUSH1(1)\n            + Op.SSTORE\n            + Op.STOP\n        )\n    else:\n        invalid_destination = -(2 * table_size) - 3\n        jump_table = [0 for _ in range(table_size)]\n        jump_table[invalid_index] = invalid_destination\n        code = Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP\n    eof_test(\n        data=Container(\n            sections=[Section.Code(code=code)],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_push_n","title":"test_rjumpv_into_push_n(eof_test, opcode, jump, table_size, invalid_index, data_portion_end)","text":"

    EOF1I4200_0039 (Invalid) EOF code containing RJUMPV with target PUSH1 immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.PUSH2,\n        Op.PUSH3,\n        Op.PUSH4,\n        Op.PUSH5,\n        Op.PUSH6,\n        Op.PUSH7,\n        Op.PUSH8,\n        Op.PUSH9,\n        Op.PUSH10,\n        Op.PUSH11,\n        Op.PUSH12,\n        Op.PUSH13,\n        Op.PUSH14,\n        Op.PUSH15,\n        Op.PUSH16,\n        Op.PUSH17,\n        Op.PUSH18,\n        Op.PUSH19,\n        Op.PUSH20,\n        Op.PUSH21,\n        Op.PUSH22,\n        Op.PUSH23,\n        Op.PUSH24,\n        Op.PUSH25,\n        Op.PUSH26,\n        Op.PUSH27,\n        Op.PUSH28,\n        Op.PUSH29,\n        Op.PUSH30,\n        Op.PUSH31,\n        Op.PUSH32,\n    ],\n)\n@pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\n@pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\n@pytest.mark.parametrize(\"jump\", [JumpDirection.FORWARD, JumpDirection.BACKWARD])\ndef test_rjumpv_into_push_n(\n    eof_test: EOFTestFiller,\n    opcode: Op,\n    jump: JumpDirection,\n    table_size: int,\n    invalid_index: int,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0039 (Invalid) EOF code containing RJUMPV with target PUSH1 immediate\"\"\"\n    data_portion_length = int.from_bytes(opcode, byteorder=\"big\") - 0x5F\n    if jump == JumpDirection.FORWARD:\n        invalid_destination = data_portion_length + 1 if data_portion_end else 2\n        jump_table = [0 for _ in range(table_size)]\n        jump_table[invalid_index] = invalid_destination\n        code = (\n            Op.PUSH1(1)\n            + Op.RJUMPV[jump_table]\n            + Op.STOP\n            + opcode[1]\n            + Op.PUSH1(1)\n            + Op.SSTORE\n            + Op.STOP\n        )\n    else:\n        invalid_destination = (\n            -(2 * table_size) - 3\n            if data_portion_end\n            else -(2 * table_size) - 2 - data_portion_length\n        )\n        jump_table = [0 for _ in range(table_size)]\n        jump_table[invalid_index] = invalid_destination\n        code = opcode[1] + Op.RJUMPV[jump_table] + Op.STOP\n    eof_test(\n        data=Container(\n            sections=[Section.Code(code=code)],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_rjumpv","title":"test_rjumpv_into_rjumpv(eof_test, source_table_size, target_table_size, invalid_index, data_portion_end)","text":"

    EOF1I4200_0040 (Invalid) EOF code containing RJUMPV with target other RJUMPV immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"source_table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"s1i0\"),\n        pytest.param(256, 0, id=\"s256i0\"),\n        pytest.param(256, 255, id=\"s256i255\"),\n    ],\n)\n@pytest.mark.parametrize(\"target_table_size\", [1, 256], ids=[\"t1\", \"t256\"])\n@pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjumpv_into_rjumpv(\n    eof_test: EOFTestFiller,\n    source_table_size: int,\n    target_table_size: int,\n    invalid_index: int,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0040 (Invalid) EOF code containing RJUMPV with target other RJUMPV immediate\"\"\"\n    invalid_destination = 4 + (2 * target_table_size) if data_portion_end else 4\n    source_jump_table = [0 for _ in range(source_table_size)]\n    source_jump_table[invalid_index] = invalid_destination\n    target_jump_table = [0 for _ in range(target_table_size)]\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.RJUMPV[source_jump_table]\n                    + Op.STOP\n                    + Op.PUSH1(1)\n                    + Op.RJUMPV[target_jump_table]\n                    + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_callf","title":"test_rjumpv_into_callf(eof_test, table_size, invalid_index, data_portion_end)","text":"

    EOF1I4200_0041 (Invalid) EOF code containing RJUMPV with target CALLF immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\n@pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjumpv_into_callf(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0041 (Invalid) EOF code containing RJUMPV with target CALLF immediate\"\"\"\n    invalid_destination = 2 if data_portion_end else 1\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0) + Op.RJUMPV[jump_table] + Op.CALLF[1] + Op.STOP,\n                ),\n                Section.Code(\n                    code=Op.SSTORE(1, 1) + Op.RETF,\n                    code_outputs=0,\n                ),\n            ]\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_dupn","title":"test_rjumpv_into_dupn(eof_test, table_size, invalid_index)","text":"

    EOF code containing RJUMP with target DUPN immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_into_dupn(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"EOF code containing RJUMP with target DUPN immediate\"\"\"\n    invalid_destination = 1\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.PUSH1(1)\n                    + Op.PUSH1(0)\n                    + Op.RJUMPV[jump_table]\n                    + Op.DUPN[1]\n                    + Op.SSTORE\n                    + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_swapn","title":"test_rjumpv_into_swapn(eof_test, table_size, invalid_index)","text":"

    EOF code containing RJUMP with target SWAPN immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_into_swapn(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"EOF code containing RJUMP with target SWAPN immediate\"\"\"\n    invalid_destination = 1\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.PUSH1(1)\n                    + Op.PUSH1(0)\n                    + Op.RJUMPV[jump_table]\n                    + Op.SWAPN[1]\n                    + Op.SSTORE\n                    + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_exchange","title":"test_rjumpv_into_exchange(eof_test, table_size, invalid_index)","text":"

    EOF code containing RJUMP with target EXCHANGE immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_into_exchange(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"EOF code containing RJUMP with target EXCHANGE immediate\"\"\"\n    invalid_destination = 1\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.PUSH1(2)\n                    + Op.PUSH1(3)\n                    + Op.PUSH1(0)\n                    + Op.RJUMPV[1]\n                    + Op.EXCHANGE[0x00]\n                    + Op.SSTORE\n                    + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_eofcreate","title":"test_rjumpv_into_eofcreate(eof_test, table_size, invalid_index)","text":"

    EOF code containing RJUMP with target EOFCREATE immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_into_eofcreate(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"EOF code containing RJUMP with target EOFCREATE immediate\"\"\"\n    invalid_destination = 9\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0)\n                    + Op.RJUMPV[jump_table]\n                    + Op.EOFCREATE[0](0, 0, 0, 0)\n                    + Op.STOP,\n                ),\n                Section.Container(\n                    container=Container(\n                        sections=[\n                            Section.Code(\n                                code=Op.RETURNCONTRACT[0](0, 0),\n                            ),\n                            Section.Container(\n                                container=Container(\n                                    sections=[\n                                        Section.Code(code=Op.STOP),\n                                    ]\n                                )\n                            ),\n                        ]\n                    )\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_returncontract","title":"test_rjumpv_into_returncontract(eof_test, table_size, invalid_index)","text":"

    EOF code containing RJUMP with target RETURNCONTRACT immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_into_returncontract(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"EOF code containing RJUMP with target RETURNCONTRACT immediate\"\"\"\n    invalid_destination = 5\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP,\n                ),\n                Section.Container(\n                    container=Container(\n                        sections=[\n                            Section.Code(\n                                code=Op.PUSH1(0)\n                                + Op.RJUMPV[jump_table]\n                                + Op.RETURNCONTRACT[0](0, 0),\n                            ),\n                            Section.Container(\n                                container=Container(\n                                    sections=[\n                                        Section.Code(code=Op.STOP),\n                                    ]\n                                )\n                            ),\n                        ]\n                    )\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_backwards_reference_only","title":"test_rjumpv_backwards_reference_only(eof_test)","text":"

    EOF code containing instructions only reachable by backwards RJUMPV

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_backwards_reference_only(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF code containing instructions only reachable by backwards RJUMPV\n    \"\"\"\n    RJUMPV_LEN = len(Op.RJUMPV[0])\n    container = Container.Code(\n        code=(\n            Op.RJUMP[RJUMP_LEN]\n            + Op.RJUMP[RJUMPV_LEN + len(Op.ORIGIN)]\n            + Op.ORIGIN\n            + Op.RJUMPV[-(RJUMP_LEN + RJUMPV_LEN + len(Op.ORIGIN))]\n            + Op.STOP\n        )\n    )\n    eof_test(\n        data=container,\n        expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_at_the_end","title":"test_rjumpv_at_the_end(eof_test)","text":"

    https://github.com/ipsilon/eof/blob/main/spec/eof.md#stack-validation 4.i: This implies that the last instruction may be a terminating instruction or RJUMP

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_at_the_end(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    https://github.com/ipsilon/eof/blob/main/spec/eof.md#stack-validation 4.i:\n    This implies that the last instruction may be a terminating instruction or RJUMP\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0) + Op.PUSH1(0) + Op.RJUMPI[1] + Op.STOP + Op.RJUMPV[-7](1),\n                )\n            ],\n        ),\n        expect_exception=EOFException.MISSING_STOP_OPCODE,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/index/test_cases/","title":"Test Rjumpv - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py:

    test_rjumpv_condition[fork_CancunEIP7692-eof_test-t1-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t1-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t1-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t1-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t1-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t1-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t3-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t3-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t3-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t3-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t3-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t3-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t256-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t256-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t256-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t256-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t256-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t256-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t1-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t1-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t1-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t1-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t1-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t1-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t3-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t3-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t3-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t3-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t3-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t3-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t256-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t256-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t256-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t256-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t256-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t256-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t1-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t1-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t1-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t1-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t1-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t1-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t3-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t3-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t3-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t3-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t3-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t3-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t256-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t256-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t256-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t256-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t256-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t256-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t1-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t1-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t1-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t1-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t1-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t1-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t3-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t3-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t3-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t3-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t3-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t3-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t256-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t256-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t256-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t256-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t256-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t256-c2^256-1]\ntest_rjumpv_forwards[fork_CancunEIP7692-eof_test]\ntest_rjumpv_forwards[fork_CancunEIP7692-state_test]\ntest_rjumpv_forwards[fork_CancunEIP7692-blockchain_test]\ntest_rjumpv_forwards[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpv_backwards[fork_CancunEIP7692-eof_test]\ntest_rjumpv_backwards[fork_CancunEIP7692-state_test]\ntest_rjumpv_backwards[fork_CancunEIP7692-blockchain_test]\ntest_rjumpv_backwards[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpv_backwards_onto_dup[fork_CancunEIP7692-eof_test]\ntest_rjumpv_backwards_large_table[fork_CancunEIP7692-eof_test-len_8]\ntest_rjumpv_backwards_large_table[fork_CancunEIP7692-eof_test-len_9]\ntest_rjumpv_zero[fork_CancunEIP7692-eof_test]\ntest_rjumpv_zero[fork_CancunEIP7692-state_test]\ntest_rjumpv_zero[fork_CancunEIP7692-blockchain_test]\ntest_rjumpv_zero[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpv_size_3[fork_CancunEIP7692-eof_test]\ntest_rjumpv_size_3[fork_CancunEIP7692-state_test]\ntest_rjumpv_size_3[fork_CancunEIP7692-blockchain_test]\ntest_rjumpv_size_3[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpv_full_table[fork_CancunEIP7692-eof_test]\ntest_rjumpv_full_table[fork_CancunEIP7692-state_test]\ntest_rjumpv_full_table[fork_CancunEIP7692-blockchain_test]\ntest_rjumpv_full_table[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpv_full_table_mid[fork_CancunEIP7692-eof_test]\ntest_rjumpv_full_table_mid[fork_CancunEIP7692-state_test]\ntest_rjumpv_full_table_mid[fork_CancunEIP7692-blockchain_test]\ntest_rjumpv_full_table_mid[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpv_full_table_end[fork_CancunEIP7692-eof_test]\ntest_rjumpv_full_table_end[fork_CancunEIP7692-state_test]\ntest_rjumpv_full_table_end[fork_CancunEIP7692-blockchain_test]\ntest_rjumpv_full_table_end[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpv_full_table_last[fork_CancunEIP7692-eof_test]\ntest_rjumpv_full_table_last[fork_CancunEIP7692-state_test]\ntest_rjumpv_full_table_last[fork_CancunEIP7692-blockchain_test]\ntest_rjumpv_full_table_last[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpv_max_forwards[fork_CancunEIP7692-eof_test]\ntest_rjumpv_max_forwards[fork_CancunEIP7692-state_test]\ntest_rjumpv_max_forwards[fork_CancunEIP7692-blockchain_test]\ntest_rjumpv_max_forwards[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpv_truncated_empty[fork_CancunEIP7692-eof_test]\ntest_rjumpv_truncated[fork_CancunEIP7692-eof_test-byte_count_last_branch_0-branches_1]\ntest_rjumpv_truncated[fork_CancunEIP7692-eof_test-byte_count_last_branch_0-branches_2]\ntest_rjumpv_truncated[fork_CancunEIP7692-eof_test-byte_count_last_branch_0-branches_256]\ntest_rjumpv_truncated[fork_CancunEIP7692-eof_test-byte_count_last_branch_1-branches_1]\ntest_rjumpv_truncated[fork_CancunEIP7692-eof_test-byte_count_last_branch_1-branches_2]\ntest_rjumpv_truncated[fork_CancunEIP7692-eof_test-byte_count_last_branch_1-branches_256]\ntest_rjumpv_into_header[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_into_header[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_into_header[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_before_container[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_before_container[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_before_container[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_into_data[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_into_data[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_into_data[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_after_container[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_after_container[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_after_container[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_at_end[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_at_end[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_at_end[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_into_self_data_portion[fork_CancunEIP7692-eof_test-data_portion_end-t1i0]\ntest_rjumpv_into_self_data_portion[fork_CancunEIP7692-eof_test-data_portion_end-t256i0]\ntest_rjumpv_into_self_data_portion[fork_CancunEIP7692-eof_test-data_portion_end-t256i255]\ntest_rjumpv_into_self_data_portion[fork_CancunEIP7692-eof_test-data_portion_start-t1i0]\ntest_rjumpv_into_self_data_portion[fork_CancunEIP7692-eof_test-data_portion_start-t256i0]\ntest_rjumpv_into_self_data_portion[fork_CancunEIP7692-eof_test-data_portion_start-t256i255]\ntest_rjumpv_into_self[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_into_self[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_into_self[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_into_stack_height_diff[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_into_stack_height_diff[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_into_stack_height_diff[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_into_stack_underflow[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_into_stack_underflow[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_into_stack_underflow[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_skips_stack_underflow[fork_CancunEIP7692-eof_test-t1]\ntest_rjumpv_skips_stack_underflow[fork_CancunEIP7692-eof_test-t256]\ntest_rjumpv_into_rjump[fork_CancunEIP7692-eof_test-data_portion_end-t1i0]\ntest_rjumpv_into_rjump[fork_CancunEIP7692-eof_test-data_portion_end-t256i0]\ntest_rjumpv_into_rjump[fork_CancunEIP7692-eof_test-data_portion_end-t256i255]\ntest_rjumpv_into_rjump[fork_CancunEIP7692-eof_test-data_portion_start-t1i0]\ntest_rjumpv_into_rjump[fork_CancunEIP7692-eof_test-data_portion_start-t256i0]\ntest_rjumpv_into_rjump[fork_CancunEIP7692-eof_test-data_portion_start-t256i255]\ntest_rjumpv_into_rjumpi[fork_CancunEIP7692-eof_test-data_portion_end-t1i0]\ntest_rjumpv_into_rjumpi[fork_CancunEIP7692-eof_test-data_portion_end-t256i0]\ntest_rjumpv_into_rjumpi[fork_CancunEIP7692-eof_test-data_portion_end-t256i255]\ntest_rjumpv_into_rjumpi[fork_CancunEIP7692-eof_test-data_portion_start-t1i0]\ntest_rjumpv_into_rjumpi[fork_CancunEIP7692-eof_test-data_portion_start-t256i0]\ntest_rjumpv_into_rjumpi[fork_CancunEIP7692-eof_test-data_portion_start-t256i255]\ntest_rjumpv_into_push_1[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-t1i0]\ntest_rjumpv_into_push_1[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-t256i0]\ntest_rjumpv_into_push_1[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-t256i255]\ntest_rjumpv_into_push_1[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-t1i0]\ntest_rjumpv_into_push_1[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-t256i0]\ntest_rjumpv_into_push_1[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-t256i255]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH32]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_end-t1-s1i0]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_end-t1-s256i0]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_end-t1-s256i255]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_end-t256-s1i0]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_end-t256-s256i0]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_end-t256-s256i255]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_start-t1-s1i0]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_start-t1-s256i0]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_start-t1-s256i255]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_start-t256-s1i0]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_start-t256-s256i0]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_start-t256-s256i255]\ntest_rjumpv_into_callf[fork_CancunEIP7692-eof_test-data_portion_end-t1i0]\ntest_rjumpv_into_callf[fork_CancunEIP7692-eof_test-data_portion_end-t256i0]\ntest_rjumpv_into_callf[fork_CancunEIP7692-eof_test-data_portion_end-t256i255]\ntest_rjumpv_into_callf[fork_CancunEIP7692-eof_test-data_portion_start-t1i0]\ntest_rjumpv_into_callf[fork_CancunEIP7692-eof_test-data_portion_start-t256i0]\ntest_rjumpv_into_callf[fork_CancunEIP7692-eof_test-data_portion_start-t256i255]\ntest_rjumpv_into_dupn[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_into_dupn[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_into_dupn[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_into_swapn[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_into_swapn[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_into_swapn[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_into_exchange[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_into_exchange[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_into_exchange[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_into_eofcreate[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_into_eofcreate[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_into_eofcreate[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_into_returncontract[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_into_returncontract[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_into_returncontract[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_backwards_reference_only[fork_CancunEIP7692-eof_test]\ntest_rjumpv_at_the_end[fork_CancunEIP7692-eof_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/","title":"EIP-4750 Functions","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip4750_functions.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip4750_functions --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip4750_functions --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF tests for EIP-4750 functions

    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/","title":"Test Callf Execution","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF CALLF execution tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/#tests.prague.eip7692_eof_v1.eip4750_functions.test_callf_execution.test_callf_stack_size_1024","title":"test_callf_stack_size_1024(eof_state_test)","text":"

    Test stack reaching 1024 items in called function

    Source code in tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py
    def test_callf_stack_size_1024(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack reaching 1024 items in called function\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1023\n                    + Op.CALLF[1]\n                    + Op.POP * 1023\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1023,\n                ),\n                Section.Code(\n                    Op.PUSH0 + Op.POP + Op.RETF,\n                    code_inputs=0,\n                    code_outputs=0,\n                    max_stack_height=1,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/#tests.prague.eip7692_eof_v1.eip4750_functions.test_callf_execution.test_callf_with_inputs_stack_size_1024","title":"test_callf_with_inputs_stack_size_1024(eof_state_test)","text":"

    Test stack reaching 1024 items in called function with inputs

    Source code in tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py
    def test_callf_with_inputs_stack_size_1024(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack reaching 1024 items in called function with inputs\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1023\n                    + Op.CALLF[1]\n                    + Op.POP * 1023\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1023,\n                ),\n                Section.Code(\n                    Op.PUSH0 + Op.POP + Op.RETF,\n                    code_inputs=3,\n                    code_outputs=3,\n                    max_stack_height=4,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/#tests.prague.eip7692_eof_v1.eip4750_functions.test_callf_execution.test_callf_stack_size_1024_at_callf","title":"test_callf_stack_size_1024_at_callf(eof_state_test)","text":"

    Test stack reaching 1024 items in called function at CALLF instruction

    Source code in tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py
    def test_callf_stack_size_1024_at_callf(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack reaching 1024 items in called function at CALLF instruction\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1023\n                    + Op.CALLF[1]\n                    + Op.POP * 1023\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1023,\n                ),\n                Section.Code(\n                    Op.CALLF[2] +\n                    # stack has 1024 items\n                    Op.POP + Op.RETF,\n                    code_inputs=0,\n                    code_outputs=0,\n                    max_stack_height=1,\n                ),\n                Section.Code(\n                    Op.PUSH0 + Op.RETF,  # stack has 1024 items\n                    code_inputs=0,\n                    code_outputs=1,\n                    max_stack_height=1,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/#tests.prague.eip7692_eof_v1.eip4750_functions.test_callf_execution.test_callf_stack_size_1024_at_push","title":"test_callf_stack_size_1024_at_push(eof_state_test)","text":"

    Test stack reaching 1024 items in nested called function at PUSH0 instruction

    Source code in tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py
    def test_callf_stack_size_1024_at_push(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack reaching 1024 items in nested called function at PUSH0 instruction\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1022\n                    + Op.CALLF[1]\n                    + Op.POP * 1022\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1022,\n                ),\n                Section.Code(\n                    Op.PUSH0 +\n                    # stack has 1023 items\n                    Op.CALLF[2] + Op.POP + Op.RETF,\n                    code_inputs=0,\n                    code_outputs=0,\n                    max_stack_height=1,\n                ),\n                Section.Code(\n                    Op.PUSH0 +\n                    # stack has 1024 items\n                    Op.POP + Op.RETF,\n                    code_inputs=0,\n                    code_outputs=0,\n                    max_stack_height=1,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/#tests.prague.eip7692_eof_v1.eip4750_functions.test_callf_execution.test_callf_stack_overflow","title":"test_callf_stack_overflow(eof_state_test)","text":"

    Test stack overflowing 1024 items in called function

    Source code in tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py
    def test_callf_stack_overflow(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack overflowing 1024 items in called function\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1023\n                    + Op.CALLF[1]\n                    + Op.POP * 1023\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1023,\n                ),\n                Section.Code(\n                    Op.PUSH0 +\n                    # Stack has 1024 items\n                    Op.CALLF[2] + Op.POP + Op.RETF,\n                    code_inputs=0,\n                    code_outputs=0,\n                    max_stack_height=1,\n                ),\n                Section.Code(\n                    Op.PUSH0 +\n                    # Runtime stack overflow\n                    Op.POP + Op.RETF,\n                    code_inputs=0,\n                    code_outputs=0,\n                    max_stack_height=1,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: 0}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/#tests.prague.eip7692_eof_v1.eip4750_functions.test_callf_execution.test_callf_with_inputs_stack_size_1024_at_push","title":"test_callf_with_inputs_stack_size_1024_at_push(eof_state_test)","text":"

    Test stack reaching 1024 items in nested called function with inputs at PUSH0 instruction

    Source code in tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py
    def test_callf_with_inputs_stack_size_1024_at_push(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack reaching 1024 items in nested called function with inputs at PUSH0 instruction\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1022\n                    + Op.CALLF[1]\n                    + Op.POP * 1022\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1022,\n                ),\n                Section.Code(\n                    Op.PUSH0 +\n                    # Stack has 1023 items\n                    Op.CALLF[2] + Op.POP + Op.RETF,\n                    code_inputs=3,\n                    code_outputs=3,\n                    max_stack_height=4,\n                ),\n                Section.Code(\n                    Op.PUSH0 +\n                    # Stack has 1024 items\n                    Op.POP + Op.RETF,\n                    code_inputs=3,\n                    code_outputs=3,\n                    max_stack_height=4,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/#tests.prague.eip7692_eof_v1.eip4750_functions.test_callf_execution.test_callf_with_inputs_stack_overflow","title":"test_callf_with_inputs_stack_overflow(eof_state_test)","text":"

    Test stack overflowing 1024 items in called function with inputs

    Source code in tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py
    def test_callf_with_inputs_stack_overflow(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack overflowing 1024 items in called function with inputs\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1023\n                    + Op.CALLF[1]\n                    + Op.POP * 1023\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1023,\n                ),\n                Section.Code(\n                    Op.PUSH0 +\n                    # Stack has 1024 items\n                    Op.CALLF[2] + Op.POP + Op.RETF,\n                    code_inputs=3,\n                    code_outputs=3,\n                    max_stack_height=4,\n                ),\n                Section.Code(\n                    Op.PUSH0 +\n                    # Runtime stackoverflow\n                    Op.POP + Op.RETF,\n                    code_inputs=3,\n                    code_outputs=3,\n                    max_stack_height=4,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: 0}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/index/test_cases/","title":"Test Callf Execution - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py:

    test_callf_stack_size_1024[fork_CancunEIP7692-eof_test]\ntest_callf_stack_size_1024[fork_CancunEIP7692-state_test]\ntest_callf_stack_size_1024[fork_CancunEIP7692-blockchain_test]\ntest_callf_stack_size_1024[fork_CancunEIP7692-blockchain_test_engine]\ntest_callf_with_inputs_stack_size_1024[fork_CancunEIP7692-eof_test]\ntest_callf_with_inputs_stack_size_1024[fork_CancunEIP7692-state_test]\ntest_callf_with_inputs_stack_size_1024[fork_CancunEIP7692-blockchain_test]\ntest_callf_with_inputs_stack_size_1024[fork_CancunEIP7692-blockchain_test_engine]\ntest_callf_stack_size_1024_at_callf[fork_CancunEIP7692-eof_test]\ntest_callf_stack_size_1024_at_callf[fork_CancunEIP7692-state_test]\ntest_callf_stack_size_1024_at_callf[fork_CancunEIP7692-blockchain_test]\ntest_callf_stack_size_1024_at_callf[fork_CancunEIP7692-blockchain_test_engine]\ntest_callf_stack_size_1024_at_push[fork_CancunEIP7692-eof_test]\ntest_callf_stack_size_1024_at_push[fork_CancunEIP7692-state_test]\ntest_callf_stack_size_1024_at_push[fork_CancunEIP7692-blockchain_test]\ntest_callf_stack_size_1024_at_push[fork_CancunEIP7692-blockchain_test_engine]\ntest_callf_stack_overflow[fork_CancunEIP7692-eof_test]\ntest_callf_stack_overflow[fork_CancunEIP7692-state_test]\ntest_callf_stack_overflow[fork_CancunEIP7692-blockchain_test]\ntest_callf_stack_overflow[fork_CancunEIP7692-blockchain_test_engine]\ntest_callf_with_inputs_stack_size_1024_at_push[fork_CancunEIP7692-eof_test]\ntest_callf_with_inputs_stack_size_1024_at_push[fork_CancunEIP7692-state_test]\ntest_callf_with_inputs_stack_size_1024_at_push[fork_CancunEIP7692-blockchain_test]\ntest_callf_with_inputs_stack_size_1024_at_push[fork_CancunEIP7692-blockchain_test_engine]\ntest_callf_with_inputs_stack_overflow[fork_CancunEIP7692-eof_test]\ntest_callf_with_inputs_stack_overflow[fork_CancunEIP7692-state_test]\ntest_callf_with_inputs_stack_overflow[fork_CancunEIP7692-blockchain_test]\ntest_callf_with_inputs_stack_overflow[fork_CancunEIP7692-blockchain_test_engine]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation/","title":"Test Code Validation","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Code validation of CALLF, RETF opcodes tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation/#tests.prague.eip7692_eof_v1.eip4750_functions.test_code_validation.test_eof_validity","title":"test_eof_validity(eof_test, container)","text":"

    Test EOF container validaiton for features around EIP-4750 / Functions / Code Sections

    Source code in tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation.py
    @pytest.mark.parametrize(\n    \"container\",\n    [*VALID, *INVALID],\n    ids=container_name,\n)\ndef test_eof_validity(\n    eof_test: EOFTestFiller,\n    container: Container,\n):\n    \"\"\"\n    Test EOF container validaiton for features around EIP-4750 / Functions / Code Sections\n    \"\"\"\n    eof_test(\n        data=bytes(container),\n        expect_exception=container.validity_error,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation/index/test_cases/","title":"Test Code Validation - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation.py:

    test_eof_validity[fork_CancunEIP7692-eof_test-retf_code_input_output]\ntest_eof_validity[fork_CancunEIP7692-eof_test-stack_height_equal_code_outputs_retf_zero_stop]\ntest_eof_validity[fork_CancunEIP7692-eof_test-callf_max_code_sections_1]\ntest_eof_validity[fork_CancunEIP7692-eof_test-callf_max_code_sections_2]\ntest_eof_validity[fork_CancunEIP7692-eof_test-function_underflow]\ntest_eof_validity[fork_CancunEIP7692-eof_test-stack_higher_than_code_outputs]\ntest_eof_validity[fork_CancunEIP7692-eof_test-stack_shorter_than_code_outputs]\ntest_eof_validity[fork_CancunEIP7692-eof_test-oob_callf_1]\ntest_eof_validity[fork_CancunEIP7692-eof_test-overflow_code_sections_1]\ntest_eof_validity[fork_CancunEIP7692-eof_test-callf_to_non_returning]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/","title":"EIP-6206 Jumpf","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip6206_jumpf.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip6206_jumpf --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip6206_jumpf --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF tests for EIP-6206 JUMPF

    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip6206_jumpf/spec.py.

    EOF V1 Constants used throughout all tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/","title":"Test Jumpf Execution","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF JUMPF tests covering simple cases.

    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_forward","title":"test_jumpf_forward(eof_state_test)","text":"

    Test JUMPF jumping forward

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_forward(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test JUMPF jumping forward\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.JUMPF[1],\n                ),\n                Section.Code(\n                    Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n        tx_data=b\"\\1\",\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_backward","title":"test_jumpf_backward(eof_state_test)","text":"

    Tests JUMPF jumping backward

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_backward(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Tests JUMPF jumping backward\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.CALLF[2] + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP,\n                ),\n                Section.Code(\n                    code=Op.RETF,\n                    code_outputs=0,\n                ),\n                Section.Code(\n                    code=Op.JUMPF[1],\n                    code_outputs=0,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n        tx_data=b\"\\1\",\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_to_self","title":"test_jumpf_to_self(eof_state_test)","text":"

    Tests JUMPF jumping to self

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_to_self(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Tests JUMPF jumping to self\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.SLOAD(slot_code_worked)\n                    + Op.ISZERO\n                    + Op.RJUMPI[1]\n                    + Op.STOP\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.JUMPF[0],\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n        tx_data=b\"\\1\",\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_too_large","title":"test_jumpf_too_large(eof_state_test)","text":"

    Tests JUMPF jumping to a section outside the max section range

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_too_large(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Tests JUMPF jumping to a section outside the max section range\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.JUMPF[1025],\n                )\n            ],\n            validity_error=EOFException.INVALID_CODE_SECTION_INDEX,\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_way_too_large","title":"test_jumpf_way_too_large(eof_state_test)","text":"

    Tests JUMPF jumping to uint64.MAX

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_way_too_large(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Tests JUMPF jumping to uint64.MAX\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.JUMPF[0xFFFF],\n                )\n            ],\n            validity_error=EOFException.INVALID_CODE_SECTION_INDEX,\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_to_nonexistent_section","title":"test_jumpf_to_nonexistent_section(eof_state_test)","text":"

    Tests JUMPF jumping to valid section number but where the section does not exist

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_to_nonexistent_section(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Tests JUMPF jumping to valid section number but where the section does not exist\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.JUMPF[5],\n                )\n            ],\n            validity_error=EOFException.INVALID_CODE_SECTION_INDEX,\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_callf_to_non_returning_section","title":"test_callf_to_non_returning_section(eof_state_test)","text":"

    Tests CALLF into a non-returning section

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_callf_to_non_returning_section(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Tests CALLF into a non-returning section\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.CALLF[1],\n                ),\n                Section.Code(\n                    code=Op.STOP,\n                    code_outputs=0,\n                ),\n            ],\n            validity_error=EOFException.MISSING_STOP_OPCODE,\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_stack_size_1024","title":"test_jumpf_stack_size_1024(eof_state_test)","text":"

    Test stack reaching 1024 items in target function of JUMPF

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_stack_size_1024(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack reaching 1024 items in target function of JUMPF\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1022 + Op.JUMPF[1],\n                    max_stack_height=1022,\n                ),\n                Section.Code(\n                    Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP,\n                    code_inputs=0,\n                    code_outputs=NON_RETURNING_SECTION,\n                    max_stack_height=2,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_with_inputs_stack_size_1024","title":"test_jumpf_with_inputs_stack_size_1024(eof_state_test)","text":"

    Test stack reaching 1024 items in target function of JUMPF with inputs

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_with_inputs_stack_size_1024(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack reaching 1024 items in target function of JUMPF with inputs\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1022 + Op.JUMPF[1],\n                    max_stack_height=1022,\n                ),\n                Section.Code(\n                    Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP,\n                    code_inputs=3,\n                    code_outputs=NON_RETURNING_SECTION,\n                    max_stack_height=5,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_stack_size_1024_at_push","title":"test_jumpf_stack_size_1024_at_push(eof_state_test)","text":"

    Test stack reaching 1024 items in JUMPF target function at PUSH0 instruction

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_stack_size_1024_at_push(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack reaching 1024 items in JUMPF target function at PUSH0 instruction\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1023\n                    + Op.CALLF[1]\n                    + Op.POP * 1023\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1023,\n                ),\n                Section.Code(\n                    # stack has 1023 items\n                    Op.JUMPF[2],\n                    code_inputs=0,\n                    code_outputs=0,\n                    max_stack_height=0,\n                ),\n                Section.Code(\n                    Op.PUSH0 +\n                    # stack has 1024 items\n                    Op.POP + Op.RETF,\n                    code_inputs=0,\n                    code_outputs=0,\n                    max_stack_height=1,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_stack_overflow","title":"test_jumpf_stack_overflow(eof_state_test)","text":"

    Test stack overflowing 1024 items in JUMPF target function

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_stack_overflow(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack overflowing 1024 items in JUMPF target function\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1023\n                    + Op.CALLF[1]\n                    + Op.POP * 1023\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1023,\n                ),\n                Section.Code(\n                    # Stack has 1023 items\n                    Op.JUMPF[2],\n                    code_inputs=0,\n                    code_outputs=0,\n                    max_stack_height=0,\n                ),\n                Section.Code(\n                    Op.PUSH0 + Op.PUSH0 +\n                    # Runtime stack overflow\n                    Op.POP + Op.POP + Op.RETF,\n                    code_inputs=0,\n                    code_outputs=0,\n                    max_stack_height=2,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: 0}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_with_inputs_stack_size_1024_at_push","title":"test_jumpf_with_inputs_stack_size_1024_at_push(eof_state_test)","text":"

    Test stack reaching 1024 items in JUMPF target function with inputs at PUSH0 instruction

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_with_inputs_stack_size_1024_at_push(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack reaching 1024 items in JUMPF target function with inputs at PUSH0 instruction\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1023\n                    + Op.CALLF[1]\n                    + Op.POP * 1023\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1023,\n                ),\n                Section.Code(\n                    # Stack has 1023 items\n                    Op.JUMPF[2],\n                    code_inputs=3,\n                    code_outputs=3,\n                    max_stack_height=3,\n                ),\n                Section.Code(\n                    Op.PUSH0 +\n                    # Stack has 1024 items\n                    Op.POP + Op.RETF,\n                    code_inputs=3,\n                    code_outputs=3,\n                    max_stack_height=4,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_with_inputs_stack_overflow","title":"test_jumpf_with_inputs_stack_overflow(eof_state_test)","text":"

    Test stack overflowing 1024 items in JUMPF target function with inputs

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_with_inputs_stack_overflow(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack overflowing 1024 items in JUMPF target function with inputs\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1023\n                    + Op.CALLF[1]\n                    + Op.POP * 1023\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1023,\n                ),\n                Section.Code(\n                    # Stack has 1023 items\n                    Op.JUMPF[2],\n                    code_inputs=3,\n                    code_outputs=3,\n                    max_stack_height=3,\n                ),\n                Section.Code(\n                    Op.PUSH0 + Op.PUSH0 +\n                    # Runtime stackoverflow\n                    Op.POP + Op.POP + Op.RETF,\n                    code_inputs=3,\n                    code_outputs=3,\n                    max_stack_height=5,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: 0}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/index/test_cases/","title":"Test Jumpf Execution - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py:

    test_jumpf_forward[fork_CancunEIP7692-eof_test]\ntest_jumpf_forward[fork_CancunEIP7692-state_test]\ntest_jumpf_forward[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_forward[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_backward[fork_CancunEIP7692-eof_test]\ntest_jumpf_backward[fork_CancunEIP7692-state_test]\ntest_jumpf_backward[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_backward[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_to_self[fork_CancunEIP7692-eof_test]\ntest_jumpf_to_self[fork_CancunEIP7692-state_test]\ntest_jumpf_to_self[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_to_self[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_too_large[fork_CancunEIP7692-eof_test]\ntest_jumpf_too_large[fork_CancunEIP7692-state_test]\ntest_jumpf_too_large[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_too_large[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_way_too_large[fork_CancunEIP7692-eof_test]\ntest_jumpf_way_too_large[fork_CancunEIP7692-state_test]\ntest_jumpf_way_too_large[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_way_too_large[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_to_nonexistent_section[fork_CancunEIP7692-eof_test]\ntest_jumpf_to_nonexistent_section[fork_CancunEIP7692-state_test]\ntest_jumpf_to_nonexistent_section[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_to_nonexistent_section[fork_CancunEIP7692-blockchain_test_engine]\ntest_callf_to_non_returning_section[fork_CancunEIP7692-eof_test]\ntest_callf_to_non_returning_section[fork_CancunEIP7692-state_test]\ntest_callf_to_non_returning_section[fork_CancunEIP7692-blockchain_test]\ntest_callf_to_non_returning_section[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_stack_size_1024[fork_CancunEIP7692-eof_test]\ntest_jumpf_stack_size_1024[fork_CancunEIP7692-state_test]\ntest_jumpf_stack_size_1024[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_stack_size_1024[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_with_inputs_stack_size_1024[fork_CancunEIP7692-eof_test]\ntest_jumpf_with_inputs_stack_size_1024[fork_CancunEIP7692-state_test]\ntest_jumpf_with_inputs_stack_size_1024[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_with_inputs_stack_size_1024[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_stack_size_1024_at_push[fork_CancunEIP7692-eof_test]\ntest_jumpf_stack_size_1024_at_push[fork_CancunEIP7692-state_test]\ntest_jumpf_stack_size_1024_at_push[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_stack_size_1024_at_push[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_stack_overflow[fork_CancunEIP7692-eof_test]\ntest_jumpf_stack_overflow[fork_CancunEIP7692-state_test]\ntest_jumpf_stack_overflow[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_stack_overflow[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_with_inputs_stack_size_1024_at_push[fork_CancunEIP7692-eof_test]\ntest_jumpf_with_inputs_stack_size_1024_at_push[fork_CancunEIP7692-state_test]\ntest_jumpf_with_inputs_stack_size_1024_at_push[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_with_inputs_stack_size_1024_at_push[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_with_inputs_stack_overflow[fork_CancunEIP7692-eof_test]\ntest_jumpf_with_inputs_stack_overflow[fork_CancunEIP7692-state_test]\ntest_jumpf_with_inputs_stack_overflow[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_with_inputs_stack_overflow[fork_CancunEIP7692-blockchain_test_engine]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack/","title":"Test Jumpf Stack","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF JUMPF tests covering stack validation rules.

    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_stack.test_jumpf_stack_non_returning_rules","title":"test_jumpf_stack_non_returning_rules(eof_state_test, target_inputs, stack_height)","text":"

    Tests for JUMPF validation stack rules. Non-returning section cases. Valid cases are executed.

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py
    @pytest.mark.parametrize(\n    \"target_inputs\",\n    [0, 2, 4],\n    ids=lambda x: \"ti-%d\" % x,\n)\n@pytest.mark.parametrize(\n    \"stack_height\",\n    [0, 2, 4],\n    ids=lambda x: \"h-%d\" % x,\n)\ndef test_jumpf_stack_non_returning_rules(\n    eof_state_test: EOFStateTestFiller,\n    target_inputs: int,\n    stack_height: int,\n):\n    \"\"\"\n    Tests for JUMPF validation stack rules.  Non-returning section cases.\n    Valid cases are executed.\n    \"\"\"\n    container = Container(\n        name=\"stack-non-retuning_h-%d_ti-%d\" % (stack_height, target_inputs),\n        sections=[\n            Section.Code(\n                code=Op.JUMPF[1],\n            ),\n            Section.Code(\n                code=Op.PUSH0 * stack_height + Op.JUMPF[2],\n                max_stack_height=stack_height,\n            ),\n            Section.Code(\n                code=Op.POP * target_inputs\n                + Op.SSTORE(slot_code_worked, value_code_worked)\n                + Op.STOP,\n                code_inputs=target_inputs,\n                max_stack_height=max(2, target_inputs),\n            ),\n        ],\n    )\n\n    if stack_height < target_inputs:\n        container.validity_error = EOFException.STACK_UNDERFLOW\n\n    eof_state_test(\n        data=container,\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n        tx_data=b\"\\1\",\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_stack.test_jumpf_stack_returning_rules","title":"test_jumpf_stack_returning_rules(eof_state_test, source_outputs, target_outputs, target_inputs, stack_diff)","text":"

    Tests for JUMPF validation stack rules. Returning section cases. Valid cases are executed.

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py
    @pytest.mark.parametrize(\n    \"source_outputs\",\n    [0, 2, 4],\n    ids=lambda x: \"so-%d\" % x,\n)\n@pytest.mark.parametrize(\n    \"target_outputs\",\n    [0, 2, 4],\n    ids=lambda x: \"to-%d\" % x,\n)\n@pytest.mark.parametrize(\n    \"target_inputs\",\n    [0, 2, 4],\n    ids=lambda x: \"to-%d\" % x,\n)\n@pytest.mark.parametrize(\"stack_diff\", [-1, 0, 1], ids=[\"less-stack\", \"same-stack\", \"more-stack\"])\ndef test_jumpf_stack_returning_rules(\n    eof_state_test: EOFStateTestFiller,\n    source_outputs: int,\n    target_outputs: int,\n    target_inputs: int,\n    stack_diff: int,\n):\n    \"\"\"\n    Tests for JUMPF validation stack rules.  Returning section cases.\n    Valid cases are executed.\n    \"\"\"\n    if target_outputs > source_outputs:\n        # These create invalid containers without JUMPF validation, Don't test.\n        return\n    if target_inputs == 0 and stack_diff < 0:\n        # Code generation is impossible for this configuration.  Don't test.\n        return\n\n    target_delta = target_outputs - target_inputs\n    container = Container(\n        name=\"stack-retuning_co-%d_to-%d_ti-%d_diff-%d\"\n        % (source_outputs, target_outputs, target_inputs, stack_diff),\n        sections=[\n            Section.Code(\n                code=Op.CALLF[1] + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP,\n                max_stack_height=2 + source_outputs,\n            ),\n            Section.Code(\n                code=Op.PUSH0 * max(0, target_inputs + stack_diff) + Op.JUMPF[2],\n                code_outputs=source_outputs,\n                max_stack_height=target_inputs,\n            ),\n            Section.Code(\n                code=(Op.POP * -target_delta if target_delta < 0 else Op.PUSH0 * target_delta)\n                + Op.RETF,\n                code_inputs=target_inputs,\n                code_outputs=target_outputs,\n                max_stack_height=max(target_inputs, target_outputs),\n            ),\n        ],\n    )\n\n    if stack_diff < source_outputs - target_outputs:\n        container.validity_error = EOFException.STACK_UNDERFLOW\n    elif stack_diff > source_outputs - target_outputs:\n        container.validity_error = EOFException.STACK_HIGHER_THAN_OUTPUTS\n\n    eof_state_test(\n        data=container,\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n        tx_data=b\"\\1\",\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack/index/test_cases/","title":"Test Jumpf Stack - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py:

    test_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-0-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-0-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-0-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-2-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-2-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-2-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-4-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-4-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-4-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-state_test-h-0-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-state_test-h-0-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-state_test-h-0-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-state_test-h-2-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-state_test-h-2-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-state_test-h-2-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-state_test-h-4-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-state_test-h-4-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-state_test-h-4-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test-h-0-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test-h-0-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test-h-0-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test-h-2-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test-h-2-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test-h-2-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test-h-4-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test-h-4-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test-h-4-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test_engine-h-0-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test_engine-h-0-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test_engine-h-0-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test_engine-h-2-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test_engine-h-2-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test_engine-h-2-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test_engine-h-4-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test_engine-h-4-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test_engine-h-4-ti-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-4-to-4-so-4]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target/","title":"Test Jumpf Target","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF JUMPF tests covering JUMPF target rules.

    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_target.test_jumpf_target_rules","title":"test_jumpf_target_rules(eof_state_test, source_outputs, target_outputs)","text":"

    Validate the target section rules of JUMPF, and execute valid cases. We are not testing stack so a lot of the logic is to get correct stack values.

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py
    @pytest.mark.parametrize(\n    \"target_outputs\",\n    [NON_RETURNING_SECTION, 0, 2, 4, 127],\n    ids=lambda x: \"to-%s\" % (\"N\" if x == NON_RETURNING_SECTION else x),\n)\n@pytest.mark.parametrize(\n    \"source_outputs\",\n    [NON_RETURNING_SECTION, 0, 2, 4, 127],\n    ids=lambda x: \"so-%s\" % (\"N\" if x == NON_RETURNING_SECTION else x),\n)\ndef test_jumpf_target_rules(\n    eof_state_test: EOFStateTestFiller,\n    source_outputs: int,\n    target_outputs: int,\n):\n    \"\"\"\n    Validate the target section rules of JUMPF, and execute valid cases.\n    We are not testing stack so a lot of the logic is to get correct stack values.\n    \"\"\"\n    source_non_returning = source_outputs == NON_RETURNING_SECTION\n    source_height = 0 if source_non_returning else source_outputs\n    source_section_index = 1\n\n    target_non_returning = target_outputs == NON_RETURNING_SECTION\n    target_height = 0 if target_non_returning else target_outputs\n    target_section_index = 2\n\n    # Because we are testing the target and not the stack height validation we need to do some work\n    # to make sure the stack passes validation.\n\n    # `source_extra_push` is how many more pushes we need to match our stack commitments\n    source_extra_push = max(0, source_height - target_height)\n    source_section = Section.Code(\n        code=Op.PUSH0 * (source_height)\n        + Op.CALLDATALOAD(0)\n        + Op.RJUMPI[1]\n        + (Op.STOP if source_non_returning else Op.RETF)\n        + Op.PUSH0 * source_extra_push\n        + Op.JUMPF[target_section_index],\n        code_inputs=0,\n        code_outputs=source_outputs,\n        max_stack_height=source_height + max(1, source_extra_push),\n    )\n\n    # `delta` is how many stack items the target output is from the input height, and tracks the\n    # number of pushes or (if negative) pops the target needs to do to match output commitments\n    delta = 0 if target_non_returning or source_non_returning else target_outputs - source_height\n    target_section = Section.Code(\n        code=((Op.PUSH0 * delta) if delta >= 0 else (Op.POP * -delta))\n        + Op.CALLF[3]\n        + (Op.STOP if target_non_returning else Op.RETF),\n        code_inputs=source_height,\n        code_outputs=target_outputs,\n        max_stack_height=max(source_height, source_height + delta),\n    )\n\n    base_code = (\n        Op.JUMPF[source_section_index]\n        if source_non_returning\n        else (Op.CALLF[source_section_index](0, 0) + Op.STOP)\n    )\n    base_height = 0 if source_non_returning else 2 + source_outputs\n    container = Container(\n        name=\"so-%s_to-%s\"\n        % (\n            \"N\" if source_non_returning else source_outputs,\n            \"N\" if target_non_returning else target_outputs,\n        ),\n        sections=[\n            Section.Code(\n                code=base_code,\n                max_stack_height=base_height,\n            ),\n            source_section,\n            target_section,\n            Section.Code(\n                code=Op.SSTORE(slot_code_worked, value_code_worked) + Op.RETF,\n                code_outputs=0,\n            ),\n        ],\n    )\n    if target_non_returning or source_non_returning:\n        if not target_non_returning and source_non_returning:\n            # both as non-returning handled above\n            container.validity_error = EOFException.INVALID_NON_RETURNING_FLAG\n    elif source_outputs < target_outputs:\n        container.validity_error = EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS\n\n    eof_state_test(\n        data=container,\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n        tx_data=b\"\\1\",\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_target.test_jumpf_multi_target_rules","title":"test_jumpf_multi_target_rules(eof_state_test)","text":"

    NOT IMPLEMENTED: Test a section that contains multiple JUMPF to different targets with different outputs.

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py
    @pytest.mark.skip(\"Not implemented\")\ndef test_jumpf_multi_target_rules(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"\n    NOT IMPLEMENTED:\n    Test a section that contains multiple JUMPF to different targets with different outputs.\n    \"\"\"\n    pass\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target/index/test_cases/","title":"Test Jumpf Target - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py:

    test_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-N-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-N-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-N-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-N-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-N-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-0-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-0-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-0-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-0-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-0-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-2-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-2-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-2-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-2-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-2-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-4-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-4-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-4-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-4-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-4-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-127-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-127-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-127-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-127-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-127-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-N-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-N-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-N-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-N-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-N-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-0-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-0-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-0-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-0-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-0-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-2-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-2-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-2-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-2-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-2-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-4-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-4-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-4-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-4-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-4-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-127-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-127-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-127-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-127-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-127-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-N-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-N-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-N-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-N-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-N-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-0-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-0-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-0-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-0-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-0-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-2-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-2-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-2-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-2-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-2-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-4-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-4-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-4-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-4-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-4-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-127-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-127-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-127-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-127-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-127-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-N-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-N-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-N-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-N-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-N-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-0-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-0-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-0-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-0-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-0-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-2-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-2-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-2-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-2-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-2-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-4-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-4-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-4-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-4-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-4-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-127-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-127-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-127-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-127-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-127-to-127]\ntest_jumpf_multi_target_rules[fork_CancunEIP7692-eof_test]\ntest_jumpf_multi_target_rules[fork_CancunEIP7692-state_test]\ntest_jumpf_multi_target_rules[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_multi_target_rules[fork_CancunEIP7692-blockchain_test_engine]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/","title":"EIP-663 DUPn Swapn Exchange","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-663: SWAPN, DUPN and EXCHANGE instructions

    Tests for EIP-663: SWAPN, DUPN and EXCHANGE instructions.

    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn/","title":"Test DUPn","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-663: SWAPN, DUPN and EXCHANGE instructions

    Tests for the DUPN instruction.

    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn/#tests.prague.eip7692_eof_v1.eip663_dupn_swapn_exchange.test_dupn.test_dupn_all_valid_immediates","title":"test_dupn_all_valid_immediates(eof_state_test)","text":"

    Test case for all valid DUPN immediates.

    Source code in tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py
    @pytest.mark.valid_from(EOF_FORK_NAME)\ndef test_dupn_all_valid_immediates(eof_state_test: EOFStateTestFiller):\n    \"\"\"\n    Test case for all valid DUPN immediates.\n    \"\"\"\n    n = 2**8\n    values = range(0xD00, 0xD00 + n)\n\n    eof_code = Container(\n        sections=[\n            Section.Code(\n                code=sum(Op.PUSH2[v] for v in values)\n                + sum(Op.SSTORE(x, Op.DUPN[x]) for x in range(0, n))\n                + Op.STOP,\n            )\n        ],\n    )\n\n    post = Account(storage=dict(zip(range(0, n), reversed(values))))\n\n    eof_state_test(\n        tx_sender_funding_amount=1_000_000_000,\n        data=eof_code,\n        container_post=post,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn/#tests.prague.eip7692_eof_v1.eip663_dupn_swapn_exchange.test_dupn.test_dupn_stack_underflow","title":"test_dupn_stack_underflow(stack_height, max_stack_height, eof_test)","text":"

    Test case out of bounds DUPN immediate.

    Source code in tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py
    @pytest.mark.parametrize(\n    \"stack_height,max_stack_height\",\n    [\n        [0, 0],\n        [0, 1],\n        [1, 1],\n        [1, 2],\n        [2**8 - 1, 2**8 - 1],\n        [2**8 - 1, 2**8],\n    ],\n)\n@pytest.mark.valid_from(EOF_FORK_NAME)\ndef test_dupn_stack_underflow(\n    stack_height: int,\n    max_stack_height: int,\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    Test case out of bounds DUPN immediate.\n    \"\"\"\n    eof_code = Container(\n        sections=[\n            Section.Code(\n                code=sum(Op.PUSH2[v] for v in range(0, stack_height))\n                + Op.DUPN[stack_height]\n                + Op.STOP,\n                max_stack_height=max_stack_height,\n            )\n        ],\n    )\n    eof_test(\n        data=eof_code,\n        expect_exception=EOFException.STACK_UNDERFLOW,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn/#tests.prague.eip7692_eof_v1.eip663_dupn_swapn_exchange.test_dupn.test_dupn_stack_overflow","title":"test_dupn_stack_overflow(dupn_operand, max_stack_height, expect_exception, eof_test)","text":"

    Test case where DUPN produces an stack overflow.

    Source code in tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py
    @pytest.mark.parametrize(\n    \"dupn_operand,max_stack_height,expect_exception\",\n    [\n        [0, MAX_OPERAND_STACK_HEIGHT, EOFException.INVALID_MAX_STACK_HEIGHT],\n        [0, MAX_OPERAND_STACK_HEIGHT + 1, EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT],\n        [2**8 - 1, MAX_OPERAND_STACK_HEIGHT, EOFException.INVALID_MAX_STACK_HEIGHT],\n        [2**8 - 1, MAX_OPERAND_STACK_HEIGHT + 1, EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT],\n    ],\n)\n@pytest.mark.valid_from(EOF_FORK_NAME)\ndef test_dupn_stack_overflow(\n    dupn_operand: int,\n    max_stack_height: int,\n    expect_exception: EOFException,\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    Test case where DUPN produces an stack overflow.\n    \"\"\"\n    eof_code = Container(\n        sections=[\n            Section.Code(\n                code=sum(Op.PUSH2[v] for v in range(0, MAX_OPERAND_STACK_HEIGHT))\n                + Op.DUPN[dupn_operand]\n                + Op.STOP,\n                max_stack_height=max_stack_height,\n            )\n        ],\n    )\n    eof_test(\n        data=eof_code,\n        expect_exception=expect_exception,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn/index/test_cases/","title":"Test DUPn - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py:

    test_dupn_all_valid_immediates[fork_CancunEIP7692-eof_test]\ntest_dupn_all_valid_immediates[fork_CancunEIP7692-state_test]\ntest_dupn_all_valid_immediates[fork_CancunEIP7692-blockchain_test]\ntest_dupn_all_valid_immediates[fork_CancunEIP7692-blockchain_test_engine]\ntest_dupn_stack_underflow[fork_CancunEIP7692-eof_test-stack_height_0-max_stack_height_0]\ntest_dupn_stack_underflow[fork_CancunEIP7692-eof_test-stack_height_0-max_stack_height_1]\ntest_dupn_stack_underflow[fork_CancunEIP7692-eof_test-stack_height_1-max_stack_height_1]\ntest_dupn_stack_underflow[fork_CancunEIP7692-eof_test-stack_height_1-max_stack_height_2]\ntest_dupn_stack_underflow[fork_CancunEIP7692-eof_test-stack_height_255-max_stack_height_255]\ntest_dupn_stack_underflow[fork_CancunEIP7692-eof_test-stack_height_255-max_stack_height_256]\ntest_dupn_stack_overflow[fork_CancunEIP7692-eof_test-dupn_operand_0-max_stack_height_1023-expect_exception_EOFException.INVALID_MAX_STACK_HEIGHT]\ntest_dupn_stack_overflow[fork_CancunEIP7692-eof_test-dupn_operand_0-max_stack_height_1024-expect_exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT]\ntest_dupn_stack_overflow[fork_CancunEIP7692-eof_test-dupn_operand_255-max_stack_height_1023-expect_exception_EOFException.INVALID_MAX_STACK_HEIGHT]\ntest_dupn_stack_overflow[fork_CancunEIP7692-eof_test-dupn_operand_255-max_stack_height_1024-expect_exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange/","title":"Test Exchange","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-663: SWAPN, DUPN and EXCHANGE instructions

    Tests for the EXCHANGE instruction.

    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange/#tests.prague.eip7692_eof_v1.eip663_dupn_swapn_exchange.test_exchange.test_exchange_all_valid_immediates","title":"test_exchange_all_valid_immediates(eof_state_test)","text":"

    Test case for all valid EXCHANGE immediates.

    Source code in tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py
    @pytest.mark.valid_from(EOF_FORK_NAME)\ndef test_exchange_all_valid_immediates(eof_state_test: EOFStateTestFiller):\n    \"\"\"\n    Test case for all valid EXCHANGE immediates.\n    \"\"\"\n    n = 256\n    s = 34\n    values = range(0x3E8, 0x3E8 + s)\n\n    eof_code = Container(\n        sections=[\n            Section.Code(\n                code=sum(Op.PUSH2[v] for v in values)\n                + sum(Op.EXCHANGE[x] for x in range(0, n))\n                + sum((Op.PUSH1[x] + Op.SSTORE) for x in range(0, s))\n                + Op.STOP,\n            )\n        ],\n    )\n\n    # this does the same full-loop exchange\n    values_rotated = list(range(0x3E8, 0x3E8 + s))\n    for e in range(0, n):\n        a = (e >> 4) + 1\n        b = (e & 0x0F) + 1 + a\n        temp = values_rotated[a]\n        values_rotated[a] = values_rotated[b]\n        values_rotated[b] = temp\n\n    post = Account(storage=dict(zip(range(0, s), reversed(values_rotated))))\n\n    eof_state_test(\n        tx_sender_funding_amount=1_000_000_000,\n        data=eof_code,\n        container_post=post,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange/#tests.prague.eip7692_eof_v1.eip663_dupn_swapn_exchange.test_exchange.test_exchange_all_invalid_immediates","title":"test_exchange_all_invalid_immediates(eof_test, stack_height, x, y)","text":"

    Test case for all invalid EXCHANGE immediates.

    Source code in tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py
    @pytest.mark.parametrize(\n    \"stack_height,x,y\",\n    [\n        # 2 and 3 are the lowest valid values for x and y, which translates to a\n        # zero immediate value.\n        pytest.param(0, 2, 3, id=\"stack_height=0_n=1_m=1\"),\n        pytest.param(1, 2, 3, id=\"stack_height=1_n=1_m=1\"),\n        pytest.param(2, 2, 3, id=\"stack_height=2_n=1_m=1\"),\n        pytest.param(17, 2, 18, id=\"stack_height=17_n=1_m=16\"),\n        pytest.param(17, 17, 18, id=\"stack_height=17_n=16_m=1\"),\n        pytest.param(32, 17, 33, id=\"stack_height=32_n=16_m=16\"),\n    ],\n)\n@pytest.mark.valid_from(EOF_FORK_NAME)\ndef test_exchange_all_invalid_immediates(\n    eof_test: EOFTestFiller,\n    stack_height: int,\n    x: int,\n    y: int,\n):\n    \"\"\"\n    Test case for all invalid EXCHANGE immediates.\n    \"\"\"\n    eof_code = Container(\n        sections=[\n            Section.Code(\n                code=sum(Op.PUSH2[v] for v in range(stack_height))\n                + Op.EXCHANGE[x, y]\n                + Op.POP * stack_height\n                + Op.STOP,\n                max_stack_height=stack_height,\n            )\n        ],\n    )\n\n    eof_test(\n        data=eof_code,\n        expect_exception=EOFException.STACK_UNDERFLOW,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange/index/test_cases/","title":"Test Exchange - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py:

    test_exchange_all_valid_immediates[fork_CancunEIP7692-eof_test]\ntest_exchange_all_valid_immediates[fork_CancunEIP7692-state_test]\ntest_exchange_all_valid_immediates[fork_CancunEIP7692-blockchain_test]\ntest_exchange_all_valid_immediates[fork_CancunEIP7692-blockchain_test_engine]\ntest_exchange_all_invalid_immediates[fork_CancunEIP7692-eof_test-stack_height=0_n=1_m=1]\ntest_exchange_all_invalid_immediates[fork_CancunEIP7692-eof_test-stack_height=1_n=1_m=1]\ntest_exchange_all_invalid_immediates[fork_CancunEIP7692-eof_test-stack_height=2_n=1_m=1]\ntest_exchange_all_invalid_immediates[fork_CancunEIP7692-eof_test-stack_height=17_n=1_m=16]\ntest_exchange_all_invalid_immediates[fork_CancunEIP7692-eof_test-stack_height=17_n=16_m=1]\ntest_exchange_all_invalid_immediates[fork_CancunEIP7692-eof_test-stack_height=32_n=16_m=16]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn/","title":"Test Swapn","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-663: SWAPN, DUPN and EXCHANGE instructions

    Tests for the SWAPN instruction.

    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn/#tests.prague.eip7692_eof_v1.eip663_dupn_swapn_exchange.test_swapn.test_swapn_all_valid_immediates","title":"test_swapn_all_valid_immediates(eof_state_test)","text":"

    Test case for all valid SWAPN immediates.

    Source code in tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py
    @pytest.mark.valid_from(EOF_FORK_NAME)\ndef test_swapn_all_valid_immediates(eof_state_test: EOFStateTestFiller):\n    \"\"\"\n    Test case for all valid SWAPN immediates.\n    \"\"\"\n    n = 256\n    values = range(0x500, 0x500 + 257)\n\n    eof_code = Container(\n        sections=[\n            Section.Code(\n                code=sum(Op.PUSH2[v] for v in values)\n                + sum(Op.SSTORE(x, Op.SWAPN[0xFF - x]) for x in range(0, n))\n                + Op.STOP,\n            )\n        ],\n    )\n\n    values_rotated = list(values[1:]) + [values[0]]\n    post = Account(storage=dict(zip(range(0, n), reversed(values_rotated))))\n\n    eof_state_test(\n        tx_sender_funding_amount=1_000_000_000,\n        data=eof_code,\n        container_post=post,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn/#tests.prague.eip7692_eof_v1.eip663_dupn_swapn_exchange.test_swapn.test_swapn_on_max_stack","title":"test_swapn_on_max_stack(swapn_operand, eof_test)","text":"

    Test case out of bounds DUPN immediate.

    Source code in tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py
    @pytest.mark.parametrize(\n    \"swapn_operand\",\n    [\n        0,\n        2**8 - 1,\n    ],\n)\n@pytest.mark.valid_from(EOF_FORK_NAME)\ndef test_swapn_on_max_stack(\n    swapn_operand: int,\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    Test case out of bounds DUPN immediate.\n    \"\"\"\n    eof_code = Container(\n        sections=[\n            Section.Code(\n                code=sum(Op.PUSH2[v] for v in range(0, MAX_OPERAND_STACK_HEIGHT))\n                + Op.SWAPN[swapn_operand]\n                + Op.STOP,\n            )\n        ],\n    )\n    eof_test(\n        data=eof_code,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn/#tests.prague.eip7692_eof_v1.eip663_dupn_swapn_exchange.test_swapn.test_swapn_stack_underflow","title":"test_swapn_stack_underflow(stack_height, eof_test)","text":"

    Test case out of bounds DUPN immediate.

    Source code in tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py
    @pytest.mark.parametrize(\n    \"stack_height\",\n    [\n        0,\n        1,\n        21,\n        2**8 - 1,\n    ],\n)\n@pytest.mark.valid_from(EOF_FORK_NAME)\ndef test_swapn_stack_underflow(\n    stack_height: int,\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    Test case out of bounds DUPN immediate.\n    \"\"\"\n    eof_code = Container(\n        sections=[\n            Section.Code(\n                code=sum(Op.PUSH2[v] for v in range(0, stack_height))\n                + Op.SWAPN[stack_height]\n                + Op.STOP,\n                max_stack_height=stack_height,\n            )\n        ],\n    )\n    eof_test(\n        data=eof_code,\n        expect_exception=EOFException.STACK_UNDERFLOW,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn/index/test_cases/","title":"Test Swapn - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py:

    test_swapn_all_valid_immediates[fork_CancunEIP7692-eof_test]\ntest_swapn_all_valid_immediates[fork_CancunEIP7692-state_test]\ntest_swapn_all_valid_immediates[fork_CancunEIP7692-blockchain_test]\ntest_swapn_all_valid_immediates[fork_CancunEIP7692-blockchain_test_engine]\ntest_swapn_on_max_stack[fork_CancunEIP7692-eof_test-swapn_operand_0]\ntest_swapn_on_max_stack[fork_CancunEIP7692-eof_test-swapn_operand_255]\ntest_swapn_stack_underflow[fork_CancunEIP7692-eof_test-stack_height_0]\ntest_swapn_stack_underflow[fork_CancunEIP7692-eof_test-stack_height_1]\ntest_swapn_stack_underflow[fork_CancunEIP7692-eof_test-stack_height_21]\ntest_swapn_stack_underflow[fork_CancunEIP7692-eof_test-stack_height_255]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/","title":"EIP-7069 Extcall","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Revamped Call Instructions Tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/spec.py.

    EOF V1 Constants used throughout all tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension/","title":"Test Address Space Extension","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests the \"Address Space Extension\" aspect of EXT*CALL

    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_address_space_extension.test_address_space_extension","title":"test_address_space_extension(state_test, pre, target_address, target_opcode, target_account_type)","text":"

    Test contacts with possibly extended address and fail if address is too large

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py
    @pytest.mark.parametrize(\n    \"target_address\",\n    (\n        pytest.param(b\"\", id=\"zero\"),\n        pytest.param(b\"\\xc0\\xde\", id=\"short\"),\n        pytest.param(b\"\\x78\" * 20, id=\"mid_20\"),\n        pytest.param(b\"\\xff\" * 20, id=\"max_20\"),\n        pytest.param(b\"\\x01\" + (b\"\\x00\" * 20), id=\"min_ase\"),\n        pytest.param(b\"\\x5a\" * 28, id=\"mid_ase\"),\n        pytest.param(b\"\\x5a\" * 32, id=\"full_ase\"),\n        pytest.param(b\"\\xff\" * 32, id=\"max_ase\"),\n    ),\n)\n@pytest.mark.parametrize(\n    \"target_account_type\",\n    (\n        \"empty\",\n        \"EOA\",\n        \"LegacyContract\",  # Hard-codes an address in pre-alloc\n        \"EOFContract\",  # Hard-codes an address in pre-alloc\n    ),\n    ids=lambda x: x,\n)\n@pytest.mark.parametrize(\n    \"target_opcode\",\n    (\n        Op.CALL,\n        Op.CALLCODE,\n        Op.STATICCALL,\n        Op.DELEGATECALL,\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ),\n)\ndef test_address_space_extension(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    target_address: bytes,\n    target_opcode: Op,\n    target_account_type: str,\n):\n    \"\"\"\n    Test contacts with possibly extended address and fail if address is too large\n    \"\"\"\n    env = Environment()\n\n    ase_address = len(target_address) > 20\n    stripped_address = target_address[-20:] if ase_address else target_address\n    if ase_address and target_address[0] == b\"00\":\n        raise ValueError(\"Test instrumentation requires target addresses trim leading zeros\")\n\n    ase_ready_opcode = (\n        False if target_opcode in [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL] else True\n    )\n\n    sender = pre.fund_eoa()\n\n    address_caller = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(\n                        slot_target_call_status,\n                        target_opcode(address=Op.CALLDATALOAD(0)),\n                    )\n                    + Op.RETURNDATACOPY(0, 0, Op.RETURNDATASIZE)\n                    + Op.SSTORE(slot_target_returndata, Op.MLOAD(0))\n                    + Op.STOP,\n                    code_inputs=0,\n                )\n            ],\n        )\n        if ase_ready_opcode\n        else Op.SSTORE(\n            slot_target_call_status,\n            target_opcode(address=Op.CALLDATALOAD(0)),\n        )\n        + Op.RETURNDATACOPY(0, 0, Op.RETURNDATASIZE)\n        + Op.SSTORE(slot_target_returndata, Op.MLOAD(0))\n        + Op.STOP,\n        storage={\n            slot_target_call_status: value_exceptional_abort_canary,\n            slot_target_returndata: value_exceptional_abort_canary,\n        },\n    )\n\n    address_entry_point = pre.deploy_contract(\n        Op.MSTORE(0, Op.PUSH32(target_address))\n        + Op.SSTORE(\n            slot_top_level_call_status,\n            Op.CALL(50000, address_caller, 0, 0, 32, 0, 0),\n        )\n        + Op.STOP(),\n        storage={\n            slot_top_level_call_status: value_exceptional_abort_canary,\n        },\n    )\n\n    match target_account_type:\n        case \"empty\":\n            # add no account\n            pass\n        case \"EOA\":\n            pre.fund_address(Address(stripped_address), 10**18)\n            # TODO: we could use pre.fund_eoa here with nonce!=0.\n        case \"LegacyContract\":\n            pre[Address(stripped_address)] = Account(\n                code=Op.MSTORE(0, Op.ADDRESS) + Op.RETURN(0, 32),\n                balance=0,\n                nonce=0,\n            )\n        case \"EOFContract\":\n            pre[Address(stripped_address)] = Account(\n                code=Container(\n                    sections=[\n                        Section.Code(\n                            code=Op.MSTORE(0, Op.ADDRESS) + Op.RETURN(0, 32),\n                        )\n                    ],\n                ),\n                balance=0,\n                nonce=0,\n            )\n\n    caller_storage: dict[int, int | bytes | Address] = {}\n    match target_account_type:\n        case \"empty\" | \"EOA\":\n            if ase_address and ase_ready_opcode:\n                caller_storage[slot_target_call_status] = value_exceptional_abort_canary\n                caller_storage[slot_target_returndata] = value_exceptional_abort_canary\n            elif target_opcode == Op.EXTDELEGATECALL:\n                caller_storage[slot_target_call_status] = EXTCALL_REVERT\n                caller_storage[slot_target_returndata] = 0\n            else:\n                caller_storage[slot_target_call_status] = (\n                    EXTCALL_SUCCESS if ase_ready_opcode else CALL_SUCCESS\n                )\n        case \"LegacyContract\" | \"EOFContract\":\n            match target_opcode:\n                case Op.CALL | Op.STATICCALL:\n                    caller_storage[slot_target_call_status] = CALL_SUCCESS\n                    # CALL and STATICCALL call will call the stripped address\n                    caller_storage[slot_target_returndata] = stripped_address\n                case Op.CALLCODE | Op.DELEGATECALL:\n                    caller_storage[slot_target_call_status] = CALL_SUCCESS\n                    # CALLCODE and DELEGATECALL call will call the stripped address\n                    # but will change the sender to self\n                    caller_storage[slot_target_returndata] = address_caller\n                case Op.EXTCALL | Op.EXTSTATICCALL:\n                    # EXTCALL and EXTSTATICCALL will fault if calling an ASE address\n                    if ase_address:\n                        caller_storage[slot_target_call_status] = value_exceptional_abort_canary\n                        caller_storage[slot_target_returndata] = value_exceptional_abort_canary\n                    else:\n                        caller_storage[slot_target_call_status] = EXTCALL_SUCCESS\n                        caller_storage[slot_target_returndata] = stripped_address\n                case Op.EXTDELEGATECALL:\n                    if ase_address:\n                        caller_storage[slot_target_call_status] = value_exceptional_abort_canary\n                        caller_storage[slot_target_returndata] = value_exceptional_abort_canary\n                    elif target_account_type == \"LegacyContract\":\n                        caller_storage[slot_target_call_status] = EXTCALL_REVERT\n                        caller_storage[slot_target_returndata] = 0\n                    else:\n                        caller_storage[slot_target_call_status] = EXTCALL_SUCCESS\n                        # EXTDELEGATECALL call will call the stripped address\n                        # but will change the sender to self\n                        caller_storage[slot_target_returndata] = address_caller\n\n    post = {\n        address_entry_point: Account(\n            storage={\n                slot_top_level_call_status: EXTCALL_SUCCESS\n                if ase_ready_opcode and ase_address\n                else CALL_SUCCESS\n            }\n        ),\n        address_caller: Account(storage=caller_storage),\n    }\n\n    tx = Transaction(\n        sender=sender,\n        to=address_entry_point,\n        gas_limit=50_000_000,\n        data=\"\",\n    )\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension/index/test_cases/","title":"Test Address Space Extension - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py:

    test_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOFContract-max_ase]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/","title":"Test Calldata","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-7069: Revamped CALL instructions

    Tests for the RETURNDATALOAD instriction

    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calldata.test_extcalls_inputdata","title":"test_extcalls_inputdata(state_test, pre, value, memory, offset, length)","text":"

    Tests call data into EXT*CALL including multiple offset conditions.

    Caller pushes data into memory, then calls the target. Target writes 64 bytes of call data to storage and a success byte.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py
    @pytest.mark.parametrize(\"value\", [0, 1])\n@pytest.mark.parametrize(\n    \"memory\",\n    [\n        b\"\",\n        b\"1234567890abcdef\",\n        b\"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=-\",\n        b\"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=-\" * 4,\n    ],\n    ids=lambda x: \"size_%d\" % len(x),\n)\n@pytest.mark.parametrize(\"offset\", [0, 8, 24, 80])\n@pytest.mark.parametrize(\"length\", [0, 8, 32, 48])\ndef test_extcalls_inputdata(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    value: int,\n    memory: bytes,\n    offset: int,\n    length: int,\n):\n    \"\"\"\n    Tests call data into EXT*CALL including multiple offset conditions.\n\n    Caller pushes data into memory, then calls the target.  Target writes 64 bytes of call data\n    to storage and a success byte.\n    \"\"\"\n    env = Environment()\n\n    sender = pre.fund_eoa()\n\n    address_returner = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_calldata_1, Op.CALLDATALOAD(0))\n                    + Op.SSTORE(slot_calldata_2, Op.CALLDATALOAD(32))\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                ),\n            ]\n        ),\n    )\n    address_caller = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.DATACOPY(0, 0, len(memory))\n                    + Op.SSTORE(\n                        slot_call_status,\n                        Op.EXTCALL(address_returner, offset, length, value),\n                    )\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                ),\n                Section.Data(data=memory),\n            ]\n        ),\n        storage={slot_call_status: value_exceptional_abort_canary},\n        balance=10**9,\n    )\n\n    calldata = memory[offset : offset + length]\n    post = {\n        address_returner: Account(\n            storage={\n                slot_code_worked: value_code_worked,\n                slot_calldata_1: right_pad_32(calldata[0:32]),\n                slot_calldata_2: right_pad_32(calldata[32:64]),\n            }\n        ),\n        address_caller: Account(\n            storage={\n                slot_code_worked: value_code_worked,\n                slot_call_status: EXTCALL_SUCCESS,\n            }\n        ),\n    }\n\n    tx = Transaction(to=address_caller, gas_limit=2_000_000, sender=sender)\n\n    state_test(\n        env=env,\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calldata.test_extdelegatecall_inputdata","title":"test_extdelegatecall_inputdata(state_test, pre, memory, offset, length)","text":"

    Tests call data into EXT*CALL including multiple offset conditions.

    Caller pushes data into memory, then calls the target. Target writes 64 bytes of call data to storage and a success byte.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py
    @pytest.mark.parametrize(\n    \"memory\",\n    [\n        b\"\",\n        b\"1234567890abcdef\",\n        b\"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=-\",\n        b\"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=-\" * 4,\n    ],\n    ids=lambda x: \"size_%d\" % len(x),\n)\n@pytest.mark.parametrize(\"offset\", [0, 8, 24, 80])\n@pytest.mark.parametrize(\"length\", [0, 8, 32, 48])\ndef test_extdelegatecall_inputdata(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    memory: bytes,\n    offset: int,\n    length: int,\n):\n    \"\"\"\n    Tests call data into EXT*CALL including multiple offset conditions.\n\n    Caller pushes data into memory, then calls the target.  Target writes 64 bytes of call data\n    to storage and a success byte.\n    \"\"\"\n    env = Environment()\n\n    sender = pre.fund_eoa()\n\n    address_returner = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_calldata_1, Op.CALLDATALOAD(0))\n                    + Op.SSTORE(slot_calldata_2, Op.CALLDATALOAD(32))\n                    + Op.SSTORE(slot_delegate_code_worked, value_code_worked)\n                    + Op.STOP\n                ),\n            ]\n        ),\n    )\n    address_caller = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.DATACOPY(0, 0, len(memory))\n                    + Op.SSTORE(\n                        slot_call_status,\n                        Op.EXTDELEGATECALL(address_returner, offset, length),\n                    )\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                ),\n                Section.Data(data=memory),\n            ]\n        ),\n        storage={slot_call_status: value_exceptional_abort_canary},\n        balance=10**9,\n    )\n\n    calldata = memory[offset : offset + length]\n    post = {\n        address_returner: Account(storage={}),\n        address_caller: Account(\n            storage={\n                slot_code_worked: value_code_worked,\n                slot_delegate_code_worked: value_code_worked,\n                slot_call_status: EXTCALL_SUCCESS,\n                slot_calldata_1: right_pad_32(calldata[0:32]),\n                slot_calldata_2: right_pad_32(calldata[32:64]),\n            }\n        ),\n    }\n\n    tx = Transaction(to=address_caller, gas_limit=2_000_000, sender=sender)\n\n    state_test(\n        env=env,\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calldata.test_extstaticcall_inputdata","title":"test_extstaticcall_inputdata(state_test, pre, memory, offset, length)","text":"

    Tests call data into EXT*CALL including multiple offset conditions.

    Caller pushes data into memory, then calls the target. Target writes 64 bytes of call data to storage and a success byte.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py
    @pytest.mark.parametrize(\n    \"memory\",\n    [\n        b\"\",\n        b\"1234567890abcdef\",\n        b\"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=-\",\n        b\"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=-\" * 4,\n    ],\n    ids=lambda x: \"size_%d\" % len(x),\n)\n@pytest.mark.parametrize(\"offset\", [0, 8, 24, 80])\n@pytest.mark.parametrize(\"length\", [0, 8, 32, 48])\ndef test_extstaticcall_inputdata(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    memory: bytes,\n    offset: int,\n    length: int,\n):\n    \"\"\"\n    Tests call data into EXT*CALL including multiple offset conditions.\n\n    Caller pushes data into memory, then calls the target.  Target writes 64 bytes of call data\n    to storage and a success byte.\n    \"\"\"\n    env = Environment()\n\n    sender = pre.fund_eoa()\n\n    address_returner = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.RETURN(0, Op.CALLDATASIZE)\n                ),\n            ]\n        ),\n    )\n    address_caller = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.DATACOPY(0, 0, len(memory))\n                    + Op.SSTORE(\n                        slot_call_status,\n                        Op.EXTSTATICCALL(address_returner, offset, length),\n                    )\n                    + Op.SSTORE(slot_calldata_1, Op.RETURNDATALOAD(0))\n                    + Op.SSTORE(slot_calldata_2, Op.RETURNDATALOAD(32))\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                ),\n                Section.Data(data=memory),\n            ]\n        ),\n        storage={slot_call_status: value_exceptional_abort_canary},\n        balance=10**9,\n    )\n\n    calldata = memory[offset : offset + length]\n    post = {\n        address_returner: Account(storage={}),\n        address_caller: Account(\n            storage={\n                slot_code_worked: value_code_worked,\n                slot_call_status: EXTCALL_SUCCESS,\n                slot_calldata_1: right_pad_32(calldata[0:32]),\n                slot_calldata_2: right_pad_32(calldata[32:64]),\n            }\n        ),\n    }\n\n    tx = Transaction(to=address_caller, gas_limit=2_000_000, sender=sender)\n\n    state_test(\n        env=env,\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calldata.test_calldata_remains_after_subcall","title":"test_calldata_remains_after_subcall(state_test, pre, opcode)","text":"

    Tests call data remains after a call to another contract.

    Caller pushes data into memory, then calls the target. Target calls 3rd contract. 3rd contract returns. Target writes calldata to storage.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.CALL,\n        Op.CALLCODE,\n        Op.DELEGATECALL,\n        Op.STATICCALL,\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ],\n)\ndef test_calldata_remains_after_subcall(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    opcode: Op,\n):\n    \"\"\"\n    Tests call data remains after a call to another contract.\n\n    Caller pushes data into memory, then calls the target.  Target calls 3rd contract. 3rd contract\n    returns. Target writes calldata to storage.\n    \"\"\"\n    env = Environment()\n\n    sender = pre.fund_eoa()\n\n    address_sub_called = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_delegate_code_worked, value_code_worked) + Op.STOP\n                )\n            ]\n        ),\n        storage={slot_delegate_code_worked: value_exceptional_abort_canary},\n    )\n    called_code = (\n        Op.MSTORE(0, value_calldata_2)\n        + Op.SSTORE(slot_call_status, value_exceptional_abort_canary)\n        + Op.SSTORE(slot_calldata_1, value_exceptional_abort_canary)\n        + Op.SSTORE(slot_code_worked, value_exceptional_abort_canary)\n        + Op.SSTORE(\n            slot_call_status,\n            opcode(\n                address=address_sub_called,\n                args_offset=0,\n                args_size=size_calldata,\n            ),\n        )\n        + Op.SSTORE(slot_calldata_1, Op.CALLDATALOAD(0))\n        + Op.SSTORE(slot_code_worked, value_code_worked)\n        + Op.STOP\n    )\n    match opcode:\n        case Op.CALL | Op.CALLCODE | Op.DELEGATECALL | Op.STATICCALL:\n            address_called = pre.deploy_contract(code=called_code)\n        case Op.EXTCALL | Op.EXTDELEGATECALL | Op.EXTSTATICCALL:\n            address_called = pre.deploy_contract(\n                Container(\n                    sections=[\n                        Section.Code(code=called_code),\n                    ]\n                ),\n            )\n    address_caller = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.MSTORE(0, value_calldata_1)\n                    + Op.SSTORE(slot_calldata_1, value_exceptional_abort_canary)\n                    + Op.SSTORE(slot_code_worked, value_exceptional_abort_canary)\n                    + Op.SSTORE(\n                        slot_call_status,\n                        Op.EXTCALL(address_called, 0, size_calldata, 0),\n                    )\n                    + Op.SSTORE(slot_calldata_1, Op.RETURNDATALOAD(0))\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                ),\n            ]\n        ),\n        storage={slot_call_status: value_exceptional_abort_canary},\n        balance=10**9,\n    )\n\n    match opcode:\n        case Op.STATICCALL:\n            called_storage = {\n                slot_code_worked: value_code_worked,\n                slot_call_status: CALL_FAILURE,\n                slot_calldata_1: value_calldata_1,\n            }\n            sub_called_storage = {\n                slot_delegate_code_worked: value_exceptional_abort_canary,\n            }\n        case Op.DELEGATECALL | Op.CALLCODE:\n            called_storage = {\n                slot_code_worked: value_code_worked,\n                slot_delegate_code_worked: value_code_worked,\n                slot_call_status: CALL_SUCCESS,\n                slot_calldata_1: value_calldata_1,\n            }\n            sub_called_storage = {\n                slot_delegate_code_worked: value_exceptional_abort_canary,\n            }\n        case Op.CALL:\n            called_storage = {\n                slot_code_worked: value_code_worked,\n                slot_call_status: CALL_SUCCESS,\n                slot_calldata_1: value_calldata_1,\n            }\n            sub_called_storage = {\n                slot_delegate_code_worked: value_code_worked,\n            }\n        case Op.EXTSTATICCALL:\n            called_storage = {\n                slot_code_worked: value_code_worked,\n                slot_call_status: EXTCALL_FAILED,\n                slot_calldata_1: value_calldata_1,\n            }\n            sub_called_storage = {\n                slot_delegate_code_worked: value_exceptional_abort_canary,\n            }\n        case Op.EXTDELEGATECALL:\n            called_storage = {\n                slot_code_worked: value_code_worked,\n                slot_delegate_code_worked: value_code_worked,\n                slot_call_status: EXTCALL_SUCCESS,\n                slot_calldata_1: value_calldata_1,\n            }\n            sub_called_storage = {\n                slot_delegate_code_worked: value_exceptional_abort_canary,\n            }\n        case Op.EXTCALL:\n            called_storage = {\n                slot_code_worked: value_code_worked,\n                slot_call_status: EXTCALL_SUCCESS,\n                slot_calldata_1: value_calldata_1,\n            }\n            sub_called_storage = {\n                slot_delegate_code_worked: value_code_worked,\n            }\n        case _:\n            raise ValueError(f\"Unexpected opcode: {opcode}\")\n\n    post = {\n        address_caller: Account(storage={slot_code_worked: value_code_worked}),\n        address_called: Account(storage=called_storage),\n        address_sub_called: Account(storage=sub_called_storage),\n    }\n\n    tx = Transaction(to=address_caller, gas_limit=4_000_000, sender=sender)\n\n    state_test(\n        env=env,\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/index/test_cases/","title":"Test Calldata - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py:

    test_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_256-value_1]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_256]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test-opcode_CALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test-opcode_CALLCODE]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test-opcode_DELEGATECALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test-opcode_STATICCALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test-opcode_EXTCALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test-opcode_EXTDELEGATECALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test-opcode_EXTSTATICCALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test_engine-opcode_CALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test_engine-opcode_CALLCODE]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test_engine-opcode_DELEGATECALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test_engine-opcode_STATICCALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTCALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTDELEGATECALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTSTATICCALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-state_test-opcode_CALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-state_test-opcode_CALLCODE]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-state_test-opcode_DELEGATECALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-state_test-opcode_STATICCALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-state_test-opcode_EXTCALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-state_test-opcode_EXTDELEGATECALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-state_test-opcode_EXTSTATICCALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/","title":"Test Calls","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    test calls across EOF and Legacy

    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_legacy_calls_eof_sstore","title":"test_legacy_calls_eof_sstore(state_test, pre, sender, opcode)","text":"

    Test legacy contracts calling EOF contracts that use SSTORE

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.CALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n        Op.STATICCALL,\n    ],\n)\ndef test_legacy_calls_eof_sstore(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n):\n    \"\"\"Test legacy contracts calling EOF contracts that use SSTORE\"\"\"\n    env = Environment()\n    destination_contract_address = pre.deploy_contract(contract_eof_sstore)\n\n    caller_contract = Op.SSTORE(\n        slot_call_result, opcode(address=destination_contract_address)\n    ) + Op.SSTORE(slot_code_worked, value_code_worked)\n\n    calling_contract_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=50000000,\n        data=\"\",\n    )\n\n    calling_storage = Storage(\n        {\n            slot_code_worked: value_code_worked,  # type: ignore\n            slot_call_result: value_legacy_call_worked,  # type: ignore\n        }\n    )\n    destination_storage = Storage()\n\n    if opcode == Op.CALL:\n        destination_storage[slot_caller] = calling_contract_address\n    elif opcode == Op.DELEGATECALL:\n        calling_storage[slot_caller] = sender\n    elif opcode == Op.CALLCODE:\n        calling_storage[slot_caller] = calling_contract_address\n    elif opcode == Op.STATICCALL:\n        calling_storage[slot_call_result] = value_legacy_call_failed\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n        destination_contract_address: Account(storage=destination_storage),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_legacy_calls_eof_mstore","title":"test_legacy_calls_eof_mstore(state_test, pre, sender, opcode)","text":"

    Test legacy contracts calling EOF contracts that only return data

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.CALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n        Op.STATICCALL,\n    ],\n)\ndef test_legacy_calls_eof_mstore(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n):\n    \"\"\"Test legacy contracts calling EOF contracts that only return data\"\"\"\n    env = Environment()\n    destination_contract_code = Container(\n        sections=[\n            Section.Code(\n                code=Op.MSTORE8(0, int.from_bytes(value_returndata_magic, \"big\"))\n                + Op.RETURN(0, len(value_returndata_magic)),\n            )\n        ]\n    )\n    destination_contract_address = pre.deploy_contract(destination_contract_code)\n\n    caller_contract = (\n        Op.SSTORE(slot_call_result, opcode(address=destination_contract_address))\n        + Op.SSTORE(slot_returndatasize, Op.RETURNDATASIZE)\n        + Op.RETURNDATACOPY(31, 0, 1)\n        + Op.SSTORE(slot_returndata, Op.MLOAD(0))\n        + Op.SSTORE(slot_code_worked, value_code_worked)\n    )\n    calling_contract_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=50000000,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_code_worked: value_code_worked,  # type: ignore\n        slot_call_result: value_legacy_call_worked,  # type: ignore\n        slot_returndatasize: len(value_returndata_magic),  # type: ignore\n        slot_returndata: value_returndata_magic,  # type: ignore\n    }\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n        destination_contract_address: Account(storage={}),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_eof_sstore","title":"test_eof_calls_eof_sstore(state_test, pre, sender, opcode)","text":"

    Test EOF contracts calling EOF contracts that use SSTORE

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ],\n)\ndef test_eof_calls_eof_sstore(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n):\n    \"\"\"Test EOF contracts calling EOF contracts that use SSTORE\"\"\"\n    env = Environment()\n    destination_contract_address = pre.deploy_contract(contract_eof_sstore)\n\n    caller_contract = Container(\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_call_result, opcode(address=destination_contract_address))\n                + Op.SSTORE(slot_code_worked, value_code_worked)\n                + Op.STOP,\n            )\n        ]\n    )\n    calling_contract_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=50000000,\n        data=\"\",\n    )\n\n    calling_storage = Storage(\n        {\n            slot_code_worked: value_code_worked,  # type: ignore\n            slot_call_result: value_eof_call_worked,  # type: ignore\n        }\n    )\n    destination_storage = Storage()\n\n    if opcode == Op.EXTCALL:\n        destination_storage[slot_caller] = calling_contract_address\n    elif opcode == Op.EXTDELEGATECALL:\n        calling_storage[slot_caller] = sender\n    elif opcode == Op.EXTSTATICCALL:\n        calling_storage[slot_call_result] = value_eof_call_failed\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n        destination_contract_address: Account(storage=destination_storage),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_eof_mstore","title":"test_eof_calls_eof_mstore(state_test, pre, sender, opcode)","text":"

    Test EOF contracts calling EOF contracts that return data

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ],\n)\ndef test_eof_calls_eof_mstore(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n):\n    \"\"\"Test EOF contracts calling EOF contracts that return data\"\"\"\n    env = Environment()\n    destination_contract_code = Container(\n        sections=[\n            Section.Code(\n                code=Op.MSTORE8(0, int.from_bytes(value_returndata_magic, \"big\"))\n                + Op.RETURN(0, 32),\n            )\n        ]\n    )\n    destination_contract_address = pre.deploy_contract(destination_contract_code)\n\n    caller_contract = Container(\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_call_result, opcode(address=destination_contract_address))\n                + Op.SSTORE(slot_returndatasize, Op.RETURNDATASIZE)\n                + Op.SSTORE(slot_returndata, Op.RETURNDATALOAD(0))\n                + Op.SSTORE(slot_code_worked, value_code_worked)\n                + Op.STOP,\n            )\n        ]\n    )\n    calling_contract_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=50000000,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_code_worked: value_code_worked,  # type: ignore\n        slot_call_result: value_eof_call_worked,  # type: ignore\n        slot_returndatasize: 0x20,  # type: ignore\n        slot_returndata: value_returndata_magic\n        + b\"\\0\" * (0x20 - len(value_returndata_magic)),  # type: ignore\n    }\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n        destination_contract_address: Account(storage={}),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_legacy_sstore","title":"test_eof_calls_legacy_sstore(state_test, pre, sender, opcode)","text":"

    Test EOF contracts calling Legacy contracts that use SSTORE

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ],\n)\ndef test_eof_calls_legacy_sstore(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n):\n    \"\"\"Test EOF contracts calling Legacy contracts that use SSTORE\"\"\"\n    env = Environment()\n    destination_contract_code = Op.SSTORE(slot_caller, Op.CALLER()) + Op.STOP\n    destination_contract_address = pre.deploy_contract(destination_contract_code)\n\n    caller_contract = Container(\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_call_result, opcode(address=destination_contract_address))\n                + Op.SSTORE(slot_code_worked, value_code_worked)\n                + Op.STOP,\n            )\n        ]\n    )\n    calling_contract_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=50000000,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_code_worked: value_code_worked,  # type: ignore\n        slot_call_result: value_eof_call_worked,  # type: ignore\n    }\n    destination_storage = {}\n\n    if opcode == Op.EXTCALL:\n        destination_storage[slot_caller] = calling_contract_address\n    elif opcode == Op.EXTDELEGATECALL:\n        # EOF delegate call to legacy is a light failure by rule\n        calling_storage[slot_call_result] = value_eof_call_reverted\n    elif opcode == Op.EXTSTATICCALL:\n        calling_storage[slot_call_result] = value_eof_call_failed\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n        destination_contract_address: Account(storage=destination_storage),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_legacy_mstore","title":"test_eof_calls_legacy_mstore(state_test, pre, sender, opcode)","text":"

    Test EOF contracts calling Legacy contracts that return data

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ],\n)\ndef test_eof_calls_legacy_mstore(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n):\n    \"\"\"Test EOF contracts calling Legacy contracts that return data\"\"\"\n    env = Environment()\n    destination_contract_code = Op.MSTORE8(\n        0, int.from_bytes(value_returndata_magic, \"big\")\n    ) + Op.RETURN(0, 32)\n    destination_contract_address = pre.deploy_contract(destination_contract_code)\n\n    caller_contract = Container(\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_call_result, opcode(address=destination_contract_address))\n                + Op.SSTORE(slot_returndatasize, Op.RETURNDATASIZE)\n                + Op.SSTORE(slot_returndata, Op.RETURNDATALOAD(0))\n                + Op.SSTORE(slot_code_worked, value_code_worked)\n                + Op.STOP,\n            )\n        ]\n    )\n    calling_contract_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=50000000,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_code_worked: value_code_worked,  # type: ignore\n        slot_call_result: value_eof_call_worked,  # type: ignore\n        slot_returndatasize: 0x20,  # type: ignore\n        slot_returndata: value_returndata_magic\n        + b\"\\0\" * (0x20 - len(value_returndata_magic)),  # type: ignore\n    }\n\n    if opcode == Op.EXTDELEGATECALL:\n        # EOF delegate call to legacy is a light failure by rule\n        calling_storage[slot_call_result] = value_eof_call_reverted\n        calling_storage[slot_returndatasize] = 0\n        calling_storage[slot_returndata] = 0\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n        destination_contract_address: Account(storage={}),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_revert_abort","title":"test_eof_calls_revert_abort(state_test, pre, sender, opcode, destination_opcode, destination_is_eof)","text":"

    Test EOF contracts calling contracts that revert or abort

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ],\n)\n@pytest.mark.parametrize(\n    \"destination_opcode\",\n    [Op.REVERT, Op.INVALID],\n)\n@pytest.mark.parametrize(\"destination_is_eof\", [True, False])\ndef test_eof_calls_revert_abort(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n    destination_opcode: Op,\n    destination_is_eof: bool,\n):\n    \"\"\"Test EOF contracts calling contracts that revert or abort\"\"\"\n    env = Environment()\n\n    destination_contract_address = pre.deploy_contract(\n        Container.Code(destination_opcode(offset=0, size=0))\n        if destination_is_eof\n        else destination_opcode(offset=0, size=0)\n    )\n\n    caller_contract = Container.Code(\n        Op.SSTORE(slot_call_result, opcode(address=destination_contract_address))\n        + Op.SSTORE(slot_code_worked, value_code_worked)\n        + Op.STOP,\n    )\n    calling_contract_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=50000000,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_code_worked: value_code_worked,\n        slot_call_result: value_eof_call_reverted\n        if destination_opcode == Op.REVERT\n        or (opcode == Op.EXTDELEGATECALL and not destination_is_eof)\n        else value_eof_call_failed,\n    }\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n        destination_contract_address: Account(storage={}),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_eof_then_fails","title":"test_eof_calls_eof_then_fails(state_test, pre, sender, opcode, fail_opcode)","text":"

    Test EOF contracts calling EOF contracts and failing after the call

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n    ],\n)\n@pytest.mark.parametrize(\"fail_opcode\", [Op.REVERT, Op.INVALID])\ndef test_eof_calls_eof_then_fails(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n    fail_opcode: Op,\n):\n    \"\"\"Test EOF contracts calling EOF contracts and failing after the call\"\"\"\n    env = Environment()\n    destination_contract_address = pre.deploy_contract(contract_eof_sstore)\n\n    caller_contract = Container.Code(\n        Op.SSTORE(slot_call_result, opcode(address=destination_contract_address))\n        + Op.SSTORE(slot_code_worked, value_code_worked)\n        + fail_opcode(offset=0, size=0),\n    )\n    calling_contract_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=50000000,\n        data=\"\",\n    )\n\n    post = {\n        calling_contract_address: Account(storage=Storage()),\n        destination_contract_address: Account(storage=Storage()),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_clear_return_buffer","title":"test_eof_calls_clear_return_buffer(state_test, pre, sender, opcode, target_account_type, value)","text":"

    Test EOF contracts calling clears returndata buffer

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ],\n)\n@pytest.mark.parametrize(\n    \"target_account_type\",\n    (\n        \"empty\",\n        \"EOA\",\n        \"LegacyContract\",\n        \"EOFContract\",\n        \"LegacyContractInvalid\",\n        \"EOFContractInvalid\",\n    ),\n    ids=lambda x: x,\n)\n@pytest.mark.parametrize(\"value\", [0, 1])\ndef test_eof_calls_clear_return_buffer(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n    target_account_type: str,\n    value: int,\n):\n    \"\"\"Test EOF contracts calling clears returndata buffer\"\"\"\n    env = Environment()\n    filling_contract_code = Container.Code(\n        Op.MSTORE8(0, int.from_bytes(value_returndata_magic, \"big\")) + Op.RETURN(0, 32),\n    )\n    filling_callee_address = pre.deploy_contract(filling_contract_code)\n\n    match target_account_type:\n        case \"empty\":\n            target_address = b\"\\x78\" * 20\n        case \"EOA\":\n            target_address = pre.fund_eoa()\n        case \"LegacyContract\":\n            target_address = pre.deploy_contract(\n                code=Op.STOP,\n            )\n        case \"EOFContract\":\n            target_address = pre.deploy_contract(\n                code=Container.Code(Op.STOP),\n            )\n        case \"LegacyContractInvalid\":\n            target_address = pre.deploy_contract(\n                code=Op.INVALID,\n            )\n        case \"EOFContractInvalid\":\n            target_address = pre.deploy_contract(\n                code=Container.Code(Op.INVALID),\n            )\n\n    caller_contract = Container.Code(\n        # First fill the return buffer and sanity check\n        Op.EXTCALL(filling_callee_address, 0, 0, 0)\n        + Op.SSTORE(slot_returndatasize_before_clear, Op.RETURNDATASIZE)\n        # Then call something that doesn't return and check returndata cleared\n        + opcode(address=target_address, value=value)\n        + Op.SSTORE(slot_returndatasize, Op.RETURNDATASIZE)\n        + Op.SSTORE(slot_code_worked, value_code_worked)\n        + Op.STOP,\n    )\n\n    calling_contract_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=50000000,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_code_worked: value_code_worked,\n        # Sanity check\n        slot_returndatasize_before_clear: 0x20,\n        slot_returndatasize: 0,\n    }\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n        filling_callee_address: Account(storage={}),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_static_flag_with_value","title":"test_eof_calls_static_flag_with_value(state_test, pre, sender, opcode)","text":"

    Test EOF contracts calls handle static flag and sending value correctly

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.CALL,\n        Op.EXTCALL,\n    ],\n)\ndef test_eof_calls_static_flag_with_value(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n):\n    \"\"\"Test EOF contracts calls handle static flag and sending value correctly\"\"\"\n    env = Environment()\n\n    noop_callee_address = pre.deploy_contract(Container.Code(Op.STOP))\n\n    failing_contract_code = opcode(address=noop_callee_address, value=1) + Op.STOP\n    failing_contract_address = pre.deploy_contract(\n        Container.Code(\n            failing_contract_code,\n        )\n        if opcode == Op.EXTCALL\n        else failing_contract_code\n    )\n\n    calling_contract_address = pre.deploy_contract(\n        Container.Code(\n            Op.SSTORE(slot_call_result, Op.EXTSTATICCALL(address=failing_contract_address))\n            + Op.SSTORE(slot_code_worked, value_code_worked)\n            + Op.STOP\n        )\n    )\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=5_000_000,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_code_worked: value_code_worked,\n        slot_call_result: value_eof_call_failed,\n    }\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_min_callee_gas","title":"test_eof_calls_min_callee_gas(state_test, pre, sender, opcode, extra_gas_value_transfer, value, extra_gas_limit, reverts)","text":"

    Test EOF contracts calls do light failure when retained/callee gas is not enough.

    Premise of the test is that there exists a range of gas_limit values, which are enough for all instructions to execute, but call's returned value is 1, meaning not enough for gas allowances (MIN_RETAINED_GAS and MIN_CALLEE_GAS) - ones marked with reverts==False.

    Once we provide both allowances, the RJUMPI condition is no longer met and reverts==True.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    [\"opcode\", \"extra_gas_value_transfer\", \"value\"],\n    [\n        [Op.EXTCALL, 0, 0],\n        [Op.EXTCALL, 9_000, 1],\n        [Op.EXTSTATICCALL, 0, 0],\n        [Op.EXTDELEGATECALL, 0, 0],\n    ],\n    ids=[\"extcall_without_value\", \"extcall_with_value\", \"extstaticcall\", \"extdelegatecall\"],\n)\n@pytest.mark.parametrize(\n    [\"extra_gas_limit\", \"reverts\"],\n    [\n        [0, False],\n        [min_retained_gas, False],\n        [min_callee_gas, False],\n        [min_retained_gas + min_callee_gas, True],\n    ],\n    ids=[\"no_allowances\", \"only_retained\", \"only_callee\", \"both_allowances\"],\n)\ndef test_eof_calls_min_callee_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n    extra_gas_value_transfer: int,\n    value: int,\n    extra_gas_limit: int,\n    reverts: bool,\n):\n    \"\"\"\n    Test EOF contracts calls do light failure when retained/callee gas is not enough.\n\n    Premise of the test is that there exists a range of `gas_limit` values, which are enough\n    for all instructions to execute, but call's returned value is 1, meaning not enough for gas\n    allowances (MIN_RETAINED_GAS and MIN_CALLEE_GAS) - ones marked with `reverts==False`.\n\n    Once we provide both allowances, the RJUMPI condition is no longer met and `reverts==True`.\n    \"\"\"\n    env = Environment()\n\n    noop_callee_address = pre.deploy_contract(Container.Code(Op.STOP))\n\n    revert_block = Op.REVERT(0, 0)\n    calling_contract_address = pre.deploy_contract(\n        Container.Code(\n            Op.SSTORE(slot_code_worked, value_code_worked)\n            + Op.EQ(opcode(address=noop_callee_address, value=value), value_eof_call_reverted)\n            # If the return code isn't 1, it means gas was enough to cover the allowances.\n            + Op.RJUMPI[len(revert_block)]\n            + revert_block\n            + Op.STOP\n        ),\n        balance=value,\n    )\n\n    # `no_oog_gas` is minimum amount of gas_limit which makes the transaction not go oog.\n    push_operations = 3 + len(opcode.kwargs)  # type: ignore\n    no_oog_gas = (\n        21_000\n        + 20_000  # SSTORE\n        + 2_100  # SSTORE COLD_SLOAD_COST\n        + push_operations * 3  # PUSH operations\n        + 100  # WARM_STORAGE_READ_COST\n        + 2500  # COLD_ACCOUNT_ACCESS - WARM_STORAGE_READ_COST\n        + extra_gas_value_transfer\n        + 4  # RJUMPI\n        + 3  # EQ\n    )\n\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=no_oog_gas + extra_gas_limit,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_code_worked: 0 if reverts else value_code_worked,\n    }\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_with_value","title":"test_eof_calls_with_value(state_test, pre, sender, balance, value)","text":"

    Test EOF contracts calls handle value calls with and without enough balance

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"balance\", [0, 1, 2, pytest.param(2**256 - 1, marks=pytest.mark.pre_alloc_modify)]\n)\n@pytest.mark.parametrize(\"value\", [0, 1, 2, 2**256 - 1])\ndef test_eof_calls_with_value(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    balance: int,\n    value: int,\n):\n    \"\"\"Test EOF contracts calls handle value calls with and without enough balance\"\"\"\n    env = Environment()\n\n    noop_callee_address = pre.deploy_contract(Container.Code(Op.STOP))\n\n    calling_contract_address = pre.deploy_contract(\n        Container.Code(\n            Op.SSTORE(slot_call_result, Op.EXTCALL(address=noop_callee_address, value=value))\n            + Op.SSTORE(slot_code_worked, value_code_worked)\n            + Op.STOP\n        ),\n        balance=balance,\n    )\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=50000000,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_code_worked: value_code_worked,\n        slot_call_result: value_eof_call_reverted if balance < value else value_eof_call_worked,\n    }\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n        noop_callee_address: Account(balance=0 if balance < value else value),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_msg_depth","title":"test_eof_calls_msg_depth(state_test, pre, sender, opcode)","text":"

    Test EOF contracts calls handle msg depth limit correctly (1024). NOTE: due to block gas limit and the 63/64th rule this limit is unlikely to be hit on mainnet.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ],\n)\ndef test_eof_calls_msg_depth(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n):\n    \"\"\"\n    Test EOF contracts calls handle msg depth limit correctly (1024).\n    NOTE: due to block gas limit and the 63/64th rule this limit is unlikely to be hit\n          on mainnet.\n    \"\"\"\n    # Not a precise gas_limit formula, but enough to exclude risk of gas causing the failure.\n    gas_limit = int(200000 * (64 / 63) ** 1024)\n    env = Environment(gas_limit=gas_limit)\n\n    # Flow of the test:\n    # `callee_code` is recursively calling itself, passing msg depth as calldata\n    # (kept with the `MSTORE(0, ADD(...))`). When maximum msg depth is reached\n    # the call fails and starts returning. The deep-most frame returns:\n    #   - current reached msg depth (expected to be the maximum 1024), with the\n    #     `MSTORE(32, ADD(...))`\n    #   - the respective return code of the EXT*CALL (expected to be 1 - light failure), with the\n    #     `MSTORE(64, NOOP)`. Note the `NOOP` is just to appease the `Op.MSTORE` call, the return\n    #     code value is actually coming from the `Op.DUP1`\n    # When unwinding the msg call stack, the intermediate frames return whatever the deeper callee\n    # returned with the `RETURNDATACOPY` instruction.\n\n    # Memory offsets layout:\n    # - 0  - input - msg depth\n    # - 32 - output - msg depth\n    # - 64 - output - call result\n    returndatacopy_block = Op.RETURNDATACOPY(32, 0, 64) + Op.RETURN(32, 64)\n    deep_most_result_block = (\n        Op.MSTORE(32, Op.ADD(Op.CALLDATALOAD(0), 1)) + Op.MSTORE(64, Op.NOOP) + Op.RETURN(32, 64)\n    )\n    rjump_offset = len(returndatacopy_block)\n\n    callee_code = Container.Code(\n        # current stack depth in memory bytes 0-31\n        Op.MSTORE(0, Op.ADD(Op.CALLDATALOAD(0), 1))\n        # pass it along deeper as calldata\n        + opcode(address=Op.ADDRESS, args_size=32)\n        # duplicate return code for the `returndatacopy_block` below\n        + Op.DUP1\n        # if return code was:\n        #  - 1, we're in the deep-most frame, `deep_most_result_block` returns the actual result\n        #  - 0, we're in an intermediate frame, `returndatacopy_block` only passes on the result\n        + Op.RJUMPI[rjump_offset]\n        + returndatacopy_block\n        + deep_most_result_block\n    )\n\n    callee_address = pre.deploy_contract(callee_code)\n\n    calling_contract_address = pre.deploy_contract(\n        Container.Code(\n            Op.MSTORE(0, Op.CALLDATALOAD(0))\n            + Op.EXTCALL(address=callee_address, args_size=32)\n            + Op.SSTORE(slot_max_depth, Op.RETURNDATALOAD(0))\n            + Op.SSTORE(slot_call_result, Op.RETURNDATALOAD(32))\n            + Op.SSTORE(slot_code_worked, value_code_worked)\n            + Op.STOP\n        )\n    )\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=gas_limit,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_max_depth: 1024,\n        slot_code_worked: value_code_worked,\n        slot_call_result: value_eof_call_reverted,\n    }\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/index/test_cases/","title":"Test Calls - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py:

    test_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test-opcode_CALL]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test-opcode_DELEGATECALL]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test-opcode_CALLCODE]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test-opcode_STATICCALL]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test_engine-opcode_CALL]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test_engine-opcode_DELEGATECALL]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test_engine-opcode_CALLCODE]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test_engine-opcode_STATICCALL]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-state_test-opcode_CALL]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-state_test-opcode_DELEGATECALL]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-state_test-opcode_CALLCODE]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-state_test-opcode_STATICCALL]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-blockchain_test-opcode_CALL]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-blockchain_test-opcode_DELEGATECALL]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-blockchain_test-opcode_CALLCODE]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-blockchain_test-opcode_STATICCALL]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-blockchain_test_engine-opcode_CALL]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-blockchain_test_engine-opcode_DELEGATECALL]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-blockchain_test_engine-opcode_CALLCODE]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-blockchain_test_engine-opcode_STATICCALL]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-state_test-opcode_CALL]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-state_test-opcode_DELEGATECALL]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-state_test-opcode_CALLCODE]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-state_test-opcode_STATICCALL]\ntest_eof_calls_eof_sstore[fork_CancunEIP7692-blockchain_test-opcode_EXTCALL]\ntest_eof_calls_eof_sstore[fork_CancunEIP7692-blockchain_test-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_sstore[fork_CancunEIP7692-blockchain_test-opcode_EXTSTATICCALL]\ntest_eof_calls_eof_sstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTCALL]\ntest_eof_calls_eof_sstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_sstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTSTATICCALL]\ntest_eof_calls_eof_sstore[fork_CancunEIP7692-state_test-opcode_EXTCALL]\ntest_eof_calls_eof_sstore[fork_CancunEIP7692-state_test-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_sstore[fork_CancunEIP7692-state_test-opcode_EXTSTATICCALL]\ntest_eof_calls_eof_mstore[fork_CancunEIP7692-blockchain_test-opcode_EXTCALL]\ntest_eof_calls_eof_mstore[fork_CancunEIP7692-blockchain_test-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_mstore[fork_CancunEIP7692-blockchain_test-opcode_EXTSTATICCALL]\ntest_eof_calls_eof_mstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTCALL]\ntest_eof_calls_eof_mstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_mstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTSTATICCALL]\ntest_eof_calls_eof_mstore[fork_CancunEIP7692-state_test-opcode_EXTCALL]\ntest_eof_calls_eof_mstore[fork_CancunEIP7692-state_test-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_mstore[fork_CancunEIP7692-state_test-opcode_EXTSTATICCALL]\ntest_eof_calls_legacy_sstore[fork_CancunEIP7692-blockchain_test-opcode_EXTCALL]\ntest_eof_calls_legacy_sstore[fork_CancunEIP7692-blockchain_test-opcode_EXTDELEGATECALL]\ntest_eof_calls_legacy_sstore[fork_CancunEIP7692-blockchain_test-opcode_EXTSTATICCALL]\ntest_eof_calls_legacy_sstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTCALL]\ntest_eof_calls_legacy_sstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTDELEGATECALL]\ntest_eof_calls_legacy_sstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTSTATICCALL]\ntest_eof_calls_legacy_sstore[fork_CancunEIP7692-state_test-opcode_EXTCALL]\ntest_eof_calls_legacy_sstore[fork_CancunEIP7692-state_test-opcode_EXTDELEGATECALL]\ntest_eof_calls_legacy_sstore[fork_CancunEIP7692-state_test-opcode_EXTSTATICCALL]\ntest_eof_calls_legacy_mstore[fork_CancunEIP7692-blockchain_test-opcode_EXTCALL]\ntest_eof_calls_legacy_mstore[fork_CancunEIP7692-blockchain_test-opcode_EXTDELEGATECALL]\ntest_eof_calls_legacy_mstore[fork_CancunEIP7692-blockchain_test-opcode_EXTSTATICCALL]\ntest_eof_calls_legacy_mstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTCALL]\ntest_eof_calls_legacy_mstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTDELEGATECALL]\ntest_eof_calls_legacy_mstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTSTATICCALL]\ntest_eof_calls_legacy_mstore[fork_CancunEIP7692-state_test-opcode_EXTCALL]\ntest_eof_calls_legacy_mstore[fork_CancunEIP7692-state_test-opcode_EXTDELEGATECALL]\ntest_eof_calls_legacy_mstore[fork_CancunEIP7692-state_test-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_True-destination_opcode_REVERT-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_True-destination_opcode_REVERT-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_True-destination_opcode_REVERT-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_True-destination_opcode_INVALID-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_True-destination_opcode_INVALID-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_True-destination_opcode_INVALID-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_False-destination_opcode_REVERT-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_False-destination_opcode_REVERT-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_False-destination_opcode_REVERT-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_False-destination_opcode_INVALID-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_False-destination_opcode_INVALID-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_False-destination_opcode_INVALID-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_True-destination_opcode_REVERT-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_True-destination_opcode_REVERT-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_True-destination_opcode_REVERT-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_True-destination_opcode_INVALID-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_True-destination_opcode_INVALID-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_True-destination_opcode_INVALID-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_False-destination_opcode_REVERT-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_False-destination_opcode_REVERT-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_False-destination_opcode_REVERT-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_False-destination_opcode_INVALID-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_False-destination_opcode_INVALID-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_False-destination_opcode_INVALID-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_True-destination_opcode_REVERT-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_True-destination_opcode_REVERT-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_True-destination_opcode_REVERT-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_True-destination_opcode_INVALID-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_True-destination_opcode_INVALID-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_True-destination_opcode_INVALID-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_False-destination_opcode_REVERT-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_False-destination_opcode_REVERT-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_False-destination_opcode_REVERT-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_False-destination_opcode_INVALID-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_False-destination_opcode_INVALID-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_False-destination_opcode_INVALID-opcode_EXTSTATICCALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-blockchain_test-fail_opcode_REVERT-opcode_EXTCALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-blockchain_test-fail_opcode_REVERT-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-blockchain_test-fail_opcode_INVALID-opcode_EXTCALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-blockchain_test-fail_opcode_INVALID-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-blockchain_test_engine-fail_opcode_REVERT-opcode_EXTCALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-blockchain_test_engine-fail_opcode_REVERT-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-blockchain_test_engine-fail_opcode_INVALID-opcode_EXTCALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-blockchain_test_engine-fail_opcode_INVALID-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-state_test-fail_opcode_REVERT-opcode_EXTCALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-state_test-fail_opcode_REVERT-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-state_test-fail_opcode_INVALID-opcode_EXTCALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-state_test-fail_opcode_INVALID-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-empty-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-empty-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-empty-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-EOA-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-EOA-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-EOA-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-LegacyContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-LegacyContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-LegacyContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-EOFContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-EOFContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-EOFContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-LegacyContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-LegacyContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-LegacyContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-EOFContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-EOFContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-EOFContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-empty-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-empty-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-empty-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-EOA-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-EOA-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-EOA-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-LegacyContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-LegacyContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-LegacyContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-EOFContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-EOFContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-EOFContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-LegacyContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-LegacyContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-LegacyContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-EOFContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-EOFContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-EOFContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-empty-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-empty-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-empty-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-EOA-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-EOA-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-EOA-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-LegacyContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-LegacyContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-LegacyContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-EOFContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-EOFContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-EOFContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-LegacyContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-LegacyContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-LegacyContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-EOFContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-EOFContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-EOFContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-empty-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-empty-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-empty-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-EOA-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-EOA-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-EOA-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-LegacyContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-LegacyContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-LegacyContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-EOFContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-EOFContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-EOFContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-LegacyContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-LegacyContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-LegacyContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-EOFContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-EOFContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-EOFContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-empty-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-empty-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-empty-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-EOA-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-EOA-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-EOA-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-LegacyContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-LegacyContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-LegacyContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-EOFContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-EOFContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-EOFContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-LegacyContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-LegacyContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-LegacyContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-EOFContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-EOFContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-EOFContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-empty-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-empty-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-empty-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-EOA-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-EOA-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-EOA-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-LegacyContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-LegacyContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-LegacyContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-EOFContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-EOFContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-EOFContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-LegacyContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-LegacyContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-LegacyContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-EOFContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-EOFContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-EOFContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_static_flag_with_value[fork_CancunEIP7692-blockchain_test-opcode_CALL]\ntest_eof_calls_static_flag_with_value[fork_CancunEIP7692-blockchain_test-opcode_EXTCALL]\ntest_eof_calls_static_flag_with_value[fork_CancunEIP7692-blockchain_test_engine-opcode_CALL]\ntest_eof_calls_static_flag_with_value[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTCALL]\ntest_eof_calls_static_flag_with_value[fork_CancunEIP7692-state_test-opcode_CALL]\ntest_eof_calls_static_flag_with_value[fork_CancunEIP7692-state_test-opcode_EXTCALL]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-no_allowances-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-no_allowances-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-no_allowances-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-no_allowances-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-only_retained-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-only_retained-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-only_retained-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-only_retained-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-only_callee-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-only_callee-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-only_callee-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-only_callee-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-both_allowances-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-both_allowances-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-both_allowances-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-both_allowances-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-no_allowances-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-no_allowances-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-no_allowances-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-no_allowances-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-only_retained-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-only_retained-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-only_retained-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-only_retained-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-only_callee-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-only_callee-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-only_callee-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-only_callee-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-both_allowances-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-both_allowances-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-both_allowances-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-both_allowances-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-no_allowances-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-no_allowances-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-no_allowances-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-no_allowances-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-only_retained-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-only_retained-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-only_retained-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-only_retained-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-only_callee-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-only_callee-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-only_callee-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-only_callee-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-both_allowances-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-both_allowances-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-both_allowances-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-both_allowances-extdelegatecall]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_0-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_0-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_0-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_0-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_1-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_1-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_1-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_1-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_2-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_2-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_2-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_2-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_0-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_0-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_0-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_0-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_1-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_1-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_1-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_1-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_2-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_2-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_2-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_2-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_0-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_0-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_0-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_0-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_1-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_1-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_1-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_1-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_2-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_2-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_2-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_2-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_msg_depth[fork_CancunEIP7692-blockchain_test-opcode_EXTCALL]\ntest_eof_calls_msg_depth[fork_CancunEIP7692-blockchain_test-opcode_EXTDELEGATECALL]\ntest_eof_calls_msg_depth[fork_CancunEIP7692-blockchain_test-opcode_EXTSTATICCALL]\ntest_eof_calls_msg_depth[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTCALL]\ntest_eof_calls_msg_depth[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTDELEGATECALL]\ntest_eof_calls_msg_depth[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTSTATICCALL]\ntest_eof_calls_msg_depth[fork_CancunEIP7692-state_test-opcode_EXTCALL]\ntest_eof_calls_msg_depth[fork_CancunEIP7692-state_test-opcode_EXTDELEGATECALL]\ntest_eof_calls_msg_depth[fork_CancunEIP7692-state_test-opcode_EXTSTATICCALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas/","title":"Test Gas","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-7069: Revamped CALL instructions

    Tests gas comsumption

    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_gas.test_ext_calls_gas","title":"test_ext_calls_gas(state_test, pre, state_env, opcode, pre_setup, cold_gas, warm_gas)","text":"

    Tests 4 variations of EXT*CALL gas, both warm and cold

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas.py
    @pytest.mark.parametrize(\n    [\"opcode\", \"pre_setup\", \"cold_gas\", \"warm_gas\"],\n    [\n        pytest.param(Op.EXTCALL, Op.PUSH0, 2600, 100, id=\"EXTCALL\"),\n        pytest.param(Op.EXTCALL, Op.PUSH1(1), 2600 + 9000, 100 + 9000, id=\"EXTCALL_with_value\"),\n        pytest.param(Op.EXTDELEGATECALL, Op.NOOP, 2600, 100, id=\"EXTSTATICCALL\"),\n        pytest.param(Op.EXTSTATICCALL, Op.NOOP, 2600, 100, id=\"EXTDELEGATECALL\"),\n    ],\n)\ndef test_ext_calls_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    state_env: Environment,\n    opcode: Op,\n    pre_setup: Op,\n    cold_gas: int,\n    warm_gas: int | None,\n):\n    \"\"\"Tests 4 variations of EXT*CALL gas, both warm and cold\"\"\"\n    address_target = pre.deploy_contract(Container(sections=[Section.Code(code=Op.STOP)]))\n\n    gas_test(\n        state_test,\n        state_env,\n        pre,\n        setup_code=pre_setup + Op.PUSH0 + Op.PUSH0 + Op.PUSH20(address_target),\n        subject_code=opcode,\n        tear_down_code=Op.STOP,\n        cold_gas=cold_gas,\n        warm_gas=warm_gas,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas/index/test_cases/","title":"Test Gas - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas.py:

    test_ext_calls_gas[fork_CancunEIP7692-blockchain_test-EXTCALL]\ntest_ext_calls_gas[fork_CancunEIP7692-blockchain_test-EXTCALL_with_value]\ntest_ext_calls_gas[fork_CancunEIP7692-blockchain_test-EXTSTATICCALL]\ntest_ext_calls_gas[fork_CancunEIP7692-blockchain_test-EXTDELEGATECALL]\ntest_ext_calls_gas[fork_CancunEIP7692-blockchain_test_engine-EXTCALL]\ntest_ext_calls_gas[fork_CancunEIP7692-blockchain_test_engine-EXTCALL_with_value]\ntest_ext_calls_gas[fork_CancunEIP7692-blockchain_test_engine-EXTSTATICCALL]\ntest_ext_calls_gas[fork_CancunEIP7692-blockchain_test_engine-EXTDELEGATECALL]\ntest_ext_calls_gas[fork_CancunEIP7692-state_test-EXTCALL]\ntest_ext_calls_gas[fork_CancunEIP7692-state_test-EXTCALL_with_value]\ntest_ext_calls_gas[fork_CancunEIP7692-state_test-EXTSTATICCALL]\ntest_ext_calls_gas[fork_CancunEIP7692-state_test-EXTDELEGATECALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion/","title":"Test Returndatacopy Memory Expansion","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Memory expansion tests for RETURNDATACOPY executing in EOF code

    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_returndatacopy_memory_expansion.test_returndatacopy_memory_expansion","title":"test_returndatacopy_memory_expansion(state_test, env, pre, post, tx)","text":"

    Perform RETURNDATACOPY operations that expand the memory, and verify the gas it costs to do so.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py
    @pytest.mark.parametrize(\n    \"dest,src,length\",\n    [\n        (0x00, 0x00, 0x01),\n        (0x100, 0x00, 0x01),\n        (0x1F, 0x00, 0x01),\n        (0x20, 0x00, 0x01),\n        (0x1000, 0x00, 0x01),\n        (0x1000, 0x00, 0x40),\n        (0x00, 0x00, 0x00),\n        (2**256 - 1, 0x00, 0x00),\n        (0x00, 2**256 - 1, 0x00),\n        (2**256 - 1, 2**256 - 1, 0x00),\n    ],\n    ids=[\n        \"single_byte_expansion\",\n        \"single_byte_expansion_2\",\n        \"single_byte_expansion_word_boundary\",\n        \"single_byte_expansion_word_boundary_2\",\n        \"multi_word_expansion\",\n        \"multi_word_expansion_2\",\n        \"zero_length_expansion\",\n        \"huge_dest_zero_length\",\n        \"huge_src_zero_length\",\n        \"huge_dest_huge_src_zero_length\",\n    ],\n)\n@pytest.mark.parametrize(\"successful\", [True, False])\n@pytest.mark.parametrize(\n    \"initial_memory\",\n    [\n        bytes(range(0x00, 0x100)),\n        bytes(),\n    ],\n    ids=[\n        \"from_existent_memory\",\n        \"from_empty_memory\",\n    ],\n)\ndef test_returndatacopy_memory_expansion(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    post: Mapping[str, Account],\n    tx: Transaction,\n):\n    \"\"\"\n    Perform RETURNDATACOPY operations that expand the memory, and verify the gas it costs to do so.\n    \"\"\"\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_returndatacopy_memory_expansion.test_returndatacopy_huge_memory_expansion","title":"test_returndatacopy_huge_memory_expansion(state_test, env, pre, post, tx)","text":"

    Perform RETURNDATACOPY operations that expand the memory by huge amounts, and verify that it correctly runs out of gas.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py
    @pytest.mark.parametrize(\n    \"dest,src,length\",\n    [\n        (2**256 - 1, 0x00, 0x01),\n        (2**256 - 2, 0x00, 0x01),\n        (2**255 - 1, 0x00, 0x01),\n        (0x00, 0x00, 2**256 - 1),\n        (0x00, 0x00, 2**256 - 2),\n        (0x00, 0x00, 2**255 - 1),\n    ],\n    ids=[\n        \"max_dest_single_byte_expansion\",\n        \"max_dest_minus_one_single_byte_expansion\",\n        \"half_max_dest_single_byte_expansion\",\n        \"max_length_expansion\",\n        \"max_length_minus_one_expansion\",\n        \"half_max_length_expansion\",\n    ],\n)\n@pytest.mark.parametrize(\n    \"subcall_exact_cost\",\n    [2**128 - 1],\n    ids=[\"\"],\n)  # Limit subcall gas, otherwise it would be impossibly large\n@pytest.mark.parametrize(\"successful\", [False])\n@pytest.mark.parametrize(\n    \"initial_memory\",\n    [\n        bytes(range(0x00, 0x100)),\n        bytes(),\n    ],\n    ids=[\n        \"from_existent_memory\",\n        \"from_empty_memory\",\n    ],\n)\ndef test_returndatacopy_huge_memory_expansion(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Mapping[str, Account],\n    post: Mapping[str, Account],\n    tx: Transaction,\n):\n    \"\"\"\n    Perform RETURNDATACOPY operations that expand the memory by huge amounts, and verify that it\n    correctly runs out of gas.\n    \"\"\"\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion/index/test_cases/","title":"Test Returndatacopy Memory Expansion - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py:

    test_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_True-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_True-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_True-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_True-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_True-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_True-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_True-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_True-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_True-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_True-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_True-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_True-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_True-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_True-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_True-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_True-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_True-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_True-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False--max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False--half_max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False--max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False--half_max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False--max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False--half_max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False--max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False--half_max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False--max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False--half_max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False--max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False--half_max_length_expansion]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload/","title":"Test Returndataload","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-7069: Revamped CALL instructions

    Tests for the RETURNDATALOAD instriction

    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_returndataload.test_returndatacopy_handling","title":"test_returndatacopy_handling(state_test, pre, opcode, return_data, offset, size)","text":"

    Tests ReturnDataLoad including multiple offset conditions and differeing legacy vs. eof boundary conditions.

    entrypoint creates a \"0xff\" test area of memory, delegate calls to caller. Caller is either EOF or legacy, as per parameter. Calls returner and copies the return data based on offset and size params. Cases are expected to trigger boundary violations.

    Entrypoint copies the test area to storage slots, and the expected result is asserted.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.CALL,\n        Op.CALLCODE,\n        Op.DELEGATECALL,\n        Op.STATICCALL,\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ],\n)\n@pytest.mark.parametrize(\n    \"return_data\",\n    [\n        b\"\",\n        b\"\\x10\" * 0x10,\n        b\"\\x20\" * 0x20,\n        b\"\\x30\" * 0x30,\n    ],\n    ids=lambda x: \"len_%x\" % len(x),\n)\n@pytest.mark.parametrize(\n    \"offset\",\n    [\n        0,\n        0x10,\n        0x20,\n        0x30,\n    ],\n    ids=lambda x: \"offset_%x\" % x,\n)\n@pytest.mark.parametrize(\n    \"size\",\n    [\n        0,\n        0x10,\n        0x20,\n        0x30,\n    ],\n    ids=lambda x: \"size_%x\" % x,\n)\ndef test_returndatacopy_handling(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    opcode: Op,\n    return_data: bytes,\n    offset: int,\n    size: int,\n):\n    \"\"\"\n    Tests ReturnDataLoad including multiple offset conditions and differeing legacy vs. eof\n    boundary conditions.\n\n    entrypoint creates a \"0xff\" test area of memory, delegate calls to caller.\n    Caller is either EOF or legacy, as per parameter.  Calls returner and copies the return data\n    based on offset and size params.  Cases are expected to trigger boundary violations.\n\n    Entrypoint copies the test area to storage slots, and the expected result is asserted.\n    \"\"\"\n    env = Environment()\n\n    slot_result_start = 0x1000\n\n    sender = pre.fund_eoa()\n\n    address_returner = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.DATACOPY(0, 0, Op.DATASIZE) + Op.RETURN(0, Op.DATASIZE),\n                ),\n                Section.Data(data=return_data),\n            ]\n        )\n    )\n\n    result = [0xFF] * 0x40\n    result[0:size] = [0] * size\n    extent = size - max(0, size + offset - len(return_data))\n    if extent > 0 and len(return_data) > 0:\n        result[0:extent] = [return_data[0]] * extent\n\n    code_under_test = (\n        opcode(address=address_returner)\n        + Op.RETURNDATACOPY(0, offset, size)\n        + Op.SSTORE(slot_code_worked, value_code_worked)\n        + Op.RETURN(0, size)\n    )\n    match opcode:\n        case Op.EXTCALL | Op.EXTDELEGATECALL | Op.EXTSTATICCALL:\n            address_caller = pre.deploy_contract(\n                Container(\n                    sections=[\n                        Section.Code(\n                            code=code_under_test,\n                        )\n                    ]\n                )\n            )\n        case Op.CALL | Op.CALLCODE | Op.DELEGATECALL | Op.STATICCALL:\n            address_caller = pre.deploy_contract(code_under_test)\n\n    address_entry_point = pre.deploy_contract(\n        Op.NOOP\n        # First, create a \"dirty\" area, so we can check zero overwrite\n        + Op.MSTORE(0x00, -1)\n        + Op.MSTORE(0x20, -1)\n        # call the contract under test\n        + Op.DELEGATECALL(1_000_000, address_caller, 0, 0, 0, 0)\n        + Op.RETURNDATACOPY(0, 0, Op.RETURNDATASIZE)\n        # store the return data\n        + Op.SSTORE(slot_result_start, Op.MLOAD(0x0))\n        + Op.SSTORE(slot_result_start + 1, Op.MLOAD(0x20))\n        + Op.SSTORE(slot_code_worked, value_code_worked)\n        + Op.STOP,\n    )\n\n    post = {\n        address_entry_point: Account(\n            storage={\n                slot_code_worked: value_code_worked,\n                slot_result_start: bytes(result[:0x20]),\n                (slot_result_start + 0x1): bytes(result[0x20:]),\n            }\n        )\n    }\n    if opcode in [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL] and (\n        (offset + size) > len(return_data)\n    ):\n        post[address_entry_point] = Account(\n            storage={\n                slot_code_worked: value_code_worked,\n                slot_result_start: b\"\\xff\" * 32,\n                slot_result_start + 1: b\"\\xff\" * 32,\n            }\n        )\n\n    tx = Transaction(to=address_entry_point, gas_limit=2_000_000, sender=sender)\n\n    state_test(\n        env=env,\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_returndataload.test_returndataload_handling","title":"test_returndataload_handling(state_test, pre, opcode, return_data, offset)","text":"

    Much simpler than returndatacopy, no memory or boosted call. Returner is called and results are stored in storage slot, which is asserted for expected values. The parameters offset and return data are configured to test boundary conditions.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ],\n)\n@pytest.mark.parametrize(\n    \"return_data\",\n    [\n        b\"\",\n        b\"\\x10\" * 0x10,\n        b\"\\x20\" * 0x20,\n        b\"\\x30\" * 0x30,\n    ],\n    ids=lambda x: \"len_%x\" % len(x),\n)\n@pytest.mark.parametrize(\n    \"offset\",\n    [\n        0,\n        0x10,\n        0x20,\n        0x30,\n    ],\n    ids=lambda x: \"offset_%x\" % x,\n)\ndef test_returndataload_handling(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    opcode: Op,\n    return_data: bytes,\n    offset: int,\n):\n    \"\"\"\n    Much simpler than returndatacopy, no memory or boosted call.  Returner is called\n    and results are stored in storage slot, which is asserted for expected values.\n    The parameters offset and return data are configured to test boundary conditions.\n    \"\"\"\n    env = Environment()\n\n    slot_result_start = 0x1000\n\n    sender = pre.fund_eoa()\n    address_returner = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.DATACOPY(0, 0, Op.DATASIZE) + Op.RETURN(0, Op.DATASIZE),\n                ),\n                Section.Data(data=return_data),\n            ]\n        )\n    )\n    address_entry_point = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=opcode(address=address_returner)\n                    + Op.SSTORE(slot_result_start, Op.RETURNDATALOAD(offset))\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ]\n        )\n    )\n\n    result = [0] * 0x20\n    extent = 0x20 - max(0, 0x20 + offset - len(return_data))\n    if extent > 0 and len(return_data) > 0:\n        result[0:extent] = [return_data[0]] * extent\n    post = {\n        address_entry_point: Account(\n            storage={\n                slot_code_worked: value_code_worked,\n                slot_result_start: bytes(result),\n            }\n        )\n    }\n\n    tx = Transaction(to=address_entry_point, gas_limit=2_000_000, sender=sender)\n\n    state_test(\n        env=env,\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_returndataload.test_returndatacopy_oob","title":"test_returndatacopy_oob(state_test, pre, opcode)","text":"

    Extends the RETURNDATACOPY test for correct out-of-bounds behavior, by checking if the caller frame's context being EOF or legacy doesn't impact the execution logic of the RETURNDATACOPY instance under test.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.CALL,\n        Op.EXTCALL,\n    ],\n)\ndef test_returndatacopy_oob(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    opcode: Op,\n):\n    \"\"\"\n    Extends the RETURNDATACOPY test for correct out-of-bounds behavior, by checking if the\n    caller frame's context being EOF or legacy doesn't impact the execution logic of the\n    RETURNDATACOPY instance under test.\n    \"\"\"\n    env = Environment()\n\n    sender = pre.fund_eoa()\n\n    # Both callee codes below make an OOB (out-of-bounds) RETURNDATACOPY of one byte,\n    # which they then attempt to return (Legacy should exceptionally halt on RETURNDATACOPY).\n    address_callee_eof = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RETURNDATACOPY(0, 0, 1) + Op.RETURN(0, 1),\n                    max_stack_height=3,\n                )\n            ]\n        )\n    )\n    address_callee_legacy = pre.deploy_contract(Op.RETURNDATACOPY(0, 0, 1) + Op.RETURN(0, 1))\n\n    # Caller code is selected to either be Legacy or EOF using params.\n    code_entry_point = (\n        Op.SSTORE(slot_eof_target_call_status, opcode(address=address_callee_eof))\n        + Op.SSTORE(slot_eof_target_returndatasize, Op.RETURNDATASIZE)\n        + Op.SSTORE(slot_eof_target_returndata, Op.RETURNDATACOPY(0, 0, 1) + Op.MLOAD(0))\n        + Op.SSTORE(\n            slot_legacy_target_call_status,\n            opcode(address=address_callee_legacy),\n        )\n        + Op.SSTORE(slot_legacy_target_returndatasize, Op.RETURNDATASIZE)\n        + Op.STOP\n    )\n\n    storage_entry_point = Storage(\n        {\n            slot_eof_target_call_status: value_exceptional_abort_canary,\n            slot_eof_target_returndata: value_exceptional_abort_canary,\n            slot_eof_target_returndatasize: value_exceptional_abort_canary,\n            slot_legacy_target_call_status: value_exceptional_abort_canary,\n            slot_legacy_target_returndatasize: value_exceptional_abort_canary,\n        }\n    )\n\n    address_entry_point = (\n        pre.deploy_contract(code=code_entry_point, storage=storage_entry_point)\n        if opcode == Op.CALL\n        else pre.deploy_contract(\n            Container(\n                sections=[\n                    Section.Code(\n                        code=code_entry_point,\n                        max_stack_height=4,\n                        storage=storage_entry_point,\n                    )\n                ]\n            )\n        )\n    )\n\n    tx = Transaction(to=address_entry_point, gas_limit=2_000_000, sender=sender)\n\n    post = {\n        address_entry_point: Account(\n            storage={\n                slot_eof_target_call_status: CALL_SUCCESS,\n                slot_eof_target_returndata: \"0x00\",\n                slot_eof_target_returndatasize: \"0x01\",\n                slot_legacy_target_call_status: CALL_FAILURE,\n                slot_legacy_target_returndatasize: \"0x00\",\n            }\n            if opcode == Op.CALL\n            else {\n                slot_eof_target_call_status: EXTCALL_SUCCESS,\n                slot_eof_target_returndata: \"0x00\",\n                slot_eof_target_returndatasize: \"0x01\",\n                slot_legacy_target_call_status: EXTCALL_FAILED,\n                slot_legacy_target_returndatasize: \"0x00\",\n            }\n        )\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload/index/test_cases/","title":"Test Returndataload - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py:

    test_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_oob[fork_CancunEIP7692-blockchain_test-opcode_CALL]\ntest_returndatacopy_oob[fork_CancunEIP7692-blockchain_test-opcode_EXTCALL]\ntest_returndatacopy_oob[fork_CancunEIP7692-blockchain_test_engine-opcode_CALL]\ntest_returndatacopy_oob[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTCALL]\ntest_returndatacopy_oob[fork_CancunEIP7692-state_test-opcode_CALL]\ntest_returndatacopy_oob[fork_CancunEIP7692-state_test-opcode_EXTCALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/","title":"EIP-7480 Data Section","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7480_data_section.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7480_data_section --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7480_data_section --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Cross-client EVM Object Format Tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7480_data_section/spec.py.

    EOF V1 Constants used throughout all tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation/","title":"Test Code Validation","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF V1 Code Validation tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation/#tests.prague.eip7692_eof_v1.eip7480_data_section.test_code_validation.test_legacy_initcode_valid_eof_v1_contract","title":"test_legacy_initcode_valid_eof_v1_contract(eof_test, container)","text":"

    Test creating various types of valid EOF V1 contracts using legacy initcode and a contract creating transaction.

    Source code in tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py
    @pytest.mark.parametrize(\n    \"container\",\n    VALID,\n    ids=container_name,\n)\ndef test_legacy_initcode_valid_eof_v1_contract(\n    eof_test: EOFTestFiller,\n    container: Container,\n):\n    \"\"\"\n    Test creating various types of valid EOF V1 contracts using legacy\n    initcode and a contract creating transaction.\n    \"\"\"\n    assert (\n        container.validity_error is None\n    ), f\"Valid container with validity error: {container.validity_error}\"\n    eof_test(\n        data=container,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation/#tests.prague.eip7692_eof_v1.eip7480_data_section.test_code_validation.test_legacy_initcode_invalid_eof_v1_contract","title":"test_legacy_initcode_invalid_eof_v1_contract(eof_test, container)","text":"

    Test creating various types of valid EOF V1 contracts using legacy initcode and a contract creating transaction.

    Source code in tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py
    @pytest.mark.parametrize(\n    \"container\",\n    INVALID,\n    ids=container_name,\n)\ndef test_legacy_initcode_invalid_eof_v1_contract(\n    eof_test: EOFTestFiller,\n    container: Container,\n):\n    \"\"\"\n    Test creating various types of valid EOF V1 contracts using legacy\n    initcode and a contract creating transaction.\n    \"\"\"\n    assert container.validity_error is not None, \"Invalid container without validity error\"\n    eof_test(\n        data=container,\n        expect_exception=container.validity_error,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation/index/test_cases/","title":"Test Code Validation - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py:

    test_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-empty_data_section]\ntest_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-small_data_section]\ntest_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-large_data_section]\ntest_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-max_data_section]\ntest_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-DATALOADN_zero]\ntest_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-DATALOADN_middle]\ntest_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-DATALOADN_edge]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-DATALOADN_max_empty_data]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-DATALOADN_max_small_data]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-DATALOADN_max_half_data]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-data_section_over_container_limit]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes/","title":"Test Data Opcodes","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Execution of DATA* opcodes within EOF V1 containers tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes/#tests.prague.eip7692_eof_v1.eip7480_data_section.test_data_opcodes.test_data_section_succeed","title":"test_data_section_succeed(state_test, pre, offset, datasize)","text":"

    Test simple contracts that are simply expected to succeed on call.

    Source code in tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py
    @pytest.mark.parametrize(\n    [\"offset\", \"datasize\"],\n    [\n        pytest.param(0, 0, id=\"empty_zero\"),\n        pytest.param(0, 2, id=\"short_zero\"),\n        pytest.param(0, 32, id=\"exact_zero\"),\n        pytest.param(0, 64, id=\"large_zero\"),\n        pytest.param(32, 0, id=\"empty_32\"),\n        pytest.param(32, 34, id=\"short_32\"),\n        pytest.param(32, 64, id=\"exact_32\"),\n        pytest.param(32, 96, id=\"large_32\"),\n        pytest.param(0x5BFE, 0, id=\"empty_23k\"),\n        pytest.param(0x5BFE, 0x5C00, id=\"short_23k\"),\n        pytest.param(0x5BE0, 0x5D00, id=\"exact_23k\"),\n        pytest.param(0x2345, 0x5C00, id=\"large_23k\"),\n    ],\n)\ndef test_data_section_succeed(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    offset: int,\n    datasize: int,\n):\n    \"\"\"\n    Test simple contracts that are simply expected to succeed on call.\n    \"\"\"\n    env = Environment()\n\n    (container, expected_storage) = create_data_test(offset, datasize)\n    callee_contract = pre.deploy_contract(code=container)\n    entry_point = pre.deploy_contract(\n        code=Op.SSTORE(0, Op.DELEGATECALL(Op.GAS, callee_contract, 0, 0, 0, 0)) + Op.STOP()\n    )\n    sender = pre.fund_eoa()\n\n    tx = Transaction(\n        to=entry_point,\n        gas_limit=50000000,\n        gas_price=10,\n        protected=False,\n        data=\"\",\n        sender=sender,\n    )\n\n    post = {entry_point: Account(storage=expected_storage)}\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes/index/test_cases/","title":"Test Data Opcodes - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py:

    test_data_section_succeed[fork_CancunEIP7692-blockchain_test-empty_zero]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-short_zero]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-exact_zero]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-large_zero]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-empty_32]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-short_32]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-exact_32]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-large_32]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-empty_23k]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-short_23k]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-exact_23k]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-large_23k]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-empty_zero]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-short_zero]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-exact_zero]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-large_zero]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-empty_32]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-short_32]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-exact_32]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-large_32]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-empty_23k]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-short_23k]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-exact_23k]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-large_23k]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-empty_zero]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-short_zero]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-exact_zero]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-large_zero]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-empty_32]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-short_32]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-exact_32]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-large_32]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-empty_23k]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-short_23k]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-exact_23k]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-large_23k]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion/","title":"Test Datacopy Memory Expansion","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Memory expansion tests for DATACOPY

    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion/#tests.prague.eip7692_eof_v1.eip7480_data_section.test_datacopy_memory_expansion.test_datacopy_memory_expansion","title":"test_datacopy_memory_expansion(state_test, env, pre, post, tx)","text":"

    Perform DATACOPY operations that expand the memory, and verify the gas it costs to do so.

    Source code in tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py
    @pytest.mark.parametrize(\n    \"dest,src,length\",\n    [\n        (0x00, 0x00, 0x01),\n        (0x100, 0x00, 0x01),\n        (0x1F, 0x00, 0x01),\n        (0x20, 0x00, 0x01),\n        (0x1000, 0x00, 0x01),\n        (0x1000, 0x00, 0x40),\n        (0x00, 0x00, 0x00),\n        (2**256 - 1, 0x00, 0x00),\n        (0x00, 2**256 - 1, 0x00),\n        (2**256 - 1, 2**256 - 1, 0x00),\n    ],\n    ids=[\n        \"single_byte_expansion\",\n        \"single_byte_expansion_2\",\n        \"single_byte_expansion_word_boundary\",\n        \"single_byte_expansion_word_boundary_2\",\n        \"multi_word_expansion\",\n        \"multi_word_expansion_2\",\n        \"zero_length_expansion\",\n        \"huge_dest_zero_length\",\n        \"huge_src_zero_length\",\n        \"huge_dest_huge_src_zero_length\",\n    ],\n)\n@pytest.mark.parametrize(\"successful\", [True, False])\n@pytest.mark.parametrize(\n    \"initial_memory\",\n    [\n        bytes(range(0x00, 0x100)),\n        bytes(),\n    ],\n    ids=[\n        \"from_existent_memory\",\n        \"from_empty_memory\",\n    ],\n)\n@pytest.mark.parametrize(\n    \"data_section\",\n    [\n        bytes(),\n        b\"\\xfc\",\n        bytes(range(0x00, 0x20)),\n        bytes(range(0x00, 0x100)),\n    ],\n    ids=[\"empty_data_section\", \"byte_data_section\", \"word_data_section\", \"large_data_section\"],\n)\ndef test_datacopy_memory_expansion(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    post: Mapping[str, Account],\n    tx: Transaction,\n):\n    \"\"\"\n    Perform DATACOPY operations that expand the memory, and verify the gas it costs to do so.\n    \"\"\"\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion/#tests.prague.eip7692_eof_v1.eip7480_data_section.test_datacopy_memory_expansion.test_datacopy_huge_memory_expansion","title":"test_datacopy_huge_memory_expansion(state_test, env, pre, post, tx)","text":"

    Perform DATACOPY operations that expand the memory by huge amounts, and verify that it correctly runs out of gas.

    Source code in tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py
    @pytest.mark.parametrize(\n    \"dest,src,length\",\n    [\n        (2**256 - 1, 0x00, 0x01),\n        (2**256 - 2, 0x00, 0x01),\n        (2**255 - 1, 0x00, 0x01),\n        (0x00, 0x00, 2**256 - 1),\n        (0x00, 0x00, 2**256 - 2),\n        (0x00, 0x00, 2**255 - 1),\n    ],\n    ids=[\n        \"max_dest_single_byte_expansion\",\n        \"max_dest_minus_one_single_byte_expansion\",\n        \"half_max_dest_single_byte_expansion\",\n        \"max_length_expansion\",\n        \"max_length_minus_one_expansion\",\n        \"half_max_length_expansion\",\n    ],\n)\n@pytest.mark.parametrize(\n    \"subcall_exact_cost\",\n    [2**128 - 1],\n    ids=[\"\"],\n)  # Limit subcall gas, otherwise it would be impossibly large\n@pytest.mark.parametrize(\"successful\", [False])\n@pytest.mark.parametrize(\n    \"initial_memory\",\n    [\n        bytes(range(0x00, 0x100)),\n        bytes(),\n    ],\n    ids=[\n        \"from_existent_memory\",\n        \"from_empty_memory\",\n    ],\n)\n@pytest.mark.parametrize(\n    \"data_section\",\n    [\n        bytes(),\n        b\"\\xfc\",\n        bytes(range(0x00, 0x20)),\n        bytes(range(0x00, 0x100)),\n    ],\n    ids=[\"empty_data_section\", \"byte_data_section\", \"word_data_section\", \"large_data_section\"],\n)\ndef test_datacopy_huge_memory_expansion(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Mapping[str, Account],\n    post: Mapping[str, Account],\n    tx: Transaction,\n):\n    \"\"\"\n    Perform DATACOPY operations that expand the memory by huge amounts, and verify that it\n    correctly runs out of gas.\n    \"\"\"\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion/index/test_cases/","title":"Test Datacopy Memory Expansion - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py:

    test_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False--half_max_length_expansion]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/","title":"EIP-7620 Eof Create","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOFCREATE, RETURNCONTRACT, and container tests

    evmone tests not ported

    create_tx_with_eof_initcode - This calls it invalid, it is now the way to add EOF contacts to state eofcreate_extcall_returncontract - per the new initcode mode tests you cannot have RETURNCONTRACT in a deployed contract eofcreate_dataloadn_referring_to_auxdata - covered by tests.prague.eip7480_data_section.test_data_opcodes.test_data_section_succeed eofcreate_initcontainer_return - RETURN is banned in initcode containers eofcreate_initcontainer_stop - STOP is banned in initcode containers All TXCREATE tests - TXCREATE has been removed from Prague

    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/spec.py.

    EOF V1 Constants used throughout all tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/","title":"Test Eofcreate","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Test good and bad EOFCREATE cases

    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate.test_simple_eofcreate","title":"test_simple_eofcreate(state_test, pre)","text":"

    Verifies a simple EOFCREATE case

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py
    def test_simple_eofcreate(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Verifies a simple EOFCREATE case\n    \"\"\"\n    env = Environment()\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(0, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.STOP,\n                ),\n                Section.Container(container=smallest_initcode_subcontainer),\n            ],\n            data=b\"abcdef\",\n        ),\n        storage={0: 0xB17D},  # a canary to be overwritten\n    )\n    # Storage in 0 should have the address,\n    post = {\n        contract_address: Account(\n            storage={\n                0: compute_eofcreate_address(contract_address, 0, smallest_initcode_subcontainer)\n            }\n        )\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate.test_eofcreate_then_call","title":"test_eofcreate_then_call(state_test, pre)","text":"

    Verifies a simple EOFCREATE case, and then calls the deployed contract

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py
    def test_eofcreate_then_call(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Verifies a simple EOFCREATE case, and then calls the deployed contract\n    \"\"\"\n    env = Environment()\n    callable_contract = Container(\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP,\n            ),\n        ]\n    )\n    callable_contract_initcode = Container(\n        sections=[\n            Section.Code(\n                code=Op.RETURNCONTRACT[0](0, 0),\n            ),\n            Section.Container(container=callable_contract),\n        ]\n    )\n\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                    + Op.EXTCALL(Op.SLOAD(slot_create_address), 0, 0, 0)\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                ),\n                Section.Container(container=callable_contract_initcode),\n            ],\n        )\n    )\n\n    callable_address = compute_eofcreate_address(contract_address, 0, callable_contract_initcode)\n\n    # Storage in 0 should have the address,\n    #\n    post = {\n        contract_address: Account(\n            storage={slot_create_address: callable_address, slot_code_worked: value_code_worked}\n        ),\n        callable_address: Account(storage={slot_code_worked: value_code_worked}),\n    }\n\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate.test_auxdata_variations","title":"test_auxdata_variations(state_test, pre, auxdata_bytes)","text":"

    Verifies that auxdata bytes are correctly handled in RETURNCONTRACT

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py
    @pytest.mark.parametrize(\n    \"auxdata_bytes\",\n    [\n        pytest.param(b\"\", id=\"zero\"),\n        pytest.param(b\"aabbcc\", id=\"short\"),\n        pytest.param(b\"aabbccddeef\", id=\"one_byte_short\"),\n        pytest.param(b\"aabbccddeeff\", id=\"exact\"),\n        pytest.param(b\"aabbccddeeffg\", id=\"one_byte_long\"),\n        pytest.param(b\"aabbccddeeffgghhii\", id=\"extra\"),\n    ],\n)\ndef test_auxdata_variations(state_test: StateTestFiller, pre: Alloc, auxdata_bytes: bytes):\n    \"\"\"\n    Verifies that auxdata bytes are correctly handled in RETURNCONTRACT\n    \"\"\"\n    env = Environment()\n    auxdata_size = len(auxdata_bytes)\n    pre_deploy_header_data_size = 18\n    pre_deploy_data = b\"AABBCC\"\n    deploy_success = len(auxdata_bytes) + len(pre_deploy_data) >= pre_deploy_header_data_size\n\n    runtime_subcontainer = Container(\n        name=\"Runtime Subcontainer with truncated data\",\n        sections=[\n            Section.Code(code=Op.STOP),\n            Section.Data(data=pre_deploy_data, custom_size=pre_deploy_header_data_size),\n        ],\n    )\n\n    initcode_subcontainer = Container(\n        name=\"Initcode Subcontainer\",\n        sections=[\n            Section.Code(\n                code=Op.MSTORE(0, Op.PUSH32(auxdata_bytes.ljust(32, b\"\\0\")))\n                + Op.RETURNCONTRACT[0](0, auxdata_size),\n            ),\n            Section.Container(container=runtime_subcontainer),\n        ],\n    )\n\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.STOP,\n                ),\n                Section.Container(container=initcode_subcontainer),\n            ]\n        ),\n        storage={slot_create_address: value_canary_to_be_overwritten},\n    )\n\n    # Storage in 0 should have the address,\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: compute_eofcreate_address(\n                    contract_address, 0, initcode_subcontainer\n                )\n                if deploy_success\n                else b\"\\0\"\n            }\n        )\n    }\n\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate.test_calldata","title":"test_calldata(state_test, pre)","text":"

    Verifies CALLDATA passing through EOFCREATE

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py
    def test_calldata(state_test: StateTestFiller, pre: Alloc):\n    \"\"\"\n    Verifies CALLDATA passing through EOFCREATE\n    \"\"\"\n    env = Environment()\n\n    initcode_subcontainer = Container(\n        name=\"Initcode Subcontainer\",\n        sections=[\n            Section.Code(\n                code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n                + Op.SSTORE(slot_calldata, Op.MLOAD(0))\n                + Op.RETURNCONTRACT[0](0, Op.CALLDATASIZE),\n            ),\n            Section.Container(container=smallest_runtime_subcontainer),\n        ],\n    )\n\n    calldata_size = 32\n    calldata = b\"\\x45\" * calldata_size\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.MSTORE(0, Op.PUSH32(calldata))\n                    + Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, calldata_size))\n                    + Op.STOP,\n                ),\n                Section.Container(container=initcode_subcontainer),\n            ]\n        )\n    )\n\n    # deployed contract is smallest plus data\n    deployed_contract = Container(\n        name=\"deployed contract\",\n        sections=[\n            *smallest_runtime_subcontainer.sections,\n            Section.Data(data=calldata),\n        ],\n    )\n    # factory contract Storage in 0 should have the created address,\n    # created contract storage in 0 should have the calldata\n    created_address = compute_eofcreate_address(contract_address, 0, initcode_subcontainer)\n    post = {\n        contract_address: Account(storage={slot_create_address: created_address}),\n        created_address: Account(code=deployed_contract, storage={slot_calldata: calldata}),\n    }\n\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate.test_eofcreate_in_initcode","title":"test_eofcreate_in_initcode(state_test, pre)","text":"

    Verifies an EOFCREATE occuring within initcode creates that contract

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py
    def test_eofcreate_in_initcode(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Verifies an EOFCREATE occuring within initcode creates that contract\n    \"\"\"\n    nested_initcode_subcontainer = Container(\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                + Op.SSTORE(slot_code_worked, value_code_worked)\n                + Op.RETURNCONTRACT[1](0, 0),\n            ),\n            Section.Container(container=smallest_initcode_subcontainer),\n            Section.Container(container=smallest_runtime_subcontainer),\n        ]\n    )\n\n    env = Environment()\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                ),\n                Section.Container(container=nested_initcode_subcontainer),\n            ]\n        )\n    )\n\n    outer_address = compute_eofcreate_address(contract_address, 0, nested_initcode_subcontainer)\n    inner_address = compute_eofcreate_address(outer_address, 0, smallest_initcode_subcontainer)\n    post = {\n        contract_address: Account(\n            storage={slot_create_address: outer_address, slot_code_worked: value_code_worked}\n        ),\n        outer_address: Account(\n            storage={slot_create_address: inner_address, slot_code_worked: value_code_worked}\n        ),\n    }\n\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate.test_eofcreate_in_initcode_reverts","title":"test_eofcreate_in_initcode_reverts(state_test, pre)","text":"

    Verifies an EOFCREATE occuring in an initcode is rolled back when the initcode reverts

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py
    def test_eofcreate_in_initcode_reverts(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Verifies an EOFCREATE occuring in an initcode is rolled back when the initcode reverts\n    \"\"\"\n    nested_initcode_subcontainer = Container(\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                + Op.SSTORE(slot_code_worked, value_code_worked)\n                + Op.REVERT(0, 0),\n            ),\n            Section.Container(container=smallest_initcode_subcontainer),\n        ]\n    )\n\n    env = Environment()\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                ),\n                Section.Container(container=nested_initcode_subcontainer),\n            ]\n        ),\n        storage={slot_create_address: value_canary_to_be_overwritten},\n    )\n\n    outer_address = compute_eofcreate_address(contract_address, 0, nested_initcode_subcontainer)\n    inner_address = compute_eofcreate_address(outer_address, 0, smallest_initcode_subcontainer)\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: 0,\n                slot_code_worked: value_code_worked,\n            }\n        ),\n        outer_address: Account.NONEXISTENT,\n        inner_address: Account.NONEXISTENT,\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate.test_return_data_cleared","title":"test_return_data_cleared(state_test, pre)","text":"

    Verifies the return data is not re-used from a extcall but is cleared upon eofcreate

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py
    def test_return_data_cleared(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Verifies the return data is not re-used from a extcall but is cleared upon eofcreate\n    \"\"\"\n    env = Environment()\n    value_return_canary = 0x4158675309\n    value_return_canary_size = 5\n    callable_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.MSTORE(0, value_return_canary)\n                    + Op.RETURN(0, value_return_canary_size),\n                )\n            ]\n        )\n    )\n\n    slot_returndata_size_2 = slot_last_slot * 2 + slot_returndata_size\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_call_result, Op.EXTCALL(callable_address, 0, 0, 0))\n                    + Op.SSTORE(slot_returndata_size, Op.RETURNDATASIZE)\n                    + Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                    + Op.SSTORE(slot_returndata_size_2, Op.RETURNDATASIZE)\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                ),\n                Section.Container(container=smallest_initcode_subcontainer),\n            ],\n        )\n    )\n\n    new_contract_address = compute_eofcreate_address(\n        contract_address, 0, smallest_initcode_subcontainer\n    )\n    post = {\n        contract_address: Account(\n            storage={\n                slot_call_result: value_eof_call_result_success,\n                slot_returndata_size: value_return_canary_size,\n                slot_create_address: new_contract_address,\n                slot_returndata_size_2: 0,\n                slot_code_worked: value_code_worked,\n            },\n            nonce=2,\n        ),\n        callable_address: Account(nonce=1),\n        new_contract_address: Account(nonce=1),\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate.test_address_collision","title":"test_address_collision(state_test, pre)","text":"

    Verifies a simple EOFCREATE case

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py
    def test_address_collision(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Verifies a simple EOFCREATE case\n    \"\"\"\n    env = Environment()\n\n    slot_create_address_2 = slot_last_slot * 2 + slot_create_address\n    slot_create_address_3 = slot_last_slot * 3 + slot_create_address\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                    + Op.SSTORE(slot_create_address_2, Op.EOFCREATE[0](0, 0, 0, 0))\n                    + Op.SSTORE(slot_create_address_3, Op.EOFCREATE[0](0, 1, 0, 0))\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                ),\n                Section.Container(container=smallest_initcode_subcontainer),\n            ],\n        )\n    )\n    salt_zero_address = compute_eofcreate_address(\n        contract_address, 0, smallest_initcode_subcontainer\n    )\n    salt_one_address = compute_eofcreate_address(\n        contract_address, 1, smallest_initcode_subcontainer\n    )\n\n    # Hard-code address for collision, no other way to do this.\n    # We should mark tests that do this, and fail on unmarked tests.\n    pre[salt_one_address] = Account(balance=1, nonce=1)\n\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: salt_zero_address,\n                slot_create_address_2: value_create_failed,  # had an in-transaction collision\n                slot_create_address_3: value_create_failed,  # had a pre-existing collision\n                slot_code_worked: value_code_worked,\n            }\n        )\n    }\n\n    # Multiple create fails is expensive, use an absurd amount of gas\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=300_000_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate.test_eofcreate_revert_eof_returndata","title":"test_eofcreate_revert_eof_returndata(state_test, pre)","text":"

    Verifies the return data is not being deployed, even if happens to be valid EOF

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py
    def test_eofcreate_revert_eof_returndata(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Verifies the return data is not being deployed, even if happens to be valid EOF\n    \"\"\"\n    env = Environment()\n    code_reverts_with_calldata = Container(\n        name=\"Initcode Subcontainer reverting with its calldata\",\n        sections=[\n            Section.Code(\n                code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.REVERT(0, Op.CALLDATASIZE),\n            ),\n        ],\n    )\n\n    sender = pre.fund_eoa()\n    salt = 0\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n                    + Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, salt, 0, Op.CALLDATASIZE))\n                    + Op.SSTORE(slot_returndata_size, Op.RETURNDATASIZE)\n                    + Op.STOP,\n                ),\n                Section.Container(container=code_reverts_with_calldata),\n            ],\n        ),\n        storage={slot_create_address: value_canary_to_be_overwritten},\n    )\n    eof_create_address = compute_eofcreate_address(\n        contract_address, salt, code_reverts_with_calldata\n    )\n\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: 0,\n                slot_returndata_size: len(smallest_runtime_subcontainer),\n            },\n        ),\n        eof_create_address: Account.NONEXISTENT,\n    }\n\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=1_000_000,\n        sender=sender,\n        # Simplest possible valid EOF container, which is going to be\n        # revert-returned from initcode and must not end up being deployed.\n        data=smallest_runtime_subcontainer,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate.test_eofcreate_invalid_index","title":"test_eofcreate_invalid_index(eof_test, index)","text":"

    Referring to non-existent container section index

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py
    @pytest.mark.parametrize(\"index\", [1, 255], ids=lambda x: x)\ndef test_eofcreate_invalid_index(\n    eof_test: EOFTestFiller,\n    index: int,\n):\n    \"\"\"Referring to non-existent container section index\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.EOFCREATE[index](0, 0, 0, 0) + Op.STOP,\n                ),\n                Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)])),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_CONTAINER_SECTION_INDEX,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/index/test_cases/","title":"Test Eofcreate - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py:

    test_simple_eofcreate[fork_CancunEIP7692-blockchain_test]\ntest_simple_eofcreate[fork_CancunEIP7692-blockchain_test_engine]\ntest_simple_eofcreate[fork_CancunEIP7692-state_test]\ntest_eofcreate_then_call[fork_CancunEIP7692-blockchain_test]\ntest_eofcreate_then_call[fork_CancunEIP7692-blockchain_test_engine]\ntest_eofcreate_then_call[fork_CancunEIP7692-state_test]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test-zero]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test-short]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test-one_byte_short]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test-exact]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test-one_byte_long]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test-extra]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test_engine-zero]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test_engine-short]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test_engine-one_byte_short]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test_engine-exact]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test_engine-one_byte_long]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test_engine-extra]\ntest_auxdata_variations[fork_CancunEIP7692-state_test-zero]\ntest_auxdata_variations[fork_CancunEIP7692-state_test-short]\ntest_auxdata_variations[fork_CancunEIP7692-state_test-one_byte_short]\ntest_auxdata_variations[fork_CancunEIP7692-state_test-exact]\ntest_auxdata_variations[fork_CancunEIP7692-state_test-one_byte_long]\ntest_auxdata_variations[fork_CancunEIP7692-state_test-extra]\ntest_calldata[fork_CancunEIP7692-blockchain_test]\ntest_calldata[fork_CancunEIP7692-blockchain_test_engine]\ntest_calldata[fork_CancunEIP7692-state_test]\ntest_eofcreate_in_initcode[fork_CancunEIP7692-blockchain_test]\ntest_eofcreate_in_initcode[fork_CancunEIP7692-blockchain_test_engine]\ntest_eofcreate_in_initcode[fork_CancunEIP7692-state_test]\ntest_eofcreate_in_initcode_reverts[fork_CancunEIP7692-blockchain_test]\ntest_eofcreate_in_initcode_reverts[fork_CancunEIP7692-blockchain_test_engine]\ntest_eofcreate_in_initcode_reverts[fork_CancunEIP7692-state_test]\ntest_return_data_cleared[fork_CancunEIP7692-blockchain_test]\ntest_return_data_cleared[fork_CancunEIP7692-blockchain_test_engine]\ntest_return_data_cleared[fork_CancunEIP7692-state_test]\ntest_address_collision[fork_CancunEIP7692-blockchain_test]\ntest_address_collision[fork_CancunEIP7692-blockchain_test_engine]\ntest_address_collision[fork_CancunEIP7692-state_test]\ntest_eofcreate_revert_eof_returndata[fork_CancunEIP7692-blockchain_test]\ntest_eofcreate_revert_eof_returndata[fork_CancunEIP7692-blockchain_test_engine]\ntest_eofcreate_revert_eof_returndata[fork_CancunEIP7692-state_test]\ntest_eofcreate_invalid_index[fork_CancunEIP7692-eof_test-1]\ntest_eofcreate_invalid_index[fork_CancunEIP7692-eof_test-255]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/","title":"Test Eofcreate Failures","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Test good and bad EOFCREATE cases

    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_initcode_revert","title":"test_initcode_revert(state_test, pre, revert)","text":"

    Verifies proper handling of REVERT in initcode

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    @pytest.mark.parametrize(\n    \"revert\",\n    [\n        pytest.param(b\"\", id=\"empty\"),\n        pytest.param(b\"\\x08\\xc3\\x79\\xa0\", id=\"Error(string)\"),\n    ],\n)\ndef test_initcode_revert(state_test: StateTestFiller, pre: Alloc, revert: bytes):\n    \"\"\"\n    Verifies proper handling of REVERT in initcode\n    \"\"\"\n    env = Environment()\n    revert_size = len(revert)\n\n    initcode_subcontainer = Container(\n        name=\"Initcode Subcontainer that reverts\",\n        sections=[\n            Section.Code(\n                code=Op.MSTORE(0, Op.PUSH32(revert)) + Op.REVERT(32 - revert_size, revert_size),\n            ),\n        ],\n    )\n\n    factory_contract = Container(\n        name=\"factory contract\",\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                + Op.SSTORE(slot_returndata_size, Op.RETURNDATASIZE)\n                + Op.RETURNDATACOPY(Op.SUB(32, Op.RETURNDATASIZE), 0, Op.RETURNDATASIZE)\n                + Op.SSTORE(slot_returndata, Op.MLOAD(0))\n                + Op.SSTORE(slot_code_worked, value_code_worked)\n                + Op.STOP,\n            ),\n            Section.Container(container=initcode_subcontainer),\n        ],\n    )\n\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(code=factory_contract)\n\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: value_create_failed,\n                slot_returndata_size: revert_size,\n                slot_returndata: revert,\n                slot_code_worked: value_code_worked,\n            }\n        )\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_initcode_aborts","title":"test_initcode_aborts(state_test, pre)","text":"

    Verifies correct handling of a halt in EOF initcode

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    def test_initcode_aborts(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Verifies correct handling of a halt in EOF initcode\n    \"\"\"\n    env = Environment()\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                ),\n                Section.Container(container=aborting_container),\n            ]\n        )\n    )\n    # Storage in slot_create_address should not have the address,\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: value_create_failed,\n                slot_code_worked: value_code_worked,\n            }\n        )\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_eofcreate_deploy_sizes","title":"test_eofcreate_deploy_sizes(state_test, pre, target_deploy_size)","text":"

    Verifies a mix of runtime contract sizes mixing success and multiple size failure modes.

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    @pytest.mark.parametrize(\n    \"target_deploy_size\",\n    [\n        pytest.param(0x4000, id=\"large\"),\n        pytest.param(MAX_BYTECODE_SIZE, id=\"max\"),\n        pytest.param(MAX_BYTECODE_SIZE + 1, id=\"overmax\"),\n        pytest.param(MAX_INITCODE_SIZE - factory_size, id=\"initcodemax\"),\n        pytest.param(\n            MAX_INITCODE_SIZE - factory_size + 1,\n            id=\"initcodeovermax\",\n            marks=pytest.mark.skip(\"Oversized container in pre-alloc\"),\n        ),\n        pytest.param(\n            0xFFFF - factory_size,\n            id=\"64k-1\",\n            marks=pytest.mark.skip(\"Oversized container in pre-alloc\"),\n        ),\n    ],\n)\ndef test_eofcreate_deploy_sizes(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    target_deploy_size: int,\n):\n    \"\"\"\n    Verifies a mix of runtime contract sizes mixing success and multiple size failure modes.\n    \"\"\"\n    env = Environment()\n\n    runtime_container = Container(\n        sections=[\n            Section.Code(\n                code=Op.JUMPDEST * (target_deploy_size - len(smallest_runtime_subcontainer))\n                + Op.STOP,\n            ),\n        ]\n    )\n\n    initcode_subcontainer = Container(\n        name=\"Initcode Subcontainer\",\n        sections=[\n            Section.Code(\n                code=Op.RETURNCONTRACT[0](0, 0),\n            ),\n            Section.Container(container=runtime_container),\n        ],\n    )\n\n    factory_container = Container(\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                + Op.SSTORE(slot_code_worked, value_code_worked)\n                + Op.STOP,\n            ),\n            Section.Container(container=initcode_subcontainer),\n        ]\n    )\n\n    assert factory_size == (\n        len(factory_container) - len(runtime_container)\n    ), \"factory_size is wrong, expected factory_size is %d, calculated is %d\" % (\n        factory_size,\n        len(factory_container),\n    )\n\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(code=factory_container)\n    # Storage in 0 should have the address,\n    # Storage 1 is a canary of 1 to make sure it tried to execute, which also covers cases of\n    #   data+code being greater than initcode_size_max, which is allowed.\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: compute_eofcreate_address(\n                    contract_address, 0, initcode_subcontainer\n                )\n                if target_deploy_size <= MAX_BYTECODE_SIZE\n                else value_create_failed,\n                slot_code_worked: value_code_worked,\n            }\n        )\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_eofcreate_deploy_sizes_tx","title":"test_eofcreate_deploy_sizes_tx(state_test, target_deploy_size)","text":"

    Verifies a mix of runtime contract sizes mixing success and multiple size failure modes where the initcontainer is included in a transaction

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    @pytest.mark.parametrize(\n    \"target_deploy_size\",\n    [\n        pytest.param(0x4000, id=\"large\"),\n        pytest.param(MAX_BYTECODE_SIZE, id=\"max\"),\n        pytest.param(MAX_BYTECODE_SIZE + 1, id=\"overmax\"),\n        pytest.param(MAX_INITCODE_SIZE - factory_size, id=\"initcodemax\"),\n        pytest.param(MAX_INITCODE_SIZE - factory_size + 1, id=\"initcodeovermax\"),\n        pytest.param(0xFFFF - factory_size, id=\"64k-1\"),\n    ],\n)\n@pytest.mark.skip(\"Not implemented\")\ndef test_eofcreate_deploy_sizes_tx(\n    state_test: StateTestFiller,\n    target_deploy_size: int,\n):\n    \"\"\"\n    Verifies a mix of runtime contract sizes mixing success and multiple size failure modes\n    where the initcontainer is included in a transaction\n    \"\"\"\n    raise NotImplementedError(\"Not implemented\")\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_auxdata_size_failures","title":"test_auxdata_size_failures(state_test, pre, auxdata_size)","text":"

    Exercises a number of auxdata size violations, and one maxcode success

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    @pytest.mark.parametrize(\n    \"auxdata_size\",\n    [\n        pytest.param(MAX_BYTECODE_SIZE - len(smallest_runtime_subcontainer), id=\"maxcode\"),\n        pytest.param(MAX_BYTECODE_SIZE - len(smallest_runtime_subcontainer) + 1, id=\"overmaxcode\"),\n        pytest.param(0x10000 - 60, id=\"almost64k\"),\n        pytest.param(0x10000 - 1, id=\"64k-1\"),\n        pytest.param(0x10000, id=\"64k\"),\n        pytest.param(0x10000 + 1, id=\"over64k\"),\n    ],\n)\ndef test_auxdata_size_failures(state_test: StateTestFiller, pre: Alloc, auxdata_size: int):\n    \"\"\"\n    Exercises a number of auxdata size violations, and one maxcode success\n    \"\"\"\n    env = Environment()\n    auxdata_bytes = b\"a\" * auxdata_size\n\n    initcode_subcontainer = Container(\n        name=\"Initcode Subcontainer\",\n        sections=[\n            Section.Code(\n                code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n                + Op.RETURNCONTRACT[0](0, Op.CALLDATASIZE),\n            ),\n            Section.Container(container=smallest_runtime_subcontainer),\n        ],\n    )\n\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n                    + Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, Op.CALLDATASIZE))\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                ),\n                Section.Container(container=initcode_subcontainer),\n            ]\n        )\n    )\n\n    deployed_container_size = len(smallest_runtime_subcontainer) + auxdata_size\n\n    # Storage in 0 will have address in first test, 0 in all other cases indicating failure\n    # Storage 1 in 1 is a canary to see if EOFCREATE opcode halted\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: compute_eofcreate_address(\n                    contract_address, 0, initcode_subcontainer\n                )\n                if deployed_container_size <= MAX_BYTECODE_SIZE\n                else 0,\n                slot_code_worked: value_code_worked,\n            }\n        )\n    }\n\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n        data=auxdata_bytes,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_eofcreate_insufficient_stipend","title":"test_eofcreate_insufficient_stipend(state_test, pre, value)","text":"

    Exercises an EOFCREATE that fails because the calling account does not have enough ether to pay the stipend

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    @pytest.mark.parametrize(\n    \"value\",\n    [\n        pytest.param(1, id=\"1_wei\"),\n        pytest.param(10**9, id=\"1_gwei\"),\n    ],\n)\ndef test_eofcreate_insufficient_stipend(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    value: int,\n):\n    \"\"\"\n    Exercises an EOFCREATE that fails because the calling account does not have enough ether to\n    pay the stipend\n    \"\"\"\n    env = Environment()\n    initcode_container = Container(\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](value, 0, 0, 0))\n                + Op.SSTORE(slot_code_worked, value_code_worked)\n                + Op.STOP,\n            ),\n            Section.Container(container=smallest_initcode_subcontainer),\n        ]\n    )\n    sender = pre.fund_eoa(10**11)\n    contract_address = pre.deploy_contract(\n        code=initcode_container,\n        balance=value - 1,\n    )\n    # create will fail but not trigger a halt, so canary at storage 1 should be set\n    # also validate target created contract fails\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: value_create_failed,\n                slot_code_worked: value_code_worked,\n            }\n        ),\n        compute_eofcreate_address(contract_address, 0, initcode_container): Account.NONEXISTENT,\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_insufficient_initcode_gas","title":"test_insufficient_initcode_gas(state_test, pre)","text":"

    Excercises an EOFCREATE when there is not enough gas for the initcode charge

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    def test_insufficient_initcode_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Excercises an EOFCREATE when there is not enough gas for the initcode charge\n    \"\"\"\n    env = Environment()\n\n    initcode_data = b\"a\" * 0x5000\n    initcode_container = Container(\n        name=\"Large Initcode Subcontainer\",\n        sections=[\n            Section.Code(\n                code=Op.RETURNCONTRACT[0](0, 0),\n            ),\n            Section.Container(container=smallest_runtime_subcontainer),\n            Section.Data(data=initcode_data),\n        ],\n    )\n\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                    + Op.SSTORE(slot_code_should_fail, value_code_worked)\n                    + Op.STOP,\n                ),\n                Section.Container(container=initcode_container),\n            ],\n        ),\n        storage={\n            slot_create_address: value_canary_should_not_change,\n            slot_code_should_fail: value_canary_should_not_change,\n        },\n    )\n    # enough gas for everything but EVM opcodes and EIP-150 reserves\n    gas_limit = 21_000 + 32_000 + (len(initcode_data) + 31) // 32 * 6\n    # out_of_gas is triggered, so canary won't set value\n    # also validate target created contract fails\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: value_canary_should_not_change,\n                slot_code_should_fail: value_canary_should_not_change,\n            },\n        ),\n        compute_eofcreate_address(contract_address, 0, initcode_container): Account.NONEXISTENT,\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=gas_limit,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_insufficient_gas_memory_expansion","title":"test_insufficient_gas_memory_expansion(state_test, pre)","text":"

    Excercises an EOFCREATE when the memory for auxdata has not been expanded but is requested

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    def test_insufficient_gas_memory_expansion(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Excercises an EOFCREATE when the memory for auxdata has not been expanded but is requested\n    \"\"\"\n    env = Environment()\n\n    auxdata_size = 0x5000\n    initcode_container = Container(\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, auxdata_size))\n                + Op.SSTORE(slot_code_should_fail, slot_code_worked)\n                + Op.STOP,\n            ),\n            Section.Container(container=smallest_initcode_subcontainer),\n        ],\n    )\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=initcode_container,\n        storage={\n            slot_create_address: value_canary_should_not_change,\n            slot_code_should_fail: value_canary_should_not_change,\n        },\n    )\n    # enough gas for everything but EVM opcodes and EIP-150 reserves\n    initcode_container_words = (len(initcode_container) + 31) // 32\n    auxdata_size_words = (auxdata_size + 31) // 32\n    gas_limit = (\n        21_000\n        + 32_000\n        + initcode_container_words * 6\n        + 3 * auxdata_size_words\n        + auxdata_size_words * auxdata_size_words // 512\n    )\n    # out_of_gas is triggered, so canary won't set value\n    # also validate target created contract fails\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: value_canary_should_not_change,\n                slot_code_should_fail: value_canary_should_not_change,\n            },\n        ),\n        compute_eofcreate_address(contract_address, 0, initcode_container): Account.NONEXISTENT,\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=gas_limit,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_insufficient_returncontract_auxdata_gas","title":"test_insufficient_returncontract_auxdata_gas(state_test, pre)","text":"

    Excercises an EOFCREATE when there is not enough gas for the initcode charge

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    def test_insufficient_returncontract_auxdata_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Excercises an EOFCREATE when there is not enough gas for the initcode charge\n    \"\"\"\n    env = Environment()\n\n    auxdata_size = 0x5000\n    initcode_container = Container(\n        name=\"Large Initcode Subcontainer\",\n        sections=[\n            Section.Code(\n                code=Op.RETURNCONTRACT[0](0, auxdata_size),\n            ),\n            Section.Container(container=smallest_runtime_subcontainer),\n        ],\n    )\n\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                    + Op.SSTORE(slot_code_should_fail, value_code_worked)\n                    + Op.STOP,\n                ),\n                Section.Container(container=initcode_container),\n            ],\n        ),\n        storage={\n            slot_create_address: value_canary_should_not_change,\n            slot_code_should_fail: value_canary_should_not_change,\n        },\n    )\n    # enough gas for everything but EVM opcodes and EIP-150 reserves\n    initcode_container_words = (len(initcode_container) + 31) // 32\n    auxdata_size_words = (auxdata_size + 31) // 32\n    gas_limit = (\n        21_000\n        + 32_000\n        + initcode_container_words * 6\n        + 3 * auxdata_size_words\n        + auxdata_size_words * auxdata_size_words // 512\n    )\n    # out_of_gas is triggered, so canary won't set value\n    # also validate target created contract fails\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: value_canary_should_not_change,\n                slot_code_should_fail: value_canary_should_not_change,\n            },\n        ),\n        compute_eofcreate_address(contract_address, 0, initcode_container): Account.NONEXISTENT,\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=gas_limit,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_static_flag_eofcreate","title":"test_static_flag_eofcreate(state_test, pre, opcode, endowment, initcode)","text":"

    Verifies correct handling of the static call flag with EOFCREATE

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.STATICCALL,\n        Op.EXTSTATICCALL,\n    ],\n)\n@pytest.mark.parametrize(\"endowment\", [0, 1])  # included to verify static flag check comes first\n@pytest.mark.parametrize(\n    \"initcode\",\n    [smallest_initcode_subcontainer, aborting_container],\n    ids=[\"working_initcode\", \"aborting_code\"],\n)\ndef test_static_flag_eofcreate(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    opcode: Op,\n    endowment: int,\n    initcode: Container,\n):\n    \"\"\"\n    Verifies correct handling of the static call flag with EOFCREATE\n    \"\"\"\n    env = Environment()\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.EOFCREATE[0](value=endowment) + Op.STOP,\n                ),\n                Section.Container(container=initcode),\n            ]\n        )\n    )\n    calling_code = (\n        Op.SSTORE(slot_call_result, opcode(address=contract_address))\n        + Op.SSTORE(slot_code_worked, value_code_worked)\n        + Op.STOP\n    )\n    calling_address = pre.deploy_contract(\n        Container.Code(calling_code) if opcode == Op.EXTSTATICCALL else calling_code\n    )\n\n    post = {\n        calling_address: Account(\n            storage={\n                slot_call_result: value_eof_call_result_failed\n                if opcode == Op.EXTSTATICCALL\n                else value_legacy_call_result_failed,\n                slot_code_worked: value_code_worked,\n            }\n        )\n    }\n    tx = Transaction(\n        to=calling_address,\n        gas_limit=10_000_000,\n        protected=False,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_eof_eofcreate_msg_depth","title":"test_eof_eofcreate_msg_depth(state_test, pre, opcode, who_fails)","text":"

    Test EOFCREATE handles msg depth limit correctly (1024). NOTE: due to block gas limit and the 63/64th rule this limit is unlikely to be hit on mainnet. NOTE: See tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_msg_depth for more explanations and comments. Most notable deviation from that test is that here calls and EOFCREATEs alternate in order to reach the max depth. who_fails decides whether the failing depth 1024 will be on a call or on an EOFCREATE to happen.

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n    ],\n)\n@pytest.mark.parametrize(\n    \"who_fails\",\n    [magic_value_call, magic_value_create],\n    ids=[\"call_fails\", \"create_fails\"],\n)\n@pytest.mark.pre_alloc_modify\ndef test_eof_eofcreate_msg_depth(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    opcode: Op,\n    who_fails: int,\n):\n    \"\"\"\n    Test EOFCREATE handles msg depth limit correctly (1024).\n    NOTE: due to block gas limit and the 63/64th rule this limit is unlikely to be hit\n          on mainnet.\n    NOTE: See `tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_msg_depth`\n          for more explanations and comments. Most notable deviation from that test is that here\n          calls and `EOFCREATE`s alternate in order to reach the max depth. `who_fails` decides\n          whether the failing depth 1024 will be on a call or on an `EOFCREATE` to happen.\n    \"\"\"\n    # Not a precise gas_limit formula, but enough to exclude risk of gas causing the failure.\n    gas_limit = int(20000000 * (64 / 63) ** 1024)\n    env = Environment(gas_limit=gas_limit)\n    sender = pre.fund_eoa()\n\n    callee_address = Address(0x5000)\n\n    # Memory offsets layout:\n    # - 0  - input - msg depth\n    # - 32 - output - msg depth\n    # - 64 - output - call result\n    # - 96 - output - magic value: create or call\n    returndatacopy_block = Op.RETURNDATACOPY(32, 0, 96) + Op.REVERT(32, 96)\n    deep_most_result_block = (\n        Op.MSTORE(32, Op.ADD(Op.CALLDATALOAD(0), 1)) + Op.MSTORE(64, Op.NOOP) + Op.REVERT(32, 96)\n    )\n    rjump_offset = len(returndatacopy_block)\n\n    callee_code = Container(\n        sections=[\n            Section.Code(\n                Op.MSTORE(0, Op.ADD(Op.CALLDATALOAD(0), 1))\n                + Op.MSTORE(96, magic_value_create)\n                + Op.EOFCREATE[0](salt=Op.CALLDATALOAD(0), input_size=32)\n                + Op.RETURNDATASIZE\n                + Op.ISZERO\n                + Op.RJUMPI[rjump_offset]\n                + returndatacopy_block\n                + deep_most_result_block\n            ),\n            Section.Container(\n                Container.Code(\n                    Op.MSTORE(0, Op.ADD(Op.CALLDATALOAD(0), 1))\n                    + Op.MSTORE(96, magic_value_call)\n                    + opcode(address=callee_address, args_size=32)\n                    + Op.RETURNDATASIZE\n                    + Op.ISZERO\n                    + Op.RJUMPI[rjump_offset]\n                    + returndatacopy_block\n                    + deep_most_result_block\n                )\n            ),\n        ]\n    )\n\n    pre.deploy_contract(callee_code, address=callee_address)\n\n    calling_contract_address = pre.deploy_contract(\n        Container.Code(\n            Op.MSTORE(0, Op.CALLDATALOAD(0))\n            + opcode(address=callee_address, args_size=32)\n            + Op.SSTORE(slot_max_depth, Op.RETURNDATALOAD(0))\n            + Op.SSTORE(slot_call_result, Op.RETURNDATALOAD(32))\n            + Op.SSTORE(slot_call_or_create, Op.RETURNDATALOAD(64))\n            + Op.SSTORE(slot_code_worked, value_code_worked)\n            + Op.STOP\n        )\n    )\n\n    # Only bumps the msg call depth \"register\" and forwards to the `calling_contract_address`.\n    # If it is used it makes the \"failing\" depth of 1024 to happen on EOFCREATE, instead of CALL.\n    passthrough_address = pre.deploy_contract(\n        Container.Code(\n            Op.MSTORE(0, 1) + Op.EXTCALL(address=calling_contract_address, args_size=32) + Op.STOP\n        )\n    )\n\n    tx = Transaction(\n        sender=sender,\n        to=calling_contract_address if who_fails == magic_value_call else passthrough_address,\n        gas_limit=gas_limit,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_max_depth: 1024,\n        slot_code_worked: value_code_worked,\n        slot_call_result: value_eof_call_result_reverted\n        if who_fails == magic_value_call\n        else value_create_failed,\n        slot_call_or_create: who_fails,\n    }\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/index/test_cases/","title":"Test Eofcreate Failures - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py:

    test_initcode_revert[fork_CancunEIP7692-blockchain_test-empty]\ntest_initcode_revert[fork_CancunEIP7692-blockchain_test-Error(string)]\ntest_initcode_revert[fork_CancunEIP7692-blockchain_test_engine-empty]\ntest_initcode_revert[fork_CancunEIP7692-blockchain_test_engine-Error(string)]\ntest_initcode_revert[fork_CancunEIP7692-state_test-empty]\ntest_initcode_revert[fork_CancunEIP7692-state_test-Error(string)]\ntest_initcode_aborts[fork_CancunEIP7692-blockchain_test]\ntest_initcode_aborts[fork_CancunEIP7692-blockchain_test_engine]\ntest_initcode_aborts[fork_CancunEIP7692-state_test]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test-large]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test-max]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test-overmax]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test-initcodemax]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test-initcodeovermax]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test-64k-1]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test_engine-large]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test_engine-max]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test_engine-overmax]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test_engine-initcodemax]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test_engine-initcodeovermax]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test_engine-64k-1]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-state_test-large]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-state_test-max]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-state_test-overmax]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-state_test-initcodemax]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-state_test-initcodeovermax]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-state_test-64k-1]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test-large]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test-max]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test-overmax]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test-initcodemax]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test-initcodeovermax]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test-64k-1]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test_engine-large]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test_engine-max]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test_engine-overmax]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test_engine-initcodemax]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test_engine-initcodeovermax]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test_engine-64k-1]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-state_test-large]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-state_test-max]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-state_test-overmax]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-state_test-initcodemax]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-state_test-initcodeovermax]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-state_test-64k-1]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test-maxcode]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test-overmaxcode]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test-almost64k]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test-64k-1]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test-64k]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test-over64k]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test_engine-maxcode]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test_engine-overmaxcode]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test_engine-almost64k]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test_engine-64k-1]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test_engine-64k]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test_engine-over64k]\ntest_auxdata_size_failures[fork_CancunEIP7692-state_test-maxcode]\ntest_auxdata_size_failures[fork_CancunEIP7692-state_test-overmaxcode]\ntest_auxdata_size_failures[fork_CancunEIP7692-state_test-almost64k]\ntest_auxdata_size_failures[fork_CancunEIP7692-state_test-64k-1]\ntest_auxdata_size_failures[fork_CancunEIP7692-state_test-64k]\ntest_auxdata_size_failures[fork_CancunEIP7692-state_test-over64k]\ntest_eofcreate_insufficient_stipend[fork_CancunEIP7692-blockchain_test-1_wei]\ntest_eofcreate_insufficient_stipend[fork_CancunEIP7692-blockchain_test-1_gwei]\ntest_eofcreate_insufficient_stipend[fork_CancunEIP7692-blockchain_test_engine-1_wei]\ntest_eofcreate_insufficient_stipend[fork_CancunEIP7692-blockchain_test_engine-1_gwei]\ntest_eofcreate_insufficient_stipend[fork_CancunEIP7692-state_test-1_wei]\ntest_eofcreate_insufficient_stipend[fork_CancunEIP7692-state_test-1_gwei]\ntest_insufficient_initcode_gas[fork_CancunEIP7692-blockchain_test]\ntest_insufficient_initcode_gas[fork_CancunEIP7692-blockchain_test_engine]\ntest_insufficient_initcode_gas[fork_CancunEIP7692-state_test]\ntest_insufficient_gas_memory_expansion[fork_CancunEIP7692-blockchain_test]\ntest_insufficient_gas_memory_expansion[fork_CancunEIP7692-blockchain_test_engine]\ntest_insufficient_gas_memory_expansion[fork_CancunEIP7692-state_test]\ntest_insufficient_returncontract_auxdata_gas[fork_CancunEIP7692-blockchain_test]\ntest_insufficient_returncontract_auxdata_gas[fork_CancunEIP7692-blockchain_test_engine]\ntest_insufficient_returncontract_auxdata_gas[fork_CancunEIP7692-state_test]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test-working_initcode-endowment_0-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test-working_initcode-endowment_0-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test-working_initcode-endowment_1-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test-working_initcode-endowment_1-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test-aborting_code-endowment_0-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test-aborting_code-endowment_0-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test-aborting_code-endowment_1-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test-aborting_code-endowment_1-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test_engine-working_initcode-endowment_0-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test_engine-working_initcode-endowment_0-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test_engine-working_initcode-endowment_1-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test_engine-working_initcode-endowment_1-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test_engine-aborting_code-endowment_0-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test_engine-aborting_code-endowment_0-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test_engine-aborting_code-endowment_1-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test_engine-aborting_code-endowment_1-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-state_test-working_initcode-endowment_0-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-state_test-working_initcode-endowment_0-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-state_test-working_initcode-endowment_1-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-state_test-working_initcode-endowment_1-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-state_test-aborting_code-endowment_0-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-state_test-aborting_code-endowment_0-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-state_test-aborting_code-endowment_1-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-state_test-aborting_code-endowment_1-opcode_EXTSTATICCALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-blockchain_test-call_fails-opcode_EXTCALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-blockchain_test-call_fails-opcode_EXTDELEGATECALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-blockchain_test-create_fails-opcode_EXTCALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-blockchain_test-create_fails-opcode_EXTDELEGATECALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-blockchain_test_engine-call_fails-opcode_EXTCALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-blockchain_test_engine-call_fails-opcode_EXTDELEGATECALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-blockchain_test_engine-create_fails-opcode_EXTCALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-blockchain_test_engine-create_fails-opcode_EXTDELEGATECALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-state_test-call_fails-opcode_EXTCALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-state_test-call_fails-opcode_EXTDELEGATECALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-state_test-create_fails-opcode_EXTCALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-state_test-create_fails-opcode_EXTDELEGATECALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates/","title":"Test Legacy Eof Creates","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Test interactions between CREATE, CREATE2, and EOFCREATE

    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_legacy_eof_creates.test_cross_version_creates_fail","title":"test_cross_version_creates_fail(state_test, pre, legacy_create_opcode, deploy_code)","text":"

    Verifies that CREATE and CREATE2 cannot create EOF contracts

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py
    @pytest.mark.parametrize(\n    \"legacy_create_opcode\",\n    [\n        pytest.param(Op.CREATE, id=\"CREATE\"),\n        pytest.param(Op.CREATE2, id=\"CREATE2\"),\n    ],\n)\n@pytest.mark.parametrize(\n    \"deploy_code\",\n    [\n        pytest.param(smallest_initcode_subcontainer, id=\"deploy_eof_initcontainer\"),\n        pytest.param(smallest_runtime_subcontainer, id=\"deploy_eof_container\"),\n    ],\n)\ndef test_cross_version_creates_fail(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    legacy_create_opcode: Opcodes,\n    deploy_code: Container,\n):\n    \"\"\"\n    Verifies that CREATE and CREATE2 cannot create EOF contracts\n    \"\"\"\n    env = Environment()\n    salt_param = [0] if legacy_create_opcode == Op.CREATE2 else []\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n        + Op.SSTORE(slot_create_address, legacy_create_opcode(0, 0, Op.CALLDATASIZE, *salt_param))\n        + Op.SSTORE(slot_code_worked, value_code_worked)\n        + Op.STOP\n    )\n\n    # Storage in 0 should be empty as the create/create2 should fail,\n    # and 1 in 1 to show execution continued and did not halt\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: value_create_failed,\n                slot_code_worked: value_code_worked,\n            }\n        )\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n        data=deploy_code,\n    )\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_legacy_eof_creates.test_legacy_initcode_eof_contract_fails","title":"test_legacy_initcode_eof_contract_fails(state_test, pre, legacy_create_opcode, deploy_code)","text":"

    Verifies that legacy initcode cannot create EOF

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py
    @pytest.mark.parametrize(\n    \"legacy_create_opcode\",\n    [\n        pytest.param(Op.CREATE, id=\"CREATE\"),\n        pytest.param(Op.CREATE2, id=\"CREATE2\"),\n    ],\n)\n@pytest.mark.parametrize(\n    \"deploy_code\",\n    [\n        pytest.param(smallest_initcode_subcontainer, id=\"deploy_eof_initcontainer\"),\n        pytest.param(smallest_runtime_subcontainer, id=\"deploy_eof_container\"),\n    ],\n)\ndef test_legacy_initcode_eof_contract_fails(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    legacy_create_opcode: Opcodes,\n    deploy_code: Container,\n):\n    \"\"\"\n    Verifies that legacy initcode cannot create EOF\n    \"\"\"\n    env = Environment()\n    init_code = LegacyInitcode(deploy_code=deploy_code)\n    salt_param = [0] if legacy_create_opcode == Op.CREATE2 else []\n    factory_code = (\n        Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n        + Op.SSTORE(slot_create_address, legacy_create_opcode(0, 0, Op.CALLDATASIZE, *salt_param))\n        + Op.SSTORE(slot_code_worked, value_code_worked)\n    )\n\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(code=factory_code)\n\n    # Storage in 0 should be empty as the final CREATE filed\n    # and 1 in 1 to show execution continued and did not halt\n    post = {\n        contract_address: Account(\n            storage={slot_create_address: value_create_failed, slot_code_worked: value_code_worked}\n        )\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        data=init_code,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates/index/test_cases/","title":"Test Legacy Eof Creates - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py:

    test_cross_version_creates_fail[fork_CancunEIP7692-blockchain_test-deploy_eof_initcontainer-CREATE]\ntest_cross_version_creates_fail[fork_CancunEIP7692-blockchain_test-deploy_eof_initcontainer-CREATE2]\ntest_cross_version_creates_fail[fork_CancunEIP7692-blockchain_test-deploy_eof_container-CREATE]\ntest_cross_version_creates_fail[fork_CancunEIP7692-blockchain_test-deploy_eof_container-CREATE2]\ntest_cross_version_creates_fail[fork_CancunEIP7692-blockchain_test_engine-deploy_eof_initcontainer-CREATE]\ntest_cross_version_creates_fail[fork_CancunEIP7692-blockchain_test_engine-deploy_eof_initcontainer-CREATE2]\ntest_cross_version_creates_fail[fork_CancunEIP7692-blockchain_test_engine-deploy_eof_container-CREATE]\ntest_cross_version_creates_fail[fork_CancunEIP7692-blockchain_test_engine-deploy_eof_container-CREATE2]\ntest_cross_version_creates_fail[fork_CancunEIP7692-state_test-deploy_eof_initcontainer-CREATE]\ntest_cross_version_creates_fail[fork_CancunEIP7692-state_test-deploy_eof_initcontainer-CREATE2]\ntest_cross_version_creates_fail[fork_CancunEIP7692-state_test-deploy_eof_container-CREATE]\ntest_cross_version_creates_fail[fork_CancunEIP7692-state_test-deploy_eof_container-CREATE2]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-blockchain_test-deploy_eof_initcontainer-CREATE]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-blockchain_test-deploy_eof_initcontainer-CREATE2]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-blockchain_test-deploy_eof_container-CREATE]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-blockchain_test-deploy_eof_container-CREATE2]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-blockchain_test_engine-deploy_eof_initcontainer-CREATE]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-blockchain_test_engine-deploy_eof_initcontainer-CREATE2]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-blockchain_test_engine-deploy_eof_container-CREATE]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-blockchain_test_engine-deploy_eof_container-CREATE2]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-state_test-deploy_eof_initcontainer-CREATE]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-state_test-deploy_eof_initcontainer-CREATE2]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-state_test-deploy_eof_container-CREATE]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-state_test-deploy_eof_container-CREATE2]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/","title":"Test Returncontract","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests for RETURNCONTRACT instruction validation

    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_returncontract.test_returncontract_valid_index_0","title":"test_returncontract_valid_index_0(eof_test)","text":"

    Deploy container index 0

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py
    def test_returncontract_valid_index_0(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"Deploy container index 0\"\"\"\n    eof_test(\n        container_kind=ContainerKind.INITCODE,\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RETURNCONTRACT[0](0, 0),\n                ),\n                Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)])),\n            ],\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_returncontract.test_returncontract_valid_index_1","title":"test_returncontract_valid_index_1(eof_test)","text":"

    Deploy container index 1

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py
    def test_returncontract_valid_index_1(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"Deploy container index 1\"\"\"\n    eof_test(\n        container_kind=ContainerKind.INITCODE,\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RJUMPI[6](0) + Op.RETURNCONTRACT[0](0, 0) + Op.RETURNCONTRACT[1](0, 0),\n                    max_stack_height=2,\n                ),\n                Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)])),\n                Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)])),\n            ],\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_returncontract.test_returncontract_valid_index_255","title":"test_returncontract_valid_index_255(eof_test)","text":"

    Deploy container index 255

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py
    def test_returncontract_valid_index_255(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"Deploy container index 255\"\"\"\n    eof_test(\n        container_kind=ContainerKind.INITCODE,\n        data=Container(\n            sections=[\n                Section.Code(\n                    sum((Op.RJUMPI[6](0) + Op.RETURNCONTRACT[i](0, 0)) for i in range(256))\n                    + Op.REVERT(0, 0),\n                    max_stack_height=2,\n                )\n            ]\n            + [Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)]))]\n            * 256\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_returncontract.test_returncontract_invalid_truncated_immediate","title":"test_returncontract_invalid_truncated_immediate(eof_test)","text":"

    Truncated immediate

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py
    def test_returncontract_invalid_truncated_immediate(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"Truncated immediate\"\"\"\n    eof_test(\n        container_kind=ContainerKind.INITCODE,\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 + Op.PUSH0 + Op.RETURNCONTRACT,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.TRUNCATED_INSTRUCTION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_returncontract.test_returncontract_invalid_index_0","title":"test_returncontract_invalid_index_0(eof_test)","text":"

    Referring to non-existent container section index 0

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py
    def test_returncontract_invalid_index_0(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"Referring to non-existent container section index 0\"\"\"\n    eof_test(\n        container_kind=ContainerKind.INITCODE,\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RETURNCONTRACT[0](0, 0),\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_CONTAINER_SECTION_INDEX,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_returncontract.test_returncontract_invalid_index_1","title":"test_returncontract_invalid_index_1(eof_test)","text":"

    Referring to non-existent container section index 1

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py
    def test_returncontract_invalid_index_1(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"Referring to non-existent container section index 1\"\"\"\n    eof_test(\n        container_kind=ContainerKind.INITCODE,\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RETURNCONTRACT[1](0, 0),\n                ),\n                Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)])),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_CONTAINER_SECTION_INDEX,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_returncontract.test_returncontract_invalid_index_255","title":"test_returncontract_invalid_index_255(eof_test)","text":"

    Referring to non-existent container section index 255

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py
    def test_returncontract_invalid_index_255(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"Referring to non-existent container section index 255\"\"\"\n    eof_test(\n        container_kind=ContainerKind.INITCODE,\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RETURNCONTRACT[255](0, 0),\n                ),\n                Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)])),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_CONTAINER_SECTION_INDEX,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_returncontract.test_returncontract_terminating","title":"test_returncontract_terminating(eof_test)","text":"

    Unreachable code after RETURNCONTRACT

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py
    def test_returncontract_terminating(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"Unreachable code after RETURNCONTRACT\"\"\"\n    eof_test(\n        container_kind=ContainerKind.INITCODE,\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RETURNCONTRACT[0](0, 0) + Op.REVERT(0, 0),\n                ),\n                Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)])),\n            ],\n        ),\n        expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/index/test_cases/","title":"Test Returncontract - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py:

    test_returncontract_valid_index_0[fork_CancunEIP7692-eof_test]\ntest_returncontract_valid_index_1[fork_CancunEIP7692-eof_test]\ntest_returncontract_valid_index_255[fork_CancunEIP7692-eof_test]\ntest_returncontract_invalid_truncated_immediate[fork_CancunEIP7692-eof_test]\ntest_returncontract_invalid_index_0[fork_CancunEIP7692-eof_test]\ntest_returncontract_invalid_index_1[fork_CancunEIP7692-eof_test]\ntest_returncontract_invalid_index_255[fork_CancunEIP7692-eof_test]\ntest_returncontract_terminating[fork_CancunEIP7692-eof_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/","title":"Test Subcontainer Validation","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF Subcontainer tests covering simple cases.

    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_simple_create_from_deployed","title":"test_simple_create_from_deployed(eof_state_test)","text":"

    Simple EOF creation from a deployed EOF container

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    def test_simple_create_from_deployed(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Simple EOF creation from a deployed EOF container\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                eofcreate_code_section,\n                returncontract_sub_container,\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_simple_create_from_creation","title":"test_simple_create_from_creation(eof_state_test)","text":"

    Simple EOF creation from a create transaction container

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    def test_simple_create_from_creation(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Simple EOF creation from a create transaction container\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                returncontract_code_section,\n                stop_sub_container,\n            ],\n            kind=ContainerKind.INITCODE,\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_reverting_container","title":"test_reverting_container(eof_state_test, zero_section)","text":"

    Test revert containers

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    \"zero_section\",\n    [eofcreate_code_section, returncontract_code_section],\n    ids=[\"eofcreate\", \"returncontract\"],\n)\ndef test_reverting_container(\n    eof_state_test: EOFStateTestFiller,\n    zero_section: Container,\n):\n    \"\"\"Test revert containers\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                zero_section,\n                revert_sub_container,\n            ],\n            kind=(\n                ContainerKind.INITCODE\n                if zero_section == returncontract_code_section\n                else ContainerKind.RUNTIME\n            ),\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_orphan_container","title":"test_orphan_container(eof_test, code_section, first_sub_container, extra_sub_container, container_kind)","text":"

    Test orphaned containers

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    \"code_section,first_sub_container,container_kind\",\n    [\n        (eofcreate_code_section, returncontract_sub_container, ContainerKind.RUNTIME),\n        (returncontract_code_section, stop_sub_container, ContainerKind.INITCODE),\n    ],\n    ids=[\"eofcreate\", \"returncontract\"],\n)\n@pytest.mark.parametrize(\n    \"extra_sub_container\",\n    [stop_sub_container, revert_sub_container, returncontract_sub_container],\n    ids=[\"stop\", \"revert\", \"returncontract\"],\n)\ndef test_orphan_container(\n    eof_test: EOFTestFiller,\n    code_section: Section,\n    first_sub_container: Container,\n    extra_sub_container: Container,\n    container_kind: ContainerKind,\n):\n    \"\"\"Test orphaned containers\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                code_section,\n                first_sub_container,\n                extra_sub_container,\n            ],\n            kind=container_kind,\n        ),\n        expect_exception=EOFException.ORPHAN_SUBCONTAINER,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_container_combos_valid","title":"test_container_combos_valid(eof_state_test, code_section, sub_container, container_kind)","text":"

    Test valid subcontainer reference / opcode combos

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    \"code_section,sub_container,container_kind\",\n    [\n        pytest.param(\n            eofcreate_code_section,\n            returncontract_sub_container,\n            ContainerKind.RUNTIME,\n            id=\"EOFCREATE/RETURNCONTRACT\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            stop_sub_container,\n            ContainerKind.INITCODE,\n            id=\"RETURNCONTRACT/STOP\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            return_sub_container,\n            ContainerKind.INITCODE,\n            id=\"RETURNCONTRACT/RETURN\",\n        ),\n        pytest.param(\n            eofcreate_code_section,\n            revert_sub_container,\n            ContainerKind.RUNTIME,\n            id=\"EOFCREATE/REVERT\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            revert_sub_container,\n            ContainerKind.INITCODE,\n            id=\"RETURNCONTRACT/REVERT\",\n        ),\n    ],\n)\ndef test_container_combos_valid(\n    eof_state_test: EOFStateTestFiller,\n    code_section: Section,\n    sub_container: Container,\n    container_kind: ContainerKind,\n):\n    \"\"\"Test valid subcontainer reference / opcode combos\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                code_section,\n                sub_container,\n            ],\n            kind=container_kind,\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_container_combos_invalid","title":"test_container_combos_invalid(eof_test, code_section, first_sub_container, container_kind)","text":"

    Test invalid subcontainer reference / opcode combos

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    \"code_section,first_sub_container,container_kind\",\n    [\n        pytest.param(\n            eofcreate_code_section,\n            stop_sub_container,\n            ContainerKind.RUNTIME,\n            id=\"EOFCREATE/STOP\",\n        ),\n        pytest.param(\n            eofcreate_code_section,\n            return_sub_container,\n            ContainerKind.RUNTIME,\n            id=\"EOFCREATE/RETURN\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            returncontract_sub_container,\n            ContainerKind.INITCODE,\n            id=\"RETURNCONTRACT/RETURNCONTRACT\",\n        ),\n    ],\n)\ndef test_container_combos_invalid(\n    eof_test: EOFTestFiller,\n    code_section: Section,\n    first_sub_container: Container,\n    container_kind: ContainerKind,\n):\n    \"\"\"Test invalid subcontainer reference / opcode combos\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                code_section,\n                first_sub_container,\n            ],\n            kind=container_kind,\n        ),\n        expect_exception=EOFException.INCOMPATIBLE_CONTAINER_KIND,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_container_combos_deeply_nested_valid","title":"test_container_combos_deeply_nested_valid(eof_test, code_section, first_sub_container)","text":"

    Test valid subcontainer reference / opcode combos on a deep container nesting level

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    \"code_section,first_sub_container\",\n    [\n        pytest.param(\n            eofcreate_revert_code_section,\n            returncontract_sub_container,\n            id=\"EOFCREATE/RETURNCONTRACT\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            stop_sub_container,\n            id=\"RETURNCONTRACT/STOP\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            return_sub_container,\n            id=\"RETURNCONTRACT/RETURN\",\n        ),\n        pytest.param(\n            eofcreate_revert_code_section,\n            revert_sub_container,\n            id=\"EOFCREATE/REVERT\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            revert_sub_container,\n            id=\"RETURNCONTRACT/REVERT\",\n        ),\n    ],\n)\ndef test_container_combos_deeply_nested_valid(\n    eof_test: EOFTestFiller,\n    code_section: Section,\n    first_sub_container: Container,\n):\n    \"\"\"Test valid subcontainer reference / opcode combos on a deep container nesting level\"\"\"\n    valid_container = Container(\n        sections=[\n            code_section,\n            first_sub_container,\n        ],\n        kind=ContainerKind.INITCODE,\n    )\n\n    container = valid_container\n    while len(container) < MAX_BYTECODE_SIZE:\n        container = Container(\n            sections=[\n                eofcreate_revert_code_section,\n                Section.Container(container=container.copy()),\n            ],\n            kind=ContainerKind.INITCODE,\n        )\n\n    eof_test(data=container)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_container_combos_deeply_nested_invalid","title":"test_container_combos_deeply_nested_invalid(eof_test, code_section, first_sub_container)","text":"

    Test invalid subcontainer reference / opcode combos on a deep container nesting level

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    \"code_section,first_sub_container\",\n    [\n        pytest.param(\n            eofcreate_revert_code_section,\n            stop_sub_container,\n            id=\"EOFCREATE/STOP\",\n        ),\n        pytest.param(\n            eofcreate_revert_code_section,\n            return_sub_container,\n            id=\"EOFCREATE/RETURN\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            returncontract_sub_container,\n            id=\"RETURNCONTRACT/RETURNCONTRACT\",\n        ),\n    ],\n)\ndef test_container_combos_deeply_nested_invalid(\n    eof_test: EOFTestFiller,\n    code_section: Section,\n    first_sub_container: Container,\n):\n    \"\"\"Test invalid subcontainer reference / opcode combos on a deep container nesting level\"\"\"\n    invalid_container = Container(\n        sections=[\n            code_section,\n            first_sub_container,\n        ],\n        kind=ContainerKind.INITCODE,\n    )\n\n    container = invalid_container\n    while len(container) < MAX_BYTECODE_SIZE:\n        container = Container(\n            sections=[\n                eofcreate_revert_code_section,\n                Section.Container(container=container.copy()),\n            ],\n            kind=ContainerKind.INITCODE,\n        )\n\n    eof_test(\n        data=container,\n        expect_exception=EOFException.INCOMPATIBLE_CONTAINER_KIND,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_container_combos_non_first_code_sections_valid","title":"test_container_combos_non_first_code_sections_valid(eof_test, code_section, first_sub_container, container_kind)","text":"

    Test valid subcontainer reference / opcode combos in a non-first code section

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    \"code_section,first_sub_container,container_kind\",\n    [\n        pytest.param(\n            eofcreate_code_section,\n            returncontract_sub_container,\n            ContainerKind.RUNTIME,\n            id=\"EOFCREATE/RETURNCONTRACT\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            stop_sub_container,\n            ContainerKind.INITCODE,\n            id=\"RETURNCONTRACT/STOP\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            return_sub_container,\n            ContainerKind.INITCODE,\n            id=\"RETURNCONTRACT/RETURN\",\n        ),\n        pytest.param(\n            eofcreate_code_section,\n            revert_sub_container,\n            ContainerKind.RUNTIME,\n            id=\"EOFCREATE/REVERT\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            revert_sub_container,\n            ContainerKind.INITCODE,\n            id=\"RETURNCONTRACT/REVERT\",\n        ),\n    ],\n)\ndef test_container_combos_non_first_code_sections_valid(\n    eof_test: EOFTestFiller,\n    code_section: Section,\n    first_sub_container: Container,\n    container_kind: ContainerKind,\n):\n    \"\"\"Test valid subcontainer reference / opcode combos in a non-first code section\"\"\"\n    eof_test(\n        data=Container(\n            sections=[Section.Code(Op.JUMPF[i]) for i in range(1, 1024)]\n            + [code_section, first_sub_container],\n            kind=container_kind,\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_container_combos_non_first_code_sections_invalid","title":"test_container_combos_non_first_code_sections_invalid(eof_test, code_section, first_sub_container, container_kind)","text":"

    Test invalid subcontainer reference / opcode combos in a non-first code section

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    \"code_section,first_sub_container,container_kind\",\n    [\n        pytest.param(\n            eofcreate_code_section,\n            stop_sub_container,\n            ContainerKind.RUNTIME,\n            id=\"EOFCREATE/STOP\",\n        ),\n        pytest.param(\n            eofcreate_code_section,\n            return_sub_container,\n            ContainerKind.RUNTIME,\n            id=\"EOFCREATE/RETURN\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            returncontract_sub_container,\n            ContainerKind.INITCODE,\n            id=\"RETURNCONTRACT/RETURNCONTRACT\",\n        ),\n    ],\n)\ndef test_container_combos_non_first_code_sections_invalid(\n    eof_test: EOFTestFiller,\n    code_section: Section,\n    first_sub_container: Container,\n    container_kind: ContainerKind,\n):\n    \"\"\"Test invalid subcontainer reference / opcode combos in a non-first code section\"\"\"\n    eof_test(\n        data=Container(\n            sections=[Section.Code(Op.JUMPF[i]) for i in range(1, 1024)]\n            + [code_section, first_sub_container],\n            kind=container_kind,\n        ),\n        expect_exception=EOFException.INCOMPATIBLE_CONTAINER_KIND,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_container_both_kinds_same_sub","title":"test_container_both_kinds_same_sub(eof_test)","text":"

    Test subcontainer conflicts (both EOFCREATE and RETURNCONTRACT Reference)

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    def test_container_both_kinds_same_sub(eof_test: EOFTestFiller):\n    \"\"\"Test subcontainer conflicts (both EOFCREATE and RETURNCONTRACT Reference)\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.JUMPF[1],\n                ),\n                Section.Code(\n                    code=Op.RETURNCONTRACT[0](0, 0),\n                ),\n                revert_sub_container,\n            ],\n        ),\n        expect_exception=EOFException.INCOMPATIBLE_CONTAINER_KIND,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_container_both_kinds_different_sub","title":"test_container_both_kinds_different_sub(eof_test)","text":"

    Test multiple kinds of subcontainer at the same level

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    def test_container_both_kinds_different_sub(eof_test: EOFTestFiller):\n    \"\"\"Test multiple kinds of subcontainer at the same level\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.JUMPF[1],\n                ),\n                Section.Code(\n                    code=Op.RETURNCONTRACT[1](0, 0),\n                ),\n                returncontract_sub_container,\n                stop_sub_container,\n            ],\n            kind=ContainerKind.INITCODE,\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_subcontainer_wrong_eof_version","title":"test_subcontainer_wrong_eof_version(eof_test, version)","text":"

    Test a subcontainer with the incorrect EOF version

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\"version\", [0, 255], ids=lambda x: x)\ndef test_subcontainer_wrong_eof_version(\n    eof_test: EOFTestFiller,\n    version: int,\n):\n    \"\"\"Test a subcontainer with the incorrect EOF version\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP,\n                ),\n                Section.Container(\n                    container=Container(version=[version], sections=[Section.Code(code=Op.STOP)])\n                ),\n            ],\n            kind=ContainerKind.RUNTIME,\n        ),\n        expect_exception=EOFException.INVALID_VERSION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_subcontainer_wrong_size","title":"test_subcontainer_wrong_size(eof_test, delta, kind)","text":"

    Test a subcontainer with the incorrect size in the parent's header

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\"delta\", [-1, 1], ids=[\"smaller\", \"larger\"])\n@pytest.mark.parametrize(\"kind\", [ContainerKind.RUNTIME, ContainerKind.INITCODE])\ndef test_subcontainer_wrong_size(\n    eof_test: EOFTestFiller,\n    delta: int,\n    kind: ContainerKind,\n):\n    \"\"\"Test a subcontainer with the incorrect size in the parent's header\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP)\n                    if kind == ContainerKind.RUNTIME\n                    else (Op.RETURNCONTRACT[0](0, 0)),\n                ),\n                Section.Container(\n                    container=Container(sections=[Section.Code(code=Op.STOP)]),\n                    custom_size=len(stop_sub_container.data) + delta,\n                ),\n            ],\n            kind=kind,\n        ),\n        expect_exception=EOFException.INVALID_SECTION_BODIES_SIZE,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_deep_container","title":"test_deep_container(eof_test, deepest_container, exception)","text":"

    Test a very deeply nested container

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    [\"deepest_container\", \"exception\"],\n    [\n        pytest.param(Container.Code(Op.STOP), None, id=\"valid\"),\n        pytest.param(\n            Container.Code(code=Op.PUSH0),\n            EOFException.MISSING_STOP_OPCODE,\n            id=\"code-error\",\n        ),\n        pytest.param(\n            Container(raw_bytes=\"EF0100A94F5374FCE5EDBC8E2A8697C15331677E6EBF0B\"),\n            EOFException.INVALID_MAGIC,\n            id=\"structure-error\",\n        ),\n    ],\n)\ndef test_deep_container(\n    eof_test: EOFTestFiller, deepest_container: Container, exception: EOFException\n):\n    \"\"\"Test a very deeply nested container\"\"\"\n    container = deepest_container\n    last_container = deepest_container\n    while len(container) < MAX_INITCODE_SIZE:\n        last_container = container\n        container = Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.EOFCREATE[0] + Op.STOP,\n                ),\n                Section.Container(\n                    container=Container(\n                        sections=[\n                            Section.Code(\n                                code=Op.PUSH0 + Op.PUSH0 + Op.RETURNCONTRACT[0],\n                            ),\n                            Section.Container(container=last_container),\n                        ]\n                    )\n                ),\n            ],\n        )\n\n    eof_test(data=last_container, expect_exception=exception)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_wide_container","title":"test_wide_container(eof_test, width, exception)","text":"

    Test a container with the maximum number of sub-containers

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    [\"width\", \"exception\"],\n    [\n        pytest.param(256, None, id=\"256\"),\n        pytest.param(257, EOFException.TOO_MANY_CONTAINERS, id=\"257\"),\n        pytest.param(0x8000, EOFException.CONTAINER_SIZE_ABOVE_LIMIT, id=\"negative_i16\"),\n        pytest.param(0xFFFF, EOFException.CONTAINER_SIZE_ABOVE_LIMIT, id=\"max_u16\"),\n    ],\n)\ndef test_wide_container(eof_test: EOFTestFiller, width: int, exception: EOFException):\n    \"\"\"Test a container with the maximum number of sub-containers\"\"\"\n    create_code: Bytecode = Op.STOP\n    for x in range(0, 256):\n        create_code = Op.EOFCREATE[x](0, 0, 0, 0) + create_code\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=create_code,\n                ),\n                *(\n                    [\n                        Section.Container(\n                            container=Container(\n                                sections=[\n                                    Section.Code(\n                                        code=Op.PUSH0 + Op.PUSH0 + Op.RETURNCONTRACT[0],\n                                    ),\n                                    stop_sub_container,\n                                ]\n                            )\n                        )\n                    ]\n                    * width\n                ),\n            ]\n        ),\n        expect_exception=exception,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_migrated_eofcreate","title":"test_migrated_eofcreate(eof_test, container)","text":"

    Tests migrated from EOFTests/efValidation/EOF1_eofcreate_valid_.json.

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    \"container\",\n    [\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(\n                        Op.CALLDATASIZE\n                        + Op.PUSH1[0]\n                        + Op.PUSH1[255]\n                        + Op.PUSH1[0]\n                        + Op.EOFCREATE[0]\n                        + Op.POP\n                        + Op.STOP\n                    ),\n                    Section.Container(Container.Code(Op.INVALID)),\n                ],\n                expected_bytecode=\"\"\"\n                ef0001010004020001000b0300010014040000000080000436600060ff6000ec005000ef000101000402\n                000100010400000000800000fe\"\"\",\n            ),\n            id=\"eofcreate_0\",\n        ),\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(Op.PUSH1[0] + Op.RJUMP[0] + Op.STOP),\n                    Section.Container(Container.Code(Op.INVALID)),\n                ],\n                expected_bytecode=\"\"\"\n                ef00010100040200010006030001001404000000008000016000e0000000ef0001010004020001000104\n                00000000800000fe\"\"\",\n                # Originally this test was \"valid\" because it was created\n                # before \"orphan subcontainer\" rule was introduced.\n                validity_error=EOFException.ORPHAN_SUBCONTAINER,\n            ),\n            id=\"orphan_subcontainer_0\",\n        ),\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(Op.PUSH1[0] + Op.RJUMP[0] + Op.STOP),\n                    Section.Container(Container.Code(Op.INVALID)),\n                    Section.Data(custom_size=2),\n                ],\n                expected_bytecode=\"\"\"\n                ef00010100040200010006030001001404000200008000016000e0000000ef0001010004020001000104\n                00000000800000fe\"\"\",\n                # Originally this test was \"valid\" but against the current spec\n                # it contains two errors: data section truncated and orphan subcontainer.\n                validity_error=EOFException.TOPLEVEL_CONTAINER_TRUNCATED,\n            ),\n            id=\"orphan_subcontainer_0_and_truncated_data\",\n        ),\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(Op.PUSH1[0] + Op.RJUMP[0] + Op.STOP),\n                    Section.Container(Container.Code(Op.INVALID)),\n                    Section.Data(\"aabb\"),\n                ],\n                expected_bytecode=\"\"\"\n                ef00010100040200010006030001001404000200008000016000e0000000ef0001010004020001000104\n                00000000800000feaabb\"\"\",\n                # Originally this test was \"valid\" because it was created\n                # before \"orphan subcontainer\" rule was introduced.\n                validity_error=EOFException.ORPHAN_SUBCONTAINER,\n            ),\n            id=\"orphan_subcontainer_0_and_data\",\n        ),\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP),\n                    Section.Container(\"aabbccddeeff\"),\n                ],\n                # The original test has been modified to reference the subcontainer by EOFCREATE.\n                validity_error=EOFException.INVALID_MAGIC,\n            ),\n            id=\"subcontainer_0_with_invalid_prefix\",\n        ),\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(\n                        Op.CALLDATASIZE\n                        + Op.PUSH1[0]\n                        + Op.PUSH1[255]\n                        + Op.PUSH1[0]\n                        + Op.EOFCREATE[1]\n                        + Op.POP\n                        + Op.STOP\n                    )\n                ]\n                + 2 * [Section.Container(Container.Code(Op.INVALID))],\n                expected_bytecode=\"\"\"\n                ef0001010004020001000b03000200140014040000000080000436600060ff6000ec015000ef00010100\n                0402000100010400000000800000feef000101000402000100010400000000800000fe\"\"\",\n                # Originally this test was \"valid\" because it was created\n                # before \"orphan subcontainer\" rule was introduced.\n                validity_error=EOFException.ORPHAN_SUBCONTAINER,\n            ),\n            id=\"eofcreate_1_orphan_subcontainer_0\",\n        ),\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(Op.PUSH1[0] + Op.RJUMP[0] + Op.STOP),\n                    Section.Container(Container.Code(Op.INVALID)),\n                    Section.Container(Container.Code(Op.PUSH0 + Op.PUSH0 + Op.RETURN)),\n                ],\n                expected_bytecode=\"\"\"\n                ef000101000402000100060300020014001604000000008000016000e0000000ef000101000402000100\n                010400000000800000feef0001010004020001000304000000008000025f5ff3\"\"\",\n                # Originally this test was \"valid\" because it was created\n                # before \"orphan subcontainer\" rule was introduced.\n                validity_error=EOFException.ORPHAN_SUBCONTAINER,\n            ),\n            id=\"two_orphan_subcontainers\",\n        ),\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(\n                        Op.CALLDATASIZE\n                        + Op.PUSH1[0]\n                        + Op.PUSH1[255]\n                        + Op.PUSH1[0]\n                        + Op.EOFCREATE[255]\n                        + Op.POP\n                        + Op.STOP\n                    )\n                ]\n                + 256 * [Section.Container(Container.Code(Op.INVALID))],\n                # Originally this test was \"valid\" because it was created\n                # before \"orphan subcontainer\" rule was introduced.\n                validity_error=EOFException.ORPHAN_SUBCONTAINER,\n            ),\n            id=\"eofcreate_255_max_orphan_subcontainers\",\n        ),\n        pytest.param(\n            Container(\n                sections=[Section.Code(Op.PUSH1[0] + Op.RJUMP[0] + Op.STOP)]\n                + 256 * [Section.Container(Container.Code(Op.INVALID))],\n                # Originally this test was \"valid\" because it was created\n                # before \"orphan subcontainer\" rule was introduced.\n                validity_error=EOFException.ORPHAN_SUBCONTAINER,\n            ),\n            id=\"max_orphan_subcontainers\",\n        ),\n    ],\n)\ndef test_migrated_eofcreate(eof_test: EOFTestFiller, container: Container):\n    \"\"\"\n    Tests migrated from EOFTests/efValidation/EOF1_eofcreate_valid_.json.\n    \"\"\"\n    eof_test(data=container, expect_exception=container.validity_error)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/index/test_cases/","title":"Test Subcontainer Validation - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py:

    test_simple_create_from_deployed[fork_CancunEIP7692-eof_test]\ntest_simple_create_from_deployed[fork_CancunEIP7692-state_test]\ntest_simple_create_from_deployed[fork_CancunEIP7692-blockchain_test]\ntest_simple_create_from_deployed[fork_CancunEIP7692-blockchain_test_engine]\ntest_simple_create_from_creation[fork_CancunEIP7692-eof_test]\ntest_simple_create_from_creation[fork_CancunEIP7692-state_test]\ntest_simple_create_from_creation[fork_CancunEIP7692-blockchain_test]\ntest_simple_create_from_creation[fork_CancunEIP7692-blockchain_test_engine]\ntest_reverting_container[fork_CancunEIP7692-eof_test-eofcreate]\ntest_reverting_container[fork_CancunEIP7692-eof_test-returncontract]\ntest_reverting_container[fork_CancunEIP7692-state_test-eofcreate]\ntest_reverting_container[fork_CancunEIP7692-state_test-returncontract]\ntest_reverting_container[fork_CancunEIP7692-blockchain_test-eofcreate]\ntest_reverting_container[fork_CancunEIP7692-blockchain_test-returncontract]\ntest_reverting_container[fork_CancunEIP7692-blockchain_test_engine-eofcreate]\ntest_reverting_container[fork_CancunEIP7692-blockchain_test_engine-returncontract]\ntest_orphan_container[fork_CancunEIP7692-eof_test-stop-eofcreate]\ntest_orphan_container[fork_CancunEIP7692-eof_test-stop-returncontract]\ntest_orphan_container[fork_CancunEIP7692-eof_test-revert-eofcreate]\ntest_orphan_container[fork_CancunEIP7692-eof_test-revert-returncontract]\ntest_orphan_container[fork_CancunEIP7692-eof_test-returncontract-eofcreate]\ntest_orphan_container[fork_CancunEIP7692-eof_test-returncontract-returncontract]\ntest_container_combos_valid[fork_CancunEIP7692-eof_test-EOFCREATE/RETURNCONTRACT]\ntest_container_combos_valid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/STOP]\ntest_container_combos_valid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/RETURN]\ntest_container_combos_valid[fork_CancunEIP7692-eof_test-EOFCREATE/REVERT]\ntest_container_combos_valid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/REVERT]\ntest_container_combos_valid[fork_CancunEIP7692-state_test-EOFCREATE/RETURNCONTRACT]\ntest_container_combos_valid[fork_CancunEIP7692-state_test-RETURNCONTRACT/STOP]\ntest_container_combos_valid[fork_CancunEIP7692-state_test-RETURNCONTRACT/RETURN]\ntest_container_combos_valid[fork_CancunEIP7692-state_test-EOFCREATE/REVERT]\ntest_container_combos_valid[fork_CancunEIP7692-state_test-RETURNCONTRACT/REVERT]\ntest_container_combos_valid[fork_CancunEIP7692-blockchain_test-EOFCREATE/RETURNCONTRACT]\ntest_container_combos_valid[fork_CancunEIP7692-blockchain_test-RETURNCONTRACT/STOP]\ntest_container_combos_valid[fork_CancunEIP7692-blockchain_test-RETURNCONTRACT/RETURN]\ntest_container_combos_valid[fork_CancunEIP7692-blockchain_test-EOFCREATE/REVERT]\ntest_container_combos_valid[fork_CancunEIP7692-blockchain_test-RETURNCONTRACT/REVERT]\ntest_container_combos_valid[fork_CancunEIP7692-blockchain_test_engine-EOFCREATE/RETURNCONTRACT]\ntest_container_combos_valid[fork_CancunEIP7692-blockchain_test_engine-RETURNCONTRACT/STOP]\ntest_container_combos_valid[fork_CancunEIP7692-blockchain_test_engine-RETURNCONTRACT/RETURN]\ntest_container_combos_valid[fork_CancunEIP7692-blockchain_test_engine-EOFCREATE/REVERT]\ntest_container_combos_valid[fork_CancunEIP7692-blockchain_test_engine-RETURNCONTRACT/REVERT]\ntest_container_combos_invalid[fork_CancunEIP7692-eof_test-EOFCREATE/STOP]\ntest_container_combos_invalid[fork_CancunEIP7692-eof_test-EOFCREATE/RETURN]\ntest_container_combos_invalid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/RETURNCONTRACT]\ntest_container_combos_deeply_nested_valid[fork_CancunEIP7692-eof_test-EOFCREATE/RETURNCONTRACT]\ntest_container_combos_deeply_nested_valid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/STOP]\ntest_container_combos_deeply_nested_valid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/RETURN]\ntest_container_combos_deeply_nested_valid[fork_CancunEIP7692-eof_test-EOFCREATE/REVERT]\ntest_container_combos_deeply_nested_valid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/REVERT]\ntest_container_combos_deeply_nested_invalid[fork_CancunEIP7692-eof_test-EOFCREATE/STOP]\ntest_container_combos_deeply_nested_invalid[fork_CancunEIP7692-eof_test-EOFCREATE/RETURN]\ntest_container_combos_deeply_nested_invalid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/RETURNCONTRACT]\ntest_container_combos_non_first_code_sections_valid[fork_CancunEIP7692-eof_test-EOFCREATE/RETURNCONTRACT]\ntest_container_combos_non_first_code_sections_valid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/STOP]\ntest_container_combos_non_first_code_sections_valid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/RETURN]\ntest_container_combos_non_first_code_sections_valid[fork_CancunEIP7692-eof_test-EOFCREATE/REVERT]\ntest_container_combos_non_first_code_sections_valid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/REVERT]\ntest_container_combos_non_first_code_sections_invalid[fork_CancunEIP7692-eof_test-EOFCREATE/STOP]\ntest_container_combos_non_first_code_sections_invalid[fork_CancunEIP7692-eof_test-EOFCREATE/RETURN]\ntest_container_combos_non_first_code_sections_invalid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/RETURNCONTRACT]\ntest_container_both_kinds_same_sub[fork_CancunEIP7692-eof_test]\ntest_container_both_kinds_different_sub[fork_CancunEIP7692-eof_test]\ntest_subcontainer_wrong_eof_version[fork_CancunEIP7692-eof_test-0]\ntest_subcontainer_wrong_eof_version[fork_CancunEIP7692-eof_test-255]\ntest_subcontainer_wrong_size[fork_CancunEIP7692-eof_test-kind_RUNTIME-smaller]\ntest_subcontainer_wrong_size[fork_CancunEIP7692-eof_test-kind_RUNTIME-larger]\ntest_subcontainer_wrong_size[fork_CancunEIP7692-eof_test-kind_INITCODE-smaller]\ntest_subcontainer_wrong_size[fork_CancunEIP7692-eof_test-kind_INITCODE-larger]\ntest_deep_container[fork_CancunEIP7692-eof_test-valid]\ntest_deep_container[fork_CancunEIP7692-eof_test-code-error]\ntest_deep_container[fork_CancunEIP7692-eof_test-structure-error]\ntest_wide_container[fork_CancunEIP7692-eof_test-256]\ntest_wide_container[fork_CancunEIP7692-eof_test-257]\ntest_wide_container[fork_CancunEIP7692-eof_test-negative_i16]\ntest_wide_container[fork_CancunEIP7692-eof_test-max_u16]\ntest_migrated_eofcreate[fork_CancunEIP7692-eof_test-eofcreate_0]\ntest_migrated_eofcreate[fork_CancunEIP7692-eof_test-orphan_subcontainer_0]\ntest_migrated_eofcreate[fork_CancunEIP7692-eof_test-orphan_subcontainer_0_and_truncated_data]\ntest_migrated_eofcreate[fork_CancunEIP7692-eof_test-orphan_subcontainer_0_and_data]\ntest_migrated_eofcreate[fork_CancunEIP7692-eof_test-subcontainer_0_with_invalid_prefix]\ntest_migrated_eofcreate[fork_CancunEIP7692-eof_test-eofcreate_1_orphan_subcontainer_0]\ntest_migrated_eofcreate[fork_CancunEIP7692-eof_test-two_orphan_subcontainers]\ntest_migrated_eofcreate[fork_CancunEIP7692-eof_test-eofcreate_255_max_orphan_subcontainers]\ntest_migrated_eofcreate[fork_CancunEIP7692-eof_test-max_orphan_subcontainers]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/","title":"EIP-7702 Eoa Code Tx","text":"

    Documentation for tests/prague/eip7702_eoa_code_tx.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7702_eoa_code_tx --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7702_eoa_code_tx --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Cross-client EIP-7702 Tests

    "},{"location":"tests/prague/eip7702_eoa_code_tx/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip7702_eoa_code_tx/spec.py.

    Defines EIP-7702 specification constants and functions.

    "},{"location":"tests/prague/eip7702_eoa_code_tx/spec/#tests.prague.eip7702_eoa_code_tx.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-7702 specifications as defined at https://eips.ethereum.org/EIPS/eip-7702

    Source code in tests/prague/eip7702_eoa_code_tx/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-7702 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-7702\n    \"\"\"\n\n    SET_CODE_TX_TYPE = 0x04\n    MAGIC = 0x05\n    PER_AUTH_BASE_COST = 2500\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/","title":"Test Eoa Code Txs","text":"

    Documentation for tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests use of set-code transactions from EIP-7702: Set EOA account code for one transaction

    Tests use of set-code transactions from EIP-7702: Set EOA account code for one transaction.

    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_to_sstore","title":"test_set_code_to_sstore(state_test, pre, suffix, succeeds, eoa_balance)","text":"

    Test the executing a simple SSTORE in a set-code transaction.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    @pytest.mark.parametrize(\n    \"eoa_balance\",\n    [\n        pytest.param(0, marks=pytest.mark.xfail(reason=\"evm fails on zero balance\")),\n        pytest.param(1),\n    ],\n)\n@pytest.mark.parametrize(\n    \"suffix,succeeds\",\n    [\n        pytest.param(Op.STOP, True, id=\"stop\"),\n        pytest.param(Op.RETURN(0, 0), True, id=\"return\"),\n        pytest.param(Op.REVERT, False, id=\"revert\"),\n        pytest.param(Op.INVALID, False, id=\"invalid\"),\n    ],\n)\ndef test_set_code_to_sstore(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    suffix: Bytecode,\n    succeeds: bool,\n    eoa_balance: int,\n):\n    \"\"\"\n    Test the executing a simple SSTORE in a set-code transaction.\n    \"\"\"\n    storage = Storage()\n    auth_signer = pre.fund_eoa(eoa_balance)\n\n    set_code = (\n        Op.SSTORE(storage.store_next(1), 1)\n        + Op.SSTORE(storage.store_next(2), 2)\n        + Op.SSTORE(storage.store_next(3), 3)\n        + suffix\n    )\n    set_code_to_address = pre.deploy_contract(\n        set_code,\n    )\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer,\n        value=0,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_to_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            set_code_to_address: Account(storage={k: 0 for k in storage}),\n            auth_signer: Account(nonce=0, code=b\"\", storage=storage if succeeds else {}),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_to_sstore_then_sload","title":"test_set_code_to_sstore_then_sload(blockchain_test, pre)","text":"

    Test the executing a simple SSTORE then SLOAD in two separate set-code transactions.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    def test_set_code_to_sstore_then_sload(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Test the executing a simple SSTORE then SLOAD in two separate set-code transactions.\n    \"\"\"\n    auth_signer = pre.fund_eoa(auth_account_start_balance)\n    sender = pre.fund_eoa()\n\n    storage_key_1 = 0x1\n    storage_key_2 = 0x2\n    storage_value = 0x1234\n\n    set_code_1 = Op.SSTORE(storage_key_1, storage_value) + Op.STOP\n    set_code_1_address = pre.deploy_contract(set_code_1)\n\n    set_code_2 = Op.SSTORE(storage_key_2, Op.ADD(Op.SLOAD(storage_key_1), 1)) + Op.STOP\n    set_code_2_address = pre.deploy_contract(set_code_2)\n\n    tx_1 = Transaction(\n        gas_limit=50_000,\n        to=auth_signer,\n        value=0,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_1_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=sender,\n    )\n\n    tx_2 = Transaction(\n        gas_limit=50_000,\n        to=auth_signer,\n        value=0,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_2_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=sender,\n    )\n\n    block = Block(\n        txs=[tx_1, tx_2],\n    )\n\n    blockchain_test(\n        pre=pre,\n        post={\n            auth_signer: Account(\n                nonce=0,\n                code=b\"\",\n                storage={\n                    storage_key_1: storage_value,\n                    storage_key_2: storage_value + 1,\n                },\n            ),\n        },\n        blocks=[block],\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_to_tstore_reentry","title":"test_set_code_to_tstore_reentry(state_test, pre, call_opcode, return_opcode)","text":"

    Test the executing a simple TSTORE in a set-code transaction, which also performs a re-entry to TLOAD the value.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.CALL,\n        Op.DELEGATECALL,\n        Op.STATICCALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"return_opcode\",\n    [\n        Op.RETURN,\n        Op.REVERT,\n    ],\n)\ndef test_set_code_to_tstore_reentry(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    call_opcode: Op,\n    return_opcode: Op,\n):\n    \"\"\"\n    Test the executing a simple TSTORE in a set-code transaction, which also performs a\n    re-entry to TLOAD the value.\n    \"\"\"\n    auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n    tload_value = 0x1234\n    set_code = Conditional(\n        condition=Op.ISZERO(Op.TLOAD(1)),\n        if_true=Op.TSTORE(1, tload_value)\n        + call_opcode(address=Op.ADDRESS)\n        + Op.RETURNDATACOPY(0, 0, 32)\n        + Op.SSTORE(2, Op.MLOAD(0)),\n        if_false=Op.MSTORE(0, Op.TLOAD(1)) + return_opcode(size=32),\n    )\n    set_code_to_address = pre.deploy_contract(set_code)\n\n    tx = Transaction(\n        gas_limit=100_000,\n        to=auth_signer,\n        value=0,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_to_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            auth_signer: Account(nonce=0, code=b\"\", storage={2: tload_value}),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_to_self_destruct","title":"test_set_code_to_self_destruct(state_test, pre)","text":"

    Test the executing self-destruct opcode in a set-code transaction.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    def test_set_code_to_self_destruct(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Test the executing self-destruct opcode in a set-code transaction.\n    \"\"\"\n    auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n    set_code_to_address = pre.deploy_contract(Op.SELFDESTRUCT(Op.ADDRESS))\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer,\n        value=0,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_to_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={},\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_to_contract_creator","title":"test_set_code_to_contract_creator(state_test, pre, op)","text":"

    Test the executing a contract-creating opcode in a set-code transaction.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    @pytest.mark.parametrize(\n    \"op\",\n    [\n        Op.CREATE,\n        Op.CREATE2,\n    ],\n)\ndef test_set_code_to_contract_creator(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    op: Op,\n):\n    \"\"\"\n    Test the executing a contract-creating opcode in a set-code transaction.\n    \"\"\"\n    storage = Storage()\n    auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n    deployed_code = Op.STOP\n    initcode = Initcode(deploy_code=deployed_code)\n\n    deployed_contract_address = compute_create_address(\n        address=auth_signer, salt=0, initcode=initcode, opcode=op\n    )\n\n    set_code = Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE(\n        storage.store_next(deployed_contract_address),\n        op(value=0, offset=0, size=Op.CALLDATASIZE),\n    )\n    set_code_to_address = pre.deploy_contract(set_code)\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer,\n        value=0,\n        data=initcode,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_to_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            set_code_to_address: Account(storage={}),\n            auth_signer: Account(nonce=1, code=b\"\", storage=storage),\n            deployed_contract_address: Account(\n                code=deployed_code,\n                storage={},\n            ),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_to_self_caller","title":"test_set_code_to_self_caller(state_test, pre, op, value)","text":"

    Test the executing a self-call in a set-code transaction.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    @pytest.mark.parametrize(\n    \"op\",\n    [\n        Op.CALL,\n        Op.DELEGATECALL,\n        Op.STATICCALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"value\",\n    [\n        0,\n        10**18,\n    ],\n)\ndef test_set_code_to_self_caller(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    op: Op,\n    value: int,\n):\n    \"\"\"\n    Test the executing a self-call in a set-code transaction.\n    \"\"\"\n    storage = Storage()\n    auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n    first_entry_slot = storage.store_next(True)\n    re_entry_success_slot = storage.store_next(op != Op.STATICCALL)\n    re_entry_call_return_code_slot = storage.store_next(op != Op.STATICCALL)\n    set_code = Conditional(\n        condition=Op.ISZERO(Op.SLOAD(first_entry_slot)),\n        if_true=Op.SSTORE(first_entry_slot, 1)\n        + Op.SSTORE(re_entry_call_return_code_slot, op(address=auth_signer, value=value))\n        + Op.STOP,\n        if_false=Op.SSTORE(re_entry_success_slot, 1) + Op.STOP,\n    )\n    set_code_to_address = pre.deploy_contract(set_code)\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer,\n        value=value,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_to_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=pre.fund_eoa(10**21),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            set_code_to_address: Account(storage={}),\n            auth_signer: Account(\n                nonce=0,\n                code=b\"\",\n                storage=storage,\n                balance=auth_account_start_balance + value,\n            ),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_call_set_code","title":"test_set_code_call_set_code(state_test, pre, op, value)","text":"

    Test the calling a set-code account from another set-code account.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    @pytest.mark.parametrize(\n    \"op\",\n    [\n        Op.CALL,\n        Op.DELEGATECALL,\n        Op.STATICCALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"value\",\n    [\n        0,\n        10**18,\n    ],\n)\ndef test_set_code_call_set_code(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    op: Op,\n    value: int,\n):\n    \"\"\"\n    Test the calling a set-code account from another set-code account.\n    \"\"\"\n    auth_signer_1 = pre.fund_eoa(auth_account_start_balance)\n    storage_1 = Storage()\n\n    set_code_1_call_result_slot = storage_1.store_next(op != Op.STATICCALL)\n    set_code_1_success = storage_1.store_next(True)\n\n    auth_signer_2 = pre.fund_eoa(auth_account_start_balance)\n    storage_2 = Storage().set_next_slot(storage_1.peek_slot())\n    set_code_2_success = storage_2.store_next(op != Op.STATICCALL)\n\n    set_code_1 = (\n        Op.SSTORE(set_code_1_call_result_slot, op(address=auth_signer_2, value=value))\n        + Op.SSTORE(set_code_1_success, 1)\n        + Op.STOP\n    )\n    set_code_to_address_1 = pre.deploy_contract(set_code_1)\n\n    set_code_2 = Op.SSTORE(set_code_2_success, 1) + Op.STOP\n    set_code_to_address_2 = pre.deploy_contract(set_code_2)\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer_1,\n        value=value,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_to_address_1,\n                nonce=0,\n                signer=auth_signer_1,\n            ),\n            AuthorizationTuple(\n                address=set_code_to_address_2,\n                nonce=0,\n                signer=auth_signer_2,\n            ),\n        ],\n        sender=pre.fund_eoa(10**21),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            set_code_to_address_1: Account(storage={k: 0 for k in storage_1}),\n            set_code_to_address_2: Account(storage={k: 0 for k in storage_2}),\n            auth_signer_1: Account(\n                nonce=0,\n                storage=storage_1 if op in [Op.CALL, Op.STATICCALL] else storage_1 + storage_2,\n                balance=(0 if op == Op.CALL else value) + auth_account_start_balance,\n            ),\n            auth_signer_2: Account(\n                nonce=0,\n                storage=storage_2 if op == Op.CALL else {},\n                balance=(value if op == Op.CALL else 0) + auth_account_start_balance,\n            ),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_address_from_set_code","title":"test_address_from_set_code(state_test, pre)","text":"

    Test the address opcode in a set-code transaction.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    def test_address_from_set_code(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Test the address opcode in a set-code transaction.\n    \"\"\"\n    storage = Storage()\n    auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n    set_code = Op.SSTORE(storage.store_next(auth_signer), Op.ADDRESS) + Op.STOP\n    set_code_to_address = pre.deploy_contract(set_code)\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer,\n        value=0,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_to_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            set_code_to_address: Account(storage={}),\n            auth_signer: Account(nonce=0, code=b\"\", storage=storage),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_ext_code_on_set_code","title":"test_ext_code_on_set_code(state_test, pre, balance)","text":"

    Test different ext*code operations on a set-code address.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    @pytest.mark.parametrize(\n    \"balance\",\n    [\n        pytest.param(0, marks=pytest.mark.xfail(reason=\"evm fails on zero balance\")),\n        pytest.param(10**18),\n    ],\n)\ndef test_ext_code_on_set_code(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    balance: int,\n):\n    \"\"\"\n    Test different ext*code operations on a set-code address.\n    \"\"\"\n    auth_signer = pre.fund_eoa(balance)\n\n    slot = count(1)\n    slot_call_success = next(slot)\n    slot_caller = next(slot)\n    slot_ext_code_size_result = next(slot)\n    slot_ext_code_hash_result = next(slot)\n    slot_ext_code_copy_result = next(slot)\n    slot_ext_balance_result = next(slot)\n\n    callee_code = (\n        Op.SSTORE(slot_caller, Op.CALLER)\n        + Op.SSTORE(slot_ext_code_size_result, Op.EXTCODESIZE(Op.CALLER))\n        + Op.SSTORE(slot_ext_code_hash_result, Op.EXTCODEHASH(Op.CALLER))\n        + Op.EXTCODECOPY(Op.CALLER, 0, 0, Op.EXTCODESIZE(Op.CALLER))\n        + Op.SSTORE(slot_ext_code_copy_result, Op.MLOAD(0))\n        + Op.SSTORE(slot_ext_balance_result, Op.BALANCE(Op.CALLER))\n        + Op.STOP\n    )\n    callee_address = pre.deploy_contract(callee_code)\n    callee_storage = Storage()\n\n    auth_signer_storage = Storage()\n    set_code = Op.SSTORE(slot_call_success, Op.CALL(address=callee_address)) + Op.STOP\n    auth_signer_storage[slot_call_success] = True\n    set_code_to_address = pre.deploy_contract(set_code)\n\n    callee_storage[slot_caller] = auth_signer\n    callee_storage[slot_ext_code_size_result] = len(set_code)\n    callee_storage[slot_ext_code_hash_result] = set_code.keccak256()\n    callee_storage[slot_ext_code_copy_result] = bytes(set_code).ljust(32, b\"\\x00\")[:32]\n    callee_storage[slot_ext_balance_result] = balance\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_to_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            set_code_to_address: Account(storage={}),\n            auth_signer: Account(nonce=0, code=b\"\", storage=auth_signer_storage, balance=balance),\n            callee_address: Account(storage=callee_storage),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_self_code_on_set_code","title":"test_self_code_on_set_code(state_test, pre, balance)","text":"

    Test codesize and codecopy operations on a set-code address.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    @pytest.mark.parametrize(\n    \"balance\",\n    [\n        pytest.param(0, marks=pytest.mark.xfail(reason=\"evm fails on zero balance\")),\n        pytest.param(10**18),\n    ],\n)\ndef test_self_code_on_set_code(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    balance: int,\n):\n    \"\"\"\n    Test codesize and codecopy operations on a set-code address.\n    \"\"\"\n    auth_signer = pre.fund_eoa(balance)\n\n    slot = count(1)\n    slot_code_size_result = next(slot)\n    slot_code_copy_result = next(slot)\n    slot_self_balance_result = next(slot)\n\n    set_code = (\n        Op.SSTORE(slot_code_size_result, Op.CODESIZE)\n        + Op.CODECOPY(0, 0, Op.CODESIZE)\n        + Op.SSTORE(slot_code_copy_result, Op.MLOAD(0))\n        + Op.SSTORE(slot_self_balance_result, Op.SELFBALANCE)\n        + Op.STOP\n    )\n    set_code_to_address = pre.deploy_contract(set_code)\n\n    storage = Storage()\n    storage[slot_code_size_result] = len(set_code)\n    storage[slot_code_copy_result] = bytes(set_code).ljust(32, b\"\\x00\")[:32]\n    storage[slot_self_balance_result] = balance\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_to_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            set_code_to_address: Account(storage={}),\n            auth_signer: Account(nonce=0, code=b\"\", storage=storage, balance=balance),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_to_account_deployed_in_same_tx","title":"test_set_code_to_account_deployed_in_same_tx(state_test, pre, create_op)","text":"

    Test setting the code of an account to an address that is deployed in the same transaction, and test calling the set-code address and the deployed contract.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    @pytest.mark.parametrize(\n    \"create_op\",\n    [\n        Op.CREATE,\n        Op.CREATE2,\n    ],\n)\ndef test_set_code_to_account_deployed_in_same_tx(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    create_op: Op,\n):\n    \"\"\"\n    Test setting the code of an account to an address that is deployed in the same transaction,\n    and test calling the set-code address and the deployed contract.\n    \"\"\"\n    auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n    success_slot = 1\n\n    deployed_code = Op.SSTORE(success_slot, 1) + Op.STOP\n    initcode = Initcode(deploy_code=deployed_code)\n\n    deployed_contract_address_slot = 1\n    signer_call_return_code_slot = 2\n    deployed_contract_call_return_code_slot = 3\n\n    contract_creator_code = (\n        Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n        + Op.SSTORE(deployed_contract_address_slot, create_op(offset=0, size=Op.CALLDATASIZE))\n        + Op.SSTORE(signer_call_return_code_slot, Op.CALL(address=auth_signer))\n        + Op.SSTORE(\n            deployed_contract_call_return_code_slot,\n            Op.CALL(address=Op.SLOAD(deployed_contract_address_slot)),\n        )\n        + Op.STOP()\n    )\n    contract_creator_address = pre.deploy_contract(contract_creator_code)\n\n    if create_op == Op.CREATE:\n        deployed_contract_address = compute_create_address(\n            address=contract_creator_address,\n            nonce=1,\n        )\n    else:\n        deployed_contract_address = compute_create2_address(\n            address=contract_creator_address,\n            salt=0,\n            initcode=initcode,\n        )\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=contract_creator_address,\n        value=0,\n        data=initcode,\n        authorization_list=[\n            AuthorizationTuple(\n                address=deployed_contract_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            deployed_contract_address: Account(\n                storage={success_slot: 1},\n            ),\n            auth_signer: Account(\n                nonce=0,\n                code=b\"\",\n                storage={},\n            ),\n            contract_creator_address: Account(\n                storage={\n                    deployed_contract_address_slot: deployed_contract_address,\n                    signer_call_return_code_slot: 1,\n                    deployed_contract_call_return_code_slot: 1,\n                }\n            ),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_multiple_valid_authorization_tuples_same_signer","title":"test_set_code_multiple_valid_authorization_tuples_same_signer(state_test, pre)","text":"

    Test setting the code of an account with multiple authorization tuples from the same signer.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    def test_set_code_multiple_valid_authorization_tuples_same_signer(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Test setting the code of an account with multiple authorization tuples from the same signer.\n    \"\"\"\n    auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n    success_slot = 1\n\n    tuple_count = 10\n\n    addresses = [\n        pre.deploy_contract(Op.SSTORE(success_slot, i + 1) + Op.STOP) for i in range(tuple_count)\n    ]\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer,\n        value=0,\n        authorization_list=[\n            AuthorizationTuple(\n                address=address,\n                nonce=0,\n                signer=auth_signer,\n            )\n            for address in addresses\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            auth_signer: Account(\n                nonce=0,\n                code=b\"\",\n                storage={\n                    success_slot: 1,\n                },\n            ),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_multiple_valid_authorization_tuples_first_invalid_same_signer","title":"test_set_code_multiple_valid_authorization_tuples_first_invalid_same_signer(state_test, pre)","text":"

    Test setting the code of an account with multiple authorization tuples from the same signer but the first tuple is invalid.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    def test_set_code_multiple_valid_authorization_tuples_first_invalid_same_signer(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Test setting the code of an account with multiple authorization tuples from the same signer\n    but the first tuple is invalid.\n    \"\"\"\n    auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n    success_slot = 1\n\n    tuple_count = 10\n\n    addresses = [\n        pre.deploy_contract(Op.SSTORE(success_slot, i + 1) + Op.STOP) for i in range(tuple_count)\n    ]\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer,\n        value=0,\n        authorization_list=[\n            AuthorizationTuple(\n                address=address,\n                nonce=1 if i == 0 else 0,\n                signer=auth_signer,\n            )\n            for i, address in enumerate(addresses)\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            auth_signer: Account(\n                nonce=0,\n                code=b\"\",\n                storage={\n                    success_slot: 2,\n                },\n            ),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_invalid_authorization_tuple","title":"test_set_code_invalid_authorization_tuple(state_test, pre, invalidity_reason)","text":"

    Test attempting to set the code of an account with invalid authorization tuple.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    @pytest.mark.parametrize(\n    \"invalidity_reason\",\n    [\n        InvalidityReason.NONCE,\n        pytest.param(\n            InvalidityReason.MULTIPLE_NONCE, marks=pytest.mark.xfail(reason=\"test issue\")\n        ),\n        pytest.param(InvalidityReason.CHAIN_ID, marks=pytest.mark.xfail(reason=\"evm issue\")),\n    ],\n)\ndef test_set_code_invalid_authorization_tuple(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    invalidity_reason: InvalidityReason,\n):\n    \"\"\"\n    Test attempting to set the code of an account with invalid authorization tuple.\n    \"\"\"\n    auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n    success_slot = 1\n\n    set_code = Op.SSTORE(success_slot, 1) + Op.STOP\n    set_code_to_address = pre.deploy_contract(set_code)\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer,\n        value=0,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_to_address,\n                nonce=1\n                if invalidity_reason == InvalidityReason.NONCE\n                else [0, 1]\n                if invalidity_reason == InvalidityReason.MULTIPLE_NONCE\n                else 0,\n                chain_id=2 if invalidity_reason == InvalidityReason.CHAIN_ID else 0,\n                signer=auth_signer,\n            )\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            auth_signer: Account(\n                nonce=0,\n                code=b\"\",\n                storage={\n                    success_slot: 0,\n                },\n            ),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/index/test_cases/","title":"Test Eoa Code Txs - Test Cases","text":"

    Test cases generated from tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py

    Parametrized test cases generated from the test module tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py:

    test_set_code_to_sstore[fork_Prague-blockchain_test-stop-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-stop-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-return-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-return-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-revert-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-revert-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-invalid-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-invalid-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-stop-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-stop-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-return-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-return-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-revert-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-revert-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-invalid-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-invalid-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-state_test-stop-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-state_test-stop-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-state_test-return-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-state_test-return-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-state_test-revert-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-state_test-revert-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-state_test-invalid-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-state_test-invalid-eoa_balance_1]\ntest_set_code_to_sstore_then_sload[fork_Prague-blockchain_test]\ntest_set_code_to_sstore_then_sload[fork_Prague-blockchain_test_engine]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test-return_opcode_RETURN-call_opcode_CALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test-return_opcode_RETURN-call_opcode_DELEGATECALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test-return_opcode_RETURN-call_opcode_STATICCALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test-return_opcode_RETURN-call_opcode_CALLCODE]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test-return_opcode_REVERT-call_opcode_CALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test-return_opcode_REVERT-call_opcode_DELEGATECALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test-return_opcode_REVERT-call_opcode_STATICCALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test-return_opcode_REVERT-call_opcode_CALLCODE]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test_engine-return_opcode_RETURN-call_opcode_CALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test_engine-return_opcode_RETURN-call_opcode_DELEGATECALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test_engine-return_opcode_RETURN-call_opcode_STATICCALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test_engine-return_opcode_RETURN-call_opcode_CALLCODE]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test_engine-return_opcode_REVERT-call_opcode_CALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test_engine-return_opcode_REVERT-call_opcode_DELEGATECALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test_engine-return_opcode_REVERT-call_opcode_STATICCALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test_engine-return_opcode_REVERT-call_opcode_CALLCODE]\ntest_set_code_to_tstore_reentry[fork_Prague-state_test-return_opcode_RETURN-call_opcode_CALL]\ntest_set_code_to_tstore_reentry[fork_Prague-state_test-return_opcode_RETURN-call_opcode_DELEGATECALL]\ntest_set_code_to_tstore_reentry[fork_Prague-state_test-return_opcode_RETURN-call_opcode_STATICCALL]\ntest_set_code_to_tstore_reentry[fork_Prague-state_test-return_opcode_RETURN-call_opcode_CALLCODE]\ntest_set_code_to_tstore_reentry[fork_Prague-state_test-return_opcode_REVERT-call_opcode_CALL]\ntest_set_code_to_tstore_reentry[fork_Prague-state_test-return_opcode_REVERT-call_opcode_DELEGATECALL]\ntest_set_code_to_tstore_reentry[fork_Prague-state_test-return_opcode_REVERT-call_opcode_STATICCALL]\ntest_set_code_to_tstore_reentry[fork_Prague-state_test-return_opcode_REVERT-call_opcode_CALLCODE]\ntest_set_code_to_self_destruct[fork_Prague-blockchain_test]\ntest_set_code_to_self_destruct[fork_Prague-blockchain_test_engine]\ntest_set_code_to_self_destruct[fork_Prague-state_test]\ntest_set_code_to_contract_creator[fork_Prague-blockchain_test-op_CREATE]\ntest_set_code_to_contract_creator[fork_Prague-blockchain_test-op_CREATE2]\ntest_set_code_to_contract_creator[fork_Prague-blockchain_test_engine-op_CREATE]\ntest_set_code_to_contract_creator[fork_Prague-blockchain_test_engine-op_CREATE2]\ntest_set_code_to_contract_creator[fork_Prague-state_test-op_CREATE]\ntest_set_code_to_contract_creator[fork_Prague-state_test-op_CREATE2]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test-value_0-op_CALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test-value_0-op_DELEGATECALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test-value_0-op_STATICCALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test-value_0-op_CALLCODE]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test-value_1000000000000000000-op_CALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test-value_1000000000000000000-op_DELEGATECALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test-value_1000000000000000000-op_STATICCALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test-value_1000000000000000000-op_CALLCODE]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test_engine-value_0-op_CALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test_engine-value_0-op_DELEGATECALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test_engine-value_0-op_STATICCALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test_engine-value_0-op_CALLCODE]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test_engine-value_1000000000000000000-op_CALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test_engine-value_1000000000000000000-op_DELEGATECALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test_engine-value_1000000000000000000-op_STATICCALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test_engine-value_1000000000000000000-op_CALLCODE]\ntest_set_code_to_self_caller[fork_Prague-state_test-value_0-op_CALL]\ntest_set_code_to_self_caller[fork_Prague-state_test-value_0-op_DELEGATECALL]\ntest_set_code_to_self_caller[fork_Prague-state_test-value_0-op_STATICCALL]\ntest_set_code_to_self_caller[fork_Prague-state_test-value_0-op_CALLCODE]\ntest_set_code_to_self_caller[fork_Prague-state_test-value_1000000000000000000-op_CALL]\ntest_set_code_to_self_caller[fork_Prague-state_test-value_1000000000000000000-op_DELEGATECALL]\ntest_set_code_to_self_caller[fork_Prague-state_test-value_1000000000000000000-op_STATICCALL]\ntest_set_code_to_self_caller[fork_Prague-state_test-value_1000000000000000000-op_CALLCODE]\ntest_set_code_call_set_code[fork_Prague-blockchain_test-value_0-op_CALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test-value_0-op_DELEGATECALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test-value_0-op_STATICCALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test-value_0-op_CALLCODE]\ntest_set_code_call_set_code[fork_Prague-blockchain_test-value_1000000000000000000-op_CALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test-value_1000000000000000000-op_DELEGATECALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test-value_1000000000000000000-op_STATICCALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test-value_1000000000000000000-op_CALLCODE]\ntest_set_code_call_set_code[fork_Prague-blockchain_test_engine-value_0-op_CALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test_engine-value_0-op_DELEGATECALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test_engine-value_0-op_STATICCALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test_engine-value_0-op_CALLCODE]\ntest_set_code_call_set_code[fork_Prague-blockchain_test_engine-value_1000000000000000000-op_CALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test_engine-value_1000000000000000000-op_DELEGATECALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test_engine-value_1000000000000000000-op_STATICCALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test_engine-value_1000000000000000000-op_CALLCODE]\ntest_set_code_call_set_code[fork_Prague-state_test-value_0-op_CALL]\ntest_set_code_call_set_code[fork_Prague-state_test-value_0-op_DELEGATECALL]\ntest_set_code_call_set_code[fork_Prague-state_test-value_0-op_STATICCALL]\ntest_set_code_call_set_code[fork_Prague-state_test-value_0-op_CALLCODE]\ntest_set_code_call_set_code[fork_Prague-state_test-value_1000000000000000000-op_CALL]\ntest_set_code_call_set_code[fork_Prague-state_test-value_1000000000000000000-op_DELEGATECALL]\ntest_set_code_call_set_code[fork_Prague-state_test-value_1000000000000000000-op_STATICCALL]\ntest_set_code_call_set_code[fork_Prague-state_test-value_1000000000000000000-op_CALLCODE]\ntest_address_from_set_code[fork_Prague-blockchain_test]\ntest_address_from_set_code[fork_Prague-blockchain_test_engine]\ntest_address_from_set_code[fork_Prague-state_test]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test-balance_0]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test-balance_1000000000000000000]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test_engine-balance_0]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test_engine-balance_1000000000000000000]\ntest_ext_code_on_set_code[fork_Prague-state_test-balance_0]\ntest_ext_code_on_set_code[fork_Prague-state_test-balance_1000000000000000000]\ntest_self_code_on_set_code[fork_Prague-blockchain_test-balance_0]\ntest_self_code_on_set_code[fork_Prague-blockchain_test-balance_1000000000000000000]\ntest_self_code_on_set_code[fork_Prague-blockchain_test_engine-balance_0]\ntest_self_code_on_set_code[fork_Prague-blockchain_test_engine-balance_1000000000000000000]\ntest_self_code_on_set_code[fork_Prague-state_test-balance_0]\ntest_self_code_on_set_code[fork_Prague-state_test-balance_1000000000000000000]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_op_CREATE]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_op_CREATE2]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_op_CREATE]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_op_CREATE2]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-state_test-create_op_CREATE]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-state_test-create_op_CREATE2]\ntest_set_code_multiple_valid_authorization_tuples_same_signer[fork_Prague-blockchain_test]\ntest_set_code_multiple_valid_authorization_tuples_same_signer[fork_Prague-blockchain_test_engine]\ntest_set_code_multiple_valid_authorization_tuples_same_signer[fork_Prague-state_test]\ntest_set_code_multiple_valid_authorization_tuples_first_invalid_same_signer[fork_Prague-blockchain_test]\ntest_set_code_multiple_valid_authorization_tuples_first_invalid_same_signer[fork_Prague-blockchain_test_engine]\ntest_set_code_multiple_valid_authorization_tuples_first_invalid_same_signer[fork_Prague-state_test]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test-invalidity_reason_InvalidityReason.NONCE]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test-invalidity_reason_InvalidityReason.MULTIPLE_NONCE]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test-invalidity_reason_InvalidityReason.CHAIN_ID]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test_engine-invalidity_reason_InvalidityReason.NONCE]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test_engine-invalidity_reason_InvalidityReason.MULTIPLE_NONCE]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test_engine-invalidity_reason_InvalidityReason.CHAIN_ID]\ntest_set_code_invalid_authorization_tuple[fork_Prague-state_test-invalidity_reason_InvalidityReason.NONCE]\ntest_set_code_invalid_authorization_tuple[fork_Prague-state_test-invalidity_reason_InvalidityReason.MULTIPLE_NONCE]\ntest_set_code_invalid_authorization_tuple[fork_Prague-state_test-invalidity_reason_InvalidityReason.CHAIN_ID]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py\n
    "},{"location":"tests/shanghai/","title":"Shanghai","text":"

    Documentation for tests/shanghai.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai\n

    Test cases for EVM functionality introduced in Shanghai.

    "},{"location":"tests/shanghai/eip3651_warm_coinbase/","title":"EIP-3651 Warm Coinbase","text":"

    Documentation for tests/shanghai/eip3651_warm_coinbase.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip3651_warm_coinbase\n
    Tests EIP-3651: Warm COINBASE

    Tests for EIP-3651: Warm COINBASE.

    "},{"location":"tests/shanghai/eip3651_warm_coinbase/spec/","title":"Spec","text":"

    Documentation for tests/shanghai/eip3651_warm_coinbase/spec.py.

    Defines EIP-3651 specification constants and functions.

    "},{"location":"tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase/","title":"Test Warm Coinbase","text":"

    Documentation for tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py\n
    Tests EIP-3651: Warm COINBASE

    Tests for EIP-3651: Warm COINBASE.

    Tests ported from:
    • ethereum/tests/pull/1082.
    "},{"location":"tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase/#tests.shanghai.eip3651_warm_coinbase.test_warm_coinbase.test_warm_coinbase_call_out_of_gas","title":"test_warm_coinbase_call_out_of_gas(state_test, env, pre, post, sender, fork, opcode, contract_under_test_code, call_gas_exact, use_sufficient_gas)","text":"

    Test that the coinbase is warm by accessing the COINBASE with each of the following opcodes:

    • CALL
    • CALLCODE
    • DELEGATECALL
    • STATICCALL
    Source code in tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py
    @pytest.mark.valid_from(\"Shanghai\")\n@pytest.mark.parametrize(\n    \"use_sufficient_gas\",\n    [True, False],\n    ids=[\"sufficient_gas\", \"insufficient_gas\"],\n)\n@pytest.mark.parametrize(\n    \"opcode,contract_under_test_code,call_gas_exact\",\n    [\n        (\n            \"call\",\n            Op.POP(Op.CALL(0, Op.COINBASE, 0, 0, 0, 0, 0)),\n            # Extra gas: COINBASE + 4*PUSH1 + 2*DUP1 + POP\n            GAS_REQUIRED_CALL_WARM_ACCOUNT + 22,\n        ),\n        (\n            \"callcode\",\n            Op.POP(Op.CALLCODE(0, Op.COINBASE, 0, 0, 0, 0, 0)),\n            # Extra gas: COINBASE + 4*PUSH1 + 2*DUP1 + POP\n            GAS_REQUIRED_CALL_WARM_ACCOUNT + 22,\n        ),\n        (\n            \"delegatecall\",\n            Op.POP(Op.DELEGATECALL(0, Op.COINBASE, 0, 0, 0, 0)),\n            # Extra: COINBASE + 3*PUSH1 + 2*DUP1 + POP\n            GAS_REQUIRED_CALL_WARM_ACCOUNT + 19,\n        ),\n        (\n            \"staticcall\",\n            Op.POP(Op.STATICCALL(0, Op.COINBASE, 0, 0, 0, 0)),\n            # Extra: COINBASE + 3*PUSH1 + 2*DUP1 + POP\n            GAS_REQUIRED_CALL_WARM_ACCOUNT + 19,\n        ),\n    ],\n    ids=[\"CALL\", \"CALLCODE\", \"DELEGATECALL\", \"STATICCALL\"],\n)\ndef test_warm_coinbase_call_out_of_gas(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    post: Alloc,\n    sender: Address,\n    fork: Fork,\n    opcode: str,\n    contract_under_test_code: Bytecode,\n    call_gas_exact: int,\n    use_sufficient_gas: bool,\n):\n    \"\"\"\n    Test that the coinbase is warm by accessing the COINBASE with each\n    of the following opcodes:\n\n    - CALL\n    - CALLCODE\n    - DELEGATECALL\n    - STATICCALL\n    \"\"\"\n    contract_under_test_address = pre.deploy_contract(contract_under_test_code)\n\n    if not use_sufficient_gas:\n        call_gas_exact -= 1\n\n    caller_code = Op.SSTORE(\n        0,\n        Op.CALL(call_gas_exact, contract_under_test_address, 0, 0, 0, 0, 0),\n    )\n    caller_address = pre.deploy_contract(caller_code)\n\n    tx = Transaction(\n        ty=0x0,\n        chain_id=0x01,\n        nonce=0,\n        to=caller_address,\n        gas_limit=100000000,\n        gas_price=10,\n        sender=sender,\n    )\n\n    if use_sufficient_gas and fork >= Shanghai:\n        post[caller_address] = Account(\n            storage={\n                # On shanghai and beyond, calls with only 100 gas to\n                # coinbase will succeed.\n                0: 1,\n            }\n        )\n    else:\n        post[caller_address] = Account(\n            storage={\n                # Before shanghai, calls with only 100 gas to\n                # coinbase will fail.\n                0: 0,\n            }\n        )\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n        tag=\"opcode_\" + opcode,\n    )\n
    "},{"location":"tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase/#tests.shanghai.eip3651_warm_coinbase.test_warm_coinbase.test_warm_coinbase_gas_usage","title":"test_warm_coinbase_gas_usage(state_test, env, pre, sender, fork, opcode, code_gas_measure)","text":"

    Test the gas usage of opcodes affected by assuming a warm coinbase:

    • EXTCODESIZE
    • EXTCODECOPY
    • EXTCODEHASH
    • BALANCE
    • CALL
    • CALLCODE
    • DELEGATECALL
    • STATICCALL
    Source code in tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py
    @pytest.mark.valid_from(\"Berlin\")  # these tests fill for fork >= Berlin\n@pytest.mark.parametrize(\n    \"opcode,code_gas_measure\",\n    gas_measured_opcodes,\n    ids=[i[0] for i in gas_measured_opcodes],\n)\ndef test_warm_coinbase_gas_usage(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    sender: Address,\n    fork: Fork,\n    opcode: str,\n    code_gas_measure: Bytecode,\n):\n    \"\"\"\n    Test the gas usage of opcodes affected by assuming a warm coinbase:\n\n    - EXTCODESIZE\n    - EXTCODECOPY\n    - EXTCODEHASH\n    - BALANCE\n    - CALL\n    - CALLCODE\n    - DELEGATECALL\n    - STATICCALL\n    \"\"\"\n    measure_address = pre.deploy_contract(\n        code=code_gas_measure,\n    )\n\n    if fork >= Shanghai:\n        expected_gas = GAS_REQUIRED_CALL_WARM_ACCOUNT  # Warm account access cost after EIP-3651\n    else:\n        expected_gas = 2600  # Cold account access cost before EIP-3651\n\n    tx = Transaction(\n        ty=0x0,\n        chain_id=0x01,\n        nonce=0,\n        to=measure_address,\n        gas_limit=100000000,\n        gas_price=10,\n        sender=sender,\n    )\n\n    post = {\n        measure_address: Account(\n            storage={\n                0x00: expected_gas,\n            }\n        )\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n        tag=\"opcode_\" + opcode.lower(),\n    )\n
    "},{"location":"tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase/index/test_cases/","title":"Test Warm Coinbase - Test Cases","text":"

    Test cases generated from tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py

    Parametrized test cases generated from the test module tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py:

    test_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-CALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-CALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-CALLCODE-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-CALLCODE-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-DELEGATECALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-DELEGATECALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-STATICCALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-STATICCALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test_engine-CALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test_engine-CALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test_engine-CALLCODE-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test_engine-CALLCODE-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test_engine-DELEGATECALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test_engine-DELEGATECALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test_engine-STATICCALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test_engine-STATICCALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-state_test-CALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-state_test-CALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-state_test-CALLCODE-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-state_test-CALLCODE-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-state_test-DELEGATECALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-state_test-DELEGATECALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-state_test-STATICCALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-state_test-STATICCALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-CALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-CALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-CALLCODE-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-CALLCODE-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-DELEGATECALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-DELEGATECALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-STATICCALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-STATICCALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test_engine-CALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test_engine-CALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test_engine-CALLCODE-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test_engine-CALLCODE-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test_engine-DELEGATECALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test_engine-DELEGATECALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test_engine-STATICCALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test_engine-STATICCALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-state_test-CALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-state_test-CALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-state_test-CALLCODE-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-state_test-CALLCODE-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-state_test-DELEGATECALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-state_test-DELEGATECALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-state_test-STATICCALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-state_test-STATICCALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test-CALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test-CALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test-CALLCODE-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test-CALLCODE-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test-DELEGATECALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test-DELEGATECALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test-STATICCALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test-STATICCALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test_engine-CALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test_engine-CALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test_engine-CALLCODE-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test_engine-CALLCODE-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test_engine-DELEGATECALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test_engine-DELEGATECALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test_engine-STATICCALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test_engine-STATICCALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-state_test-CALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-state_test-CALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-state_test-CALLCODE-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-state_test-CALLCODE-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-state_test-DELEGATECALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-state_test-DELEGATECALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-state_test-STATICCALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-state_test-STATICCALL-insufficient_gas]\ntest_warm_coinbase_gas_usage[fork_Berlin-blockchain_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Berlin-blockchain_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Berlin-blockchain_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Berlin-blockchain_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Berlin-blockchain_test-CALL]\ntest_warm_coinbase_gas_usage[fork_Berlin-blockchain_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Berlin-blockchain_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Berlin-blockchain_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Berlin-state_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Berlin-state_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Berlin-state_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Berlin-state_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Berlin-state_test-CALL]\ntest_warm_coinbase_gas_usage[fork_Berlin-state_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Berlin-state_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Berlin-state_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_London-blockchain_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_London-blockchain_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_London-blockchain_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_London-blockchain_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_London-blockchain_test-CALL]\ntest_warm_coinbase_gas_usage[fork_London-blockchain_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_London-blockchain_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_London-blockchain_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_London-state_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_London-state_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_London-state_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_London-state_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_London-state_test-CALL]\ntest_warm_coinbase_gas_usage[fork_London-state_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_London-state_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_London-state_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test-CALL]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test_engine-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test_engine-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test_engine-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test_engine-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test_engine-CALL]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test_engine-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test_engine-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test_engine-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Paris-state_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Paris-state_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Paris-state_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Paris-state_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Paris-state_test-CALL]\ntest_warm_coinbase_gas_usage[fork_Paris-state_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Paris-state_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Paris-state_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-CALL]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test_engine-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test_engine-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test_engine-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test_engine-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test_engine-CALL]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test_engine-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test_engine-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test_engine-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Shanghai-state_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Shanghai-state_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Shanghai-state_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Shanghai-state_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Shanghai-state_test-CALL]\ntest_warm_coinbase_gas_usage[fork_Shanghai-state_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Shanghai-state_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Shanghai-state_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-CALL]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test_engine-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test_engine-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test_engine-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test_engine-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test_engine-CALL]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test_engine-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test_engine-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test_engine-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Cancun-state_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Cancun-state_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Cancun-state_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Cancun-state_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Cancun-state_test-CALL]\ntest_warm_coinbase_gas_usage[fork_Cancun-state_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Cancun-state_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Cancun-state_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test-CALL]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test_engine-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test_engine-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test_engine-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test_engine-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test_engine-CALL]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test_engine-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test_engine-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test_engine-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Prague-state_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Prague-state_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Prague-state_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Prague-state_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Prague-state_test-CALL]\ntest_warm_coinbase_gas_usage[fork_Prague-state_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Prague-state_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Prague-state_test-STATICCALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py\n
    "},{"location":"tests/shanghai/eip3855_push0/","title":"EIP-3855 Push0","text":"

    Documentation for tests/shanghai/eip3855_push0.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip3855_push0\n
    Tests EIP-3855: PUSH0 Instruction

    Tests for EIP-3855: PUSH0 Instruction.

    "},{"location":"tests/shanghai/eip3855_push0/spec/","title":"Spec","text":"

    Documentation for tests/shanghai/eip3855_push0/spec.py.

    Defines EIP-3855 specification constants and functions.

    "},{"location":"tests/shanghai/eip3855_push0/test_push0/","title":"Test Push0","text":"

    Documentation for tests/shanghai/eip3855_push0/test_push0.py.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip3855_push0/test_push0.py\n
    Tests EIP-3855: PUSH0 Instruction

    Tests for EIP-3855: PUSH0 Instruction.

    Tests ported from:
    • ethereum/tests/pull/1033.
    "},{"location":"tests/shanghai/eip3855_push0/test_push0/#tests.shanghai.eip3855_push0.test_push0.test_push0_contracts","title":"test_push0_contracts(state_test, env, pre, post, sender, contract_code, expected_storage)","text":"

    Tests PUSH0 within various deployed contracts.

    Source code in tests/shanghai/eip3855_push0/test_push0.py
    @pytest.mark.parametrize(\n    \"contract_code,expected_storage\",\n    [\n        # Use PUSH0 to set a key for SSTORE.\n        pytest.param(\n            Op.SSTORE(Op.PUSH0, 1),\n            Account(storage={0x00: 0x01}),\n            id=\"key_sstore\",\n        ),\n        # Fill stack with PUSH0, then OR all values and save using SSTORE.\n        pytest.param(\n            (Op.PUSH0 * 1024) + (Op.OR * 1023) + Op.SSTORE(Op.SWAP1, 1),\n            Account(storage={0x00: 0x01}),\n            id=\"fill_stack\",\n        ),\n        # Stack overflow by using PUSH0 1025 times.\n        pytest.param(\n            Op.SSTORE(Op.PUSH0, 1) + (Op.PUSH0 * 1025),\n            Account(storage={0x00: 0x00}),\n            id=\"stack_overflow\",\n        ),\n        # Update an already existing storage value.\n        pytest.param(\n            Op.SSTORE(Op.PUSH0, 2) + Op.SSTORE(1, Op.PUSH0),\n            Account(storage={0x00: 0x02, 0x01: 0x00}),\n            id=\"storage_overwrite\",\n        ),\n        # Jump to a JUMPDEST next to a PUSH0, must succeed.\n        pytest.param(\n            Op.PUSH1(4) + Op.JUMP + Op.PUSH0 + Op.JUMPDEST + Op.SSTORE(Op.PUSH0, 1) + Op.STOP,\n            Account(storage={0x00: 0x01}),\n            id=\"before_jumpdest\",\n        ),\n        # Test PUSH0 gas cost.\n        pytest.param(\n            CodeGasMeasure(\n                code=Op.PUSH0,\n                extra_stack_items=1,\n            ),\n            Account(storage={0x00: 0x02}),\n            id=\"gas_cost\",\n        ),\n    ],\n)\ndef test_push0_contracts(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    post: Alloc,\n    sender: EOA,\n    contract_code: Bytecode,\n    expected_storage: Account,\n):\n    \"\"\"\n    Tests PUSH0 within various deployed contracts.\n    \"\"\"\n    push0_contract = pre.deploy_contract(contract_code)\n    tx = Transaction(to=push0_contract, gas_limit=100_000, sender=sender)\n    post[push0_contract] = expected_storage\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/shanghai/eip3855_push0/test_push0/#tests.shanghai.eip3855_push0.test_push0.TestPush0CallContext","title":"TestPush0CallContext","text":"

    Tests the PUSH0 operation during various call contexts including: - CALL - CALLCODE - DELEGATECALL - STATICCALL

    Source code in tests/shanghai/eip3855_push0/test_push0.py
    class TestPush0CallContext:\n    \"\"\"\n    Tests the PUSH0 operation during various call contexts including:\n    - CALL\n    - CALLCODE\n    - DELEGATECALL\n    - STATICCALL\n    \"\"\"\n\n    @pytest.fixture\n    def push0_contract_callee(self, pre: Alloc) -> Address:\n        \"\"\"\n        Deploys a PUSH0 contract callee to the pre alloc returning its address.\n        \"\"\"\n        push0_contract = pre.deploy_contract(Op.MSTORE8(Op.PUSH0, 0xFF) + Op.RETURN(Op.PUSH0, 1))\n        return push0_contract\n\n    @pytest.fixture\n    def push0_contract_caller(\n        self, pre: Alloc, call_opcode: Op, push0_contract_callee: Address\n    ) -> Address:\n        \"\"\"\n        Deploys a contract responsible for calling the callee PUSH0 contract returning its address.\n        \"\"\"\n        call_code = (\n            Op.SSTORE(0, call_opcode(gas=100_000, address=push0_contract_callee))\n            + Op.SSTORE(0, 1)\n            + Op.RETURNDATACOPY(0x1F, 0, 1)\n            + Op.SSTORE(1, Op.MLOAD(0))\n        )\n        return pre.deploy_contract(call_code)\n\n    @pytest.mark.parametrize(\n        \"call_opcode\",\n        [\n            Op.CALL,\n            Op.CALLCODE,\n            Op.DELEGATECALL,\n            Op.STATICCALL,\n        ],\n        ids=[\"call\", \"callcode\", \"delegatecall\", \"staticcall\"],\n    )\n    def test_push0_contract_during_call_contexts(\n        self,\n        state_test: StateTestFiller,\n        env: Environment,\n        pre: Alloc,\n        post: Alloc,\n        sender: EOA,\n        push0_contract_caller: Address,\n    ):\n        \"\"\"\n        Test PUSH0 during various call contexts.\n        \"\"\"\n        tx = Transaction(to=push0_contract_caller, gas_limit=100_000, sender=sender)\n        post[push0_contract_caller] = Account(storage={0x00: 0x01, 0x01: 0xFF})\n        state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/shanghai/eip3855_push0/test_push0/#tests.shanghai.eip3855_push0.test_push0.TestPush0CallContext.test_push0_contract_during_call_contexts","title":"test_push0_contract_during_call_contexts(state_test, env, pre, post, sender, push0_contract_caller)","text":"

    Test PUSH0 during various call contexts.

    Source code in tests/shanghai/eip3855_push0/test_push0.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.CALL,\n        Op.CALLCODE,\n        Op.DELEGATECALL,\n        Op.STATICCALL,\n    ],\n    ids=[\"call\", \"callcode\", \"delegatecall\", \"staticcall\"],\n)\ndef test_push0_contract_during_call_contexts(\n    self,\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    post: Alloc,\n    sender: EOA,\n    push0_contract_caller: Address,\n):\n    \"\"\"\n    Test PUSH0 during various call contexts.\n    \"\"\"\n    tx = Transaction(to=push0_contract_caller, gas_limit=100_000, sender=sender)\n    post[push0_contract_caller] = Account(storage={0x00: 0x01, 0x01: 0xFF})\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/shanghai/eip3855_push0/test_push0/index/test_cases/","title":"Test Push0 - Test Cases","text":"

    Test cases generated from tests/shanghai/eip3855_push0/test_push0.py

    Parametrized test cases generated from the test module tests/shanghai/eip3855_push0/test_push0.py:

    test_push0_contracts[fork_Shanghai-blockchain_test-key_sstore]\ntest_push0_contracts[fork_Shanghai-blockchain_test-fill_stack]\ntest_push0_contracts[fork_Shanghai-blockchain_test-stack_overflow]\ntest_push0_contracts[fork_Shanghai-blockchain_test-storage_overwrite]\ntest_push0_contracts[fork_Shanghai-blockchain_test-before_jumpdest]\ntest_push0_contracts[fork_Shanghai-blockchain_test-gas_cost]\ntest_push0_contracts[fork_Shanghai-blockchain_test_engine-key_sstore]\ntest_push0_contracts[fork_Shanghai-blockchain_test_engine-fill_stack]\ntest_push0_contracts[fork_Shanghai-blockchain_test_engine-stack_overflow]\ntest_push0_contracts[fork_Shanghai-blockchain_test_engine-storage_overwrite]\ntest_push0_contracts[fork_Shanghai-blockchain_test_engine-before_jumpdest]\ntest_push0_contracts[fork_Shanghai-blockchain_test_engine-gas_cost]\ntest_push0_contracts[fork_Shanghai-state_test-key_sstore]\ntest_push0_contracts[fork_Shanghai-state_test-fill_stack]\ntest_push0_contracts[fork_Shanghai-state_test-stack_overflow]\ntest_push0_contracts[fork_Shanghai-state_test-storage_overwrite]\ntest_push0_contracts[fork_Shanghai-state_test-before_jumpdest]\ntest_push0_contracts[fork_Shanghai-state_test-gas_cost]\ntest_push0_contracts[fork_Cancun-blockchain_test-key_sstore]\ntest_push0_contracts[fork_Cancun-blockchain_test-fill_stack]\ntest_push0_contracts[fork_Cancun-blockchain_test-stack_overflow]\ntest_push0_contracts[fork_Cancun-blockchain_test-storage_overwrite]\ntest_push0_contracts[fork_Cancun-blockchain_test-before_jumpdest]\ntest_push0_contracts[fork_Cancun-blockchain_test-gas_cost]\ntest_push0_contracts[fork_Cancun-blockchain_test_engine-key_sstore]\ntest_push0_contracts[fork_Cancun-blockchain_test_engine-fill_stack]\ntest_push0_contracts[fork_Cancun-blockchain_test_engine-stack_overflow]\ntest_push0_contracts[fork_Cancun-blockchain_test_engine-storage_overwrite]\ntest_push0_contracts[fork_Cancun-blockchain_test_engine-before_jumpdest]\ntest_push0_contracts[fork_Cancun-blockchain_test_engine-gas_cost]\ntest_push0_contracts[fork_Cancun-state_test-key_sstore]\ntest_push0_contracts[fork_Cancun-state_test-fill_stack]\ntest_push0_contracts[fork_Cancun-state_test-stack_overflow]\ntest_push0_contracts[fork_Cancun-state_test-storage_overwrite]\ntest_push0_contracts[fork_Cancun-state_test-before_jumpdest]\ntest_push0_contracts[fork_Cancun-state_test-gas_cost]\ntest_push0_contracts[fork_Prague-blockchain_test-key_sstore]\ntest_push0_contracts[fork_Prague-blockchain_test-fill_stack]\ntest_push0_contracts[fork_Prague-blockchain_test-stack_overflow]\ntest_push0_contracts[fork_Prague-blockchain_test-storage_overwrite]\ntest_push0_contracts[fork_Prague-blockchain_test-before_jumpdest]\ntest_push0_contracts[fork_Prague-blockchain_test-gas_cost]\ntest_push0_contracts[fork_Prague-blockchain_test_engine-key_sstore]\ntest_push0_contracts[fork_Prague-blockchain_test_engine-fill_stack]\ntest_push0_contracts[fork_Prague-blockchain_test_engine-stack_overflow]\ntest_push0_contracts[fork_Prague-blockchain_test_engine-storage_overwrite]\ntest_push0_contracts[fork_Prague-blockchain_test_engine-before_jumpdest]\ntest_push0_contracts[fork_Prague-blockchain_test_engine-gas_cost]\ntest_push0_contracts[fork_Prague-state_test-key_sstore]\ntest_push0_contracts[fork_Prague-state_test-fill_stack]\ntest_push0_contracts[fork_Prague-state_test-stack_overflow]\ntest_push0_contracts[fork_Prague-state_test-storage_overwrite]\ntest_push0_contracts[fork_Prague-state_test-before_jumpdest]\ntest_push0_contracts[fork_Prague-state_test-gas_cost]\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/shanghai/eip3855_push0/test_push0.py\n
    "},{"location":"tests/shanghai/eip3860_initcode/","title":"EIP-3860 Initcode","text":"

    Documentation for tests/shanghai/eip3860_initcode.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip3860_initcode\n
    Test EIP-3860: Limit and meter initcode

    Tests for EIP-3860: Limit and meter initcode.

    "},{"location":"tests/shanghai/eip3860_initcode/spec/","title":"Spec","text":"

    Documentation for tests/shanghai/eip3860_initcode/spec.py.

    Defines EIP-3860 specification constants and functions.

    "},{"location":"tests/shanghai/eip3860_initcode/spec/#tests.shanghai.eip3860_initcode.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-3860 specifications as defined at https://eips.ethereum.org/EIPS/eip-3860#parameters

    Source code in tests/shanghai/eip3860_initcode/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-3860 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-3860#parameters\n    \"\"\"\n\n    MAX_INITCODE_SIZE = 49152\n    INITCODE_WORD_COST = 2\n
    "},{"location":"tests/shanghai/eip3860_initcode/test_initcode/","title":"Test Initcode","text":"

    Documentation for tests/shanghai/eip3860_initcode/test_initcode.py.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip3860_initcode/test_initcode.py\n
    Test EIP-3860: Limit and meter initcode

    Tests for EIP-3860: Limit and meter initcode.

    Tests ported from:
    • ethereum/tests/pull/990
    • ethereum/tests/pull/1012
    "},{"location":"tests/shanghai/eip3860_initcode/test_initcode/#tests.shanghai.eip3860_initcode.test_initcode.test_contract_creating_tx","title":"test_contract_creating_tx(state_test, env, pre, post, sender, initcode)","text":"

    Tests creating a contract using a transaction with an initcode that is on/over the max allowed limit.

    Source code in tests/shanghai/eip3860_initcode/test_initcode.py
    @pytest.mark.parametrize(\n    \"initcode\",\n    [\n        INITCODE_ZEROS_MAX_LIMIT,\n        INITCODE_ONES_MAX_LIMIT,\n        INITCODE_ZEROS_OVER_LIMIT,\n        INITCODE_ONES_OVER_LIMIT,\n    ],\n    ids=get_initcode_name,\n)\ndef test_contract_creating_tx(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    post: Alloc,\n    sender: EOA,\n    initcode: Initcode,\n):\n    \"\"\"\n    Tests creating a contract using a transaction with an initcode that is\n    on/over the max allowed limit.\n    \"\"\"\n    create_contract_address = compute_create_address(\n        address=sender,\n        nonce=0,\n    )\n\n    tx = Transaction(\n        nonce=0,\n        to=None,\n        data=initcode,\n        gas_limit=10000000,\n        gas_price=10,\n        sender=sender,\n    )\n\n    if len(initcode) > Spec.MAX_INITCODE_SIZE:\n        # Initcode is above the max size, tx inclusion in the block makes\n        # it invalid.\n        post[create_contract_address] = Account.NONEXISTENT\n        tx.error = TransactionException.INITCODE_SIZE_EXCEEDED\n    else:\n        # Initcode is at or below the max size, tx inclusion in the block\n        # is ok and the contract is successfully created.\n        post[create_contract_address] = Account(code=Op.STOP)\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/shanghai/eip3860_initcode/test_initcode/#tests.shanghai.eip3860_initcode.test_initcode.TestContractCreationGasUsage","title":"TestContractCreationGasUsage","text":"

    Tests the following cases that verify the gas cost behavior of a contract creating transaction:

    1. Test with exact intrinsic gas minus one, contract create fails and tx is invalid.
    2. Test with exact intrinsic gas, contract create fails, but tx is valid.
    3. Test with exact execution gas minus one, contract create fails, but tx is valid.
    4. Test with exact execution gas, contract create succeeds.

    Initcode must be within a valid EIP-3860 length.

    Source code in tests/shanghai/eip3860_initcode/test_initcode.py
    @pytest.mark.parametrize(\n    \"initcode\",\n    [\n        INITCODE_ZEROS_MAX_LIMIT,\n        INITCODE_ONES_MAX_LIMIT,\n        EMPTY_INITCODE,\n        SINGLE_BYTE_INITCODE,\n        INITCODE_ZEROS_32_BYTES,\n        INITCODE_ZEROS_33_BYTES,\n        INITCODE_ZEROS_49120_BYTES,\n        INITCODE_ZEROS_49121_BYTES,\n    ],\n    ids=get_initcode_name,\n)\n@pytest.mark.parametrize(\n    \"gas_test_case\",\n    [\n        \"too_little_intrinsic_gas\",\n        \"exact_intrinsic_gas\",\n        \"too_little_execution_gas\",\n        \"exact_execution_gas\",\n    ],\n    ids=lambda x: x,\n)\nclass TestContractCreationGasUsage:\n    \"\"\"\n    Tests the following cases that verify the gas cost behavior of a\n    contract creating transaction:\n\n    1. Test with exact intrinsic gas minus one, contract create fails\n        and tx is invalid.\n    2. Test with exact intrinsic gas, contract create fails,\n        but tx is valid.\n    3. Test with exact execution gas minus one, contract create fails,\n        but tx is valid.\n    4. Test with exact execution gas, contract create succeeds.\n\n    Initcode must be within a valid EIP-3860 length.\n    \"\"\"\n\n    @pytest.fixture\n    def exact_intrinsic_gas(self, initcode: Initcode) -> int:\n        \"\"\"\n        Calculates the intrinsic tx gas cost.\n        \"\"\"\n        return calculate_create_tx_intrinsic_cost(initcode)\n\n    @pytest.fixture\n    def exact_execution_gas(self, initcode: Initcode) -> int:\n        \"\"\"\n        Calculates the total execution gas cost.\n        \"\"\"\n        return calculate_create_tx_execution_cost(initcode)\n\n    @pytest.fixture\n    def tx_error(self, gas_test_case: str) -> TransactionException | None:\n        \"\"\"\n        Check that the transaction is invalid if too little intrinsic gas is\n        specified, otherwise the tx is valid and succeeds.\n        \"\"\"\n        if gas_test_case == \"too_little_intrinsic_gas\":\n            return TransactionException.INTRINSIC_GAS_TOO_LOW\n        return None\n\n    @pytest.fixture\n    def tx(\n        self,\n        sender: EOA,\n        initcode: Initcode,\n        gas_test_case: str,\n        tx_error: TransactionException | None,\n        exact_intrinsic_gas: int,\n        exact_execution_gas: int,\n    ) -> Transaction:\n        \"\"\"\n        Implement the gas_test_case by setting the gas_limit of the tx\n        appropriately and test whether the tx succeeds or fails with\n        appropriate error.\n        \"\"\"\n        if gas_test_case == \"too_little_intrinsic_gas\":\n            gas_limit = exact_intrinsic_gas - 1\n        elif gas_test_case == \"exact_intrinsic_gas\":\n            gas_limit = exact_intrinsic_gas\n        elif gas_test_case == \"too_little_execution_gas\":\n            gas_limit = exact_execution_gas - 1\n        elif gas_test_case == \"exact_execution_gas\":\n            gas_limit = exact_execution_gas\n        else:\n            pytest.fail(\"Invalid gas test case provided.\")\n\n        return Transaction(\n            nonce=0,\n            to=None,\n            data=initcode,\n            gas_limit=gas_limit,\n            gas_price=10,\n            error=tx_error,\n            sender=sender,\n        )\n\n    @pytest.fixture\n    def post(\n        self,\n        sender: EOA,\n        initcode: Initcode,\n        gas_test_case: str,\n        exact_intrinsic_gas: int,\n        exact_execution_gas: int,\n    ) -> Alloc:\n        \"\"\"\n        Test that contract creation fails unless enough execution gas is\n        provided.\n        \"\"\"\n        create_contract_address = compute_create_address(\n            address=sender,\n            nonce=0,\n        )\n        if gas_test_case == \"exact_intrinsic_gas\" and exact_intrinsic_gas == exact_execution_gas:\n            # Special scenario where the execution of the initcode and\n            # gas cost to deploy are zero\n            return Alloc({create_contract_address: Account(code=initcode.deploy_code)})\n        elif gas_test_case == \"exact_execution_gas\":\n            return Alloc({create_contract_address: Account(code=initcode.deploy_code)})\n        return Alloc({create_contract_address: Account.NONEXISTENT})\n\n    def test_gas_usage(\n        self,\n        state_test: StateTestFiller,\n        env: Environment,\n        pre: Alloc,\n        post: Alloc,\n        tx: Transaction,\n        gas_test_case: str,\n        initcode: Initcode,\n        exact_intrinsic_gas: int,\n        exact_execution_gas: int,\n    ):\n        \"\"\"\n        Test transaction and contract creation behavior for different gas\n        limits.\n        \"\"\"\n        if (gas_test_case == \"too_little_execution_gas\") and (\n            exact_execution_gas == exact_intrinsic_gas\n        ):\n            pytest.skip(\n                \"Special case, the execution of the initcode and gas \"\n                \"cost to deploy are zero: Then this test case is \"\n                \"equivalent to that of 'test_exact_intrinsic_gas'.\"\n            )\n\n        state_test(\n            env=env,\n            pre=pre,\n            post=post,\n            tx=tx,\n        )\n
    "},{"location":"tests/shanghai/eip3860_initcode/test_initcode/#tests.shanghai.eip3860_initcode.test_initcode.TestContractCreationGasUsage.test_gas_usage","title":"test_gas_usage(state_test, env, pre, post, tx, gas_test_case, initcode, exact_intrinsic_gas, exact_execution_gas)","text":"

    Test transaction and contract creation behavior for different gas limits.

    Source code in tests/shanghai/eip3860_initcode/test_initcode.py
    def test_gas_usage(\n    self,\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    post: Alloc,\n    tx: Transaction,\n    gas_test_case: str,\n    initcode: Initcode,\n    exact_intrinsic_gas: int,\n    exact_execution_gas: int,\n):\n    \"\"\"\n    Test transaction and contract creation behavior for different gas\n    limits.\n    \"\"\"\n    if (gas_test_case == \"too_little_execution_gas\") and (\n        exact_execution_gas == exact_intrinsic_gas\n    ):\n        pytest.skip(\n            \"Special case, the execution of the initcode and gas \"\n            \"cost to deploy are zero: Then this test case is \"\n            \"equivalent to that of 'test_exact_intrinsic_gas'.\"\n        )\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/shanghai/eip3860_initcode/test_initcode/#tests.shanghai.eip3860_initcode.test_initcode.TestCreateInitcode","title":"TestCreateInitcode","text":"

    Test contract creation via the CREATE/CREATE2 opcodes that have an initcode that is on/over the max allowed limit.

    Source code in tests/shanghai/eip3860_initcode/test_initcode.py
    @pytest.mark.parametrize(\n    \"initcode\",\n    [\n        INITCODE_ZEROS_MAX_LIMIT,\n        INITCODE_ONES_MAX_LIMIT,\n        INITCODE_ZEROS_OVER_LIMIT,\n        INITCODE_ONES_OVER_LIMIT,\n        EMPTY_INITCODE,\n        SINGLE_BYTE_INITCODE,\n        INITCODE_ZEROS_32_BYTES,\n        INITCODE_ZEROS_33_BYTES,\n        INITCODE_ZEROS_49120_BYTES,\n        INITCODE_ZEROS_49121_BYTES,\n    ],\n    ids=get_initcode_name,\n)\n@pytest.mark.parametrize(\"opcode\", [Op.CREATE, Op.CREATE2], ids=get_create_id)\nclass TestCreateInitcode:\n    \"\"\"\n    Test contract creation via the CREATE/CREATE2 opcodes that have an initcode\n    that is on/over the max allowed limit.\n    \"\"\"\n\n    @pytest.fixture\n    def create2_salt(self) -> int:\n        \"\"\"\n        Salt value used for CREATE2 contract creation.\n        \"\"\"\n        return 0xDEADBEEF\n\n    @pytest.fixture\n    def creator_code(self, opcode: Op, create2_salt: int) -> Bytecode:\n        \"\"\"\n        Generates the code for the creator contract which performs the CREATE/CREATE2 operation.\n        \"\"\"\n        return (\n            Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n            + Op.GAS\n            + opcode(size=Op.CALLDATASIZE, salt=create2_salt)\n            + Op.GAS\n            # stack: [Gas 2, Call Result, Gas 1]\n            + Op.SWAP1\n            # stack: [Call Result, Gas 2, Gas 1]\n            + Op.SSTORE(0, unchecked=True)\n            # stack: [Gas 2, Gas 1]\n            + Op.SWAP1\n            # stack: [Gas 1, Gas 2]\n            + Op.SUB\n            # stack: [Gas 1 - Gas 2]\n            + Op.SSTORE(1, unchecked=True)\n        )\n\n    @pytest.fixture\n    def creator_contract_address(self, pre: Alloc, creator_code: Bytecode) -> Address:\n        \"\"\"\n        Returns the address of creator contract.\n        \"\"\"\n        return pre.deploy_contract(creator_code)\n\n    @pytest.fixture\n    def created_contract_address(  # noqa: D103\n        self,\n        opcode: Op,\n        create2_salt: int,\n        initcode: Initcode,\n        creator_contract_address: Address,\n    ) -> Address:\n        \"\"\"\n        Calculates the address of the contract created by the creator contract.\n        \"\"\"\n        if opcode == Op.CREATE:\n            return compute_create_address(\n                address=creator_contract_address,\n                nonce=1,\n            )\n        if opcode == Op.CREATE2:\n            return compute_create2_address(\n                address=creator_contract_address,\n                salt=create2_salt,\n                initcode=initcode,\n            )\n        raise Exception(\"Invalid opcode for generator\")\n\n    @pytest.fixture\n    def caller_code(self, creator_contract_address: Address) -> Bytecode:\n        \"\"\"\n        Generates the code for the caller contract that calls the creator contract.\n        \"\"\"\n        return Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE(\n            Op.CALL(5000000, creator_contract_address, 0, 0, Op.CALLDATASIZE, 0, 0), 1\n        )\n\n    @pytest.fixture\n    def caller_contract_address(self, pre: Alloc, caller_code: Bytecode) -> Address:\n        \"\"\"\n        Returns the address of the caller contract.\n        \"\"\"\n        return pre.deploy_contract(caller_code)\n\n    @pytest.fixture\n    def tx(self, caller_contract_address: Address, initcode: Initcode, sender: EOA) -> Transaction:\n        \"\"\"\n        Generates the transaction that executes the caller contract.\n        \"\"\"\n        return Transaction(\n            nonce=0,\n            to=caller_contract_address,\n            data=initcode,\n            gas_limit=10000000,\n            gas_price=10,\n            sender=sender,\n        )\n\n    @pytest.fixture\n    def contract_creation_gas_cost(self, opcode: Op) -> int:\n        \"\"\"\n        Calculates the gas cost of the contract creation operation.\n        \"\"\"\n        CREATE_CONTRACT_BASE_GAS = 32000\n        GAS_OPCODE_GAS = 2\n        PUSH_DUP_OPCODE_GAS = 3\n        CALLDATASIZE_OPCODE_GAS = 2\n        contract_creation_gas_usage = (\n            CREATE_CONTRACT_BASE_GAS\n            + GAS_OPCODE_GAS\n            + (2 * PUSH_DUP_OPCODE_GAS)\n            + CALLDATASIZE_OPCODE_GAS\n        )\n        if opcode == Op.CREATE2:  # Extra push operation\n            contract_creation_gas_usage += PUSH_DUP_OPCODE_GAS\n        return contract_creation_gas_usage\n\n    def test_create_opcode_initcode(\n        self,\n        state_test: StateTestFiller,\n        env: Environment,\n        pre: Alloc,\n        post: Alloc,\n        tx: Transaction,\n        opcode: Op,\n        initcode: Initcode,\n        caller_contract_address: Address,\n        creator_contract_address: Address,\n        created_contract_address: Address,\n        contract_creation_gas_cost: int,\n    ):\n        \"\"\"\n        Test contract creation via the CREATE/CREATE2 opcodes that have an\n        initcode that is on/over the max allowed limit.\n        \"\"\"\n        if len(initcode) > Spec.MAX_INITCODE_SIZE:\n            # Call returns 0 as out of gas s[0]==1\n            post[caller_contract_address] = Account(\n                nonce=1,\n                storage={\n                    0: 1,\n                    1: 0,\n                },\n            )\n\n            post[created_contract_address] = Account.NONEXISTENT\n            post[creator_contract_address] = Account(\n                nonce=1,\n                storage={\n                    0: 0,\n                    1: 0,\n                },\n            )\n\n        else:\n            expected_gas_usage = contract_creation_gas_cost\n            # The initcode is only executed if the length check succeeds\n            expected_gas_usage += initcode.execution_gas\n            # The code is only deployed if the length check succeeds\n            expected_gas_usage += initcode.deployment_gas\n\n            if opcode == Op.CREATE2:\n                # CREATE2 hashing cost should only be deducted if the initcode\n                # does not exceed the max length\n                expected_gas_usage += calculate_create2_word_cost(len(initcode))\n\n            # Initcode word cost is only deducted if the length check\n            # succeeds\n            expected_gas_usage += calculate_initcode_word_cost(len(initcode))\n\n            # Call returns 1 as valid initcode length s[0]==1 && s[1]==1\n            post[caller_contract_address] = Account(\n                nonce=1,\n                storage={\n                    0: 0,\n                    1: 1,\n                },\n            )\n\n            post[created_contract_address] = Account(code=initcode.deploy_code)\n            post[creator_contract_address] = Account(\n                nonce=2,\n                storage={\n                    0: created_contract_address,\n                    1: expected_gas_usage,\n                },\n            )\n\n        state_test(\n            env=env,\n            pre=pre,\n            post=post,\n            tx=tx,\n        )\n
    "},{"location":"tests/shanghai/eip3860_initcode/test_initcode/#tests.shanghai.eip3860_initcode.test_initcode.TestCreateInitcode.test_create_opcode_initcode","title":"test_create_opcode_initcode(state_test, env, pre, post, tx, opcode, initcode, caller_contract_address, creator_contract_address, created_contract_address, contract_creation_gas_cost)","text":"

    Test contract creation via the CREATE/CREATE2 opcodes that have an initcode that is on/over the max allowed limit.

    Source code in tests/shanghai/eip3860_initcode/test_initcode.py
    def test_create_opcode_initcode(\n    self,\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    post: Alloc,\n    tx: Transaction,\n    opcode: Op,\n    initcode: Initcode,\n    caller_contract_address: Address,\n    creator_contract_address: Address,\n    created_contract_address: Address,\n    contract_creation_gas_cost: int,\n):\n    \"\"\"\n    Test contract creation via the CREATE/CREATE2 opcodes that have an\n    initcode that is on/over the max allowed limit.\n    \"\"\"\n    if len(initcode) > Spec.MAX_INITCODE_SIZE:\n        # Call returns 0 as out of gas s[0]==1\n        post[caller_contract_address] = Account(\n            nonce=1,\n            storage={\n                0: 1,\n                1: 0,\n            },\n        )\n\n        post[created_contract_address] = Account.NONEXISTENT\n        post[creator_contract_address] = Account(\n            nonce=1,\n            storage={\n                0: 0,\n                1: 0,\n            },\n        )\n\n    else:\n        expected_gas_usage = contract_creation_gas_cost\n        # The initcode is only executed if the length check succeeds\n        expected_gas_usage += initcode.execution_gas\n        # The code is only deployed if the length check succeeds\n        expected_gas_usage += initcode.deployment_gas\n\n        if opcode == Op.CREATE2:\n            # CREATE2 hashing cost should only be deducted if the initcode\n            # does not exceed the max length\n            expected_gas_usage += calculate_create2_word_cost(len(initcode))\n\n        # Initcode word cost is only deducted if the length check\n        # succeeds\n        expected_gas_usage += calculate_initcode_word_cost(len(initcode))\n\n        # Call returns 1 as valid initcode length s[0]==1 && s[1]==1\n        post[caller_contract_address] = Account(\n            nonce=1,\n            storage={\n                0: 0,\n                1: 1,\n            },\n        )\n\n        post[created_contract_address] = Account(code=initcode.deploy_code)\n        post[creator_contract_address] = Account(\n            nonce=2,\n            storage={\n                0: created_contract_address,\n                1: expected_gas_usage,\n            },\n        )\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/shanghai/eip3860_initcode/test_initcode/index/test_cases/","title":"Test Initcode - Test Cases","text":"

    Test cases generated from tests/shanghai/eip3860_initcode/test_initcode.py

    Parametrized test cases generated from the test module tests/shanghai/eip3860_initcode/test_initcode.py:

    test_contract_creating_tx[fork_Shanghai-blockchain_test-max_size_zeros]\ntest_contract_creating_tx[fork_Shanghai-blockchain_test-max_size_ones]\ntest_contract_creating_tx[fork_Shanghai-blockchain_test-over_limit_zeros]\ntest_contract_creating_tx[fork_Shanghai-blockchain_test-over_limit_ones]\ntest_contract_creating_tx[fork_Shanghai-blockchain_test_engine-max_size_zeros]\ntest_contract_creating_tx[fork_Shanghai-blockchain_test_engine-max_size_ones]\ntest_contract_creating_tx[fork_Shanghai-blockchain_test_engine-over_limit_zeros]\ntest_contract_creating_tx[fork_Shanghai-blockchain_test_engine-over_limit_ones]\ntest_contract_creating_tx[fork_Shanghai-state_test-max_size_zeros]\ntest_contract_creating_tx[fork_Shanghai-state_test-max_size_ones]\ntest_contract_creating_tx[fork_Shanghai-state_test-over_limit_zeros]\ntest_contract_creating_tx[fork_Shanghai-state_test-over_limit_ones]\ntest_contract_creating_tx[fork_Cancun-blockchain_test-max_size_zeros]\ntest_contract_creating_tx[fork_Cancun-blockchain_test-max_size_ones]\ntest_contract_creating_tx[fork_Cancun-blockchain_test-over_limit_zeros]\ntest_contract_creating_tx[fork_Cancun-blockchain_test-over_limit_ones]\ntest_contract_creating_tx[fork_Cancun-blockchain_test_engine-max_size_zeros]\ntest_contract_creating_tx[fork_Cancun-blockchain_test_engine-max_size_ones]\ntest_contract_creating_tx[fork_Cancun-blockchain_test_engine-over_limit_zeros]\ntest_contract_creating_tx[fork_Cancun-blockchain_test_engine-over_limit_ones]\ntest_contract_creating_tx[fork_Cancun-state_test-max_size_zeros]\ntest_contract_creating_tx[fork_Cancun-state_test-max_size_ones]\ntest_contract_creating_tx[fork_Cancun-state_test-over_limit_zeros]\ntest_contract_creating_tx[fork_Cancun-state_test-over_limit_ones]\ntest_contract_creating_tx[fork_Prague-blockchain_test-max_size_zeros]\ntest_contract_creating_tx[fork_Prague-blockchain_test-max_size_ones]\ntest_contract_creating_tx[fork_Prague-blockchain_test-over_limit_zeros]\ntest_contract_creating_tx[fork_Prague-blockchain_test-over_limit_ones]\ntest_contract_creating_tx[fork_Prague-blockchain_test_engine-max_size_zeros]\ntest_contract_creating_tx[fork_Prague-blockchain_test_engine-max_size_ones]\ntest_contract_creating_tx[fork_Prague-blockchain_test_engine-over_limit_zeros]\ntest_contract_creating_tx[fork_Prague-blockchain_test_engine-over_limit_ones]\ntest_contract_creating_tx[fork_Prague-state_test-max_size_zeros]\ntest_contract_creating_tx[fork_Prague-state_test-max_size_ones]\ntest_contract_creating_tx[fork_Prague-state_test-over_limit_zeros]\ntest_contract_creating_tx[fork_Prague-state_test-over_limit_ones]\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/shanghai/eip3860_initcode/test_initcode.py\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/","title":"EIP-4895 Withdrawals","text":"

    Documentation for tests/shanghai/eip4895_withdrawals.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip4895_withdrawals\n
    Tests EIP-4895: Beacon chain withdrawals

    Test cases for EIP-4895: Beacon chain push withdrawals as operations.

    "},{"location":"tests/shanghai/eip4895_withdrawals/spec/","title":"Spec","text":"

    Documentation for tests/shanghai/eip4895_withdrawals/spec.py.

    Defines EIP-4895 specification constants and functions.

    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/","title":"Test Withdrawals","text":"

    Documentation for tests/shanghai/eip4895_withdrawals/test_withdrawals.py.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip4895_withdrawals/test_withdrawals.py\n
    Tests EIP-4895: Beacon chain withdrawals

    Test cases for EIP-4895: Beacon chain push withdrawals as operations.

    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.TestUseValueInTx","title":"TestUseValueInTx","text":"

    Test that the value from a withdrawal can be used in a transaction:

    1. tx_in_withdrawals_block: Test that the withdrawal value can not be used by a transaction in the same block as the withdrawal.

    2. tx_after_withdrawals_block: Test that the withdrawal value can be used by a transaction in the subsequent block.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    @pytest.mark.parametrize(\n    \"test_case\",\n    [\"tx_in_withdrawals_block\", \"tx_after_withdrawals_block\"],\n    ids=lambda x: x,\n)\nclass TestUseValueInTx:\n    \"\"\"\n    Test that the value from a withdrawal can be used in a transaction:\n\n    1. `tx_in_withdrawals_block`: Test that the withdrawal value can not be used by a transaction\n        in the same block as the withdrawal.\n\n    2. `tx_after_withdrawals_block`: Test that the withdrawal value can be used by a transaction\n        in the subsequent block.\n    \"\"\"\n\n    @pytest.fixture\n    def sender(self, pre: Alloc) -> EOA:\n        \"\"\"\n        Funded EOA used for sending transactions.\n        \"\"\"\n        return pre.fund_eoa(1)\n\n    @pytest.fixture\n    def recipient(self, pre: Alloc) -> EOA:\n        \"\"\"\n        Funded EOA used for sending transactions.\n        \"\"\"\n        return pre.fund_eoa(0)\n\n    @pytest.fixture\n    def tx(self, sender: EOA, recipient: EOA):  # noqa: D102\n        # Transaction sent from the `sender`, which has 1 wei balance at start\n        return Transaction(\n            gas_price=ONE_GWEI,\n            gas_limit=21000,\n            to=recipient,\n            sender=sender,\n        )\n\n    @pytest.fixture\n    def withdrawal(self, tx: Transaction, sender: EOA):  # noqa: D102\n        return Withdrawal(\n            index=0,\n            validator_index=0,\n            address=sender,\n            amount=tx.gas_limit + 1,\n        )\n\n    @pytest.fixture\n    def blocks(self, tx: Transaction, withdrawal: Withdrawal, test_case):  # noqa: D102\n        if test_case == \"tx_in_withdrawals_block\":\n            return [\n                Block(\n                    txs=[tx.with_error(TransactionException.INSUFFICIENT_ACCOUNT_FUNDS)],\n                    withdrawals=[\n                        withdrawal,\n                    ],\n                    exception=TransactionException.INSUFFICIENT_ACCOUNT_FUNDS,\n                )\n            ]\n        if test_case == \"tx_after_withdrawals_block\":\n            return [\n                Block(\n                    txs=[],\n                    withdrawals=[\n                        withdrawal,\n                    ],\n                ),\n                Block(\n                    txs=[tx],\n                    withdrawals=[],\n                ),\n            ]\n        raise Exception(\"Invalid test case.\")\n\n    @pytest.fixture\n    def post(self, sender: EOA, test_case: str) -> Dict:  # noqa: D102\n        if test_case == \"tx_in_withdrawals_block\":\n            return {}\n        if test_case == \"tx_after_withdrawals_block\":\n            return {sender: Account(balance=ONE_GWEI + 1)}\n        raise Exception(\"Invalid test case.\")\n\n    def test_use_value_in_tx(\n        self,\n        pre: Alloc,\n        blockchain_test: BlockchainTestFiller,\n        post: dict,\n        blocks: List[Block],\n    ):\n        \"\"\"\n        Test sending withdrawal value in a transaction.\n        \"\"\"\n        blockchain_test(pre=pre, post=post, blocks=blocks)\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.TestUseValueInTx.test_use_value_in_tx","title":"test_use_value_in_tx(pre, blockchain_test, post, blocks)","text":"

    Test sending withdrawal value in a transaction.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    def test_use_value_in_tx(\n    self,\n    pre: Alloc,\n    blockchain_test: BlockchainTestFiller,\n    post: dict,\n    blocks: List[Block],\n):\n    \"\"\"\n    Test sending withdrawal value in a transaction.\n    \"\"\"\n    blockchain_test(pre=pre, post=post, blocks=blocks)\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.test_use_value_in_contract","title":"test_use_value_in_contract(blockchain_test, pre)","text":"

    Test sending value from contract that has not received a withdrawal

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    def test_use_value_in_contract(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Test sending value from contract that has not received a withdrawal\n    \"\"\"\n    sender = pre.fund_eoa()\n    recipient = pre.fund_eoa(1)\n\n    contract_address = pre.deploy_contract(\n        Op.SSTORE(\n            Op.NUMBER,\n            Op.CALL(address=recipient, value=1000000000),\n        )\n    )\n    (tx_0, tx_1) = (\n        Transaction(\n            sender=sender,\n            value=0,\n            gas_limit=100_000,\n            to=contract_address,\n        )\n        for _ in range(2)\n    )\n\n    withdrawal = Withdrawal(\n        index=0,\n        validator_index=0,\n        address=contract_address,\n        amount=1,\n    )\n\n    blocks = [\n        Block(\n            txs=[tx_0],\n            withdrawals=[withdrawal],\n        ),\n        Block(\n            txs=[tx_1],  # Same tx again, just increase nonce\n        ),\n    ]\n    post = {\n        contract_address: Account(\n            storage={\n                0x1: 0x0,  # Call fails on the first attempt\n                0x2: 0x1,  # Succeeds on the second attempt\n            }\n        ),\n        recipient: Account(\n            balance=ONE_GWEI + 1,\n        ),\n    }\n\n    blockchain_test(pre=pre, post=post, blocks=blocks)\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.test_balance_within_block","title":"test_balance_within_block(blockchain_test, pre)","text":"

    Test Withdrawal balance increase within the same block, inside contract call.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    def test_balance_within_block(blockchain_test: BlockchainTestFiller, pre: Alloc):\n    \"\"\"\n    Test Withdrawal balance increase within the same block,\n    inside contract call.\n    \"\"\"\n    SAVE_BALANCE_ON_BLOCK_NUMBER = Op.SSTORE(\n        Op.NUMBER,\n        Op.BALANCE(Op.CALLDATALOAD(0)),\n    )\n    sender = pre.fund_eoa()\n    recipient = pre.fund_eoa(ONE_GWEI)\n    contract_address = pre.deploy_contract(SAVE_BALANCE_ON_BLOCK_NUMBER)\n\n    blocks = [\n        Block(\n            txs=[\n                Transaction(\n                    sender=sender,\n                    gas_limit=100000,\n                    to=contract_address,\n                    data=Hash(recipient),\n                )\n            ],\n            withdrawals=[\n                Withdrawal(\n                    index=0,\n                    validator_index=0,\n                    address=recipient,\n                    amount=1,\n                )\n            ],\n        ),\n        Block(\n            txs=[\n                Transaction(\n                    sender=sender,\n                    gas_limit=100000,\n                    to=contract_address,\n                    data=Hash(recipient),\n                )\n            ]\n        ),\n    ]\n\n    post = {\n        contract_address: Account(\n            storage={\n                1: ONE_GWEI,\n                2: 2 * ONE_GWEI,\n            }\n        )\n    }\n\n    blockchain_test(pre=pre, post=post, blocks=blocks)\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.TestMultipleWithdrawalsSameAddress","title":"TestMultipleWithdrawalsSameAddress","text":"

    Test that multiple withdrawals can be sent to the same address in:

    1. A single block.

    2. Multiple blocks.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    @pytest.mark.parametrize(\"test_case\", [\"single_block\", \"multiple_blocks\"])\nclass TestMultipleWithdrawalsSameAddress:\n    \"\"\"\n    Test that multiple withdrawals can be sent to the same address in:\n\n    1. A single block.\n\n    2. Multiple blocks.\n    \"\"\"\n\n    @pytest.fixture\n    def addresses(self, fork: Fork) -> List[Address]:  # noqa: D102\n        addresses = [Address(p) for p in fork.precompiles(block_number=0, timestamp=0)]\n        return addresses + [Address(2**160 - 1)]\n\n    @pytest.fixture\n    def blocks(self, addresses: Address, test_case: str):  # noqa: D102\n        if test_case == \"single_block\":\n            # Many repeating withdrawals of the same accounts in the same\n            # block.\n            return [\n                Block(\n                    withdrawals=[\n                        Withdrawal(\n                            index=i,\n                            validator_index=i,\n                            address=addresses[i % len(addresses)],\n                            amount=1,\n                        )\n                        for i in range(len(addresses) * 16)\n                    ],\n                ),\n            ]\n        if test_case == \"multiple_blocks\":\n            # Similar test but now use multiple blocks each with multiple\n            # withdrawals to the same withdrawal address.\n            return [\n                Block(\n                    withdrawals=[\n                        Withdrawal(\n                            index=i * 16 + j,\n                            validator_index=i,\n                            address=addresses[i],\n                            amount=1,\n                        )\n                        for j in range(16)\n                    ],\n                )\n                for i in range(len(addresses))\n            ]\n        raise Exception(\"Invalid test case.\")\n\n    def test_multiple_withdrawals_same_address(\n        self,\n        blockchain_test: BlockchainTestFiller,\n        test_case: str,\n        pre: Alloc,\n        addresses: List[Address],\n        blocks: List[Block],\n    ):\n        \"\"\"\n        Test Withdrawals can be done to the same address multiple times in\n        the same block.\n        \"\"\"\n        # Expected post is the same for both test cases.\n        post = {}\n        for addr in addresses:\n            post[addr] = Account(\n                balance=16 * ONE_GWEI,\n                storage={},\n            )\n\n        blockchain_test(pre=pre, post=post, blocks=blocks, tag=test_case)\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.TestMultipleWithdrawalsSameAddress.test_multiple_withdrawals_same_address","title":"test_multiple_withdrawals_same_address(blockchain_test, test_case, pre, addresses, blocks)","text":"

    Test Withdrawals can be done to the same address multiple times in the same block.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    def test_multiple_withdrawals_same_address(\n    self,\n    blockchain_test: BlockchainTestFiller,\n    test_case: str,\n    pre: Alloc,\n    addresses: List[Address],\n    blocks: List[Block],\n):\n    \"\"\"\n    Test Withdrawals can be done to the same address multiple times in\n    the same block.\n    \"\"\"\n    # Expected post is the same for both test cases.\n    post = {}\n    for addr in addresses:\n        post[addr] = Account(\n            balance=16 * ONE_GWEI,\n            storage={},\n        )\n\n    blockchain_test(pre=pre, post=post, blocks=blocks, tag=test_case)\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.test_many_withdrawals","title":"test_many_withdrawals(blockchain_test, pre)","text":"

    Test Withdrawals with a count of N withdrawals in a single block where N is a high number not expected to be seen in mainnet.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    def test_many_withdrawals(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Test Withdrawals with a count of N withdrawals in a single block where\n    N is a high number not expected to be seen in mainnet.\n    \"\"\"\n    N = 400\n    withdrawals = []\n    post = {}\n    for i in range(N):\n        addr = pre.deploy_contract(Op.SSTORE(Op.NUMBER, 1))\n        amount = i * 1\n        withdrawals.append(\n            Withdrawal(\n                index=i,\n                validator_index=i,\n                address=addr,\n                amount=amount,\n            )\n        )\n        post[addr] = Account(\n            code=Op.SSTORE(Op.NUMBER, 1),\n            balance=amount * ONE_GWEI,\n            storage={},\n        )\n\n    blocks = [\n        Block(\n            withdrawals=withdrawals,\n        ),\n    ]\n\n    blockchain_test(pre=pre, post=post, blocks=blocks)\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.test_self_destructing_account","title":"test_self_destructing_account(blockchain_test, pre, fork)","text":"

    Test withdrawals can be done to self-destructed accounts. Account 0x100 self-destructs and sends all its balance to 0x200. Then, a withdrawal is received at 0x100 with 99 wei.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    def test_self_destructing_account(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    fork: Fork,\n):\n    \"\"\"\n    Test withdrawals can be done to self-destructed accounts.\n    Account `0x100` self-destructs and sends all its balance to `0x200`.\n    Then, a withdrawal is received at `0x100` with 99 wei.\n    \"\"\"\n    self_destruct_code = Op.SELFDESTRUCT(Op.CALLDATALOAD(0))\n    sender = pre.fund_eoa()\n    recipient = pre.fund_eoa(1)\n    self_destruct_contract_address = pre.deploy_contract(\n        self_destruct_code,\n        balance=100 * ONE_GWEI,\n    )\n\n    tx_1 = Transaction(\n        # Transaction sent from the `sender`, that calls a\n        # self-destructing contract.\n        sender=sender,\n        gas_limit=100000,\n        to=self_destruct_contract_address,\n        data=Hash(recipient),\n    )\n\n    withdrawal = Withdrawal(\n        index=0,\n        validator_index=0,\n        address=self_destruct_contract_address,\n        amount=(99),\n    )\n\n    block = Block(\n        txs=[tx_1],\n        withdrawals=[withdrawal],\n    )\n\n    post = {\n        self_destruct_contract_address: Account(\n            code=self_destruct_code if fork >= Cancun else b\"\",\n            balance=(99 * ONE_GWEI),\n        ),\n        recipient: Account(\n            code=b\"\",\n            balance=(100 * ONE_GWEI) + 1,\n        ),\n    }\n\n    blockchain_test(pre=pre, post=post, blocks=[block])\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.test_newly_created_contract","title":"test_newly_created_contract(blockchain_test, pre, include_value_in_tx, request)","text":"

    Test Withdrawing to a newly created contract.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    @pytest.mark.parametrize(\n    \"include_value_in_tx\",\n    [False, True],\n    ids=[\"without_tx_value\", \"with_tx_value\"],\n)\ndef test_newly_created_contract(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    include_value_in_tx: bool,\n    request,\n):\n    \"\"\"\n    Test Withdrawing to a newly created contract.\n    \"\"\"\n    sender = pre.fund_eoa()\n    initcode = Op.RETURN(0, 1)\n    tx = Transaction(\n        # Transaction sent from the `sender`, that creates a\n        # new contract.\n        sender=sender,\n        gas_limit=1000000,\n        to=None,\n        value=ONE_GWEI if include_value_in_tx else 0,\n        data=initcode,\n    )\n    created_contract = tx.created_contract\n\n    withdrawal = Withdrawal(\n        index=0,\n        validator_index=0,\n        address=created_contract,\n        amount=1,\n    )\n\n    created_contract_balance = ONE_GWEI\n    if include_value_in_tx:\n        created_contract_balance = 2 * ONE_GWEI\n\n    post = {\n        created_contract: Account(\n            code=Op.STOP,\n            balance=created_contract_balance,\n        ),\n    }\n\n    block = Block(\n        txs=[tx],\n        withdrawals=[withdrawal],\n    )\n\n    blockchain_test(pre=pre, post=post, blocks=[block])\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.test_no_evm_execution","title":"test_no_evm_execution(blockchain_test, pre)","text":"

    Test Withdrawals don't trigger EVM execution.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    def test_no_evm_execution(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Test Withdrawals don't trigger EVM execution.\n    \"\"\"\n    sender = pre.fund_eoa()\n    contracts = [pre.deploy_contract(Op.SSTORE(Op.NUMBER, 1)) for _ in range(4)]\n    blocks = [\n        Block(\n            txs=[\n                Transaction(\n                    sender=sender,\n                    gas_limit=100000,\n                    to=contracts[2],\n                ),\n                Transaction(\n                    sender=sender,\n                    gas_limit=100000,\n                    to=contracts[3],\n                ),\n            ],\n            withdrawals=[\n                Withdrawal(\n                    index=0,\n                    validator_index=0,\n                    address=contracts[0],\n                    amount=1,\n                ),\n                Withdrawal(\n                    index=1,\n                    validator_index=1,\n                    address=contracts[1],\n                    amount=1,\n                ),\n            ],\n        ),\n        Block(\n            txs=[\n                Transaction(\n                    sender=sender,\n                    gas_limit=100000,\n                    to=contracts[0],\n                ),\n                Transaction(\n                    sender=sender,\n                    gas_limit=100000,\n                    to=contracts[1],\n                ),\n            ],\n            withdrawals=[\n                Withdrawal(\n                    index=0,\n                    validator_index=0,\n                    address=contracts[2],\n                    amount=1,\n                ),\n                Withdrawal(\n                    index=1,\n                    validator_index=1,\n                    address=contracts[3],\n                    amount=1,\n                ),\n            ],\n        ),\n    ]\n\n    post = {\n        contracts[0]: Account(storage={2: 1}),\n        contracts[1]: Account(storage={2: 1}),\n        contracts[2]: Account(storage={1: 1}),\n        contracts[3]: Account(storage={1: 1}),\n    }\n\n    blockchain_test(pre=pre, post=post, blocks=blocks)\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.test_zero_amount","title":"test_zero_amount(blockchain_test, pre, test_case)","text":"

    Test withdrawals with zero amount for the following cases, all withdrawals are included in one block:

    1. Two withdrawals of zero amount to two different addresses; one to an untouched account, one to an account with a balance.
    2. As 1., but with an additional withdrawal with positive value.
    3. As 2., but with an additional withdrawal containing the maximum value possible.
    4. As 3., but with order of withdrawals in the block reversed.
    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    @pytest.mark.parametrize(\n    \"test_case\",\n    [case for case in ZeroAmountTestCases],\n    ids=[case.value for case in ZeroAmountTestCases],\n)\ndef test_zero_amount(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    test_case: ZeroAmountTestCases,\n):\n    \"\"\"\n    Test withdrawals with zero amount for the following cases, all withdrawals\n    are included in one block:\n\n    1. Two withdrawals of zero amount to two different addresses; one to an\n       untouched account, one to an account with a balance.\n    2. As 1., but with an additional withdrawal with positive value.\n    3. As 2., but with an additional withdrawal containing the maximum value\n       possible.\n    4. As 3., but with order of withdrawals in the block reversed.\n\n    \"\"\"\n    empty_accounts = [pre.fund_eoa(0) for _ in range(3)]\n    zero_balance_contract = pre.deploy_contract(Op.STOP)\n\n    all_withdrawals = [\n        # No value, untouched account\n        Withdrawal(\n            index=0,\n            validator_index=0,\n            address=empty_accounts[0],\n            amount=0,\n        ),\n        # No value, touched account\n        Withdrawal(\n            index=0,\n            validator_index=0,\n            address=zero_balance_contract,\n            amount=0,\n        ),\n        # Withdrawal with value\n        Withdrawal(\n            index=1,\n            validator_index=0,\n            address=empty_accounts[1],\n            amount=1,\n        ),\n        # Withdrawal with maximum amount\n        Withdrawal(\n            index=2,\n            validator_index=0,\n            address=empty_accounts[2],\n            amount=2**64 - 1,\n        ),\n    ]\n    all_post = {\n        empty_accounts[0]: Account.NONEXISTENT,\n        zero_balance_contract: Account(code=Op.STOP, balance=0),\n        empty_accounts[1]: Account(balance=ONE_GWEI),\n        empty_accounts[2]: Account(balance=(2**64 - 1) * ONE_GWEI),\n    }\n\n    withdrawals: List[Withdrawal] = []\n    post: Mapping[Address, Account | object] = {}\n    if test_case == ZeroAmountTestCases.TWO_ZERO:\n        withdrawals = all_withdrawals[0:2]\n        post = {\n            account: all_post[account]\n            for account in post\n            if account in [empty_accounts[0], zero_balance_contract]\n        }\n    elif test_case == ZeroAmountTestCases.THREE_ONE_WITH_VALUE:\n        withdrawals = all_withdrawals[0:3]\n        post = {\n            account: all_post[account]\n            for account in post\n            if account\n            in [\n                empty_accounts[0],\n                zero_balance_contract,\n                empty_accounts[1],\n            ]\n        }\n    elif test_case == ZeroAmountTestCases.FOUR_ONE_WITH_MAX:\n        withdrawals = all_withdrawals\n        post = all_post\n    elif test_case == ZeroAmountTestCases.FOUR_ONE_WITH_MAX_REVERSED:\n        for i, w in enumerate(reversed(all_withdrawals)):\n            withdrawals.append(\n                Withdrawal(\n                    index=i,\n                    validator_index=w.validator_index,\n                    address=w.address,\n                    amount=w.amount,\n                )\n            )\n        post = all_post\n\n    blockchain_test(\n        pre=pre,\n        # TODO: Fix in BlockchainTest? post: Mapping[str, Account | object]\n        # to allow for Account.NONEXISTENT\n        post=post,  # type: ignore\n        blocks=[Block(withdrawals=withdrawals)],\n        tag=test_case.value,\n    )\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.test_large_amount","title":"test_large_amount(blockchain_test, pre)","text":"

    Test Withdrawals that have a large gwei amount, so that (gwei * 1e9) could overflow uint64 but not uint256.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    def test_large_amount(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Test Withdrawals that have a large gwei amount, so that (gwei * 1e9)\n    could overflow uint64 but not uint256.\n    \"\"\"\n    withdrawals: List[Withdrawal] = []\n    amounts: List[int] = [\n        (2**35),\n        (2**64) - 1,\n        (2**63) + 1,\n        (2**63),\n        (2**63) - 1,\n    ]\n\n    post = {}\n\n    for i, amount in enumerate(amounts):\n        addr = pre.fund_eoa(0)\n        withdrawals.append(\n            Withdrawal(\n                index=i,\n                validator_index=i,\n                address=addr,\n                amount=amount,\n            )\n        )\n        post[addr] = Account(balance=(amount * ONE_GWEI))\n\n    blocks = [\n        Block(\n            withdrawals=withdrawals,\n        )\n    ]\n    blockchain_test(pre=pre, post=post, blocks=blocks)\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.test_withdrawing_to_precompiles","title":"test_withdrawing_to_precompiles(blockchain_test, pre, precompile, amount, t8n)","text":"

    Test withdrawing to all precompiles for a given fork.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    @pytest.mark.parametrize(\"amount\", [0, 1])\n@pytest.mark.with_all_precompiles\ndef test_withdrawing_to_precompiles(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    precompile: int,\n    amount: int,\n    t8n: TransitionTool,\n):\n    \"\"\"\n    Test withdrawing to all precompiles for a given fork.\n    \"\"\"\n    if precompile == 3 and str(t8n.default_binary) == \"ethereum-spec-evm\":\n        pytest.xfail(\"ethereum-spec-evm doesn't support hash type ripemd160\")\n    sender = pre.fund_eoa()\n    post: Dict = {}\n\n    blocks = [\n        # First block performs the withdrawal\n        Block(\n            withdrawals=[\n                Withdrawal(\n                    index=0,\n                    validator_index=0,\n                    address=Address(precompile),\n                    amount=amount,\n                )\n            ]\n        ),\n        # Second block sends a transaction to the precompile\n        Block(\n            txs=[\n                Transaction(\n                    sender=sender,\n                    gas_limit=100000,\n                    to=Address(precompile),\n                ),\n            ],\n        ),\n    ]\n    blockchain_test(pre=pre, post=post, blocks=blocks)\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/index/test_cases/","title":"Test Withdrawals - Test Cases","text":"

    Test cases generated from tests/shanghai/eip4895_withdrawals/test_withdrawals.py

    Parametrized test cases generated from the test module tests/shanghai/eip4895_withdrawals/test_withdrawals.py:

    TestUseValueInTx\nTestUseValueInTx\nTestUseValueInTx\nTestUseValueInTx\nTestUseValueInTx\nTestUseValueInTx\nTestUseValueInTx\nTestUseValueInTx\nTestUseValueInTx\nTestUseValueInTx\nTestUseValueInTx\nTestUseValueInTx\ntest_use_value_in_contract[fork_Shanghai-blockchain_test]\ntest_use_value_in_contract[fork_Shanghai-blockchain_test_engine]\ntest_use_value_in_contract[fork_Cancun-blockchain_test]\ntest_use_value_in_contract[fork_Cancun-blockchain_test_engine]\ntest_use_value_in_contract[fork_Prague-blockchain_test]\ntest_use_value_in_contract[fork_Prague-blockchain_test_engine]\ntest_balance_within_block[fork_Shanghai-blockchain_test]\ntest_balance_within_block[fork_Shanghai-blockchain_test_engine]\ntest_balance_within_block[fork_Cancun-blockchain_test]\ntest_balance_within_block[fork_Cancun-blockchain_test_engine]\ntest_balance_within_block[fork_Prague-blockchain_test]\ntest_balance_within_block[fork_Prague-blockchain_test_engine]\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\ntest_many_withdrawals[fork_Shanghai-blockchain_test]\ntest_many_withdrawals[fork_Shanghai-blockchain_test_engine]\ntest_many_withdrawals[fork_Cancun-blockchain_test]\ntest_many_withdrawals[fork_Cancun-blockchain_test_engine]\ntest_many_withdrawals[fork_Prague-blockchain_test]\ntest_many_withdrawals[fork_Prague-blockchain_test_engine]\ntest_self_destructing_account[fork_Shanghai-blockchain_test]\ntest_self_destructing_account[fork_Shanghai-blockchain_test_engine]\ntest_self_destructing_account[fork_Cancun-blockchain_test]\ntest_self_destructing_account[fork_Cancun-blockchain_test_engine]\ntest_self_destructing_account[fork_Prague-blockchain_test]\ntest_self_destructing_account[fork_Prague-blockchain_test_engine]\ntest_newly_created_contract[fork_Shanghai-blockchain_test-without_tx_value]\ntest_newly_created_contract[fork_Shanghai-blockchain_test-with_tx_value]\ntest_newly_created_contract[fork_Shanghai-blockchain_test_engine-without_tx_value]\ntest_newly_created_contract[fork_Shanghai-blockchain_test_engine-with_tx_value]\ntest_newly_created_contract[fork_Cancun-blockchain_test-without_tx_value]\ntest_newly_created_contract[fork_Cancun-blockchain_test-with_tx_value]\ntest_newly_created_contract[fork_Cancun-blockchain_test_engine-without_tx_value]\ntest_newly_created_contract[fork_Cancun-blockchain_test_engine-with_tx_value]\ntest_newly_created_contract[fork_Prague-blockchain_test-without_tx_value]\ntest_newly_created_contract[fork_Prague-blockchain_test-with_tx_value]\ntest_newly_created_contract[fork_Prague-blockchain_test_engine-without_tx_value]\ntest_newly_created_contract[fork_Prague-blockchain_test_engine-with_tx_value]\ntest_no_evm_execution[fork_Shanghai-blockchain_test]\ntest_no_evm_execution[fork_Shanghai-blockchain_test_engine]\ntest_no_evm_execution[fork_Cancun-blockchain_test]\ntest_no_evm_execution[fork_Cancun-blockchain_test_engine]\ntest_no_evm_execution[fork_Prague-blockchain_test]\ntest_no_evm_execution[fork_Prague-blockchain_test_engine]\ntest_zero_amount[fork_Shanghai-blockchain_test-two_withdrawals_no_value]\ntest_zero_amount[fork_Shanghai-blockchain_test-three_withdrawals_one_with_value]\ntest_zero_amount[fork_Shanghai-blockchain_test-four_withdrawals_one_with_value_one_with_max]\ntest_zero_amount[fork_Shanghai-blockchain_test-four_withdrawals_one_with_value_one_with_max_reversed_order]\ntest_zero_amount[fork_Shanghai-blockchain_test_engine-two_withdrawals_no_value]\ntest_zero_amount[fork_Shanghai-blockchain_test_engine-three_withdrawals_one_with_value]\ntest_zero_amount[fork_Shanghai-blockchain_test_engine-four_withdrawals_one_with_value_one_with_max]\ntest_zero_amount[fork_Shanghai-blockchain_test_engine-four_withdrawals_one_with_value_one_with_max_reversed_order]\ntest_zero_amount[fork_Cancun-blockchain_test-two_withdrawals_no_value]\ntest_zero_amount[fork_Cancun-blockchain_test-three_withdrawals_one_with_value]\ntest_zero_amount[fork_Cancun-blockchain_test-four_withdrawals_one_with_value_one_with_max]\ntest_zero_amount[fork_Cancun-blockchain_test-four_withdrawals_one_with_value_one_with_max_reversed_order]\ntest_zero_amount[fork_Cancun-blockchain_test_engine-two_withdrawals_no_value]\ntest_zero_amount[fork_Cancun-blockchain_test_engine-three_withdrawals_one_with_value]\ntest_zero_amount[fork_Cancun-blockchain_test_engine-four_withdrawals_one_with_value_one_with_max]\ntest_zero_amount[fork_Cancun-blockchain_test_engine-four_withdrawals_one_with_value_one_with_max_reversed_order]\ntest_zero_amount[fork_Prague-blockchain_test-two_withdrawals_no_value]\ntest_zero_amount[fork_Prague-blockchain_test-three_withdrawals_one_with_value]\ntest_zero_amount[fork_Prague-blockchain_test-four_withdrawals_one_with_value_one_with_max]\ntest_zero_amount[fork_Prague-blockchain_test-four_withdrawals_one_with_value_one_with_max_reversed_order]\ntest_zero_amount[fork_Prague-blockchain_test_engine-two_withdrawals_no_value]\ntest_zero_amount[fork_Prague-blockchain_test_engine-three_withdrawals_one_with_value]\ntest_zero_amount[fork_Prague-blockchain_test_engine-four_withdrawals_one_with_value_one_with_max]\ntest_zero_amount[fork_Prague-blockchain_test_engine-four_withdrawals_one_with_value_one_with_max_reversed_order]\ntest_large_amount[fork_Shanghai-blockchain_test]\ntest_large_amount[fork_Shanghai-blockchain_test_engine]\ntest_large_amount[fork_Cancun-blockchain_test]\ntest_large_amount[fork_Cancun-blockchain_test_engine]\ntest_large_amount[fork_Prague-blockchain_test]\ntest_large_amount[fork_Prague-blockchain_test_engine]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000009-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000009-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000009-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000009-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000005-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000005-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000005-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000005-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000006-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000006-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000006-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000006-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000007-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000007-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000007-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000007-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000008-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000008-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000008-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000008-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000001-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000001-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000001-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000001-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000002-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000002-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000002-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000002-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000003-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000003-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000003-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000003-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000004-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000004-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000004-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000004-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x000000000000000000000000000000000000000a-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x000000000000000000000000000000000000000a-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x000000000000000000000000000000000000000a-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x000000000000000000000000000000000000000a-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000009-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000009-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000009-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000009-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000005-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000005-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000005-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000005-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000006-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000006-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000006-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000006-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000007-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000007-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000007-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000007-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000008-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000008-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000008-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000008-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000001-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000001-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000001-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000001-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000002-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000002-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000002-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000002-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000003-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000003-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000003-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000003-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000004-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000004-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000004-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000004-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000b-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000b-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000b-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000b-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000c-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000c-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000c-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000c-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000d-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000d-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000d-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000d-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000e-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000e-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000e-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000e-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000f-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000f-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000f-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000f-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000010-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000010-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000010-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000010-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000011-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000011-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000011-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000011-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000012-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000012-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000012-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000012-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000013-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000013-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000013-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000013-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000a-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000a-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000a-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000a-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000009-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000009-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000009-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000009-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000005-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000005-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000005-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000005-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000006-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000006-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000006-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000006-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000007-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000007-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000007-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000007-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000008-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000008-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000008-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000008-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000001-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000001-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000001-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000001-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000002-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000002-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000002-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000002-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000003-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000003-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000003-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000003-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000004-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000004-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000004-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000004-blockchain_test_engine-amount_1]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/shanghai/eip4895_withdrawals/test_withdrawals.py\n
    "},{"location":"tutorials/blockchain/","title":"Blockchain Tests","text":"

    This tutorial teaches you to create a blockchain execution specification test. These tests verify that a blockchain, starting from a defined pre-state, will process given blocks and arrive at a defined post-state.

    "},{"location":"tutorials/blockchain/#pre-requisites","title":"Pre-requisites","text":"

    Before proceeding with this tutorial, it is assumed that you have prior knowledge and experience with the following:

    • Set up and run an execution specification test as outlined in the quick start guide.
    • Understand how to read a blockchain test.
    • Know the basics of Yul, which is an EVM assembly language.
    • Familiarity with Python.
    • Understand how to write an execution spec state transition test.
    "},{"location":"tutorials/blockchain/#example-tests","title":"Example Tests","text":"

    In this tutorial we will go over [test_block_number] in test_block_example.py(https://github.com/ethereum/execution-spec-tests/tree/main/tests/example/test_block_example.py#L19).

    It is assumed you have already gone through the state transition test tutorial. Only new concepts will be discussed.

    "},{"location":"tutorials/blockchain/#smart-contract","title":"Smart Contract","text":"

    A smart contract is defined that is called by each transaction in the test. It stores a pointer to storage at storage[0]. When it is called storage cell 0 gets the current block number, and the pointer is incremented to the next value.

    contract_addr: Account(\n    balance=1000000000000000000000,\n    code=Yul(\n        \"\"\"\n        {\n            let next_slot := sload(0)\n            sstore(next_slot, number())\n            sstore(0, add(next_slot, 1))\n        }\n        \"\"\"\n    ),\n    storage={\n        0x00: 0x01,\n    },\n),\n
    "},{"location":"tutorials/blockchain/#transaction-generator","title":"Transaction Generator","text":"

    The transactions used in this test are nearly identical. Their only difference is the nonce value which needs to be incremented.

    def tx_generator():\n    nonce = 0  # Initial value\n    while True:\n        tx = Transaction(\n            ty=0x0,\n            chain_id=0x0,\n            nonce=nonce,\n            to=contractAddr,\n            gas_limit=500000,\n            gas_price=10,\n        )\n        nonce = nonce + 1\n        yield tx\n\ntx_generator = tx_generator()\n

    This looks like an infinite loop but it isn't because this is a generator function. When generator encounters the yield keyword it returns the value and stops execution, keeping a copy of all the local variables, until it is called again. Hence infinite loops inside a generator are not a problem as long as they include yield. This code section is responsible for creating the Transaction object and incrementing the nonce.

    Every time the function tx_generator() is called, it returns a new generator with a nonce of zero. To increment the nonce we need to use the same generator. We assign this generator to tx_generator.

    "},{"location":"tutorials/blockchain/#blocks","title":"Blocks","text":"

    Each integer in the tx_per_block array is the number of transactions in a block. The genesis block is block 0 (no transactions). It follows that we have 2 transactions in block 1, 0 in block two, 4 in block 3, ..., and 50 in block 9.

    tx_per_block = [2, 0, 4, 8, 0, 0, 20, 1, 50]\n

    The code section that creates the blocks is a bit complex in this test. For some simpler definitions of Block creation you can browse tests within test_withdrawals.py.

    blocks = map(\n    lambda len: Block(\n        txs=list(map(lambda x: next(tx_generator), range(len)))\n    ),\n    tx_per_block,\n)\n

    We use lambda notation to specify short functions. In this case, the function doesn't actually care about its input, it just returns the next transaction from the generator.

    lambda x: next(tx_generator)\n

    Python uses range(n) to create a list of numbers from 0 to n-1. Among other things, it's a simple way to create a list of n values.

    range(len)\n

    The map function runs the function (the first parameter) on every element of the list (the second parameter). Putting together what we know, it means that it runs next(tx_generator) len times, giving us len transactions. We then use list to turn the transactions into a list that we can provide as the txs parameter to the Block constructor.

    list(map(lambda x: next(tx_generator), range(len)))\n

    The outer lambda function takes an integer, len, and creates a Block object with len transactions. This function is then run on every value of tx_per_block to generate the blocks.

    blocks = map(\n    lambda len: Block(\n        txs=list of len transactions\n    ),\n    tx_per_block,\n)\n

    For example, if we had tx_per_block = [0,2,4], we'd get this result:

    blocks = [\n    Blocks(txs=[]),\n    Blocks(txs=[next(tx_generator), next(tx_generator)]),\n    Blocks(txs=[next(tx_generator), next(tx_generator), next(tx_generator), next(tx_generator)])        \n]\n
    "},{"location":"tutorials/blockchain/#post-state","title":"Post State","text":"

    Recall that storage slot 0 retains the value of the next slot that the block number is written into. It starts at one and is incremented after each transaction. Hence it's the total number of transactions plus 1.

    storage = {0: sum(tx_per_block) + 1}\n

    For every block and transaction within the block, we write the block number and increment the next slot number in storage slot 0. As Python lists are 0 indexed, we must increment the block number by 1.

    next_slot = 1\nfor blocknum in range(len(tx_per_block)):\n    for _ in range(tx_per_block[blocknum]):\n        storage[next_slot] = blocknum + 1\n        next_slot = next_slot + 1\n

    Now that the expected storage values are calculated, the post state can be defined and yielded within the BlockchainTest, synonymous to the state test example.

    post = {contract_addr: Account(storage=storage)}\n\nyield BlockchainTest(\n    genesis_environment=env,\n    pre=pre,\n    blocks=blocks,\n    post=post,\n)\n

    Note that because of the yield we could have multiple tests under the same name.

    "},{"location":"tutorials/blockchain/#conclusion","title":"Conclusion","text":"

    At this point you should be able to write blockchain tests.

    "},{"location":"tutorials/state_transition/","title":"State Transition Tests","text":"

    This tutorial teaches you to create a state transition execution specification test. These tests verify that a starting pre-state will reach a specified post-state after executing a single transaction.

    "},{"location":"tutorials/state_transition/#pre-requisites","title":"Pre-requisites","text":"

    Before proceeding with this tutorial, it is assumed that you have prior knowledge and experience with the following:

    • Set up and run an execution specification test as outlined in the quick start guide.
    • Understand how to read a static state transition test.
    • Know the basics of Yul, which is an EVM assembly language.
    • Familiarity with Python.
    "},{"location":"tutorials/state_transition/#example-tests","title":"Example Tests","text":"

    The most effective method of learning how to write tests is to study a couple of straightforward examples. In this tutorial we will go over the Yul state test.

    "},{"location":"tutorials/state_transition/#yul-test","title":"Yul Test","text":"

    You can find the source code for the Yul test in tests/homestead/yul/test_yul_example.py. It is the spec test equivalent of this static test.

    Lets examine each section.

    \"\"\"\nTest Yul Source Code Examples\n\"\"\"\n

    In Python, multi-line strings are denoted using \"\"\". As a convention, a file's purpose is often described in the opening string of the file.

    from ethereum_test_forks import Fork, Frontier, Homestead\nfrom ethereum_test_tools import (\n    Account,\n    Alloc,\n    Environment,\n    StateTestFiller,\n    Transaction,\n    YulCompiler,\n)\n

    In this snippet the required constants, types and helper functions are imported from ethereum_test_tools and ethereum_test_forks. We will go over these as we come across them.

    @pytest.mark.valid_from(\"Homestead\")\n

    In Python this kind of definition is called a decorator. It modifies the action of the function after it. In this case, the decorator is a custom pytest fixture defined by the execution-specs-test framework that specifies that the test is valid for the Homestead fork and all forks after it. The framework will then execute this test case for all forks in the fork range specified by the command-line arguments.

    Executing the test

    To execute this test for all the specified forks, we can specify pytest's -k flag that filters test cases by keyword expression:

    fill -k test_yul\n

    and to execute it for a specific fork range, we can provide the --from and --until command-line arguments:

    fill -k test_yul --from London --until Paris\n
    def test_yul(state_test: StateTestFiller, pre: Alloc, yul: YulCompiler, fork: Fork):\n    \"\"\"\n    Test YUL compiled bytecode.\n    \"\"\"\n

    This is the format of a Python function. It starts with def <function name>(<parameters>):, and then has indented code for the function. The function definition ends when there is a line that is no longer indented. As with files, by convention functions start with a string that explains what the function does.

    The state_test function argument

    This test defines a state test and, as such, must include the state_test in its function arguments. This is a callable object (actually a wrapper class to the StateTest); we will see how it is called later.

    The pre function argument

    For all types of tests, it is highly encouraged that we define the pre allocation as a function argument, which will be populated with the pre-state requirements during the execution of the test function (see below).

        env = Environment()\n

    This line specifies that env is an Environment object, and that we just use the default parameters. If necessary we can modify the environment to have different block gas limits, block numbers, etc. In most tests the defaults are good enough.

    For more information, see the static test documentation.

    "},{"location":"tutorials/state_transition/#pre-state","title":"Pre State","text":"

    For every test we need to define the pre-state requirements, so we are certain of what is on the \"blockchain\" before the test executes. It can be used as a dictionary, which is the Python term for an associative array, but the appropriate way to populate it is by using the methods fund_eoa, deploy_contract or fund_address from the Alloc object.

    In this example we are using the deploy_contract method to deploy a contract to some address available in the pre-state.

        contract_address = pre.deploy_contract(\n        code=yul(\n            \"\"\"\n            {\n                function f(a, b) -> c {\n                    c := add(a, b)\n                }\n\n                sstore(0, f(1, 2))\n                return(0, 32)\n            }\n            \"\"\"\n        ),\n        balance=0x0BA1A9CE0BA1A9CE,\n    )\n

    Specifically we deploy a contract with yul code that adds two numbers and stores the result in storage.

                balance=0x0BA1A9CE0BA1A9CE,\n

    This field is the balance: the amount of Wei that the account has. It usually doesn't matter what its value is in the case of state test contracts.

        contract_address = pre.deploy_contract(\n

    As return value of the deploy_contract method we get the address where the contract was deployed and put it in the contract_address variable, which will later be used in the transaction.

            storage={\n            0x00: 0x00,\n        },\n

    We could also specify a starting storage for the contract, which is done by adding a storage parameter to the deploy_contract method.

                code=yul(\n

    Here we define the Yul code for the contract. It is defined as a multi-line string and starts and ends with curly braces ({ <yul> }).

    When running the test filler fill, the solidity compiler solc will automatically translate the Yul to EVM opcode at runtime.

    Note

    Currently Yul and direct EVM opcode are supported in execution spec tests.

                    \"\"\"\n                {\n                    function f(a, b) -> c {\n                        c := add(a, b)\n                    }\n                    sstore(0, f(1, 2))\n                    return(0, 32)\n                }\n                \"\"\"\n

    Within this example test Yul code we have a function definition, and inside it we are using the Yul add instruction. When compiled with solc it translates the instruction directly to the ADD opcode. For further Yul instructions see here. Notice that function is utilized with the Yul sstore instruction, which stores the result of add(1, 2) to the storage address 0x00.

    Generally for execution spec tests the sstore instruction acts as a high-level assertion method to check pre to post-state changes. The test filler achieves this by verifying that the correct value is held within post-state storage, hence we can validate that the Yul code has run successfully.

        sender = pre.fund_eoa(amount=0x0BA1A9CE0BA1A9CE)\n

    In this line we specify that we require a single externally owned account (EOA) with a balance of 0x0BA1A9CE0BA1A9CE Wei.

    The returned object, which includes a private key, an address, and a nonce, is stored in the sender variable and will later be used as the sender of the transaction.

    "},{"location":"tutorials/state_transition/#transactions","title":"Transactions","text":"
        tx = Transaction(\n        ty=0x0,\n        chain_id=0x01,\n        sender=sender,\n        to=contract_address,\n        gas_limit=500000,\n        gas_price=10,\n        protected=False if fork in [Frontier, Homestead] else True,\n    )\n

    With the pre-state built, we can add a description for the Transaction.

                sender=sender,\n

    We use the sender variable from the pre-state to specify the sender of the transaction, which already has the necessary information to sign the transaction, and also contains the correct nonce for the transaction.

    The nonce is a protection mechanism to prevent replay attacks, and the current rules of Ethereum require that the nonce of a transaction is equal to the number of transactions sent from the sender's address, starting from zero. This means that the first transaction sent from an address must have a nonce of zero, the second transaction must have a nonce of one, and so on.

    The nonce field of the sender variable is automatically incremented for us by the Transaction object when the transaction is signed, so if we were to create another transaction with the same sender, the nonce would be incremented by one yet another time.

                to=contract_address,\n

    The to field specifies the address of the contract we want to call and, in this case, it is the address of the contract we deployed earlier.

    For more information, see the static test documentation

    "},{"location":"tutorials/state_transition/#post-state","title":"Post State","text":"
        post = {\n        contract_address: Account(\n            storage={\n                0x00: 0x03,\n            },\n        ),\n    }\n

    This is the post-state which is equivalent to expect in static tests, but without the indexes. It is similar to the pre-state, except that we do not need to specify everything, only those accounts and fields we wish to test.

    In this case, we look at the storage of the contract we called and add to it what we expect to see. In this example storage cell 0x00 should be 0x03 as in the pre-state we essentially stored the result of the Yul instruction add(1, 2).

    "},{"location":"tutorials/state_transition/#state-test","title":"State Test","text":"
        state_test(env=env, pre=pre, post=post, tx=tx)\n

    This line calls the wrapper to the StateTest object that provides all the objects required (for example, the fork parameter) in order to fill the test, generate the test fixtures and write them to file (by default, ./fixtures/<blockchain,state>_tests/example/yul_example/test_yul.json).

    "},{"location":"tutorials/state_transition/#conclusion","title":"Conclusion","text":"

    At this point you should be able to state transition tests within a single block.

    "},{"location":"tutorials/state_transition_bad_opcode/","title":"Bad Opcode Test","text":"

    The source code for this test is here. We will only go over the parts that are new.

    We use Python string templates, so we need to import that library.

    from string import Template\n

    In this test we need a couple of addresses, so we create them here. Python lets us specify <string>*<number> when we need a string repeated multiple times, which makes for more readable code than 0x00...000C0DE.

        code_addr = \"0x\" + \"0\"*(40-4) + \"C0DE\"\n    goat_addr = \"0x\" + \"0\"*(40-4) + \"60A7\"\n

    We create env and tx first because they are constant. This function will yield multiple tests, but always with the same env and tx values.

        env = Environment()\n\n    tx = Transaction(\n           .\n           .\n           .\n        )\n

    Here we create two post states. We will use whichever one is appropriate to the test we create.

        post_valid = {\n       code_addr: Account(\n         storage={0x00: 1},\n       ),\n    }\n\n    post_invalid = {\n       code_addr: Account(\n         storage={0x00: 0},\n       ),\n    }\n

    Here we define a function (opc_valid) inside another function. Python supports this, and it has two advantages:

    • Avoid namespace pollution by restricting the function to where it is needed.
    • Functions defined inside other functions can use the parameters and local variables of those functions. In this case, we need to use fork.
        # Check if an Opcode is valid\n    def opc_valid(opc):\n        \"\"\"\n        Return whether opc will be evaluated as valid by the test or not.\n        Note that some opcodes are evaluated as invalid because of the way they act\n        \"\"\"\n

    This is the syntax for Python comments, # <rest of the line>.

            # PUSH0 is only valid Shanghai and later\n

    Opcode 0x5F (PUSH0) is only valid starting with the Shanghai fork. We don't know what will be the fork names after Shanghai, so it is easiest to specify that prior to Shanghai it is invalid. We don't need to worry about forks prior to London because the decorator for this test says it is only valid from London.

            if fork in {\"london\", \"paris\"} and opc==0x5F:\n

    Python has a set data structure. We use this structure when the order of the values are irrelevant, and we just want to be able to check if something is a member or not.

    Note that if statements are also followed by a colon (:) and the code inside them indented. That is the general Python syntax.

                return False\n

    Boolean values in Python are either True or False.

    This test works by running an opcode and then does a SSTORE. Opcodes that terminate execution, such as STOP and RETURN also cause the SSTORE not to happen, so they must be treated as invalid. The same is true for JUMP.

            # Valid opcodes, but they are terminal, and so cause\n        # the SSTORE not to happen\n        if opc in {0x00, 0xF3, 0xFD, 0xFF}:\n            return False\n\n\n        # Jumps. If you jump to a random location, you skip the SSTORE\n        if opc in {0x56}:\n            return False\n

    Next we return True for supported opcodes.

            # Opcodes that aren't part of a range\n        # 0x20 - SHA3\n        # 0xFA - STATICCALL\n        if opc in {0x20, 0xFA}:\n            return True\n

    In Python, as in math, you can use a < b < c for a < b and b < c.

            # Arithmetic opcodes\n        if 0x01 <= opc <= 0x0b:\n            return True\n\n        .\n        .\n        .\n

    The last part the function returns False. If we got here, then this is not a valid opcode.

            return False\n        # End of opc_valid\n

    As this is the end of the function, the next code line is no longer indented (compared to the function definition code).

    This is a for loop. For loops iterate over a sequence, and the range function, in this case, gives us the range 0..255. As with functions and if statements, the for loop has a colon and includes the indented code.

        # For every possible opcode\n    for opc in range(256):\n

    We have two post states. One, post_valid, has the value of 1 in storage location 0. The other, post_invalid has the value of 0 in storage location 0. But SELFDESTRUCT destroys the contract so there is no longer an account at that address. Neither is valid, so we just skip that test case.

            # We can't check SELFDESTRUCT using this technique\n        if opc in {0xFF}:\n           continue\n

    We need the opcode in hexadecimal. The function hex gives us the hexadecimal number in hex. However, it also gives us a 0x prefix, which we don't want, so we use a slice to remove the first two characters.

            opc_hex = hex(opc)[2:]\n

    We need opc_hex to be two characters. If the length is only one, prepend a zero.

            if len(opc_hex) == 1:\n          opc_hex = \"0\" + opc_hex\n

    This is a Template string. This means we'll be able to substitute template variables (${<var name>}) with values to produce the actual code.

            yul_code = Template(\"\"\"\n        {\n

    We start with a call 0x00...0060A7 (a.k.a. goat_addr) so we'll have some return data. Otherwise, RETURNDATACOPY will fail and appear like it is not an opcode.

               pop(call(gas(), 0x60A7, 0, 0, 0, 0, 0))\n\n           // fails on opcodes with >20 inputs\n           // (currently dup16, at 17 inputs, is the\n           // one that goes deepest)\n           //\n           // Follow with 32 NOPs (0x5B) to handle PUSH, which has an immediate\n           // operand\n

    Opcodes can have two types of operands:

    • Immediate operands, which are part of the bytecode. For example, 6001 is PUSH1 with the value 0x01.
    • Implied operands (a.k.a. stack operands), which come from the stack.

    This verbatim code provides both operand types. The code, ${opcode}${nop32} is the opcode we are testing, followed by 32 copies of 0x5B. When 0x5B is not used as an operand, it is JUMPDEST and does nothing.

               verbatim_20i_0o(hex\"${opcode}${nop32}\",\n

    The opcode string is followed by the input parameters (in this case, twenty of them). These can be Yul expressions, but for the sake of simplicity here we just use constant values.

                  0x00, 0x00, 0x00, 0xFF, 0xFF,\n              0xFF, 0xFF, 0xFF, 0xFF, 0xFF,\n              0xFF, 0xFF, 0xFF, 0xFF, 0xFF,\n              0xFF, 0xFF, 0xFF, 0xFF, 0xFF)\n

    If the opcode terminates the smart contract execution (as invalid opcodes do), we don't get here. If we do get here, write to storage cell 0x00 to record that fact.

    Note the syntax let <var> := <value>. This is how you specify variables in Yul.

               // We only get here is the opcode is legit (and it doesn't terminate\n           // execution like STOP and RETURN)\n           let zero := 0\n           let one := 1\n           sstore(zero, one)\n        }\n

    Replace ${opcode} with the one byte hex code, and ${nop32} with 32 copies of 5b (for NOP).

            \"\"\").substitute(opcode=opc_hex, nop32=\"5B\"*32)\n        pre = {\n           TestAddress: Account(balance=0x0BA1A9CE0BA1A9CE),\n           codeAddr: Account(\n  balance=0,\n  nonce=1,\n  code=Yul(yul_code)\n           ),\n

    This is the account for 0x00..0060A7. It just returns data (all zeros).

               goat_addr: Account(\n                balance=0,\n                nonce=1,\n                code=Yul(\"{ return(0, 0x100) }\"),\n           )\n        }\n

    Every time the for loop gets here, it yields a separate test. Over the entire for loop, it yields 255 different tests.

        yield StateTest(\n        env=env, \n        pre=pre, \n        tx=tx,\n        post=(post_valid if opc_valid(opc) else post_invalid),\n    )\n

    The Python format for the ternary operation is a bit different from C-like languages. In C like languages the syntax is <condition> ? <yes value> : <no value>. In Python it is <yes value> if <condition> else <no value>.

    "},{"location":"writing_tests/","title":"Writing Tests","text":"

    The best way to get started is to use one of the existing test modules for inspiration. A good simple example is tests.berlin.eip2930_access_list.test_acl.test_access_list.

    Please check that your code adheres to the repo's Coding Standards and read the other pages in this section for more background and an explanation of how to implement state transition and blockchain tests.

    "},{"location":"writing_tests/adding_a_new_test/","title":"Adding a New Test","text":"

    All test cases are located underneath the tests directory, which are then organized by fork. Each fork contains sub-directories containing test sub-categories.

    \ud83d\udcc1 execution-test-specs/\n\u251c\u2500\u2574\ud83d\udcc1 tests/\n|   \u251c\u2500\u2500 \ud83d\udcc4 __init__.py\n\u2502   \u251c\u2500\u2500 \ud83d\udcc1 cancun/\n|   |    \u251c\u2500\u2500 \ud83d\udcc4 __init__.py\n\u2502   |    \u2514\u2500\u2500 \ud83d\udcc1 eip4844_blobs/\n|   |        \u251c\u2500\u2500 \ud83d\udcc4 __init__.py\n|   |        \u251c\u2500\u2500 \ud83d\udcc4 test_blobhash_opcode.py\n|   |        \u251c\u2500\u2500 \ud83d\udcc4 test_excess_blob_gas.py\n|   |        \u2514\u2500\u2500 \ud83d\udcc4 ...\n|   \u251c\u2500\u2500 \ud83d\udcc1 shanghai\n|   |    \u251c\u2500\u2500 \ud83d\udcc1 eip3651_warm_coinbase\n|   |    |   \u251c\u2500\u2500 \ud83d\udcc4 __init__.py\n|   |    |   \u2514\u2500\u2500 \ud83d\udcc4 test_warm_coinbase.py\n|   |    \u251c\u2500\u2500 \ud83d\udcc1 eip3855_push0\n|   |    |   \u251c\u2500\u2500 \ud83d\udcc4 __init__.py\n|   |    |   \u2514\u2500\u2500 \ud83d\udcc4 test_push0.py\n|   |    \u251c\u2500\u2500 \ud83d\udcc1...\n|   |    ...\n\u2502   \u2514\u2500\u2500 \ud83d\udcc1 ...\n

    Each category/sub-directory may have multiple Python test modules (*.py) which in turn may contain many test functions. The test functions themselves are always parametrized by fork (by the framework).

    A new test can be added by either:

    • Adding a new test_ python function to an existing file in any of the existing category subdirectories within tests.
    • Creating a new source file in an existing category, and populating it with the new test function(s).
    • Creating an entirely new category by adding a subdirectory in tests with the appropriate source files and test functions.
    "},{"location":"writing_tests/code_standards/","title":"Code Standards","text":"

    The Python code in the tests subdirectory ./tests must fulfill the following checks:

    Command Explanation 1 fname8 tests Spell check passes using the ./whitelist.txt dictionary file. 2 isort tests --check --diff Python imports ordered and arranged according to isort's standards. 3 black tests --check --diff Python source must be black-formatted. 4 flake8 tests Python lint and spell-checked. 5 mypy tests Objects that provide typehints pass type-checking via mypy. 6 fill All tests must execute correctly. 7 mkdocs build --strict Documentation generated without warnings. 8 pyspelling Markdown spell-check. 9 markdownlint-cli2 Markdown lint check.

    While this seems like a long list, a correctly configured editor (see VS Code Setup) essentially assures:

    1. Points 2 and 3 are automatically covered.
    2. Points 1, 4, 5, 8 & 9 are mostly covered. Additionally, if you skip type hints, they won't be checked; we can help you add these in the PR.

    These checks must pass in order for the execution-spec-tests Github Actions to pass upon pushing to remote.

    Running the checks with tox

    All these checks can be executed locally in a single command, tox, see Verifying Changes.

    If you need help, get in touch!

    "},{"location":"writing_tests/exception_tests/","title":"Exception Tests","text":"

    Exception tests are a special type of test which verify that an invalid transaction or an invalid block are correctly rejected with the expected error.

    "},{"location":"writing_tests/exception_tests/#creating-an-exception-test","title":"Creating an Exception Test","text":"

    To test for an exception, the test can use either of the following types from ethereum_test_exceptions library:

    1. TransactionException: To be added to the error field of the Transaction object, and to the exception field of the Block object that includes the transaction; this exception type is used when a transaction is invalid, and therefore when included in a block, the block is expected to be invalid too. This is different from valid transactions where an exception during EVM execution is expected (e.g. a revert, or out-of-gas), which can be included in valid blocks.

      For an example, see eip3860_initcode.test_initcode.test_contract_creating_tx which raises TransactionException.INITCODE_SIZE_EXCEEDED in the case that the initcode size exceeds the maximum allowed size.

    2. BlockException: To be added to the exception field of the Block object; this exception type is used when a block is expected to be invalid, but the exception is related to a block property, e.g. an invalid value of the block header.

      For an example, see eip4844_blobs.test_excess_blob_gas.test_invalid_static_excess_blob_gas which raises BlockException.INCORRECT_EXCESS_BLOB_GAS in the case that the excessBlobGas remains unchanged but the parent blobs included are not TARGET_BLOBS_PER_BLOCK.

    Although exceptions can be combined with the | operator to indicate that a test vector can throw either one of multiple exceptions, ideally the tester should aim to use only one exception per test vector, and only use multiple exceptions on the rare instance when it is not possible to know which exception will be thrown because it depends on client implementation.

    "},{"location":"writing_tests/exception_tests/#adding-a-new-exception","title":"Adding a new exception","text":"

    If a test requires a new exception, because none of the existing ones is suitable for the test, a new exception can be added to either TransactionException or BlockException classes.

    The new exception should be added as a new enum value, and the docstring of the attribute should be a string that describes the exception.

    The name of the exception should be unique, and should not be used by any other exception.

    "},{"location":"writing_tests/exception_tests/#test-runner-behavior-on-exception-tests","title":"Test runner behavior on exception tests","text":"

    When an exception is added to a test vector, the test runner must check that the transaction or block is rejected with the expected exception.

    The test runner must map the exception key to the corresponding error string that is expected to be returned by the client.

    Exception mapping are particularly important in blockchain tests because the block can be invalid for multiple reasons, and the client returning a different error can mean that a verification in the client is faulty.

    "},{"location":"writing_tests/reference_specification/","title":"Referencing an EIP Spec Version","text":"

    An Ethereum Improvement Proposal (ethereum/EIPs) and its SHA digest can be directly referenced within a python test module in order to check whether the test implementation could be out-dated. The test framework automatically generates tests for every module that defines a spec version. If the spec is out-of-date because the SHA of the specified file in the remote repo changes, the corresponding test_eip_spec_version() test fails.

    <-snip->

    The SHA value is the output from git's hash-object command, for example:

    git clone git@github.com:ethereum/EIPs\ngit hash-object EIPS/EIPS/eip-3651.md\n# output: d94c694c6f12291bb6626669c3e8587eef3adff1\n

    and can be retrieved from the remote repo via the Github API on the command-line as following:

    sudo apt install jq\ncurl -s -H \"Accept: application/vnd.github.v3+json\" \\\nhttps://api.github.com/repos/ethereum/EIPs/contents/EIPS/eip-3651.md |\\\njq -r '.sha'\n# output: d94c694c6f12291bb6626669c3e8587eef3adff1\n
    "},{"location":"writing_tests/reference_specification/#how-to-add-a-spec-version-check","title":"How to Add a Spec Version Check","text":"

    This check accomplished by adding the following two global variables anywhere in the Python source file:

    Variable Name Explanation REFERENCE_SPEC_GIT_PATH The relative path of the EIP markdown file in the ethereum/EIPs repository, e.g. \"EIPS/eip-1234.md\" REFERENCE_SPEC_VERSION The SHA hash of the latest version of the file retrieved from the Github API:https://api.github.com/repos/ethereum/EIPs/contents/EIPS/eip-<EIP Number>.md"},{"location":"writing_tests/reference_specification/#example","title":"Example","text":"

    Here is an example from ./tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py:

    REFERENCE_SPEC_GIT_PATH = \"EIPS/eip-3651.md\"\nREFERENCE_SPEC_VERSION = \"d94c694c6f12291bb6626669c3e8587eef3adff1\"\n

    The SHA digest was retrieved from here.

    "},{"location":"writing_tests/test_markers/","title":"Test Markers","text":"

    Test markers are used to categorize tests and to run specific subsets of tests. They are defined in the test files using the pytest.mark decorator.

    The examples below use StateTestFiller tests, but the same markers can also be applied to BlockchainTestFiller tests.

    "},{"location":"writing_tests/test_markers/#fork-markers","title":"Fork Markers","text":"

    These markers are used to specify the forks for which a test is valid.

    "},{"location":"writing_tests/test_markers/#pytestmarkvalid_fromfork_name","title":"@pytest.mark.valid_from(\"FORK_NAME\")","text":"

    This marker is used to specify the fork from which the test is valid. The test will not be filled for forks before the specified fork.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\n\n@pytest.mark.valid_from(\"London\")\ndef test_something_only_valid_after_london(\n    state_test: StateTestFiller, \n    pre: Alloc\n):\n    pass\n

    In this example, the test will only be filled for the London fork and after, e.g. London, Paris, Shanghai, Cancun, etc.

    "},{"location":"writing_tests/test_markers/#pytestmarkvalid_untilfork_name","title":"@pytest.mark.valid_until(\"FORK_NAME\")","text":"

    This marker is used to specify the fork until which the test is valid. The test will not be filled for forks after the specified fork.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\n\n@pytest.mark.valid_until(\"London\")\ndef test_something_only_valid_until_london(\n    state_test: StateTestFiller, \n    pre: Alloc\n):\n    pass\n

    In this example, the test will only be filled for the London fork and before, e.g. London, Berlin, Istanbul, etc.

    "},{"location":"writing_tests/test_markers/#pytestmarkvalid_at_transition_tofork_name","title":"@pytest.mark.valid_at_transition_to(\"FORK_NAME\")","text":"

    This marker is used to specify that a test is only meant to be filled at the transition to the specified fork.

    The test usually starts at the fork prior to the specified fork at genesis and at block 5 (for pre-merge forks) or at timestamp 15,000 (for post-merge forks) the fork transition occurs.

    "},{"location":"writing_tests/test_markers/#fork-covariant-markers","title":"Fork Covariant Markers","text":"

    These markers are used in conjunction with the fork validity markers to automatically parameterize tests with values that are valid for the fork being tested.

    "},{"location":"writing_tests/test_markers/#pytestmarkwith_all_tx_types","title":"@pytest.mark.with_all_tx_types","text":"

    This marker is used to automatically parameterize a test with all transaction types that are valid for the fork being tested.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\n\n@pytest.mark.with_all_tx_types\n@pytest.mark.valid_from(\"Berlin\")\ndef test_something_with_all_tx_types(\n    state_test: StateTestFiller, \n    pre: Alloc,\n    tx_type: int\n):\n    pass\n

    In this example, the test will be parameterized for parameter tx_type with values [0, 1] for fork Berlin, but with values [0, 1, 2] for fork London (because of EIP-1559).

    "},{"location":"writing_tests/test_markers/#pytestmarkwith_all_contract_creating_tx_types","title":"@pytest.mark.with_all_contract_creating_tx_types","text":"

    This marker is used to automatically parameterize a test with all contract creating transaction types that are valid for the fork being tested.

    This marker only differs from pytest.mark.with_all_tx_types in that it does not include transaction type 3 (Blob Transaction type) on fork Cancun and after.

    "},{"location":"writing_tests/test_markers/#pytestmarkwith_all_precompiles","title":"@pytest.mark.with_all_precompiles","text":"

    This marker is used to automatically parameterize a test with all precompiles that are valid for the fork being tested.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\n\n@pytest.mark.with_all_precompiles\n@pytest.mark.valid_from(\"Shanghai\")\ndef test_something_with_all_precompiles(\n    state_test: StateTestFiller, \n    pre: Alloc,\n    precompile: int,\n):\n    pass\n

    In this example, the test will be parameterized for parameter precompile with values [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] for fork Shanghai, but with values [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] for fork Cancun which introduced the point evaluation precompile defined in EIP-4844.

    "},{"location":"writing_tests/test_markers/#pytestmarkwith_all_evm_code_types","title":"@pytest.mark.with_all_evm_code_types","text":"

    This marker is used to automatically parameterize a test with all EVM code types that are valid for the fork being tested.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\n\n@pytest.mark.with_all_evm_code_types\n@pytest.mark.valid_from(\"Frontier\")\ndef test_something_with_all_evm_code_types(\n    state_test: StateTestFiller,     \n    pre: Alloc,\n):\n    pass\n

    In this example, the test will be parameterized for parameter evm_code_type only with value [EVMCodeType.LEGACY] starting on fork Frontier, and eventually it will be parametrized with with values [EVMCodeType.LEGACY, EVMCodeType.EOF_V1] on the EOF activation fork.

    In all calls to pre.deploy_contract, if the code parameter is Bytecode type, and evm_code_type==EVMCodeType.EOF_V1, the bytecode will be automatically wrapped in an EOF V1 container.

    Code wrapping might fail in the following circumstances:

    • The code contains invalid EOF V1 opcodes.
    • The code does not end with a valid EOF V1 terminating opcode (such as Op.STOP or Op.REVERT or Op.RETURN).

    In the case where the code wrapping fails, evm_code_type can be added as a parameter to the test and the bytecode can be dynamically modified to be compatible with the EOF V1 container.

    One thing to note is that evm_code_type is not necessary to be added as a parameter to the test because the pre: Alloc fixture automatically consumes this fixture, and therefore it only needs to be added to the test signature if the test's logic needs it.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\nfrom ethereum_test_vm import EVMCodeType\nfrom ethereum_test_vm import Opcodes as Op\n\n@pytest.mark.with_all_evm_code_types\n@pytest.mark.valid_from(\"Frontier\")\ndef test_something_with_all_evm_code_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    evm_code_type: EVMCodeType\n):\n    code = Op.SSTORE(1, 1)\n    if evm_code_type == EVMCodeType.EOF_V1:\n        # Modify the bytecode to be compatible with EOF V1 container\n        code += Op.STOP\n    pre.deploy_contract(code)\n    ...\n
    "},{"location":"writing_tests/test_markers/#pytestmarkwith_all_call_opcodes","title":"@pytest.mark.with_all_call_opcodes","text":"

    This marker is used to automatically parameterize a test with all EVM call opcodes that are valid for the fork being tested.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\nfrom ethereum_test_vm import Opcodes as Op\n\n@pytest.mark.with_all_call_opcodes\n@pytest.mark.valid_from(\"Frontier\")\ndef test_something_with_all_call_opcodes(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    call_opcode: Op\n):\n    pass\n

    In this example, the test will be parametrized for parameter call_opcode with values [Op.CALL, Op.CALLCODE] starting on fork Frontier, [Op.CALL, Op.CALLCODE, Op.DELEGATECALL] on fork Homestead, [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL] on fork Byzantium, and eventually it will be parametrized with with values [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL, Op.EXTCALL, Op.EXTSTATICCALL, Op.EXTDELEGATECALL] on the EOF activation fork.

    Parameter evm_code_type will also be parametrized with the correct EVM code type for the opcode under test.

    "},{"location":"writing_tests/test_markers/#pytestmarkwith_all_create_opcodes","title":"@pytest.mark.with_all_create_opcodes","text":"

    This marker is used to automatically parameterize a test with all EVM create opcodes that are valid for the fork being tested.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\nfrom ethereum_test_vm import Opcodes as Op\n\n@pytest.mark.with_all_create_opcodes\n@pytest.mark.valid_from(\"Frontier\")\ndef test_something_with_all_create_opcodes(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    create_opcode: Op\n):\n    pass\n

    In this example, the test will be parametrized for parameter create_opcode with values [Op.CREATE] starting on fork Frontier, [Op.CREATE, Op.CREATE2] starting on fork Constantinople, and eventually it will be parametrized with with values [Op.CREATE, Op.CREATE2, Op.EOFCREATE] on the EOF activation fork.

    Parameter evm_code_type will also be parametrized with the correct EVM code type for the opcode under test.

    "},{"location":"writing_tests/test_markers/#pytestmarkwith_all_system_contracts","title":"@pytest.mark.with_all_system_contracts","text":"

    This marker is used to automatically parameterize a test with all system contracts that are valid for the fork being tested.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\nfrom ethereum_test_base_types import Address\n\n@pytest.mark.with_all_system_contracts\n@pytest.mark.valid_from(\"Cancun\")\ndef test_something_with_all_system_contracts(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    system_contract: Address,\n):\n    pass\n

    In this example, the test will be parameterized for parameter system_contract with value [0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02] for fork Cancun.

    "},{"location":"writing_tests/test_markers/#covariant-marker-keyword-arguments","title":"Covariant Marker Keyword Arguments","text":"

    All fork covariant markers accept the following keyword arguments:

    "},{"location":"writing_tests/test_markers/#selector","title":"selector","text":"

    A lambda function that can be used to filter the fork covariant values that are valid for this specific test.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\n\n@pytest.mark.with_all_tx_types(selector=lambda tx_type: tx_type != 2)\n@pytest.mark.valid_from(\"London\")\ndef test_something_with_all_tx_types(\n    state_test: StateTestFiller, \n    pre: Alloc,\n    tx_type: int\n):\n    pass\n

    Ideally, the lambda function should be used to explicitly filter out values that are not compatible with the test (exclusive filter), rather than explicitly selecting values (inclusive filter), as the parametrized values might change with future forks.

    "},{"location":"writing_tests/test_markers/#other-markers","title":"Other Markers","text":""},{"location":"writing_tests/test_markers/#pytestmarkslow","title":"@pytest.mark.slow","text":"

    This marker is used to mark tests that are slow to run. These tests are not run during tox testing, and are only run when a release is being prepared.

    "},{"location":"writing_tests/test_markers/#pytestmarkpre_alloc_modify","title":"@pytest.mark.pre_alloc_modify","text":"

    This marker is used to mark tests that modify the pre-alloc in a way that would be impractical to reproduce in a real-world scenario.

    Examples of this include:

    • Modifying the pre-alloc to have a balance of 2^256 - 1.
    • Address collisions that would require hash collisions.
    "},{"location":"writing_tests/test_markers/#pytestmarkskip","title":"@pytest.mark.skip()","text":"

    This marker can be used to skip a test.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\n\n@pytest.mark.skip(reason=\"Not implemented\")\ndef test_something(state_test: StateTestFiller, pre: Alloc):\n    pass\n
    "},{"location":"writing_tests/test_markers/#pytestmarkxfail","title":"@pytest.mark.xfail()","text":"

    This marker can be used to mark a test as expected to fail.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\n\n@pytest.mark.xfail(reason=\"EVM binary doesn't support this opcode\")\ndef test_something(state_test: StateTestFiller, pre: Alloc):\n    pass\n
    "},{"location":"writing_tests/types_of_tests/","title":"Types of tests","text":"

    There are currently two types of tests that can be produced by a test spec:

    1. State Tests
    2. Blockchain Tests
    "},{"location":"writing_tests/types_of_tests/#state-tests","title":"State Tests","text":"

    State tests span a single block and, ideally, a single transaction. For example:

    • Test a single opcode behavior.
    • Verify opcode gas costs.
    • Test interactions between multiple smart contracts.
    • Test creation of smart contracts.
    "},{"location":"writing_tests/types_of_tests/#blockchain-tests","title":"Blockchain Tests","text":"

    Blockchain tests span multiple blocks which may or may not contain transactions and mainly focus on the block to block effects to the Ethereum state. For example:

    • Verify system-level operations such as coinbase balance updates or withdrawals.
    • Verify fork transitions.
    • Verify blocks with invalid transactions/properties are rejected.
    "},{"location":"writing_tests/types_of_tests/#fork-transition-tests","title":"Fork Transition Tests","text":"

    There is a special type of blockchain test that is used to test a fork transition. It's not executed for all possible forks, rather it targets exactly the blocks at the point of transition from one evm implementation to the next. This type of test must be marked with the valid_at_transition_to marker, for example:

    @pytest.mark.valid_at_transition_to(\"Cancun\")\ndef test_blob_type_tx_pre_fork(\n    blockchain_test: BlockchainTestFiller,\n    pre: Dict,\n    env: Environment,\n    blocks: List[Block],\n):\n    \"\"\"\n    Reject blocks with blobs before blobs fork\n    \"\"\"\n
    "},{"location":"writing_tests/verifying_changes/","title":"Verifying Changes","text":"

    The tox tool can be executed locally to check that local changes won't cause Github Actions Checks to fail.

    Pre-commit

    Tox can be ran as a git pre-commit hook, see Enabling Pre-Commit Checks.

    "},{"location":"writing_tests/verifying_changes/#executing-tox","title":"Executing tox","text":""},{"location":"writing_tests/verifying_changes/#prerequisites","title":"Prerequisites","text":"
    python -m venv ./venv/\nsource ./venv/bin/activate\npip install tox\n
    "},{"location":"writing_tests/verifying_changes/#execution","title":"Execution","text":"

    Run tox, as executed in Github Actions, with:

    tox run-parallel\n

    or, with sequential test environment execution and verbose output as:

    tox\n

    This executes all the environments described in the next section.

    Tox Virtual Environment

    The checks performed by tox are sandboxed in their own virtual environments (which are created automatically in the .tox/ subdirectory). These can be used to debug errors encountered during tox execution.

    Whilst we create a virtual environment in the code snippet above, it's only to install the tox tool itself.

    "},{"location":"writing_tests/verifying_changes/#executing-tox-environments-individually","title":"Executing tox Environments Individually","text":"

    There are three tox environments available:

    1. framework: Lint and test framework and libraries related code in src/.
    2. tests: Lint and test the test cases in tests/ (runs fill on all forks deployed to mainnet).
    3. docs: Lint and spell-check markdown in docs/; build docs.

    For targeted tox runs locally, each environment can be ran separately as described below.

    "},{"location":"writing_tests/verifying_changes/#test-case-verification-tests","title":"Test Case Verification: tests","text":"

    Verify:

    tox -e tests\n
    "},{"location":"writing_tests/verifying_changes/#framework-verification-framework","title":"Framework Verification: framework","text":"

    Verify:

    tox -e framework\n
    "},{"location":"writing_tests/verifying_changes/#documentation-verification-docs","title":"Documentation Verification: docs","text":"

    This environment runs pyspelling and markdownlint-cli2 in a \"soft fail\" mode because they require external (non-python) packages. This allows developers who aren't working on documentation to execute tox locally without additional overhead. These commands are, however, ran as part of the checks in Github Actions.

    Additional, optional prerequisites:

    1. pyspelling:

      sudo apt-get install aspell aspell-en\n
    2. markdownlint-cli2:

      sudo apt install nodejs\nsudo npm install markdownlint-cli2 --global\n

      Or use a specific node version using nvm, for example.

    Verify:

    tox -e docs\n
    "},{"location":"writing_tests/verifying_changes/#verifying-fixture-changes","title":"Verifying Fixture Changes","text":"

    When writing a PR that modifies either the framework or test cases, it is important to verify that the changes do not cause any issues with the existing test cases.

    All filled fixtures contain a hash field in the _info object, which is the hash of the json string of the fixture. This hash can be used to verify that the fixture has not changed.

    The hasher command can be used to bulk-verify the hashes of all fixtures in a directory.

    It has the following options:

    Flag Description --files / -f Prints a single combined hash per each JSON fixture file recursively contained in a directory. --tests / -t Prints the hash of every single test vector in every JSON fixture file recursively contained in a directory. --root / -r Prints a single combined hash for all JSON fixture files recursively contained in a directory.

    For a quick comparison between two fixture directories, the --root option can be used and if the output matches, it means the fixtures in the directories are identical:

    hasher --root fixtures/\nhasher --root fixtures_new/\n

    If the output does not match, the --files option can be used to identify which files are different:

    diff <(hasher --files fixtures/) <(hasher --files fixtures_new/)\n

    And the --tests option can be used for an even more granular comparison:

    diff <(hasher --tests fixtures/) <(hasher --tests fixtures_new/)\n
    "},{"location":"writing_tests/writing_a_new_test/","title":"Writing a New Test","text":""},{"location":"writing_tests/writing_a_new_test/#test-functions","title":"Test Functions","text":"

    Every test case is defined as a python function that defines a single StateTest or BlockchainTest by using one of the state_test or blockchain_test objects made available by the framework. Test cases, respectively test modules, must fulfill the following requirements:

    Requirement When Be decorated with validity markers If the test case is not valid for all forks Use one of state_test or blockchain_test in its function arguments Always Call the state_test or blockchain_test in its test body Always Add a reference version of the EIP spec under test Test path contains eip"},{"location":"writing_tests/writing_a_new_test/#specifying-which-forks-tests-are-valid-for","title":"Specifying which Forks Tests are Valid For","text":"

    Test cases can (and it most cases should) be decorated with one or more \"validity markers\" that define which the forks the test is valid for. This is achieved by applying:

    • pytest.mark.valid_from(FORK) and/or pytest.mark.valid_until(FORK)

    or

    • pytest.mark.valid_at_transition_to(FORK)

    markers on either the test function, test class or test module level:

    FunctionClassModule
    import pytest\n\n@pytest.mark.valid_from(\"Berlin\")\n@pytest.mark.valid_until(\"London\")\ndef test_access_list(state_test: StateTestFiller, fork: Fork):\n
    import pytest\n\n\n@pytest.mark.valid_from(\"Shanghai\")\nclass TestMultipleWithdrawalsSameAddress:\n
    import pytest\n\npytestmark = pytest.mark.valid_from(\"Shanghai\")\n

    The ethereum_test_forks package defines the available forks and provides the following helpers that return all forks within the specified range:

    • forks_from
    • forks_from_until
    "},{"location":"writing_tests/writing_a_new_test/#the-state_test-and-blockchain_test-test-function-arguments","title":"The state_test and blockchain_test Test Function Arguments","text":"

    The test function's signature must contain exactly one of either a state_test or blockchain_test argument.

    For example, for state tests:

    def test_access_list(state_test: StateTestFiller):\n

    and for blockchain tests:

    def test_contract_creating_tx(\n    blockchain_test: BlockchainTestFiller, fork: Fork, initcode: Initcode\n):\n

    The state_test and blockchain_test objects are actually wrapper classes to the StateTest, respectively BlockchainTest objects, that once called actually instantiate a new instance of these objects and fill the test case using the evm tool according to the pre and post states and the transactions defined within the test.

    "},{"location":"writing_tests/writing_a_new_test/#statetest-object","title":"StateTest Object","text":"

    The StateTest object represents a single test vector, and contains the following attributes:

    • env: Environment object which describes the global state of the blockchain before the test starts.
    • pre: Pre-State containing the information of all Ethereum accounts that exist before any transaction is executed.
    • post: Post-State containing the information of all Ethereum accounts that are created or modified after all transactions are executed.
    • txs: All transactions to be executed during test execution.
    "},{"location":"writing_tests/writing_a_new_test/#blockchaintest-object","title":"BlockchainTest Object","text":"

    The BlockchainTest object represents a single test vector that evaluates the Ethereum VM by attempting to append multiple blocks to the chain:

    • pre: Pre-State containing the information of all Ethereum accounts that exist before any block is executed.
    • post: Post-State containing the information of all Ethereum accounts that are created or modified after all blocks are executed.
    • blocks: All blocks to be appended to the blockchain during the test.
    "},{"location":"writing_tests/writing_a_new_test/#prepost-state-of-the-test","title":"Pre/Post State of the Test","text":"

    The pre and post states are elemental to setup and then verify the outcome of the state test.

    Both pre and post are mappings of account addresses to account structures (see more info).

    A single test vector can contain as many accounts in the pre and post states as required, and they can be also filled dynamically.

    storage of an account is a key/value dictionary, and its values are integers within range of [0, 2**256 - 1].

    txs are the steps which transform the pre-state into the post-state and must perform specific actions within the accounts (smart contracts) that result in verifiable changes to the balance, nonce, and/or storage in each of them.

    post is compared against the outcome of the client after the execution of each transaction, and any differences are considered a failure

    When designing a test, all the changes must be ideally saved into the contract's storage to be able to verify them in the post-state.

    "},{"location":"writing_tests/writing_a_new_test/#test-transactions","title":"Test Transactions","text":"

    Transactions can be crafted by sending them with specific data or to a specific account, which contains the code to be executed

    Transactions can also create more accounts, by setting the to field to an empty string.

    Transactions can be designed to fail, and a verification must be made that the transaction fails with the specific error that matches what is expected by the test.

    "},{"location":"writing_tests/writing_a_new_test/#writing-code-for-the-accounts-in-the-test","title":"Writing code for the accounts in the test","text":"

    Account bytecode can be embedded in the test accounts by adding it to the code field of the account object, or the data field of the tx object if the bytecode is meant to be treated as init code or call data.

    The code can be in either of the following formats:

    • bytes object, representing the raw opcodes in binary format.
    • str, representing an hexadecimal format of the opcodes.
    • Code compilable object.

    Currently supported built-in compilable objects are:

    • Yul object containing Yul source code.

    Code objects can be concatenated together by using the + operator.

    "},{"location":"writing_tests/writing_a_new_test/#verifying-the-accounts-post-states","title":"Verifying the Accounts' Post States","text":"

    The state of the accounts after all blocks/transactions have been executed is the way of verifying that the execution client actually behaves like the test expects.

    During their filling process, all tests automatically verify that the accounts specified in their post property actually match what was returned by the transition tool.

    Within the post dictionary object, an account address can be:

    • None: The account will not be checked for absence or existence in the result returned by the transition tool.
    • Account object: The test expects that this account exists and also has properties equal to the properties specified by the Account object.
    • Account.NONEXISTENT: The test expects that this account does not exist in the result returned by the transition tool, and if the account exists, it results in error. E.g. when the transaction creating a contract is expected to fail and the test wants to verify that the address where the contract was supposed to be created is indeed empty.
    "},{"location":"writing_tests/writing_a_new_test/#the-account-object","title":"The Account object","text":"

    The Account object is used to specify the properties of an account to be verified in the post state.

    The python representation can be found in src/ethereum_test_types/types.py.

    It can verify the following properties of an account:

    • nonce: the scalar value equal to a) the number of transactions sent by an Externally Owned Account, b) the amount of contracts created by a contract.

    • balance: the amount of Wei (10-18 Eth) the account has.

    • code: Bytecode contained by the account. To verify that an account contains no code, this property needs to be set to \"0x\" or \"\".

    It is not recommended to verify Yul compiled code in the output account, because the bytecode can change from version to version.

    • storage: Storage within the account represented as a dict object. All storage keys that are expected to be set must be specified, and if a key is skipped, it is implied that its expected value is zero. Setting this property to {} (empty dict), means that all the keys in the account must be unset (equal to zero).

    All account's properties are optional, and they can be skipped or set to None, which means that no check will be performed on that specific account property.

    "},{"location":"writing_tests/writing_a_new_test/#verifying-correctness-of-the-new-test","title":"Verifying correctness of the new test","text":"

    A well written test performs a single verification output at a time.

    A verification output can be a single storage slot, the balance of an account, or a newly created contract.

    It is not recommended to use balance changes to verify test correctness, as it can be easily affected by gas cost changes in future EIPs.

    The best way to verify a transaction/block execution outcome is to check its storage.

    A test can be written as a negative verification. E.g. a contract is not created, or a transaction fails to execute or runs out of gas.

    This kind of verification must be carefully crafted because it is possible to end up having a false positive result, which means that the test passed but the intended verification was never made.

    To avoid these scenarios, it is important to have a separate verification to check that test is effective. E.g. when a transaction is supposed to fail, it is necessary to check that the failure error is actually the one expected by the test.

    "},{"location":"writing_tests/writing_a_new_test/#failing-or-invalid-transactions","title":"Failing or invalid transactions","text":"

    Transactions included in a StateTest are expected to be intrinsically valid, i.e. the account sending the transaction must have enough funds to cover the gas costs, the max fee of the transaction must be equal or higher than the base fee of the block, etc.

    An intrinsically valid transaction can still revert during its execution.

    Blocks in a BlockchainTest can contain intrinsically invalid transactions but in this case the block is expected to be completely rejected, along with all transactions in it, including other valid transactions.

    "},{"location":"writing_tests/writing_a_new_test/#parametrizing-tests","title":"Parametrizing tests","text":"

    Tests can be parametrized by using the @pytest.mark.parametrize decorator.

    Example:

    import pytest\n\n@pytest.mark.parametrize(\n    \"tx_value,expected_balance\",\n    [\n        pytest.param(0, 0, id=\"zero-value\"),\n        pytest.param(100, 100, id=\"non-zero-value\"),\n    ],\n)\ndef test_contract_creating_tx(\n    blockchain_test: BlockchainTestFiller, fork: Fork, tx_value: int, expected_balance: int\n):\n

    This will run the test twice, once with tx_value set to 0 and expected_balance set to 0, and once with tx_value set to 100 and expected_balance set to 100.

    The fork fixture is automatically provided by the framework and contains the current fork under test, and does not need to be parametrized.

    Tests can also be automatically parametrized with appropriate fork covariant values using the with_all_* markers listed in the Test Markers page.

    "},{"location":"writing_tests/writing_a_new_test/#the-extend_with_defaults-utility","title":"The extend_with_defaults Utility","text":"

    Extends test cases with default parameter values.

    This utility function extends test case parameters by adding default values from the defaults dictionary to each case in the cases list. If a case already specifies a value for a parameter, its default is ignored.

    This function is particularly useful in scenarios where you want to define a common set of default values but allow individual test cases to override them as needed.

    The function returns a dictionary that can be directly unpacked and passed to the @pytest.mark.parametrize decorator.

    Parameters:

    Name Type Description Default defaults Dict[str, Any]

    A dictionary of default parameter names and their values. These values will be added to each case unless the case already defines a value for each parameter.

    required cases List[ParameterSet]

    A list of pytest.param objects representing different test cases. Its first argument must be a dictionary defining parameter names and values.

    required parametrize_kwargs Any

    Additional keyword arguments to be passed to @pytest.mark.parametrize. These arguments are not modified by this function and are passed through unchanged.

    {}

    Returns:

    Type Description Dict[str, Any]

    Dict[str, Any]: A dictionary with the following structure: argnames: A list of parameter names. argvalues: A list of test cases with modified parameter values. parametrize_kwargs: Additional keyword arguments passed through unchanged.

    Example
    @pytest.mark.parametrize(**extend_with_defaults(\n    defaults=dict(\n        min_value=0,  # default minimum value is 0\n        max_value=100,  # default maximum value is 100\n        average=50,  # default average value is 50\n    ),\n    cases=[\n        pytest.param(\n            dict(),  # use default values\n            id='default_case',\n        ),\n        pytest.param(\n            dict(min_value=10),  # override with min_value=10\n            id='min_value_10',\n        ),\n        pytest.param(\n            dict(max_value=200),  # override with max_value=200\n            id='max_value_200',\n        ),\n        pytest.param(\n            dict(min_value=-10, max_value=50),  # override both min_value\n            # and max_value\n            id='min_-10_max_50',\n        ),\n        pytest.param(\n            dict(min_value=20, max_value=80, average=50),  # all defaults\n            # are overridden\n            id=\"min_20_max_80_avg_50\",\n        ),\n        pytest.param(\n            dict(min_value=100, max_value=0),  # invalid range\n            id='invalid_range',\n            marks=pytest.mark.xfail(reason='invalid range'),\n        )\n    ],\n))\ndef test_range(min_value, max_value, average):\n    assert min_value <= max_value\n    assert min_value <= average <= max_value\n

    The above test will execute with the following sets of parameters:

    \"default_case\": {\"min_value\": 0, \"max_value\": 100, \"average\": 50}\n\"min_value_10\": {\"min_value\": 10, \"max_value\": 100, \"average\": 50}\n\"max_value_200\": {\"min_value\": 0, \"max_value\": 200, \"average\": 50}\n\"min_-10_max_50\": {\"min_value\": -10, \"max_value\": 50, \"average\": 50}\n\"min_20_max_80_avg_50\": {\"min_value\": 20, \"max_value\": 80, \"average\": 50}\n\"invalid_range\": {\"min_value\": 100, \"max_value\": 0, \"average\": 50}  # expected to fail\n
    Notes
    • Each case in cases must contain exactly one value, which is a dictionary of parameter values.
    • The function performs an in-place update of the cases list, so the original cases list is modified.
    Source code in src/ethereum_test_tools/utility/pytest.py
    def extend_with_defaults(\n    defaults: Dict[str, Any], cases: List[ParameterSet], **parametrize_kwargs: Any\n) -> Dict[str, Any]:\n    \"\"\"\n    Extends test cases with default parameter values.\n\n    This utility function extends test case parameters by adding default values\n    from the `defaults` dictionary to each case in the `cases` list. If a case\n    already specifies a value for a parameter, its default is ignored.\n\n    This function is particularly useful in scenarios where you want to define\n    a common set of default values but allow individual test cases to override\n    them as needed.\n\n    The function returns a dictionary that can be directly unpacked and passed\n    to the `@pytest.mark.parametrize` decorator.\n\n    Args:\n        defaults (Dict[str, Any]): A dictionary of default parameter names and\n            their values. These values will be added to each case unless the case\n            already defines a value for each parameter.\n        cases (List[ParameterSet]): A list of `pytest.param` objects representing\n            different test cases. Its first argument must be a dictionary defining\n            parameter names and values.\n        parametrize_kwargs (Any): Additional keyword arguments to be passed to\n            `@pytest.mark.parametrize`. These arguments are not modified by this\n            function and are passed through unchanged.\n\n    Returns:\n        Dict[str, Any]: A dictionary with the following structure:\n            `argnames`: A list of parameter names.\n            `argvalues`: A list of test cases with modified parameter values.\n            `parametrize_kwargs`: Additional keyword arguments passed through unchanged.\n\n\n    Example:\n        ```python\n        @pytest.mark.parametrize(**extend_with_defaults(\n            defaults=dict(\n                min_value=0,  # default minimum value is 0\n                max_value=100,  # default maximum value is 100\n                average=50,  # default average value is 50\n            ),\n            cases=[\n                pytest.param(\n                    dict(),  # use default values\n                    id='default_case',\n                ),\n                pytest.param(\n                    dict(min_value=10),  # override with min_value=10\n                    id='min_value_10',\n                ),\n                pytest.param(\n                    dict(max_value=200),  # override with max_value=200\n                    id='max_value_200',\n                ),\n                pytest.param(\n                    dict(min_value=-10, max_value=50),  # override both min_value\n                    # and max_value\n                    id='min_-10_max_50',\n                ),\n                pytest.param(\n                    dict(min_value=20, max_value=80, average=50),  # all defaults\n                    # are overridden\n                    id=\"min_20_max_80_avg_50\",\n                ),\n                pytest.param(\n                    dict(min_value=100, max_value=0),  # invalid range\n                    id='invalid_range',\n                    marks=pytest.mark.xfail(reason='invalid range'),\n                )\n            ],\n        ))\n        def test_range(min_value, max_value, average):\n            assert min_value <= max_value\n            assert min_value <= average <= max_value\n        ```\n\n    The above test will execute with the following sets of parameters:\n\n    ```python\n    \"default_case\": {\"min_value\": 0, \"max_value\": 100, \"average\": 50}\n    \"min_value_10\": {\"min_value\": 10, \"max_value\": 100, \"average\": 50}\n    \"max_value_200\": {\"min_value\": 0, \"max_value\": 200, \"average\": 50}\n    \"min_-10_max_50\": {\"min_value\": -10, \"max_value\": 50, \"average\": 50}\n    \"min_20_max_80_avg_50\": {\"min_value\": 20, \"max_value\": 80, \"average\": 50}\n    \"invalid_range\": {\"min_value\": 100, \"max_value\": 0, \"average\": 50}  # expected to fail\n    ```\n\n    Notes:\n        - Each case in `cases` must contain exactly one value, which is a dictionary\n          of parameter values.\n        - The function performs an in-place update of the `cases` list, so the\n          original `cases` list is modified.\n    \"\"\"\n    for i, case in enumerate(cases):\n        if not (len(case.values) == 1 and isinstance(case.values[0], dict)):\n            raise ValueError(\n                \"each case must contain exactly one value; a dict of parameter values\"\n            )\n        if set(case.values[0].keys()) - set(defaults.keys()):\n            raise UnknownParameterInCasesError()\n        # Overwrite values in defaults if the parameter is present in the test case values\n        merged_params = {**defaults, **case.values[0]}  # type: ignore\n        cases[i] = pytest.param(*merged_params.values(), id=case.id, marks=case.marks)\n\n    return {\"argnames\": list(defaults), \"argvalues\": cases, **parametrize_kwargs}\n
    "}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Execution Spec Tests","text":"

    ethereum/execution-spec-tests is both a collection of test cases and a framework in Python to generate tests for Ethereum execution clients implemented.

    The framework collects and executes the test cases in order to generate test fixtures (JSON) which can be consumed by any execution client to verify their implementation of ethereum/execution-specs. The fixtures, which define state transition and block tests, are generated by the framework using one of the t8n command-line tools that are provided by most execution clients, see below for an overview of the supported t8n tools.

    ---\ntitle: Test Fixture Generation with execution-spec-tests\n---\nflowchart LR\n  style C stroke:#333,stroke-width:2px\n  style D stroke:#333,stroke-width:2px\n  style G stroke:#F9A825,stroke-width:2px\n  style H stroke:#F9A825,stroke-width:2px\n\n  subgraph ethereum/go-ethereum\n    C[<code>evm t8n</code>\\nexternal executable]\n  end\n\n  subgraph ethereum/solidity\n    D[<code>solc</code>\\nexternal executable]\n  end\n\n  subgraph ethereum/EIPs\n    E(<code>EIPS/EIP-*.md</code>\\nSHA digest via Github API)\n  end\n\n  subgraph \"ethereum/execution-spec-tests\"\n    A(<code>./tests/**/*.py</code>\\nPython Test Cases)\n    B([<code>$ fill ./tests/</code>\\nPython Framework])\n  end\n\n  subgraph Test Fixture Consumers\n    subgraph ethereum/hive\n      G([<code>$ hive ...</code>\\nGo Test Framework])\n    end\n    H([Client executables])\n  end\n\n  C <-.-> B  \n  D <-.-> B\n  A --> B\n  E <-.-> |retrieve latest spec version\\ncheck tested spec version| B\n  B -->|output| F(<code>./fixtures/**/*.json</code>\\nJSON Test Fixtures)\n  F -->|input| G\n  F -->|input| H

    The generated test fixtures can be used:

    1. Directly by client teams' test frameworks, and,
    2. In the integration tests executed in the ethereum/hive framework.

    More information on how to use and download the released test fixtures can be found here.

    "},{"location":"#transition-tool-support","title":"Transition Tool Support","text":"

    The following transition tools are supported by the framework:

    Client t8n Tool Tracing Support ethereum/evmone evmone-t8n Yes ethereum/execution-specs ethereum-spec-evm Yes ethereum/go-ethereum evm t8n Yes hyperledger/besu evmtool t8n-server Yes status-im/nimbus-eth1 t8n Yes"},{"location":"#relationship-to-ethereumtests","title":"Relationship to ethereum/tests","text":"

    This collection of tests is relatively new (test case development started Q4, 2022) and mainly targets recent and upcoming Ethereum specification changes. It does not replace, but rather complements the existing tests in ethereum/tests.

    "},{"location":"#motivation","title":"Motivation","text":"

    The motivation to implement test cases in ethereum/execution-spec-tests is:

    1. To implement test cases as code and ensure that changes, due to spec changes, for example, can be easily made. Moreover, changes are easily understandable and available in version control.
    2. To avoid the 2-step approach often used in ethereum/tests:
      1. Code (often unavailable) -> Test case (YAML).
      2. Test case (YAML) -> Fixtures (JSON).

    Contributing

    Contributions via PR are welcome!

    "},{"location":"CHANGELOG/","title":"Changelog","text":"

    Test fixtures for use by clients are available for each release on the Github releases page.

    Key: \u2728 = New, \ud83d\udc1e = Fixed, \ud83d\udd00 = Changed, \ud83d\udca5 = Breaking change.

    "},{"location":"CHANGELOG/#unreleased-2024-xx-xx","title":"\ud83d\udd1c Unreleased - 2024-XX-XX","text":""},{"location":"CHANGELOG/#test-cases","title":"\ud83e\uddea Test Cases","text":"
    • \u2728 EIP-4844 test tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py includes an EOF test case (#610).
    • \u2728 Example test tests/frontier/opcodes/test_dup.py now includes EOF parametrization (#610).
    • \u2728 Convert all opcodes validation test tests/frontier/opcodes/test_all_opcodes.py (#748).
    "},{"location":"CHANGELOG/#framework","title":"\ud83d\udee0\ufe0f Framework","text":"
    • \ud83d\udc1e Fixed consume hive commands from spawning different hive test suites during the same test execution when using xdist (#712).
    • \u2728 consume hive command is now available to run all types of hive tests (#712).
    • \u2728 Generated fixtures now contain the test index index.json by default (#716).
    • \u2728 A metadata folder .meta/ now stores all fixture metadata files by default (#721).
    • \ud83d\udc1e Fixed fill command index generation issue due to concurrency (#725).
    • \u2728 Added with_all_evm_code_types, with_all_call_opcodes and with_all_create_opcodes markers, which allow automatic parametrization of tests to EOF (#610, #739).
    • \u2728 Added with_all_system_contracts marker, which helps parametrize tests with all contracts that affect the chain on a system level (#739).
    • \u2728 Code generators Conditional and Switch now support EOF by adding parameter evm_code_type (#610).
    • \u2728 fill command now supports parameter --evm-code-type that can be (currently) set to legacy or eof_v1 to force all test smart contracts to deployed in normal or in EOF containers (#610).
    • \ud83d\udc1e Fixed fixture index generation on EOF tests (#728).
    • \ud83d\udc1e Fixes consume genesis mismatch exception for hive based simulators (#734).
    • \u2728 Adds reproducible consume commands to hiveview (#717).
    • \ud83d\udca5 Added multiple exceptions to the EOF fixture format (#759).
    • \u2728 Added optional parameter to all with_all_* markers to specify a lambda function that filters the parametrized values (#739).
    • \u2728 Added extend_with_defaults utility function, which helps extend test case parameter sets with default values. @pytest.mark.parametrize (#739).
    • \u2728 Added Container.Init to ethereum_test_types.EOF.V1 package, which allows generation of an EOF init container more easily (#739).
    • \u2728 Introduce method valid_opcodes() to the fork class (#748).
    • \ud83d\udc1e Fixed consume exit 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).
    • \u2728 Added a new flag --solc-version to the fill command, 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 by fill via solc-select (#772).
    • \ud83d\udc1e Fix usage of multiple @pytest.mark.with_all* markers which shared parameters, such as with_all_call_opcodes and with_all_create_opcodes which shared evm_code_type, and now only parametrize compatible values (#762).
    • \u2728 Added selector and marks fields 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).
    "},{"location":"CHANGELOG/#evm-tools","title":"\ud83d\udd27 EVM Tools","text":""},{"location":"CHANGELOG/#misc","title":"\ud83d\udccb Misc","text":"
    • \u2728 Feature releases can now include multiple types of fixture tarball files from different releases that start with the same prefix (#736).
    • \u2728 Releases for feature eip7692 now include both Cancun and Prague based tests in the same release, in files fixtures_eip7692.tar.gz and fixtures_eip7692-prague.tar.gz respectively (#743).
    • \ud83d\udd00 Simplify Python project configuration and consolidate it into pyproject.toml (#764).
    "},{"location":"CHANGELOG/#breaking-change","title":"\ud83d\udca5 Breaking Change","text":"
    • The EOF fixture format contained in eof_tests may now contain multiple exceptions in the \"exception\" field in the form of a pipe (|) separated string (#759).
    "},{"location":"CHANGELOG/#v300-2024-07-22","title":"v3.0.0 - 2024-07-22","text":""},{"location":"CHANGELOG/#test-cases_1","title":"\ud83e\uddea Test Cases","text":"
    • \u2728 Port create2 return data test (#497).
    • \u2728 Add tests for eof container's section bytes position smart fuzzing (#592).
    • \u2728 Add test_create_selfdestruct_same_tx_increased_nonce which tests self-destructing a contract with a nonce > 1 (#478).
    • \u2728 Add test_double_kill and test_recreate which test resurrection of accounts killed with SELFDESTRUCT (#488).
    • \u2728 Add eof example valid invalid tests from ori, fetch EOF Container implementation (#535).
    • \u2728 Add tests for EIP-2537: Precompile for BLS12-381 curve operations (#499).
    • \u2728 EIP-663: Add test_dupn.py and test_swapn.py (#502).
    • \u2728 Add tests for EIP-6110: Supply validator deposits on chain (#530).
    • \u2728 Add tests for EIP-7002: Execution layer triggerable withdrawals (#530).
    • \u2728 Add tests for EIP-7685: General purpose execution layer requests (#530).
    • \u2728 Add tests for EIP-2935: Serve historical block hashes from state (#564, #585).
    • \u2728 Add tests for EIP-4200: EOF - Static relative jumps (#581, #666).
    • \u2728 Add tests for EIP-7069: EOF - Revamped CALL instructions (#595).
    • \ud83d\udc1e Fix typos in self-destruct collision test from erroneous pytest parametrization (#608).
    • \u2728 Add tests for EIP-3540: EOF - EVM Object Format v1 (#634, #668).
    • \ud83d\udd00 Update EIP-7002 tests to match spec changes in ethereum/execution-apis#549 (#600)
    • \u2728 Convert a few eip1153 tests from ethereum/tests repo into .py (#440).
    • \u2728 Add tests for EIP-7480: EOF - Data section access instructions (#518, #664).
    • \u2728 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).
    • \u2728 Add tests for runtime stack overflow at CALLF instruction from EIP-4750: EOF - Functions (#678).
    • \u2728 Add tests for runtime stack overflow at JUMPF instruction from EIP-6206: EOF - JUMPF and non-returning functions (#690).
    • \u2728 Add tests for Devnet-1 version of EIP-7702: Set EOA account code (#621)
    "},{"location":"CHANGELOG/#framework_1","title":"\ud83d\udee0\ufe0f Framework","text":"
    • \ud83d\udc1e Fix incorrect != operator for FixedSizeBytes (#477).
    • \u2728 Add Macro enum that represents byte sequence of Op instructions (#457)
    • \u2728 Number of parameters used to call opcodes (to generate bytecode) is now checked (#492).
    • \u2728 Libraries have been refactored to use pydantic for type checking in most test types (#486, #501, #508).
    • \u2728 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)
    • \u2728 Added EOF fixture format (#512).
    • \u2728 Verify filled EOF fixtures using evmone-eofparse during fill execution (#519).
    • \u2728 Added --traces support when running with Hyperledger Besu (#511).
    • \u2728 Use pytest's \"short\" traceback style (--tb=short) for failure summaries in the test report for more compact terminal output (#542).
    • \u2728 The fill command now generates HTML test reports with links to the JSON fixtures and debug information (#537).
    • \u2728 Add an Ethereum RPC client class for use with consume commands (#556).
    • \u2728 Add a \"slow\" pytest marker, in order to be able to limit the filled tests until release (#562).
    • \u2728 Add a CLI tool that generates blockchain tests as Python from a transaction hash (#470, #576).
    • \u2728 Add more Transaction and Block exceptions from existing ethereum/tests repo (#572).
    • \u2728 Add \"description\" and \"url\" fields containing test case documentation and a source code permalink to fixtures during fill and use them in consume-generated Hive test reports (#579).
    • \u2728 Add git workflow evmone coverage script for any new lines mentioned in converted_ethereum_tests.txt (#503).
    • \u2728 Add a new covariant marker with_all_contract_creating_tx_types that allows automatic parametrization of a test with all contract-creating transaction types at the current executing fork (#602).
    • \u2728 Tests are now encouraged to declare a pre: Alloc parameter to get the pre-allocation object for the test, and use pre.deploy_contract and pre.fund_eoa to deploy contracts and fund accounts respectively, instead of declaring the pre as a dictionary or modifying its contents directly (see the state test tutorial for an updated example) (#584).
    • \u2728 Enable loading of ethereum/tests/BlockchainTests (#596).
    • \ud83d\udd00 Refactor gentest to use ethereum_test_tools.rpc.rpc by adding to get_transaction_by_hash, debug_trace_call to EthRPC (#568).
    • \u2728 Write a properties file to the output directory and enable direct generation of a fixture tarball from fill via --output=fixtures.tgz(#627).
    • \ud83d\udd00 ethereum_test_tools library has been split into multiple libraries (#645).
    • \u2728 Add the consume engine simulator and refactor the consume simulator suite. (#691).
    • \ud83d\udc1e Prevents forcing consume to use stdin as an input when running from hive. (#701).
    "},{"location":"CHANGELOG/#misc_1","title":"\ud83d\udccb Misc","text":"
    • \ud83d\udc1e Fix CI by using Golang 1.21 in Github Actions to build geth (#484).
    • \ud83d\udca5 \"Merge\" has been renamed to \"Paris\" in the \"network\" field of the Blockchain tests, and in the \"post\" field of the State tests (#480).
    • \u2728 Port entry point scripts to use click and add tests (#483).
    • \ud83d\udca5 As part of the pydantic conversion, the fixtures have the following (possibly breaking) changes (#486):
    • State test field transaction now uses the proper zero-padded hex number format for fields maxPriorityFeePerGas, maxFeePerGas, and maxFeePerBlobGas
    • Fixtures' hashes (in the _info field) are now calculated by removing the \"_info\" field entirely instead of it being set to an empty dict.
    • \ud83d\udc1e Relax minor and patch dependency requirements to avoid conflicting package dependencies (#510).
    • \ud83d\udd00 Update all CI actions to use their respective Node.js 20 versions, ahead of their Node.js 16 version deprecations (#527).
    • \u2728 Releases now contain a fixtures_eip7692.tar.gz which contains all EOF fixtures (#573).
    • \u2728 Use solc-select for tox when running locally and within CI (#604).
    "},{"location":"CHANGELOG/#breaking-change_1","title":"\ud83d\udca5 Breaking Change","text":"
    • Cancun is now the latest deployed fork, and the development fork is now Prague (#489).
    • Stable fixtures artifact fixtures.tar.gz has been renamed to fixtures_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_newPayload format in the execution-apis specification (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).
    "},{"location":"CHANGELOG/#v211-2024-03-09","title":"v2.1.1 - 2024-03-09","text":""},{"location":"CHANGELOG/#test-cases_2","title":"\ud83e\uddea Test Cases","text":"
    • \ud83d\udc1e Dynamic create2 collision from different transactions same block (#430).
    • \ud83d\udc1e Fix beacon root contract deployment tests so the account in the pre-alloc is not empty (#425).
    • \ud83d\udd00 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)
    "},{"location":"CHANGELOG/#framework_2","title":"\ud83d\udee0\ufe0f Framework","text":"
    • \u2728 Adds two consume commands #339:

    • consume direct - Execute a test fixture directly against a client using a blocktest-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.

    • \u2728 Add Prague to forks (#419).

    • \u2728 Improve handling of the argument passed to solc --evm-version when compiling Yul code (#418).
    • \ud83d\udc1e Fix fill -m yul_test which failed to filter tests that are (dynamically) marked as a yul test (#418).
    • \ud83d\udd00 Helper methods to_address, to_hash and to_hash_bytes have been deprecated in favor of Address and Hash, which are automatically detected as opcode parameters and pushed to the stack in the resulting bytecode (#422).
    • \u2728 Opcodes enum now contains docstrings with each opcode description, including parameters and return values, which show up in many development environments (#424) @ThreeHrSleep.
    • \ud83d\udd00 Locally calculate state root for the genesis blocks in the blockchain tests instead of calling t8n (#450).
    • \ud83d\udc1e Fix bug that causes an exception during test collection because the fork parameter contains None (#452).
    • \u2728 The _info field in the test fixtures now contains a hash field, which is the hash of the test fixture, and a hasher script has been added which prints and performs calculations on top of the hashes of all fixtures (see hasher -h) (#454).
    • \u2728 Adds an optional verify_sync field to hive blockchain tests (EngineAPI). When set to true a second client attempts to sync to the first client that executed the tests (#431).
    • \ud83d\udc1e Fix manually setting the gas limit in the genesis test env for post genesis blocks in blockchain tests (#472).
    "},{"location":"CHANGELOG/#evm-tools_1","title":"\ud83d\udd27 EVM Tools","text":""},{"location":"CHANGELOG/#misc_2","title":"\ud83d\udccb Misc","text":"
    • \ud83d\udc1e Fix deprecation warnings due to outdated config in recommended VS Code project settings (#420).
    • \ud83d\udc1e Fix typo in the selfdestruct revert tests module (#421).
    "},{"location":"CHANGELOG/#v210-2024-01-29-cancun","title":"v2.1.0 - 2024-01-29: \ud83d\udc0d\ud83c\udfd6\ufe0f Cancun","text":"

    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.

    "},{"location":"CHANGELOG/#test-cases_3","title":"\ud83e\uddea Test Cases","text":"
    • \u2728 EIP-4844: Adds test_blob_gas_subtraction_tx() verifying the blob gas fee is subtracted from the sender before executing the blob tx (#407).
    "},{"location":"CHANGELOG/#framework_3","title":"\ud83d\udee0\ufe0f Framework","text":"
    • \ud83d\udc1e 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).
    "},{"location":"CHANGELOG/#misc_3","title":"\ud83d\udccb Misc","text":"
    • \u2728 Use run-parallel and shared wheel packages for tox (#408).
    "},{"location":"CHANGELOG/#v200-2024-01-25-cancun","title":"v2.0.0 - 2024-01-25: \ud83d\udc0d\ud83c\udfd6\ufe0f Cancun","text":"

    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 \"\ud83d\udca5 Breaking Changes\" section below for more information.

    "},{"location":"CHANGELOG/#test-cases_4","title":"\ud83e\uddea Test Cases","text":"
    • \u2728 EIP-4844: Add test_sufficient_balance_blob_tx() and test_sufficient_balance_blob_tx_pre_fund_tx() (#379).
    • \u2728 EIP-6780: Add a reentrancy suicide revert test (#372).
    • \u2728 EIP-1153: Add test_run_until_out_of_gas() for transient storage opcodes (#401).
    • \u2728 EIP-198: Add tests for the MODEXP precompile (#364).
    • \u2728 Tests for nested CALL and CALLCODE gas consumption with a positive value transfer (previously lacking coverage) (#371).
    • \ud83d\udc1e 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).
    • \ud83d\udc1e EIP-4844: Fixed test_insufficient_balance_blob_tx() to correctly calculate the minimum balance required for the accounts (#379).
    • \ud83d\udc1e EIP-4844: Fix and enable test_invalid_blob_tx_contract_creation (#379).
    • \ud83d\udd00 Convert all eligible BlockchainTests to StateTests (and additionally generate corresponding BlockchainTests) (#368, #370).
    "},{"location":"CHANGELOG/#framework_4","title":"\ud83d\udee0\ufe0f Framework","text":"
    • \u2728 Add StateTest fixture format generation; StateTests now generate a StateTest and a corresponding BlockchainTest test fixture, previously only BlockchainTest fixtures were generated (#368).
    • \u2728 Add StateTestOnly fixture format is now available and its only difference with StateTest is that it does not produce a BlockchainTest (#368).
    • \u2728 Add evm_bytes_to_python command-line utility which converts EVM bytecode to Python Opcodes (#357).
    • \u2728 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).
    • \u2728 Add solc 0.8.23 support (#373).
    • \u2728 Add framework unit tests for post state exception verification (#350).
    • \u2728 Add a helper class ethereum_test_tools.TestParameterGroup to define test parameters as dataclasses and auto-generate test IDs (#364).
    • \u2728 Add a --single-fixture-per-file flag to generate one fixture JSON file per test case (#331).
    • \ud83d\udc1e Storage type iterator is now fixed (#369).
    • \ud83d\udc1e Fix type coercion in FixtureHeader.join() (#398).
    • \ud83d\udd00 Locally calculate the transactions list's root instead of using the one returned by t8n when producing BlockchainTests (#353).
    • \ud83d\udd00 Change custom exception classes to dataclasses to improve testability (#386).
    • \ud83d\udd00 Update fork name from \"Merge\" to \"Paris\" used within the framework and tests (#363).
    • \ud83d\udca5 Replace = with _ in pytest node ids and test fixture names (#342).
    • \ud83d\udca5 The StateTest, spec format used to write tests, is now limited to a single transaction per test (#361).
    • \ud83d\udca5 Tests must now use BlockException and TransactionException to 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).
    • \ud83d\udca5 fill: Remove the --enable-hive flag; now all test types are generated by default (#358).
    • \ud83d\udca5 Rename test fixtures names to match the corresponding pytest node ID as generated using fill (#342).
    "},{"location":"CHANGELOG/#misc_4","title":"\ud83d\udccb Misc","text":"
    • \u2728 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).
    • \ud83d\udd00 Docs: Update t8n tool branch to fill tests for development features in the readme (#338).
    • \ud83d\udd00 Filling tool: Updated the default filling tool (t8n) to go-ethereum@master (#368).
    • \ud83d\udc1e Docs: Fix error banner in online docs due to mermaid syntax error (#398).
    • \ud83d\udc1e Docs: Fix incorrectly formatted nested lists in online doc (#403).
    "},{"location":"CHANGELOG/#breaking-changes","title":"\ud83d\udca5 Breaking Changes","text":"

    A concrete example of the test name renaming and change in directory structure is provided below.

    1. Fixture output, including release tarballs, now contain subdirectories for different test types:

    2. blockchain_tests: Contains BlockchainTest formatted tests

    3. blockchain_tests_hive: Contains BlockchainTest with Engine API call directives for use in hive
    4. state_tests: Contains StateTest formatted tests

    5. StateTest, spec format used to write tests, is now limited to a single transaction per test.

    6. 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.
    7. Produced blockchain_tests fixtures and their corresponding blockchain_tests_hive fixtures now contain the named exceptions BlockException and TransactionException as strings in the expectException and validationError fields, respectively. These exceptions can be used to test whether the client is hitting the proper exception when processing an invalid block.

    Blockchain test:

    \"blocks\": [\n      {\n         ...\n         \"expectException\": \"TransactionException.INSUFFICIENT_ACCOUNT_FUNDS\",\n         ...\n      }\n      ...\n]\n

    Blockchain hive test:

    \"engineNewPayloads\": [\n      {\n         ...\n         \"validationError\": \"TransactionException.INSUFFICIENT_ACCOUNT_FUNDS\",\n         ...\n      }\n      ...\n]\n
    "},{"location":"CHANGELOG/#renaming-and-release-tarball-directory-structure-change-example","title":"Renaming and Release Tarball Directory Structure Change Example","text":"

    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].

    1. Pytest node ID example:

    2. Previous node ID: tests/frontier/opcodes/test_dup.py::test_dup[fork=Frontier].

    3. New node ID: tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier].

    4. Fixture name example:

    5. Previous fixture name: 000-fork=Frontier

    6. New fixture name: tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier] (now the same as the pytest node ID).

    7. Fixture JSON file name example (within the release tarball):

    8. Previous fixture file name: fixtures/frontier/opcodes/dup/dup.json (BlockChainTest format).

    9. New fixture file names (all present within the release tarball):

      • fixtures/state_tests/frontier/opcodes/dup/dup.json (StateTest format).
      • fixtures/blockchain_tests/frontier/opcodes/dup/dup.json (BlockChainTest format).
      • fixtures/blockchain_tests_hive/frontier/opcodes/dup/dup.json (a blockchain test in HiveFixture format).
    "},{"location":"CHANGELOG/#v106-2023-10-19-cancun-devnet-10","title":"v1.0.6 - 2023-10-19: \ud83d\udc0d\ud83c\udfd6\ufe0f Cancun Devnet 10","text":""},{"location":"CHANGELOG/#test-cases_5","title":"\ud83e\uddea Test Cases","text":"
    • \ud83d\udd00 EIP-4844: Update KZG point evaluation test vectors to use data from the official KZG setup and Mainnet Trusted Setup (#336).
    "},{"location":"CHANGELOG/#framework_5","title":"\ud83d\udee0\ufe0f Framework","text":"
    • \ud83d\udd00 Fixtures: Add a non-RLP format field (rlp_decoded) to invalid blocks (#322).
    • \ud83d\udd00 Spec: Refactor state and blockchain spec (#307).
    "},{"location":"CHANGELOG/#evm-tools_2","title":"\ud83d\udd27 EVM Tools","text":"
    • \u2728 Run geth's evm blocktest command to verify JSON fixtures after test case execution (--verify-fixtures) (#325).
    • \u2728 Enable tracing support for ethereum-spec-evm (#289).
    "},{"location":"CHANGELOG/#misc_5","title":"\ud83d\udccb Misc","text":"
    • \u2728 Tooling: Add Python 3.12 support (#309).
    • \u2728 Process: Added a Github pull request template (#308).
    • \u2728 Docs: Changelog updated post release (#321).
    • \u2728 Docs: Add a section explaining execution-spec-tests release artifacts (#334).
    • \ud83d\udd00 T8N Tool: Branch used to generate the tests for Cancun is now lightclient/go-ethereum@devnet-10 (#336)
    "},{"location":"CHANGELOG/#breaking-change_2","title":"\ud83d\udca5 Breaking Change","text":"
    • Fixtures now use the Mainnet Trusted Setup merged on consensus-specs#3521 (#336)
    "},{"location":"CHANGELOG/#v105-2023-09-26-cancun-devnet-9-release-3","title":"v1.0.5 - 2023-09-26: \ud83d\udc0d\ud83c\udfd6\ufe0f Cancun Devnet 9 Release 3","text":"

    This release mainly serves to update the EIP-4788 beacon roots address to 0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02, as updated in ethereum/EIPs/pull/7672.

    "},{"location":"CHANGELOG/#test-cases_6","title":"\ud83e\uddea Test Cases","text":"
    • \ud83d\udc1e EIP-4844: Fix invalid blob txs pre-Cancun engine response (#306).
    • \u2728 EIP-4788: Final update to the beacon root address (#312).
    "},{"location":"CHANGELOG/#misc_6","title":"\ud83d\udccb Misc","text":"
    • \u2728 Docs: Changelog added (#305).
    • \u2728 CI/CD: Run development fork tests in Github Actions (#302).
    • \u2728 CI/CD: Generate test JSON fixtures on push (#303).
    "},{"location":"CHANGELOG/#breaking-change_3","title":"\ud83d\udca5 Breaking Change","text":"

    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
    "},{"location":"CHANGELOG/#v104-2023-09-21-cancun-devnet-9-release-2","title":"v1.0.4 - 2023-09-21: \ud83d\udc0d Cancun Devnet 9 Release 2","text":"

    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.

    "},{"location":"CHANGELOG/#test-cases_7","title":"\ud83e\uddea Test Cases","text":"
    • \u2728 EIP-7516: BLOBBASEFEE opcode: Add first and comprehensive tests (@marioevz in #294).
    • \u2728 EIP-4788: Beacon block root in the EVM: Increase coverage (@spencer-tb in #297).
    • \ud83d\udc1e EIP-1153: Transient storage opcodes: Remove conftest '+1153' in network field (@spencer-tb in #299).
    "},{"location":"CHANGELOG/#framework_6","title":"\ud83d\udee0\ufe0f Framework","text":"
    • \ud83d\udd00 EIP-4788: Beacon root contract is pre-deployed at 0xbEAC020008aFF7331c0A389CB2AAb67597567d7a (@spencer-tb in #297).
    • \u2728 Deprecate empty accounts within framework (@spencer-tb in #300).
    • \u2728 Fixture generation split based on hive specificity (@spencer-tb in #301).
    • \ud83d\udca5 fill: --disable-hive flag removed; replaced by --enable-hive (@spencer-tb in #301).
    • \u2728 Add engine API forkchoice updated information in fixtures (@spencer-tb in #256).
    "},{"location":"CHANGELOG/#v103-2023-09-14-cancun-devnet-9-release","title":"v1.0.3 - 2023-09-14: \ud83d\udc0d Cancun Devnet 9 Release","text":"

    See v1.0.3.

    "},{"location":"CHANGELOG/#v102-2023-08-11-cancun-devnet-8-4788-v2-pre-release","title":"v1.0.2 - 2023-08-11: \ud83d\udc0d Cancun Devnet 8 + 4788 v2 Pre-Release","text":"

    See v1.0.2.

    "},{"location":"CHANGELOG/#v101-2023-08-03-cancun-devnet-8-pre-release","title":"v1.0.1 - 2023-08-03: \ud83d\udc0d Cancun Devnet-8 Pre-Release","text":"

    See v1.0.1.

    "},{"location":"CHANGELOG/#v100-2023-06-27-welcome-to-the-pytest-era","title":"v1.0.0 - 2023-06-27: \ud83e\uddea Welcome to the Pytest Era","text":"

    See v1.0.0.

    Older releases can be found on the releases page.

    "},{"location":"changelog_section_template/","title":"Changelog Section Template","text":"

    The following can be copy-pasted into the CHANGELOG.md file for a new release.

    "},{"location":"changelog_section_template/#unreleased","title":"\ud83d\udd1c [Unreleased]","text":""},{"location":"changelog_section_template/#test-cases","title":"\ud83e\uddea Test Cases","text":""},{"location":"changelog_section_template/#framework","title":"\ud83d\udee0\ufe0f Framework","text":""},{"location":"changelog_section_template/#evm-tools","title":"\ud83d\udd27 EVM Tools","text":""},{"location":"changelog_section_template/#misc","title":"\ud83d\udccb Misc","text":""},{"location":"navigation/","title":"Navigation","text":"
    • Overview
    • Getting Started
      • Quick Start
      • VS Code Setup
      • Repository Overview
      • Installation Troubleshooting
      • Executing Tests at a Prompt
      • Executing Tests in VS Code
      • Executing Tests for Features Under Development
      • Debugging Transition Tools
    • Writing Tests
      • Code Standards
      • Types of Test
      • Adding a New Test
      • Writing a New Test
      • Test Markers
      • Referencing an EIP Spec Version
      • Verifying Changes Locally
      • Exception Tests
    • Tutorials
      • State Transition Tests
    • Consuming Tests
      • State Tests
      • Blockchain Tests
      • Blockchain Engine Tests
      • EOF Tests
      • Common Types
      • Exceptions
    • Getting Help
    • Developer Doc
      • Documentation
      • Coding Style
      • Enabling Precommit Checks
    • Changelog
    • Library Reference
      • Ethereum Test Base Types Package
      • Ethereum Test Exceptions Package
      • Ethereum Test Fixtures Package
      • Ethereum Test Forks Package
      • Ethereum Test Specs Package
      • Ethereum Test Tools Package
      • Ethereum Test Types Package
      • Ethereum Test VM Package
      • EVM Transition Tool Package
      • Pytest Plugins
      • Filler Plugin
    • Test case reference
      • Prague
        • EIP-2537 Bls 12 381 Precompiles
          • Spec
          • Test Bls12 G1add
            • Test Cases
          • Test Bls12 G1msm
            • Test Cases
          • Test Bls12 G1mul
            • Test Cases
          • Test Bls12 G2add
            • Test Cases
          • Test Bls12 G2msm
            • Test Cases
          • Test Bls12 G2mul
            • Test Cases
          • Test Bls12 Map Fp2 To G2
            • Test Cases
          • Test Bls12 Map Fp To G1
            • Test Cases
          • Test Bls12 Pairing
            • Test Cases
          • Test Bls12 Precompiles Before Fork
            • Test Cases
          • Test Bls12 Variable Length Input Contracts
            • Test Cases
          • Vectors
            • Test-vectors
        • EIP-2935 Historical Block Hashes From State
          • Spec
          • Test Block Hashes
            • Test Cases
        • EIP-6110 Deposits
          • Spec
          • Test Deposits
            • Test Cases
        • EIP-7002 El Triggerable Withdrawals
          • Spec
          • Test Withdrawal Requests
            • Test Cases
        • EIP-7251 Consolidations
          • Spec
          • Test Consolidations
            • Test Cases
        • EIP-7685 General Purpose El Requests
          • Spec
          • Test Deposits Withdrawals Consolidations
            • Test Cases
        • EIP-7692 Eof V1
          • Tracker
          • EIP-3540 Eof V1
            • Spec
            • Test All Opcodes In Container
              • Test Cases
            • Test Code Validation
              • Test Cases
            • Test Container Size
              • Test Cases
            • Test Container Validation
              • Test Cases
            • Test Eof Example
              • Test Cases
            • Test Execution Function
              • Test Cases
            • Test Extcode
              • Test Cases
            • Test Migrated Valid Invalid
              • Test Cases
            • Test Section Header Body Mismatch
              • Test Cases
            • Test Section Order
              • Test Cases
            • Test Section Size
              • Test Cases
          • EIP-4200 Relative Jumps
            • Test Rjump
              • Test Cases
            • Test Rjumpi
              • Test Cases
            • Test Rjumpv
              • Test Cases
          • EIP-4750 Functions
            • Test Callf Execution
              • Test Cases
            • Test Code Validation
              • Test Cases
          • EIP-6206 Jumpf
            • Spec
            • Test Jumpf Execution
              • Test Cases
            • Test Jumpf Stack
              • Test Cases
            • Test Jumpf Target
              • Test Cases
          • EIP-663 DUPn Swapn Exchange
            • Test DUPn
              • Test Cases
            • Test Exchange
              • Test Cases
            • Test Swapn
              • Test Cases
          • EIP-7069 Extcall
            • Spec
            • Test Address Space Extension
              • Test Cases
            • Test Calldata
              • Test Cases
            • Test Calls
              • Test Cases
            • Test Gas
              • Test Cases
            • Test Returndatacopy Memory Expansion
              • Test Cases
            • Test Returndataload
              • Test Cases
          • EIP-7480 Data Section
            • Spec
            • Test Code Validation
              • Test Cases
            • Test Data Opcodes
              • Test Cases
            • Test Datacopy Memory Expansion
              • Test Cases
          • EIP-7620 Eof Create
            • Spec
            • Test Eofcreate
              • Test Cases
            • Test Eofcreate Failures
              • Test Cases
            • Test Legacy Eof Creates
              • Test Cases
            • Test Returncontract
              • Test Cases
            • Test Subcontainer Validation
              • Test Cases
        • EIP-7702 Eoa Code Tx
          • Spec
          • Test Eoa Code Txs
            • Test Cases
      • Cancun
        • EIP-1153 Tstore
          • Spec
          • Test Basic Tload
            • Test Cases
          • Test Tload Calls
            • Test Cases
          • Test Tload Reentrancy
            • Test Cases
          • Test Tstorage
            • Test Cases
          • Test Tstorage Create Contexts
            • Test Cases
          • Test Tstorage Execution Contexts
            • Test Cases
          • Test Tstorage Reentrancy Contexts
            • Test Cases
          • Test Tstorage Selfdestruct
            • Test Cases
          • Test Tstore Reentrancy
            • Test Cases
        • EIP-4788 Beacon Root
          • Spec
          • Test Beacon Root Contract
            • Test Cases
        • EIP-4844 Blobs
          • Spec
          • Test Blob Txs
            • Test Cases
          • Test Blob Txs Full
            • Test Cases
          • Test Blobhash Opcode
            • Test Cases
          • Test Blobhash Opcode Contexts
            • Test Cases
          • Test Excess Blob Gas
            • Test Cases
          • Test Excess Blob Gas Fork Transition
            • Test Cases
          • Test Point Evaluation Precompile
            • Test Cases
          • Test Point Evaluation Precompile Gas
            • Test Cases
          • Point Evaluation Vectors
            • Readme
        • EIP-5656 Mcopy
          • Test Mcopy
            • Test Cases
          • Test Mcopy Contexts
            • Test Cases
          • Test Mcopy Memory Expansion
            • Test Cases
        • EIP-6780 Selfdestruct
          • Test Dynamic Create2 Selfdestruct Collision
            • Test Cases
          • Test Reentrancy Selfdestruct Revert
            • Test Cases
          • Test Selfdestruct
            • Test Cases
          • Test Selfdestruct Revert
            • Test Cases
        • EIP-7516 Blobgasfee
          • Test Blobgasfee Opcode
            • Test Cases
      • Shanghai
        • EIP-3651 Warm Coinbase
          • Spec
          • Test Warm Coinbase
            • Test Cases
        • EIP-3855 Push0
          • Spec
          • Test Push0
            • Test Cases
        • EIP-3860 Initcode
          • Spec
          • Test Initcode
            • Test Cases
        • EIP-4895 Withdrawals
          • Spec
          • Test Withdrawals
            • Test Cases
      • Paris
        • Security
          • Test Selfdestruct Balance Bug
            • Test Cases
      • Berlin
        • EIP-2930 Access List
          • Test ACL
            • Test Cases
      • Istanbul
        • EIP-1344 CHAINID
          • Test CHAINID
            • Test Cases
      • Constantinople
        • EIP-1014 Create2
          • Spec
          • Test Create Returndata
            • Test Cases
          • Test Recreate
            • Test Cases
      • Byzantium
        • EIP-198 Modexp Precompile
          • Test Modexp
            • Test Cases
      • Homestead
        • Coverage
          • Test Coverage
            • Test Cases
        • Yul
          • Test Yul Example
            • Test Cases
      • Frontier
        • Opcodes
          • Test All Opcodes
            • Test Cases
          • Test Call And Callcode Gas Calculation
            • Test Cases
          • Test DUP
            • Test Cases
          • Test Selfdestruct
            • Test Cases
    "},{"location":"consuming_tests/","title":"Consuming Tests (Fixtures) Generated by execution-spec-tests","text":"

    ethereum/execution-spec-tests generates JSON test fixtures in different formats that can be consumed by execution clients either directly or via Hive:

    Format Consumed by the client Location in .tar.gz release State Tests directly via a statetest-like command (e.g., go-ethereum/cmd/evm/staterunner.go) ./fixtures/state_tests/ Blockchain Tests directly via a blocktest-like command (e.g., go-ethereum/cmd/evm/blockrunner.go) ./fixtures/blockchain_tests/ Blockchain Engine Tests in the Hive pyspec simulator via the Engine API and other RPC endpoints ./fixtures/blockchain_tests_engine/

    Here's a top-level comparison of the different methods of consuming tests:

    Consumed via Scope Pros Cons statetest or blocktest-like command Module test - Fast feedback loop- Less complex - Smaller coverage scope- Requires a dedicated interface to the client EVM to consume the JSON fixtures and execute tests hive --sim ethereum/pyspec System test / Integration test - Wider Coverage Scope- Tests more of the client stack - Slower feedback loop- Harder to debug- Post-Merge forks only (requires the Engine API)

    Running blocktest, statetest, directly within the execution-spec-tests framework

    It's possible to execute evm blocktest directly within the execution-spec-tests framework. This is intended to verify fixture generation, see Debugging t8n Tools.

    Generating test fixtures using a t8n tool via fill is not considered to be the actual test

    The fill command uses t8n tools to generate fixtures. Whilst this will provide basic sanity checking of EVM behavior and a sub-set of post conditions are typically checked within test cases, it is not considered the actual test. The actual test is the execution of the fixture against the EVM which will check the entire post allocation and typically use different code paths than t8n commands.

    "},{"location":"consuming_tests/#release-formats","title":"Release Formats","text":"

    The ethereum/execution-spec-tests repository provides releases of fixtures in various formats (as of 2023-10-16):

    Release Artifact Consumer Fork/feature scope fixtures.tar.gz Clients All tests until the last stable fork (\"must pass\") fixtures_develop.tar.gz Clients All tests until the last development fork"},{"location":"consuming_tests/#obtaining-the-most-recent-release-artifacts","title":"Obtaining the Most Recent Release Artifacts","text":"

    Artifacts can be downloaded directly from the release page. The following script demonstrates how the most recent release version of a specific artifact can be downloaded using the Github API:

    #!/bin/bash\n\n# requires jq\n# sudo apt install jq\n\n# The following two artifacts are intended for consumption by clients:\n# - fixtures.tar.gz: Generated up to the last deployed fork.\n# - fixtures_develop.tar.gz: Generated up to and including the latest dev fork.\n# As of March 2024, dev is Prague, deployed is Cancun.\n\nARTIFACT=\"fixtures_develop.tar.gz\"  \n\nOWNER=\"ethereum\"\nREPO=\"execution-spec-tests\"\n\nDOWNLOAD_URL=$(curl -s https://api.github.com/repos/$OWNER/$REPO/releases/latest \\\n                   | jq -r '.assets[] | select(.name==\"'$ARTIFACT'\").browser_download_url')\n\n# Sanity check for the download URL: contains a version tag prefixed with \"v\"\nif [[ \"$DOWNLOAD_URL\" =~ v[0-9]+\\.[0-9]+\\.[0-9]+ ]]; then\n    curl -LO $DOWNLOAD_URL\nelse\n    echo \"Error: URL does not contain a valid version tag (URL: ${DOWNLOAD_URL}).\"\n    exit 1\nfi\n
    "},{"location":"consuming_tests/blockchain_test/","title":"Blockchain Tests","text":"

    The Blockchain Test fixture format tests are included in the fixtures subdirectory blockchain_tests.

    These are produced by the StateTest and BlockchainTest test specs.

    "},{"location":"consuming_tests/blockchain_test/#description","title":"Description","text":"

    The blockchain test fixture format is used to test block validation and the consensus rules of the Ethereum blockchain.

    It does so by defining a pre-execution state, a series of blocks, and a post-execution state, verifying that, after all the blocks have been processed, appended if valid or rejected if invalid, the result is the expected post-execution state.

    A single JSON fixture file is composed of a JSON object where each key-value pair is a different Fixture test object, with the key string representing the test name.

    The JSON file path plus the test name are used as the unique test identifier.

    "},{"location":"consuming_tests/blockchain_test/#consumption","title":"Consumption","text":"

    For each Fixture test object in the JSON fixture file, perform the following steps:

    1. Use network to configure the execution fork schedule according to the Fork type definition.
    2. Use pre as the starting state allocation of the execution environment for the test and calculate the genesis state root.
    3. Decode genesisRLP to obtain the genesis block header, if the block cannot be decoded, fail the test.
    4. Compare the genesis block header with genesisBlockHeader, if any field does not match, fail the test.
    5. Compare the state root calculated on step 2 with the state root in the genesis block header, if they do not match, fail the test.
    6. Set the genesis block as the current head of the chain.
    7. If blocks contains at least one block, perform the following steps for each FixtureBlock or InvalidFixtureBlock:

      1. Determine whether the current block is valid or invalid:

        1. If the expectException field is not present, it is valid, and object must be decoded as a FixtureBlock.
        2. If the expectException field is present, it is invalid, and object must be decoded as a InvalidFixtureBlock.
      2. Attempt to decode field rlp as the current block

        1. If the block cannot be decoded:
          • If an rlp decoding exception is not expected for the current block, fail the test.
          • If an rlp decoding error is expected, pass the test (Note: A block with an expected exception will be the last block in the fixture).
        2. If the block can be decoded, proceed to the next step.
      3. Attempt to apply the current decoded block on top of the current head of the chain

        1. If the block cannot be applied:
          • If an exception is expected on the current block and it matches the exception obtained upon execution, pass the test. (Note: A block with an expected exception will be the last block in the fixture)
          • If an exception is not expected on the current block, fail the test
        2. If the block can be applied:
          • If an exception is expected on the current block, fail the test
          • If an exception is not expected on the current block, set the decoded block as the current head of the chain and proceed to the next block until you reach the last block in the fixture.
    8. Compare the hash of the current head of the chain against lastblockhash, if they do not match, fail the test.

    9. Compare all accounts and the fields described in post against the current state, if any do not match, fail the test.
    "},{"location":"consuming_tests/blockchain_test/#structures","title":"Structures","text":""},{"location":"consuming_tests/blockchain_test/#fixture","title":"Fixture","text":""},{"location":"consuming_tests/blockchain_test/#-network-fork","title":"- network: Fork","text":"

    Fork configuration for the test.

    "},{"location":"consuming_tests/blockchain_test/#-pre-alloc","title":"- pre: Alloc","text":"

    Starting account allocation for the test. State root calculated from this allocation must match the one in the genesis block.

    "},{"location":"consuming_tests/blockchain_test/#-genesisrlp-bytes","title":"- genesisRLP: Bytes","text":"

    RLP serialized version of the genesis block.

    "},{"location":"consuming_tests/blockchain_test/#-genesisblockheader-fixtureheader","title":"- genesisBlockHeader: FixtureHeader","text":"

    Genesis block header.

    "},{"location":"consuming_tests/blockchain_test/#-blocks-listfixtureblockinvalidfixtureblock","title":"- blocks: List[FixtureBlock|InvalidFixtureBlock]","text":"

    List of blocks to be processed after the genesis block.

    "},{"location":"consuming_tests/blockchain_test/#-lastblockhash-hash","title":"- lastblockhash: Hash","text":"

    Hash of the last valid block, or the genesis block hash if the list of blocks is empty, or contains a single invalid block.

    "},{"location":"consuming_tests/blockchain_test/#-post-alloc","title":"- post: Alloc","text":"

    Account allocation for verification after all the blocks have been processed.

    "},{"location":"consuming_tests/blockchain_test/#-sealengine-str","title":"- sealEngine: str","text":"

    Deprecated: Seal engine used to mine the blocks.

    "},{"location":"consuming_tests/blockchain_test/#fixtureheader","title":"FixtureHeader","text":""},{"location":"consuming_tests/blockchain_test/#-parenthash-hash","title":"- parentHash: Hash","text":"

    Hash of the parent block.

    "},{"location":"consuming_tests/blockchain_test/#-unclehash-hash","title":"- uncleHash: Hash","text":"

    Hash of the uncle block list.

    "},{"location":"consuming_tests/blockchain_test/#-coinbase-address","title":"- coinbase: Address","text":"

    Address of the account that will receive the rewards for building the block.

    "},{"location":"consuming_tests/blockchain_test/#-stateroot-hash","title":"- stateRoot: Hash","text":"

    Root hash of the state trie.

    "},{"location":"consuming_tests/blockchain_test/#-transactionstrie-hash","title":"- transactionsTrie: Hash","text":"

    Root hash of the transactions trie.

    "},{"location":"consuming_tests/blockchain_test/#-receipttrie-hash","title":"- receiptTrie: Hash","text":"

    Root hash of the receipts trie.

    "},{"location":"consuming_tests/blockchain_test/#-bloom-bloom","title":"- bloom: Bloom","text":"

    Bloom filter composed of the logs of all the transactions in the block.

    "},{"location":"consuming_tests/blockchain_test/#-difficulty-zeropaddedhexnumber","title":"- difficulty: ZeroPaddedHexNumber","text":"

    Difficulty of the block.

    "},{"location":"consuming_tests/blockchain_test/#-number-zeropaddedhexnumber","title":"- number: ZeroPaddedHexNumber","text":"

    Number of the block.

    "},{"location":"consuming_tests/blockchain_test/#-gaslimit-zeropaddedhexnumber","title":"- gasLimit: ZeroPaddedHexNumber","text":"

    Total gas limit of the block.

    "},{"location":"consuming_tests/blockchain_test/#-gasused-zeropaddedhexnumber","title":"- gasUsed: ZeroPaddedHexNumber","text":"

    Total gas used by all the transactions in the block.

    "},{"location":"consuming_tests/blockchain_test/#-timestamp-zeropaddedhexnumber","title":"- timestamp: ZeroPaddedHexNumber","text":"

    Timestamp of the block.

    "},{"location":"consuming_tests/blockchain_test/#-extradata-bytes","title":"- extraData: Bytes","text":"

    Extra data of the block.

    "},{"location":"consuming_tests/blockchain_test/#-mixhash-hash","title":"- mixHash: Hash","text":"

    Mix hash or PrevRandao of the block.

    "},{"location":"consuming_tests/blockchain_test/#-nonce-headernonce","title":"- nonce: HeaderNonce","text":"

    Nonce of the block.

    "},{"location":"consuming_tests/blockchain_test/#-hash-hash","title":"- hash: Hash","text":"

    Hash of the block.

    "},{"location":"consuming_tests/blockchain_test/#-basefeepergas-zeropaddedhexnumber-fork-london","title":"- baseFeePerGas: ZeroPaddedHexNumber (fork: London)","text":"

    Base fee per gas of the block.

    "},{"location":"consuming_tests/blockchain_test/#-withdrawalsroot-hash-fork-shanghai","title":"- withdrawalsRoot: Hash (fork: Shanghai)","text":"

    Root hash of the withdrawals trie.

    "},{"location":"consuming_tests/blockchain_test/#-blobgasused-zeropaddedhexnumber-fork-cancun","title":"- blobGasUsed: ZeroPaddedHexNumber (fork: Cancun)","text":"

    Total blob gas used by all the transactions in the block.

    "},{"location":"consuming_tests/blockchain_test/#-excessblobgas-zeropaddedhexnumber-fork-cancun","title":"- excessBlobGas: ZeroPaddedHexNumber (fork: Cancun)","text":"

    Excess blob gas of the block used to calculate the blob fee per gas for this block.

    "},{"location":"consuming_tests/blockchain_test/#-parentbeaconblockroot-hash-fork-cancun","title":"- parentBeaconBlockRoot: Hash (fork: Cancun)","text":"

    Root hash of the parent beacon block.

    "},{"location":"consuming_tests/blockchain_test/#fixtureblock","title":"FixtureBlock","text":""},{"location":"consuming_tests/blockchain_test/#-rlp-bytes","title":"- rlp: Bytes","text":"

    RLP serialized version of the block. Field is only optional when embedded in a InvalidFixtureBlock as the rlp_decoded field.

    "},{"location":"consuming_tests/blockchain_test/#-blockheader-fixtureheader","title":"- blockHeader: FixtureHeader","text":"

    Decoded block header fields included in the block RLP.

    "},{"location":"consuming_tests/blockchain_test/#-blocknumber-number","title":"- blocknumber: Number","text":"

    Block number.

    "},{"location":"consuming_tests/blockchain_test/#-transactions-listfixturetransaction","title":"- transactions: List[FixtureTransaction]","text":"

    List of decoded transactions included in the block RLP.

    "},{"location":"consuming_tests/blockchain_test/#-uncleheaders-listfixtureheader","title":"- uncleHeaders: List[FixtureHeader]","text":"

    List of uncle headers included in the block RLP. An empty list post merge.

    "},{"location":"consuming_tests/blockchain_test/#-withdrawals-optionallistfixturewithdrawal-fork-shanghai","title":"- withdrawals: Optional[List[FixtureWithdrawal]] (fork: Shanghai)","text":"

    Optional list of withdrawals included in the block RLP.

    "},{"location":"consuming_tests/blockchain_test/#invalidfixtureblock","title":"InvalidFixtureBlock","text":""},{"location":"consuming_tests/blockchain_test/#-expectexception-transactionexceptionblockexception","title":"- expectException: TransactionException|BlockException","text":"

    Expected exception that invalidates the block.

    "},{"location":"consuming_tests/blockchain_test/#-rlp-bytes_1","title":"- rlp: Bytes","text":"

    RLP serialized version of the block.

    "},{"location":"consuming_tests/blockchain_test/#-rlp_decoded-optionalfixtureblock","title":"- rlp_decoded: Optional[FixtureBlock]","text":"

    Decoded block attributes included in the block RLP.

    "},{"location":"consuming_tests/blockchain_test/#fixturetransaction","title":"FixtureTransaction","text":""},{"location":"consuming_tests/blockchain_test/#-type-zeropaddedhexnumber","title":"- type: ZeroPaddedHexNumber","text":"

    Transaction type.

    "},{"location":"consuming_tests/blockchain_test/#-chainid-zeropaddedhexnumber","title":"- chainId: ZeroPaddedHexNumber","text":"

    Chain ID of the transaction.

    "},{"location":"consuming_tests/blockchain_test/#-nonce-zeropaddedhexnumber","title":"- nonce: ZeroPaddedHexNumber","text":"

    Nonce of the account that sends the transaction

    "},{"location":"consuming_tests/blockchain_test/#-gasprice-zeropaddedhexnumber","title":"- gasPrice: ZeroPaddedHexNumber","text":"

    Gas price for the transaction (Transaction types 0 & 1)

    "},{"location":"consuming_tests/blockchain_test/#-maxpriorityfeepergas-hexnumber-fork-london","title":"- maxPriorityFeePerGas: HexNumber (fork: London)","text":"

    Max priority fee per gas to pay (Transaction types 2 & 3)

    "},{"location":"consuming_tests/blockchain_test/#-maxfeepergas-hexnumber-fork-london","title":"- maxFeePerGas: HexNumber (fork: London)","text":"

    Max base fee per gas to pay (Transaction types 2 & 3)

    "},{"location":"consuming_tests/blockchain_test/#-gaslimit-zeropaddedhexnumber_1","title":"- gasLimit: ZeroPaddedHexNumber","text":"

    Gas limit of the transaction

    "},{"location":"consuming_tests/blockchain_test/#-to-address-null","title":"- to: Address| null","text":"

    Destination address of the transaction, or null to create a contract

    "},{"location":"consuming_tests/blockchain_test/#-value-zeropaddedhexnumber","title":"- value: ZeroPaddedHexNumber","text":"

    Value of the transaction

    "},{"location":"consuming_tests/blockchain_test/#-data-bytes","title":"- data: Bytes","text":"

    Data bytes of the transaction

    "},{"location":"consuming_tests/blockchain_test/#-accesslist-listmappingaddresslisthash-fork-berlin","title":"- accessList: List[Mapping[Address,List[Hash]]] (fork: Berlin)","text":"

    Account access lists (Transaction types 1, 2 & 3)

    "},{"location":"consuming_tests/blockchain_test/#-maxfeeperblobgas-zeropaddedhexnumber-fork-cancun","title":"- maxFeePerBlobGas: ZeroPaddedHexNumber (fork: Cancun)","text":"

    Max fee per blob gas to pay (Transaction type 3)

    "},{"location":"consuming_tests/blockchain_test/#-blobversionedhashes-listhash-fork-cancun","title":"- blobVersionedHashes: List[Hash] (fork: Cancun)","text":"

    Max fee per blob gas to pay (Transaction type 3)

    "},{"location":"consuming_tests/blockchain_test/#-v-zeropaddedhexnumber","title":"- v: ZeroPaddedHexNumber","text":"

    V value of the transaction signature

    "},{"location":"consuming_tests/blockchain_test/#-r-zeropaddedhexnumber","title":"- r: ZeroPaddedHexNumber","text":"

    R value of the transaction signature

    "},{"location":"consuming_tests/blockchain_test/#-s-zeropaddedhexnumber","title":"- s: ZeroPaddedHexNumber","text":"

    S value of the transaction signature

    "},{"location":"consuming_tests/blockchain_test/#-sender-address","title":"- sender: Address","text":"

    Sender address of the transaction

    "},{"location":"consuming_tests/blockchain_test/#-secretkey-hash","title":"- secretKey: Hash","text":"

    Private key that must be used to sign the transaction

    "},{"location":"consuming_tests/blockchain_test/#fixturewithdrawal","title":"FixtureWithdrawal","text":""},{"location":"consuming_tests/blockchain_test/#-index-zeropaddedhexnumber","title":"- index: ZeroPaddedHexNumber","text":"

    Index of the withdrawal

    "},{"location":"consuming_tests/blockchain_test/#-validatorindex-zeropaddedhexnumber","title":"- validatorIndex: ZeroPaddedHexNumber","text":"

    Withdrawing validator index

    "},{"location":"consuming_tests/blockchain_test/#-address-address","title":"- address: Address","text":"

    Address to withdraw to

    "},{"location":"consuming_tests/blockchain_test/#-amount-zeropaddedhexnumber","title":"- amount: ZeroPaddedHexNumber","text":"

    Amount of the withdrawal

    "},{"location":"consuming_tests/blockchain_test_engine/","title":"Blockchain Engine Tests","text":"

    The Blockchain Engine Test fixture format tests are included in the fixtures subdirectory blockchain_tests_engine, and use Engine API directives instead of the usual BlockchainTest format.

    These are produced by the StateTest and BlockchainTest test specs.

    "},{"location":"consuming_tests/blockchain_test_engine/#description","title":"Description","text":"

    The Blockchain Engine Test fixture format is used to test block validation and the consensus rules of the Ethereum blockchain, when a block is delivered through the Engine API as a engine_newPayloadVX directive.

    It does so by defining a pre-execution state, a series of blocks as engine_newPayloadVX directives, and a post-execution state, verifying that, after all the blocks have been processed, appended if valid or rejected if invalid, the result is the expected post-execution state.

    A single JSON fixture file is composed of a JSON object where each key-value pair is a different HiveFixture test object, with the key string representing the test name.

    The JSON file path plus the test name are used as the unique test identifier.

    "},{"location":"consuming_tests/blockchain_test_engine/#consumption","title":"Consumption","text":"

    For each HiveFixture test object in the JSON fixture file, perform the following steps:

    1. Start a full node using:

      • network to configure the execution fork schedule according to the Fork type definition.
      • pre as the starting state allocation of the execution environment for the test and calculate the genesis state root.
      • genesisBlockHeader as the genesis block header.
    2. Verify the head of the chain is the genesis block, and the state root matches the one calculated on step 1, otherwise fail the test.

    3. For each FixtureEngineNewPayload in engineNewPayloads:

      1. Deliver the payload using the engine_newPayloadVX directive, using:
        • version as the version of the directive.
        • executionPayload as the payload.
        • blob_versioned_hashes, if present, as the list of hashes of the versioned blobs that are part of the execution payload.
        • parentBeaconBlockRoot, if present, as the hash of the parent beacon block root.
      2. If errorCode is present:
        • Verify the directive returns an error, and the error code matches the one in errorCode, otherwise fail the test.
        • Proceed to the next payload.
      3. If valid is false, verify that the directive returns status field of PayloadStatusV1 as INVALID, otherwise fail the test.
      4. If valid is true, verify that the directive returns status field of PayloadStatusV1 as VALID, otherwise fail the test.
    "},{"location":"consuming_tests/blockchain_test_engine/#structures","title":"Structures","text":""},{"location":"consuming_tests/blockchain_test_engine/#hivefixture","title":"HiveFixture","text":""},{"location":"consuming_tests/blockchain_test_engine/#-network-fork","title":"- network: Fork","text":"

    Fork configuration for the test.

    "},{"location":"consuming_tests/blockchain_test_engine/#-genesisblockheader-fixtureheader","title":"- genesisBlockHeader: FixtureHeader","text":"

    Genesis block header.

    "},{"location":"consuming_tests/blockchain_test_engine/#-enginenewpayloads-listfixtureenginenewpayload","title":"- engineNewPayloads: List[FixtureEngineNewPayload]","text":"

    List of engine_newPayloadVX directives to be processed after the genesis block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-enginefcuversion-number","title":"- engineFcuVersion: Number","text":"

    Version of the engine_forkchoiceUpdatedVX directive to use to set the head of the chain.

    "},{"location":"consuming_tests/blockchain_test_engine/#-pre-alloc","title":"- pre: Alloc","text":"

    Starting account allocation for the test. State root calculated from this allocation must match the one in the genesis block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-post-alloc","title":"- post: Alloc","text":"

    Account allocation for verification after all the blocks have been processed.

    "},{"location":"consuming_tests/blockchain_test_engine/#fixtureenginenewpayload","title":"FixtureEngineNewPayload","text":""},{"location":"consuming_tests/blockchain_test_engine/#-executionpayload-fixtureexecutionpayload","title":"- executionPayload: FixtureExecutionPayload","text":"

    Execution payload.

    "},{"location":"consuming_tests/blockchain_test_engine/#-blob_versioned_hashes-optionallisthash-fork-cancun","title":"- blob_versioned_hashes: Optional[List[Hash]] (fork: Cancun)","text":"

    List of hashes of the versioned blobs that are part of the execution payload. They can mismatch the hashes of the versioned blobs in the execution payload, for negative-testing reasons.

    "},{"location":"consuming_tests/blockchain_test_engine/#-parentbeaconblockroot-optionalhash-fork-cancun","title":"- parentBeaconBlockRoot: Optional[Hash] (fork: Cancun)","text":"

    Hash of the parent beacon block root.

    "},{"location":"consuming_tests/blockchain_test_engine/#-validationerror-transactionexceptionblockexception","title":"- validationError: TransactionException|BlockException","text":"

    Validation error expected when executing the payload.

    When the payload is valid, this field is not present, and a VALID status is expected in the status field of PayloadStatusV1.

    If this field is present, the status field of PayloadStatusV1 is expected to be INVALID.

    "},{"location":"consuming_tests/blockchain_test_engine/#-version-number","title":"- version: Number","text":"

    Version of the engine_newPayloadVX directive to use to deliver the payload.

    "},{"location":"consuming_tests/blockchain_test_engine/#-errorcode-optionalnumber","title":"- errorCode: Optional[Number]","text":"

    Error code to be returned by the engine_newPayloadVX directive.

    "},{"location":"consuming_tests/blockchain_test_engine/#fixtureexecutionpayload","title":"FixtureExecutionPayload","text":""},{"location":"consuming_tests/blockchain_test_engine/#-parenthash-hash","title":"- parentHash: Hash","text":"

    Hash of the parent block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-feerecipient-address","title":"- feeRecipient: Address","text":"

    Address of the account that will receive the rewards for building the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-stateroot-hash","title":"- stateRoot: Hash","text":"

    Root hash of the state trie.

    "},{"location":"consuming_tests/blockchain_test_engine/#-receiptsroot-hash","title":"- receiptsRoot: Hash","text":"

    Root hash of the receipts trie.

    "},{"location":"consuming_tests/blockchain_test_engine/#-logsbloom-bloom","title":"- logsBloom: Bloom","text":"

    Bloom filter composed of the logs of all the transactions in the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-blocknumber-hexnumber","title":"- blockNumber: HexNumber","text":"

    Number of the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-gaslimit-hexnumber","title":"- gasLimit: HexNumber","text":"

    Total gas limit of the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-gasused-hexnumber","title":"- gasUsed: HexNumber","text":"

    Total gas used by all the transactions in the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-timestamp-hexnumber","title":"- timestamp: HexNumber","text":"

    Timestamp of the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-extradata-bytes","title":"- extraData: Bytes","text":"

    Extra data of the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-prevrandao-hash","title":"- prevRandao: Hash","text":"

    PrevRandao of the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-blockhash-hash","title":"- blockHash: Hash","text":"

    Hash of the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-transactions-listbytes","title":"- transactions: List[Bytes]","text":"

    List of transactions in the block, in serialized format.

    "},{"location":"consuming_tests/blockchain_test_engine/#-withdrawals-listfixturewithdrawal","title":"- withdrawals: List[FixtureWithdrawal]","text":"

    List of withdrawals in the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-basefeepergas-hexnumber-fork-london","title":"- baseFeePerGas: HexNumber (fork: London)","text":"

    Base fee per gas of the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-blobgasused-hexnumber-fork-cancun","title":"- blobGasUsed: HexNumber (fork: Cancun)","text":"

    Total blob gas used by all the transactions in the block.

    "},{"location":"consuming_tests/blockchain_test_engine/#-excessblobgas-hexnumber-fork-cancun","title":"- excessBlobGas: HexNumber (fork: Cancun)","text":"

    Excess blob gas of the block used to calculate the blob fee per gas for this block.

    "},{"location":"consuming_tests/blockchain_test_engine/#fixturewithdrawal","title":"FixtureWithdrawal","text":""},{"location":"consuming_tests/blockchain_test_engine/#-index-hexnumber","title":"- index: HexNumber","text":"

    Index of the withdrawal

    "},{"location":"consuming_tests/blockchain_test_engine/#-validatorindex-hexnumber","title":"- validatorIndex: HexNumber","text":"

    Withdrawing validator index

    "},{"location":"consuming_tests/blockchain_test_engine/#-address-address","title":"- address: Address","text":"

    Address to withdraw to

    "},{"location":"consuming_tests/blockchain_test_engine/#-amount-hexnumber","title":"- amount: HexNumber","text":"

    Amount of the withdrawal

    "},{"location":"consuming_tests/common_types/","title":"Common Types","text":""},{"location":"consuming_tests/common_types/#basic-types","title":"Basic Types","text":""},{"location":"consuming_tests/common_types/#address","title":"Address","text":"

    Bytes of a 20-byte fixed length.

    "},{"location":"consuming_tests/common_types/#bloom","title":"Bloom","text":"

    Bytes of a 256-byte fixed length.

    "},{"location":"consuming_tests/common_types/#bytes","title":"Bytes","text":"

    Hexadecimal representation of binary data of any length encoded as a JSON string, with a \"0x\" prefix.

    "},{"location":"consuming_tests/common_types/#emptyaddress","title":"EmptyAddress","text":"

    An empty JSON string \"\", used to represent an empty address. E.g. in the to field of a transaction when it is a contract creation.

    "},{"location":"consuming_tests/common_types/#hash","title":"Hash","text":"

    Bytes of a 32-byte fixed length.

    "},{"location":"consuming_tests/common_types/#headernonce","title":"HeaderNonce","text":"

    Bytes of a 8-byte fixed length.

    "},{"location":"consuming_tests/common_types/#hexnumber","title":"HexNumber","text":"

    Hexadecimal number with \"0x\" prefix encoded as a JSON string.

    "},{"location":"consuming_tests/common_types/#list","title":"List","text":"

    A JSON array where each element is a specific type, also defined in this document. E.g. List[Address] is a JSON array where each element is an Ethereum address.

    "},{"location":"consuming_tests/common_types/#mapping","title":"Mapping","text":"

    A JSON object where the keys and values are specific types, also defined in this document. E.g. Mapping[Address, Account] is a JSON object where the keys are Ethereum addresses, and the values are Ethereum accounts.

    "},{"location":"consuming_tests/common_types/#number","title":"Number","text":"

    Decimal number encoded as a JSON string.

    "},{"location":"consuming_tests/common_types/#optional","title":"Optional","text":"

    Marks a field as optional, meaning that the field can be missing from the JSON object.

    "},{"location":"consuming_tests/common_types/#zeropaddedhexnumber","title":"ZeroPaddedHexNumber","text":"

    Hexadecimal number with \"0x\" prefix encoded as a JSON string, with a single zero used to pad odd number of digits, and zero represented as \"0x00\".

    "},{"location":"consuming_tests/common_types/#composite-types","title":"Composite Types","text":""},{"location":"consuming_tests/common_types/#storage-mappinghashhash","title":"Storage: Mapping[Hash,Hash]","text":"

    Storage represented as a JSON object, where the keys and values are represented with the Hash type.

    "},{"location":"consuming_tests/common_types/#account","title":"Account","text":"

    An Ethereum account represented as a JSON object with the following fields:

    "},{"location":"consuming_tests/common_types/#-balance-zeropaddedhexnumber","title":"- balance: ZeroPaddedHexNumber","text":"

    Balance of the account.

    "},{"location":"consuming_tests/common_types/#-nonce-zeropaddedhexnumber","title":"- nonce: ZeroPaddedHexNumber","text":"

    Nonce of the account.

    "},{"location":"consuming_tests/common_types/#-code-bytes","title":"- code: Bytes","text":"

    Code of the account.

    "},{"location":"consuming_tests/common_types/#-storage-storage","title":"- storage: Storage","text":"

    Storage of the account.

    "},{"location":"consuming_tests/common_types/#alloc-mappingaddressaccount","title":"Alloc: Mapping[Address,Account]","text":"

    State allocation represented as a JSON object, where the keys are the addresses of the accounts, and the values are the accounts.

    "},{"location":"consuming_tests/common_types/#fork","title":"Fork","text":"

    Fork type is represented as a JSON string that can be set to one of the following values:

    "},{"location":"consuming_tests/common_types/#frontier","title":"\"Frontier\"","text":"
    • Chain ID: 0x00
    "},{"location":"consuming_tests/common_types/#homestead","title":"\"Homestead\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    "},{"location":"consuming_tests/common_types/#byzantium","title":"\"Byzantium\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    "},{"location":"consuming_tests/common_types/#constantinople","title":"\"Constantinople\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    "},{"location":"consuming_tests/common_types/#constantinoplefix","title":"\"ConstantinopleFix\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    "},{"location":"consuming_tests/common_types/#istanbul","title":"\"Istanbul\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    "},{"location":"consuming_tests/common_types/#muirglacier","title":"\"MuirGlacier\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    "},{"location":"consuming_tests/common_types/#berlin","title":"\"Berlin\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    • Berlin Block: 0x00
    "},{"location":"consuming_tests/common_types/#berlintolondonat5","title":"\"BerlinToLondonAt5\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    • Berlin Block: 0x00
    • London Block: 0x05
    "},{"location":"consuming_tests/common_types/#london","title":"\"London\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    • Berlin Block: 0x00
    • London Block: 0x00
    "},{"location":"consuming_tests/common_types/#arrowglacier","title":"\"ArrowGlacier\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    • Berlin Block: 0x00
    • London Block: 0x00
    • Arrow Glacier Block: 0x00
    "},{"location":"consuming_tests/common_types/#grayglacier","title":"\"GrayGlacier\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    • Berlin Block: 0x00
    • London Block: 0x00
    • Arrow Glacier Block: 0x00
    • Gray Glacier Block: 0x00
    "},{"location":"consuming_tests/common_types/#merge","title":"\"Merge\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    • Berlin Block: 0x00
    • London Block: 0x00
    • Arrow Glacier Block: 0x00
    • Gray Glacier Block: 0x00
    • Terminal Total Difficulty: 0x00
    "},{"location":"consuming_tests/common_types/#mergetoshanghaiattime15k","title":"\"MergeToShanghaiAtTime15k\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    • Berlin Block: 0x00
    • London Block: 0x00
    • Arrow Glacier Block: 0x00
    • Gray Glacier Block: 0x00
    • Terminal Total Difficulty: 0x00
    • Shanghai Time: 0x3a98
    "},{"location":"consuming_tests/common_types/#shanghai","title":"\"Shanghai\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    • Berlin Block: 0x00
    • London Block: 0x00
    • Arrow Glacier Block: 0x00
    • Gray Glacier Block: 0x00
    • Terminal Total Difficulty: 0x00
    • Shanghai Time: 0x00
    "},{"location":"consuming_tests/common_types/#shanghaitocancunattime15k","title":"\"ShanghaiToCancunAtTime15k\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    • Berlin Block: 0x00
    • London Block: 0x00
    • Arrow Glacier Block: 0x00
    • Gray Glacier Block: 0x00
    • Terminal Total Difficulty: 0x00
    • Shanghai Time: 0x0
    • Cancun Time: 0x3a98
    "},{"location":"consuming_tests/common_types/#cancun","title":"\"Cancun\"","text":"
    • Chain ID: 0x01
    • Homestead Block: 0x00
    • EIP150 Block: 0x00
    • EIP155 Block: 0x00
    • EIP158 Block: 0x00
    • DAO Fork Block: 0x00
    • Byzantium Block: 0x00
    • Constantinople Block: 0x00
    • Constantinople Fix Block: 0x00
    • Istanbul Block: 0x00
    • Muir Glacier Block: 0x00
    • Berlin Block: 0x00
    • London Block: 0x00
    • Arrow Glacier Block: 0x00
    • Gray Glacier Block: 0x00
    • Terminal Total Difficulty: 0x00
    • Shanghai Time: 0x00
    • Cancun Time: 0x00
    "},{"location":"consuming_tests/eof_test/","title":"EOF Tests","text":"

    The EOF Test fixture format tests are included in the fixtures subdirectory eof_tests.

    These are produced by the EOFTest test spec.

    "},{"location":"consuming_tests/eof_test/#description","title":"Description","text":"

    The EOF test fixture format is used to test the EOF container validation function of the Ethereum Virtual Machine (EVM).

    It simply defines a binary code in hexadecimal format and a boolean value that indicates whether the code is valid or not.

    "},{"location":"consuming_tests/eof_test/#consumption","title":"Consumption","text":"

    TODO: Update this section

    "},{"location":"consuming_tests/eof_test/#structures","title":"Structures","text":"

    TODO: Update this section

    "},{"location":"consuming_tests/exceptions/","title":"Exceptions","text":"

    Exception types are represented as a JSON string in the test fixtures.

    The exception converted into a string is composed of the exception type name, followed by a period, followed by the specific exception name.

    For example, the exception INSUFFICIENT_ACCOUNT_FUNDS of type TransactionException is represented as \"TransactionException.INSUFFICIENT_ACCOUNT_FUNDS\".

    The JSON string can contain multiple exception types, separated by the | character, denoting that the transaction or block can throw either one of the exceptions.

    "},{"location":"consuming_tests/exceptions/#transactionexception","title":"TransactionException","text":"

    Bases: ExceptionBase

    Exception raised when a transaction is invalid, and thus cannot be executed.

    If a transaction with any of these exceptions is included in a block, the block is invalid.

    Source code in src/ethereum_test_exceptions/exceptions.py
    @unique\nclass TransactionException(ExceptionBase):\n    \"\"\"\n    Exception raised when a transaction is invalid, and thus cannot be executed.\n\n    If a transaction with any of these exceptions is included in a block, the block is invalid.\n    \"\"\"\n\n    TYPE_NOT_SUPPORTED = auto()\n    \"\"\"\n    Transaction type is not supported on this chain configuration.\n    \"\"\"\n    SENDER_NOT_EOA = auto()\n    \"\"\"\n    Transaction is coming from address that is not exist anymore.\n    \"\"\"\n    ADDRESS_TOO_SHORT = auto()\n    \"\"\"\n    Transaction `to` is not allowed to be less than 20 bytes.\n    \"\"\"\n    ADDRESS_TOO_LONG = auto()\n    \"\"\"\n    Transaction `to` is not allowed to be more than 20 bytes.\n    \"\"\"\n    NONCE_MISMATCH_TOO_HIGH = auto()\n    \"\"\"\n    Transaction nonce > sender.nonce.\n    \"\"\"\n    NONCE_MISMATCH_TOO_LOW = auto()\n    \"\"\"\n    Transaction nonce < sender.nonce.\n    \"\"\"\n    NONCE_TOO_BIG = auto()\n    \"\"\"\n    Transaction `nonce` is not allowed to be max_uint64 - 1 (this is probably TransactionTest).\n    \"\"\"\n    NONCE_IS_MAX = auto()\n    \"\"\"\n    Transaction `nonce` is not allowed to be max_uint64 - 1 (this is StateTests).\n    \"\"\"\n    NONCE_OVERFLOW = auto()\n    \"\"\"\n    Transaction `nonce` is not allowed to be more than uint64.\n    \"\"\"\n    GASLIMIT_OVERFLOW = auto()\n    \"\"\"\n    Transaction gaslimit exceeds 2^64-1 maximum value.\n    \"\"\"\n    VALUE_OVERFLOW = auto()\n    \"\"\"\n    Transaction value exceeds 2^256-1 maximum value.\n    \"\"\"\n    GASPRICE_OVERFLOW = auto()\n    \"\"\"\n    Transaction gasPrice exceeds 2^256-1 maximum value.\n    \"\"\"\n    GASLIMIT_PRICE_PRODUCT_OVERFLOW = auto()\n    \"\"\"\n    Transaction gasPrice * gasLimit exceeds 2^256-1 maximum value.\n    \"\"\"\n    INVALID_SIGNATURE_VRS = auto()\n    \"\"\"\n    Invalid transaction v, r, s values.\n    \"\"\"\n    RLP_INVALID_SIGNATURE_R = auto()\n    \"\"\"\n    Error reading transaction signature R value.\n    \"\"\"\n    RLP_INVALID_SIGNATURE_S = auto()\n    \"\"\"\n    Error reading transaction signature S value.\n    \"\"\"\n    RLP_LEADING_ZEROS_GASLIMIT = auto()\n    \"\"\"\n    Error reading transaction gaslimit field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_GASPRICE = auto()\n    \"\"\"\n    Error reading transaction gasprice field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_VALUE = auto()\n    \"\"\"\n    Error reading transaction value field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_NONCE = auto()\n    \"\"\"\n    Error reading transaction nonce field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_R = auto()\n    \"\"\"\n    Error reading transaction signature R field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_S = auto()\n    \"\"\"\n    Error reading transaction signature S field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_V = auto()\n    \"\"\"\n    Error reading transaction signature V field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_BASEFEE = auto()\n    \"\"\"\n    Error reading transaction basefee field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_PRIORITY_FEE = auto()\n    \"\"\"\n    Error reading transaction priority fee field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_DATA_SIZE = auto()\n    \"\"\"\n    Error reading transaction data field RLP, (rlp field length has leading zeros).\n    \"\"\"\n    RLP_LEADING_ZEROS_NONCE_SIZE = auto()\n    \"\"\"\n    Error reading transaction nonce field RLP, (rlp field length has leading zeros).\n    \"\"\"\n    RLP_TOO_FEW_ELEMENTS = auto()\n    \"\"\"\n    Error reading transaction RLP, structure has too few elements than expected.\n    \"\"\"\n    RLP_TOO_MANY_ELEMENTS = auto()\n    \"\"\"\n    Error reading transaction RLP, structure has too many elements than expected.\n    \"\"\"\n    RLP_ERROR_EOF = auto()\n    \"\"\"\n    Error reading transaction RLP, rlp stream unexpectedly finished.\n    \"\"\"\n    RLP_ERROR_SIZE = auto()\n    \"\"\"\n    Error reading transaction RLP, rlp size is invalid.\n    \"\"\"\n    RLP_ERROR_SIZE_LEADING_ZEROS = auto()\n    \"\"\"\n    Error reading transaction RLP, field size has leading zeros.\n    \"\"\"\n    INVALID_CHAINID = auto()\n    \"\"\"\n    Transaction chain id encoding is incorrect.\n    \"\"\"\n    RLP_INVALID_DATA = auto()\n    \"\"\"\n    Transaction data field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_GASLIMIT = auto()\n    \"\"\"\n    Transaction gaslimit field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_NONCE = auto()\n    \"\"\"\n    Transaction nonce field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_TO = auto()\n    \"\"\"\n    Transaction to field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_LONG = auto()\n    \"\"\"\n    Transaction access list address is > 20 bytes.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_SHORT = auto()\n    \"\"\"\n    Transaction access list address is < 20 bytes.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_STORAGE_TOO_LONG = auto()\n    \"\"\"\n    Transaction access list storage hash > 32 bytes.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_STORAGE_TOO_SHORT = auto()\n    \"\"\"\n    Transaction access list storage hash < 32 bytes.\n    \"\"\"\n    RLP_INVALID_HEADER = auto()\n    \"\"\"\n    Transaction failed to read from RLP as rlp header is invalid.\n    \"\"\"\n    RLP_INVALID_VALUE = auto()\n    \"\"\"\n    Transaction value field is invalid rlp/structure.\n    \"\"\"\n    EC_RECOVERY_FAIL = auto()\n    \"\"\"\n    Transaction has correct signature, but ec recovery failed.\n    \"\"\"\n    INSUFFICIENT_ACCOUNT_FUNDS = auto()\n    \"\"\"\n    Transaction's sender does not have enough funds to pay for the transaction.\n    \"\"\"\n    INSUFFICIENT_MAX_FEE_PER_GAS = auto()\n    \"\"\"\n    Transaction's max-fee-per-gas is lower than the block base-fee.\n    \"\"\"\n    PRIORITY_OVERFLOW = auto()\n    \"\"\"\n    Transaction's max-priority-fee-per-gas is exceeds 2^256-1 maximum value.\n    \"\"\"\n    PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS = auto()\n    \"\"\"\n    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas.\n    \"\"\"\n    PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS_2 = auto()\n    \"\"\"\n    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas (TransactionTests).\n    \"\"\"\n    INSUFFICIENT_MAX_FEE_PER_BLOB_GAS = auto()\n    \"\"\"\n    Transaction's max-fee-per-blob-gas is lower than the block's blob-gas price.\n    \"\"\"\n    INTRINSIC_GAS_TOO_LOW = auto()\n    \"\"\"\n    Transaction's gas limit is too low.\n    \"\"\"\n    INITCODE_SIZE_EXCEEDED = auto()\n    \"\"\"\n    Transaction's initcode for a contract-creating transaction is too large.\n    \"\"\"\n    TYPE_3_TX_PRE_FORK = auto()\n    \"\"\"\n    Transaction type 3 included before activation fork.\n    \"\"\"\n    TYPE_3_TX_ZERO_BLOBS_PRE_FORK = auto()\n    \"\"\"\n    Transaction type 3, with zero blobs, included before activation fork.\n    \"\"\"\n    TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH = auto()\n    \"\"\"\n    Transaction contains a blob versioned hash with an invalid version.\n    \"\"\"\n    TYPE_3_TX_WITH_FULL_BLOBS = auto()\n    \"\"\"\n    Transaction contains full blobs (network-version of the transaction).\n    \"\"\"\n    TYPE_3_TX_BLOB_COUNT_EXCEEDED = auto()\n    \"\"\"\n    Transaction contains too many blob versioned hashes.\n    \"\"\"\n    TYPE_3_TX_CONTRACT_CREATION = auto()\n    \"\"\"\n    Transaction is a type 3 transaction and has an empty `to`.\n    \"\"\"\n    TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED = auto()\n    \"\"\"\n    Transaction causes block to go over blob gas limit.\n    \"\"\"\n    GAS_ALLOWANCE_EXCEEDED = auto()\n    \"\"\"\n    Transaction causes block to go over blob gas limit.\n    \"\"\"\n    TYPE_3_TX_ZERO_BLOBS = auto()\n    \"\"\"\n    Transaction is type 3, but has no blobs.\n    \"\"\"\n
    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.TYPE_NOT_SUPPORTED","title":"TYPE_NOT_SUPPORTED = auto() class-attribute instance-attribute","text":"

    Transaction type is not supported on this chain configuration.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.SENDER_NOT_EOA","title":"SENDER_NOT_EOA = auto() class-attribute instance-attribute","text":"

    Transaction is coming from address that is not exist anymore.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.ADDRESS_TOO_SHORT","title":"ADDRESS_TOO_SHORT = auto() class-attribute instance-attribute","text":"

    Transaction to is not allowed to be less than 20 bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.ADDRESS_TOO_LONG","title":"ADDRESS_TOO_LONG = auto() class-attribute instance-attribute","text":"

    Transaction to is not allowed to be more than 20 bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.NONCE_MISMATCH_TOO_HIGH","title":"NONCE_MISMATCH_TOO_HIGH = auto() class-attribute instance-attribute","text":"

    Transaction nonce > sender.nonce.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.NONCE_MISMATCH_TOO_LOW","title":"NONCE_MISMATCH_TOO_LOW = auto() class-attribute instance-attribute","text":"

    Transaction nonce < sender.nonce.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.NONCE_TOO_BIG","title":"NONCE_TOO_BIG = auto() class-attribute instance-attribute","text":"

    Transaction nonce is not allowed to be max_uint64 - 1 (this is probably TransactionTest).

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.NONCE_IS_MAX","title":"NONCE_IS_MAX = auto() class-attribute instance-attribute","text":"

    Transaction nonce is not allowed to be max_uint64 - 1 (this is StateTests).

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.NONCE_OVERFLOW","title":"NONCE_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction nonce is not allowed to be more than uint64.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.GASLIMIT_OVERFLOW","title":"GASLIMIT_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction gaslimit exceeds 2^64-1 maximum value.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.VALUE_OVERFLOW","title":"VALUE_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction value exceeds 2^256-1 maximum value.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.GASPRICE_OVERFLOW","title":"GASPRICE_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction gasPrice exceeds 2^256-1 maximum value.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.GASLIMIT_PRICE_PRODUCT_OVERFLOW","title":"GASLIMIT_PRICE_PRODUCT_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction gasPrice * gasLimit exceeds 2^256-1 maximum value.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.INVALID_SIGNATURE_VRS","title":"INVALID_SIGNATURE_VRS = auto() class-attribute instance-attribute","text":"

    Invalid transaction v, r, s values.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_SIGNATURE_R","title":"RLP_INVALID_SIGNATURE_R = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature R value.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_SIGNATURE_S","title":"RLP_INVALID_SIGNATURE_S = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature S value.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_GASLIMIT","title":"RLP_LEADING_ZEROS_GASLIMIT = auto() class-attribute instance-attribute","text":"

    Error reading transaction gaslimit field RLP.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_GASPRICE","title":"RLP_LEADING_ZEROS_GASPRICE = auto() class-attribute instance-attribute","text":"

    Error reading transaction gasprice field RLP.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_VALUE","title":"RLP_LEADING_ZEROS_VALUE = auto() class-attribute instance-attribute","text":"

    Error reading transaction value field RLP.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_NONCE","title":"RLP_LEADING_ZEROS_NONCE = auto() class-attribute instance-attribute","text":"

    Error reading transaction nonce field RLP.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_R","title":"RLP_LEADING_ZEROS_R = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature R field RLP.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_S","title":"RLP_LEADING_ZEROS_S = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature S field RLP.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_V","title":"RLP_LEADING_ZEROS_V = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature V field RLP.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_BASEFEE","title":"RLP_LEADING_ZEROS_BASEFEE = auto() class-attribute instance-attribute","text":"

    Error reading transaction basefee field RLP.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_PRIORITY_FEE","title":"RLP_LEADING_ZEROS_PRIORITY_FEE = auto() class-attribute instance-attribute","text":"

    Error reading transaction priority fee field RLP.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_DATA_SIZE","title":"RLP_LEADING_ZEROS_DATA_SIZE = auto() class-attribute instance-attribute","text":"

    Error reading transaction data field RLP, (rlp field length has leading zeros).

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_NONCE_SIZE","title":"RLP_LEADING_ZEROS_NONCE_SIZE = auto() class-attribute instance-attribute","text":"

    Error reading transaction nonce field RLP, (rlp field length has leading zeros).

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_TOO_FEW_ELEMENTS","title":"RLP_TOO_FEW_ELEMENTS = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, structure has too few elements than expected.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_TOO_MANY_ELEMENTS","title":"RLP_TOO_MANY_ELEMENTS = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, structure has too many elements than expected.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_ERROR_EOF","title":"RLP_ERROR_EOF = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, rlp stream unexpectedly finished.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_ERROR_SIZE","title":"RLP_ERROR_SIZE = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, rlp size is invalid.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_ERROR_SIZE_LEADING_ZEROS","title":"RLP_ERROR_SIZE_LEADING_ZEROS = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, field size has leading zeros.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.INVALID_CHAINID","title":"INVALID_CHAINID = auto() class-attribute instance-attribute","text":"

    Transaction chain id encoding is incorrect.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_DATA","title":"RLP_INVALID_DATA = auto() class-attribute instance-attribute","text":"

    Transaction data field is invalid rlp.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_GASLIMIT","title":"RLP_INVALID_GASLIMIT = auto() class-attribute instance-attribute","text":"

    Transaction gaslimit field is invalid rlp.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_NONCE","title":"RLP_INVALID_NONCE = auto() class-attribute instance-attribute","text":"

    Transaction nonce field is invalid rlp.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_TO","title":"RLP_INVALID_TO = auto() class-attribute instance-attribute","text":"

    Transaction to field is invalid rlp.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_LONG","title":"RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_LONG = auto() class-attribute instance-attribute","text":"

    Transaction access list address is > 20 bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_SHORT","title":"RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_SHORT = auto() class-attribute instance-attribute","text":"

    Transaction access list address is < 20 bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_ACCESS_LIST_STORAGE_TOO_LONG","title":"RLP_INVALID_ACCESS_LIST_STORAGE_TOO_LONG = auto() class-attribute instance-attribute","text":"

    Transaction access list storage hash > 32 bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_ACCESS_LIST_STORAGE_TOO_SHORT","title":"RLP_INVALID_ACCESS_LIST_STORAGE_TOO_SHORT = auto() class-attribute instance-attribute","text":"

    Transaction access list storage hash < 32 bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_HEADER","title":"RLP_INVALID_HEADER = auto() class-attribute instance-attribute","text":"

    Transaction failed to read from RLP as rlp header is invalid.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_VALUE","title":"RLP_INVALID_VALUE = auto() class-attribute instance-attribute","text":"

    Transaction value field is invalid rlp/structure.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.EC_RECOVERY_FAIL","title":"EC_RECOVERY_FAIL = auto() class-attribute instance-attribute","text":"

    Transaction has correct signature, but ec recovery failed.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.INSUFFICIENT_ACCOUNT_FUNDS","title":"INSUFFICIENT_ACCOUNT_FUNDS = auto() class-attribute instance-attribute","text":"

    Transaction's sender does not have enough funds to pay for the transaction.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS","title":"INSUFFICIENT_MAX_FEE_PER_GAS = auto() class-attribute instance-attribute","text":"

    Transaction's max-fee-per-gas is lower than the block base-fee.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.PRIORITY_OVERFLOW","title":"PRIORITY_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction's max-priority-fee-per-gas is exceeds 2^256-1 maximum value.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS","title":"PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS = auto() class-attribute instance-attribute","text":"

    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS_2","title":"PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS_2 = auto() class-attribute instance-attribute","text":"

    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas (TransactionTests).

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS","title":"INSUFFICIENT_MAX_FEE_PER_BLOB_GAS = auto() class-attribute instance-attribute","text":"

    Transaction's max-fee-per-blob-gas is lower than the block's blob-gas price.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.INTRINSIC_GAS_TOO_LOW","title":"INTRINSIC_GAS_TOO_LOW = auto() class-attribute instance-attribute","text":"

    Transaction's gas limit is too low.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.INITCODE_SIZE_EXCEEDED","title":"INITCODE_SIZE_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction's initcode for a contract-creating transaction is too large.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_PRE_FORK","title":"TYPE_3_TX_PRE_FORK = auto() class-attribute instance-attribute","text":"

    Transaction type 3 included before activation fork.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_ZERO_BLOBS_PRE_FORK","title":"TYPE_3_TX_ZERO_BLOBS_PRE_FORK = auto() class-attribute instance-attribute","text":"

    Transaction type 3, with zero blobs, included before activation fork.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH","title":"TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH = auto() class-attribute instance-attribute","text":"

    Transaction contains a blob versioned hash with an invalid version.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_WITH_FULL_BLOBS","title":"TYPE_3_TX_WITH_FULL_BLOBS = auto() class-attribute instance-attribute","text":"

    Transaction contains full blobs (network-version of the transaction).

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED","title":"TYPE_3_TX_BLOB_COUNT_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction contains too many blob versioned hashes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_CONTRACT_CREATION","title":"TYPE_3_TX_CONTRACT_CREATION = auto() class-attribute instance-attribute","text":"

    Transaction is a type 3 transaction and has an empty to.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED","title":"TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction causes block to go over blob gas limit.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.GAS_ALLOWANCE_EXCEEDED","title":"GAS_ALLOWANCE_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction causes block to go over blob gas limit.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_ZERO_BLOBS","title":"TYPE_3_TX_ZERO_BLOBS = auto() class-attribute instance-attribute","text":"

    Transaction is type 3, but has no blobs.

    "},{"location":"consuming_tests/exceptions/#blockexception","title":"BlockException","text":"

    Bases: ExceptionBase

    Exception raised when a block is invalid, but not due to a transaction.

    E.g. all transactions in the block are valid, and can be applied to the state, but the block header contains an invalid field.

    Source code in src/ethereum_test_exceptions/exceptions.py
    @unique\nclass BlockException(ExceptionBase):\n    \"\"\"\n    Exception raised when a block is invalid, but not due to a transaction.\n\n    E.g. all transactions in the block are valid, and can be applied to the state, but the\n    block header contains an invalid field.\n    \"\"\"\n\n    TOO_MANY_UNCLES = auto()\n    \"\"\"\n    Block declares too many uncles over the allowed limit.\n    \"\"\"\n    UNCLE_IN_CHAIN = auto()\n    \"\"\"\n    Block declares uncle header that is already imported into chain.\n    \"\"\"\n    UNCLE_IS_ANCESTOR = auto()\n    \"\"\"\n    Block declares uncle header that is directly a parent of this block.\n    \"\"\"\n    UNCLE_IS_BROTHER = auto()\n    \"\"\"\n    Block declares two similar uncle headers.\n    \"\"\"\n    UNCLE_PARENT_INCORRECT = auto()\n    \"\"\"\n    Block declares uncle header that is an outdated block to be an uncle.\n    \"\"\"\n    EXTRA_DATA_TOO_BIG = auto()\n    \"\"\"\n    Block header's extra data >32 bytes.\n    \"\"\"\n    EXTRA_DATA_INVALID_DAO = auto()\n    \"\"\"\n    Block header's extra data after dao fork must be a fixed pre defined hash.\n    \"\"\"\n    UNKNOWN_PARENT = auto()\n    \"\"\"\n    Block header's parent hash does not correspond to any of existing blocks on chain.\n    \"\"\"\n    UNCLE_UNKNOWN_PARENT = auto()\n    \"\"\"\n    Uncle header's parent hash does not correspond to any of existing blocks on chain.\n    \"\"\"\n    UNKNOWN_PARENT_ZERO = auto()\n    \"\"\"\n    Block header's parent hash is zero hash.\n    \"\"\"\n    GASLIMIT_TOO_BIG = auto()\n    \"\"\"\n    Block header's gas limit > 0x7fffffffffffffff.\n    \"\"\"\n    INVALID_BLOCK_NUMBER = auto()\n    \"\"\"\n    Block header's number != parent header's number + 1.\n    \"\"\"\n    INVALID_BLOCK_TIMESTAMP_OLDER_THAN_PARENT = auto()\n    \"\"\"\n    Block header's timestamp <= parent header's timestamp.\n    \"\"\"\n    INVALID_DIFFICULTY = auto()\n    \"\"\"\n    Block header's difficulty does not match the difficulty formula calculated from previous block.\n    \"\"\"\n    INVALID_LOG_BLOOM = auto()\n    \"\"\"\n    Block header's logs bloom hash does not match the actually computed log bloom.\n    \"\"\"\n    INVALID_STATE_ROOT = auto()\n    \"\"\"\n    Block header's state root hash does not match the actually computed hash of the state.\n    \"\"\"\n    INVALID_RECEIPTS_ROOT = auto()\n    \"\"\"\n    Block header's receipts root hash does not match the actually computed hash of receipts.\n    \"\"\"\n    INVALID_TRANSACTIONS_ROOT = auto()\n    \"\"\"\n    Block header's transactions root hash does not match the actually computed hash of tx tree.\n    \"\"\"\n    INVALID_UNCLES_HASH = auto()\n    \"\"\"\n    Block header's uncle hash does not match the actually computed hash of block's uncles.\n    \"\"\"\n    GAS_USED_OVERFLOW = auto()\n    \"\"\"\n    Block transactions consume more gas than block header allow.\n    \"\"\"\n    INVALID_GASLIMIT = auto()\n    \"\"\"\n    Block header's gas limit does not match the gas limit formula calculated from previous block.\n    \"\"\"\n    INVALID_BASEFEE_PER_GAS = auto()\n    \"\"\"\n    Block header's base_fee_per_gas field is calculated incorrect.\n    \"\"\"\n    INVALID_GAS_USED = auto()\n    \"\"\"\n    Block header's actual gas used does not match the provided header's value\n    \"\"\"\n    INVALID_WITHDRAWALS_ROOT = auto()\n    \"\"\"\n    Block header's withdrawals root does not match calculated withdrawals root.\n    \"\"\"\n    INCORRECT_BLOCK_FORMAT = auto()\n    \"\"\"\n    Block's format is incorrect, contains invalid fields, is missing fields, or contains fields of\n    a fork that is not active yet.\n    \"\"\"\n    BLOB_GAS_USED_ABOVE_LIMIT = auto()\n    \"\"\"\n    Block's blob gas used in header is above the limit.\n    \"\"\"\n    INCORRECT_BLOB_GAS_USED = auto()\n    \"\"\"\n    Block's blob gas used in header is incorrect.\n    \"\"\"\n    INCORRECT_EXCESS_BLOB_GAS = auto()\n    \"\"\"\n    Block's excess blob gas in header is incorrect.\n    \"\"\"\n    RLP_STRUCTURES_ENCODING = auto()\n    \"\"\"\n    Block's rlp encoding is valid but ethereum structures in it are invalid.\n    \"\"\"\n    RLP_WITHDRAWALS_NOT_READ = auto()\n    \"\"\"\n    Block's rlp encoding is missing withdrawals.\n    \"\"\"\n    RLP_INVALID_FIELD_OVERFLOW_64 = auto()\n    \"\"\"\n    One of block's fields rlp is overflow 2**64 value.\n    \"\"\"\n    RLP_INVALID_ADDRESS = auto()\n    \"\"\"\n    Block withdrawals address is rlp of invalid address != 20 bytes.\n    \"\"\"\n    INVALID_REQUESTS = auto()\n    \"\"\"\n    Block's requests are invalid.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LEGACY = auto()\n    \"\"\"\n    Legacy block import is impossible in this chain configuration.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LEGACY_WRONG_PARENT = auto()\n    \"\"\"\n    Legacy block import is impossible, trying to import on top of a block that is not legacy.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LONDON_WRONG_PARENT = auto()\n    \"\"\"\n    Trying to import london (basefee) block on top of block that is not 1559.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_PARIS_WRONG_POW = auto()\n    \"\"\"\n    Trying to import paris(merge) block with PoW enabled.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_PARIS_WRONG_POS = auto()\n    \"\"\"\n    Trying to import paris(merge) block with PoS enabled before TTD is reached.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LONDON_OVER_PARIS = auto()\n    \"\"\"\n    Trying to import london looking block over paris network (POS).\n    \"\"\"\n    IMPORT_IMPOSSIBLE_PARIS_OVER_SHANGHAI = auto()\n    \"\"\"\n    Trying to import paris block on top of shanghai block.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_SHANGHAI = auto()\n    \"\"\"\n    Shanghai block import is impossible in this chain configuration.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_UNCLES_OVER_PARIS = auto()\n    \"\"\"\n    Trying to import a block after paris fork that has not empty uncles hash.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_DIFFICULTY_OVER_PARIS = auto()\n    \"\"\"\n    Trying to import a block after paris fork that has difficulty != 0.\n    \"\"\"\n
    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.TOO_MANY_UNCLES","title":"TOO_MANY_UNCLES = auto() class-attribute instance-attribute","text":"

    Block declares too many uncles over the allowed limit.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.UNCLE_IN_CHAIN","title":"UNCLE_IN_CHAIN = auto() class-attribute instance-attribute","text":"

    Block declares uncle header that is already imported into chain.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.UNCLE_IS_ANCESTOR","title":"UNCLE_IS_ANCESTOR = auto() class-attribute instance-attribute","text":"

    Block declares uncle header that is directly a parent of this block.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.UNCLE_IS_BROTHER","title":"UNCLE_IS_BROTHER = auto() class-attribute instance-attribute","text":"

    Block declares two similar uncle headers.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.UNCLE_PARENT_INCORRECT","title":"UNCLE_PARENT_INCORRECT = auto() class-attribute instance-attribute","text":"

    Block declares uncle header that is an outdated block to be an uncle.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.EXTRA_DATA_TOO_BIG","title":"EXTRA_DATA_TOO_BIG = auto() class-attribute instance-attribute","text":"

    Block header's extra data >32 bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.EXTRA_DATA_INVALID_DAO","title":"EXTRA_DATA_INVALID_DAO = auto() class-attribute instance-attribute","text":"

    Block header's extra data after dao fork must be a fixed pre defined hash.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.UNKNOWN_PARENT","title":"UNKNOWN_PARENT = auto() class-attribute instance-attribute","text":"

    Block header's parent hash does not correspond to any of existing blocks on chain.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.UNCLE_UNKNOWN_PARENT","title":"UNCLE_UNKNOWN_PARENT = auto() class-attribute instance-attribute","text":"

    Uncle header's parent hash does not correspond to any of existing blocks on chain.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.UNKNOWN_PARENT_ZERO","title":"UNKNOWN_PARENT_ZERO = auto() class-attribute instance-attribute","text":"

    Block header's parent hash is zero hash.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.GASLIMIT_TOO_BIG","title":"GASLIMIT_TOO_BIG = auto() class-attribute instance-attribute","text":"

    Block header's gas limit > 0x7fffffffffffffff.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_BLOCK_NUMBER","title":"INVALID_BLOCK_NUMBER = auto() class-attribute instance-attribute","text":"

    Block header's number != parent header's number + 1.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_BLOCK_TIMESTAMP_OLDER_THAN_PARENT","title":"INVALID_BLOCK_TIMESTAMP_OLDER_THAN_PARENT = auto() class-attribute instance-attribute","text":"

    Block header's timestamp <= parent header's timestamp.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_DIFFICULTY","title":"INVALID_DIFFICULTY = auto() class-attribute instance-attribute","text":"

    Block header's difficulty does not match the difficulty formula calculated from previous block.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_LOG_BLOOM","title":"INVALID_LOG_BLOOM = auto() class-attribute instance-attribute","text":"

    Block header's logs bloom hash does not match the actually computed log bloom.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_STATE_ROOT","title":"INVALID_STATE_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's state root hash does not match the actually computed hash of the state.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_RECEIPTS_ROOT","title":"INVALID_RECEIPTS_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's receipts root hash does not match the actually computed hash of receipts.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_TRANSACTIONS_ROOT","title":"INVALID_TRANSACTIONS_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's transactions root hash does not match the actually computed hash of tx tree.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_UNCLES_HASH","title":"INVALID_UNCLES_HASH = auto() class-attribute instance-attribute","text":"

    Block header's uncle hash does not match the actually computed hash of block's uncles.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.GAS_USED_OVERFLOW","title":"GAS_USED_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Block transactions consume more gas than block header allow.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_GASLIMIT","title":"INVALID_GASLIMIT = auto() class-attribute instance-attribute","text":"

    Block header's gas limit does not match the gas limit formula calculated from previous block.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_BASEFEE_PER_GAS","title":"INVALID_BASEFEE_PER_GAS = auto() class-attribute instance-attribute","text":"

    Block header's base_fee_per_gas field is calculated incorrect.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_GAS_USED","title":"INVALID_GAS_USED = auto() class-attribute instance-attribute","text":"

    Block header's actual gas used does not match the provided header's value

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_WITHDRAWALS_ROOT","title":"INVALID_WITHDRAWALS_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's withdrawals root does not match calculated withdrawals root.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INCORRECT_BLOCK_FORMAT","title":"INCORRECT_BLOCK_FORMAT = auto() class-attribute instance-attribute","text":"

    Block's format is incorrect, contains invalid fields, is missing fields, or contains fields of a fork that is not active yet.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.BLOB_GAS_USED_ABOVE_LIMIT","title":"BLOB_GAS_USED_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    Block's blob gas used in header is above the limit.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INCORRECT_BLOB_GAS_USED","title":"INCORRECT_BLOB_GAS_USED = auto() class-attribute instance-attribute","text":"

    Block's blob gas used in header is incorrect.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INCORRECT_EXCESS_BLOB_GAS","title":"INCORRECT_EXCESS_BLOB_GAS = auto() class-attribute instance-attribute","text":"

    Block's excess blob gas in header is incorrect.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.RLP_STRUCTURES_ENCODING","title":"RLP_STRUCTURES_ENCODING = auto() class-attribute instance-attribute","text":"

    Block's rlp encoding is valid but ethereum structures in it are invalid.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.RLP_WITHDRAWALS_NOT_READ","title":"RLP_WITHDRAWALS_NOT_READ = auto() class-attribute instance-attribute","text":"

    Block's rlp encoding is missing withdrawals.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.RLP_INVALID_FIELD_OVERFLOW_64","title":"RLP_INVALID_FIELD_OVERFLOW_64 = auto() class-attribute instance-attribute","text":"

    One of block's fields rlp is overflow 2**64 value.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.RLP_INVALID_ADDRESS","title":"RLP_INVALID_ADDRESS = auto() class-attribute instance-attribute","text":"

    Block withdrawals address is rlp of invalid address != 20 bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.INVALID_REQUESTS","title":"INVALID_REQUESTS = auto() class-attribute instance-attribute","text":"

    Block's requests are invalid.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_LEGACY","title":"IMPORT_IMPOSSIBLE_LEGACY = auto() class-attribute instance-attribute","text":"

    Legacy block import is impossible in this chain configuration.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_LEGACY_WRONG_PARENT","title":"IMPORT_IMPOSSIBLE_LEGACY_WRONG_PARENT = auto() class-attribute instance-attribute","text":"

    Legacy block import is impossible, trying to import on top of a block that is not legacy.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_LONDON_WRONG_PARENT","title":"IMPORT_IMPOSSIBLE_LONDON_WRONG_PARENT = auto() class-attribute instance-attribute","text":"

    Trying to import london (basefee) block on top of block that is not 1559.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_PARIS_WRONG_POW","title":"IMPORT_IMPOSSIBLE_PARIS_WRONG_POW = auto() class-attribute instance-attribute","text":"

    Trying to import paris(merge) block with PoW enabled.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_PARIS_WRONG_POS","title":"IMPORT_IMPOSSIBLE_PARIS_WRONG_POS = auto() class-attribute instance-attribute","text":"

    Trying to import paris(merge) block with PoS enabled before TTD is reached.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_LONDON_OVER_PARIS","title":"IMPORT_IMPOSSIBLE_LONDON_OVER_PARIS = auto() class-attribute instance-attribute","text":"

    Trying to import london looking block over paris network (POS).

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_PARIS_OVER_SHANGHAI","title":"IMPORT_IMPOSSIBLE_PARIS_OVER_SHANGHAI = auto() class-attribute instance-attribute","text":"

    Trying to import paris block on top of shanghai block.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_SHANGHAI","title":"IMPORT_IMPOSSIBLE_SHANGHAI = auto() class-attribute instance-attribute","text":"

    Shanghai block import is impossible in this chain configuration.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_UNCLES_OVER_PARIS","title":"IMPORT_IMPOSSIBLE_UNCLES_OVER_PARIS = auto() class-attribute instance-attribute","text":"

    Trying to import a block after paris fork that has not empty uncles hash.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_DIFFICULTY_OVER_PARIS","title":"IMPORT_IMPOSSIBLE_DIFFICULTY_OVER_PARIS = auto() class-attribute instance-attribute","text":"

    Trying to import a block after paris fork that has difficulty != 0.

    "},{"location":"consuming_tests/exceptions/#eofexception","title":"EOFException","text":"

    Bases: ExceptionBase

    Exception raised when an EOF container is invalid.

    Source code in src/ethereum_test_exceptions/exceptions.py
    @unique\nclass EOFException(ExceptionBase):\n    \"\"\"\n    Exception raised when an EOF container is invalid.\n    \"\"\"\n\n    DEFAULT_EXCEPTION = auto()\n    \"\"\"\n    Expect some exception, not yet known.\n    \"\"\"\n\n    UNDEFINED_EXCEPTION = auto()\n    \"\"\"\n    Indicates that exception string is not mapped to an exception enum.\n    \"\"\"\n\n    UNDEFINED_INSTRUCTION = auto()\n    \"\"\"\n    EOF container has undefined instruction in it's body code.\n    \"\"\"\n\n    UNKNOWN_VERSION = auto()\n    \"\"\"\n    EOF container has an unknown version.\n    \"\"\"\n    INCOMPLETE_MAGIC = auto()\n    \"\"\"\n    EOF container has not enough bytes to read magic.\n    \"\"\"\n    INVALID_MAGIC = auto()\n    \"\"\"\n    EOF container has not allowed magic version byte.\n    \"\"\"\n    INVALID_VERSION = auto()\n    \"\"\"\n    EOF container version bytes mismatch.\n    \"\"\"\n    INVALID_NON_RETURNING_FLAG = auto()\n    \"\"\"\n    EOF container's section has non-returning flag set incorrectly.\n    \"\"\"\n    INVALID_RJUMP_DESTINATION = auto()\n    \"\"\"\n    Code has RJUMP instruction with invalid parameters.\n    \"\"\"\n    MISSING_TYPE_HEADER = auto()\n    \"\"\"\n    EOF container missing types section.\n    \"\"\"\n    INVALID_TYPE_SECTION_SIZE = auto()\n    \"\"\"\n    EOF container types section has wrong size.\n    \"\"\"\n    INVALID_TYPE_BODY = auto()\n    \"\"\"\n    EOF container types body section bytes are wrong.\n    \"\"\"\n    MISSING_CODE_HEADER = auto()\n    \"\"\"\n    EOF container missing code section.\n    \"\"\"\n    INVALID_CODE_SECTION = auto()\n    \"\"\"\n    EOF container code section bytes are incorrect.\n    \"\"\"\n    INCOMPLETE_CODE_HEADER = auto()\n    \"\"\"\n    EOF container code header missing bytes.\n    \"\"\"\n    INCOMPLETE_DATA_HEADER = auto()\n    \"\"\"\n    EOF container data header missing bytes.\n    \"\"\"\n    ZERO_SECTION_SIZE = auto()\n    \"\"\"\n    EOF container data header construction is wrong.\n    \"\"\"\n    MISSING_DATA_SECTION = auto()\n    \"\"\"\n    EOF container missing data section\n    \"\"\"\n    INCOMPLETE_CONTAINER = auto()\n    \"\"\"\n    EOF container bytes are incomplete.\n    \"\"\"\n    INVALID_SECTION_BODIES_SIZE = auto()\n    \"\"\"\n    Sections bodies does not match sections headers.\n    \"\"\"\n    TRAILING_BYTES = auto()\n    \"\"\"\n    EOF container has bytes beyond data section.\n    \"\"\"\n    MISSING_TERMINATOR = auto()\n    \"\"\"\n    EOF container missing terminator bytes between header and body.\n    \"\"\"\n    MISSING_HEADERS_TERMINATOR = auto()\n    \"\"\"\n    Some type of another exception about missing headers terminator.\n    \"\"\"\n    INVALID_FIRST_SECTION_TYPE = auto()\n    \"\"\"\n    EOF container header does not have types section first.\n    \"\"\"\n    INCOMPLETE_SECTION_NUMBER = auto()\n    \"\"\"\n    EOF container header has section that is missing declaration bytes.\n    \"\"\"\n    INCOMPLETE_SECTION_SIZE = auto()\n    \"\"\"\n    EOF container header has section that is defined incorrectly.\n    \"\"\"\n    TOO_MANY_CODE_SECTIONS = auto()\n    \"\"\"\n    EOF container header has too many code sections.\n    \"\"\"\n    MISSING_STOP_OPCODE = auto()\n    \"\"\"\n    EOF container's code missing STOP bytecode at it's end.\n    \"\"\"\n    INPUTS_OUTPUTS_NUM_ABOVE_LIMIT = auto()\n    \"\"\"\n    EOF container code section inputs/outputs number is above the limit\n    \"\"\"\n    UNREACHABLE_INSTRUCTIONS = auto()\n    \"\"\"\n    EOF container's code have instructions that are unreachable.\n    \"\"\"\n    UNREACHABLE_CODE_SECTIONS = auto()\n    \"\"\"\n    EOF container's body have code sections that are unreachable.\n    \"\"\"\n    STACK_UNDERFLOW = auto()\n    \"\"\"\n    EOF container's code produces an stack underflow.\n    \"\"\"\n    STACK_HEIGHT_MISMATCH = auto()\n    \"\"\"\n    EOF container section stack height mismatch.\n    \"\"\"\n    MAX_STACK_HEIGHT_ABOVE_LIMIT = auto()\n    \"\"\"\n    EOF container's specified max stack height is above the limit.\n    \"\"\"\n    STACK_HIGHER_THAN_OUTPUTS = auto()\n    \"\"\"\n    EOF container section stack height is higher than the outputs.\n    when returning\n    \"\"\"\n    JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS = auto()\n    \"\"\"\n    EOF container section JUMPF's to a destination section with incompatible outputs.\n    \"\"\"\n    INVALID_MAX_STACK_HEIGHT = auto()\n    \"\"\"\n    EOF container section's specified max stack height does not match the actual stack height.\n    \"\"\"\n    INVALID_DATALOADN_INDEX = auto()\n    \"\"\"\n    A DATALOADN instruction has out-of-bounds index for the data section.\n    \"\"\"\n    TRUNCATED_INSTRUCTION = auto()\n    \"\"\"\n    EOF container's code section has truncated instruction.\n    \"\"\"\n    TOPLEVEL_CONTAINER_TRUNCATED = auto()\n    \"\"\"\n    Top-level EOF container has data section truncated\n    \"\"\"\n    ORPHAN_SUBCONTAINER = auto()\n    \"\"\"\n    EOF container has an unreferenced subcontainer.\n    '\"\"\"\n    CONTAINER_SIZE_ABOVE_LIMIT = auto()\n    \"\"\"\n    EOF container is above size limit\n    \"\"\"\n    INVALID_CONTAINER_SECTION_INDEX = auto()\n    \"\"\"\n    Instruction references container section that does not exist.\n    \"\"\"\n    INCOMPATIBLE_CONTAINER_KIND = auto()\n    \"\"\"\n    Incompatible instruction found in a container of a specific kind.\n    \"\"\"\n    TOO_MANY_CONTAINERS = auto()\n    \"\"\"\n    EOF container header has too many sub-containers.\n    \"\"\"\n    INVALID_CODE_SECTION_INDEX = auto()\n    \"\"\"\n    CALLF Operation referes to a non-existent code section\n    \"\"\"\n    UNEXPECTED_HEADER_KIND = auto()\n    \"\"\"\n    Header parsing encounterd a section kind it wasn't expecting\n    \"\"\"\n
    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.DEFAULT_EXCEPTION","title":"DEFAULT_EXCEPTION = auto() class-attribute instance-attribute","text":"

    Expect some exception, not yet known.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.UNDEFINED_EXCEPTION","title":"UNDEFINED_EXCEPTION = auto() class-attribute instance-attribute","text":"

    Indicates that exception string is not mapped to an exception enum.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.UNDEFINED_INSTRUCTION","title":"UNDEFINED_INSTRUCTION = auto() class-attribute instance-attribute","text":"

    EOF container has undefined instruction in it's body code.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.UNKNOWN_VERSION","title":"UNKNOWN_VERSION = auto() class-attribute instance-attribute","text":"

    EOF container has an unknown version.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_MAGIC","title":"INCOMPLETE_MAGIC = auto() class-attribute instance-attribute","text":"

    EOF container has not enough bytes to read magic.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_MAGIC","title":"INVALID_MAGIC = auto() class-attribute instance-attribute","text":"

    EOF container has not allowed magic version byte.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_VERSION","title":"INVALID_VERSION = auto() class-attribute instance-attribute","text":"

    EOF container version bytes mismatch.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_NON_RETURNING_FLAG","title":"INVALID_NON_RETURNING_FLAG = auto() class-attribute instance-attribute","text":"

    EOF container's section has non-returning flag set incorrectly.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_RJUMP_DESTINATION","title":"INVALID_RJUMP_DESTINATION = auto() class-attribute instance-attribute","text":"

    Code has RJUMP instruction with invalid parameters.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.MISSING_TYPE_HEADER","title":"MISSING_TYPE_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container missing types section.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_TYPE_SECTION_SIZE","title":"INVALID_TYPE_SECTION_SIZE = auto() class-attribute instance-attribute","text":"

    EOF container types section has wrong size.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_TYPE_BODY","title":"INVALID_TYPE_BODY = auto() class-attribute instance-attribute","text":"

    EOF container types body section bytes are wrong.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.MISSING_CODE_HEADER","title":"MISSING_CODE_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container missing code section.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_CODE_SECTION","title":"INVALID_CODE_SECTION = auto() class-attribute instance-attribute","text":"

    EOF container code section bytes are incorrect.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_CODE_HEADER","title":"INCOMPLETE_CODE_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container code header missing bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_DATA_HEADER","title":"INCOMPLETE_DATA_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container data header missing bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.ZERO_SECTION_SIZE","title":"ZERO_SECTION_SIZE = auto() class-attribute instance-attribute","text":"

    EOF container data header construction is wrong.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.MISSING_DATA_SECTION","title":"MISSING_DATA_SECTION = auto() class-attribute instance-attribute","text":"

    EOF container missing data section

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_CONTAINER","title":"INCOMPLETE_CONTAINER = auto() class-attribute instance-attribute","text":"

    EOF container bytes are incomplete.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_SECTION_BODIES_SIZE","title":"INVALID_SECTION_BODIES_SIZE = auto() class-attribute instance-attribute","text":"

    Sections bodies does not match sections headers.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.TRAILING_BYTES","title":"TRAILING_BYTES = auto() class-attribute instance-attribute","text":"

    EOF container has bytes beyond data section.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.MISSING_TERMINATOR","title":"MISSING_TERMINATOR = auto() class-attribute instance-attribute","text":"

    EOF container missing terminator bytes between header and body.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.MISSING_HEADERS_TERMINATOR","title":"MISSING_HEADERS_TERMINATOR = auto() class-attribute instance-attribute","text":"

    Some type of another exception about missing headers terminator.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_FIRST_SECTION_TYPE","title":"INVALID_FIRST_SECTION_TYPE = auto() class-attribute instance-attribute","text":"

    EOF container header does not have types section first.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_SECTION_NUMBER","title":"INCOMPLETE_SECTION_NUMBER = auto() class-attribute instance-attribute","text":"

    EOF container header has section that is missing declaration bytes.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_SECTION_SIZE","title":"INCOMPLETE_SECTION_SIZE = auto() class-attribute instance-attribute","text":"

    EOF container header has section that is defined incorrectly.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.TOO_MANY_CODE_SECTIONS","title":"TOO_MANY_CODE_SECTIONS = auto() class-attribute instance-attribute","text":"

    EOF container header has too many code sections.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.MISSING_STOP_OPCODE","title":"MISSING_STOP_OPCODE = auto() class-attribute instance-attribute","text":"

    EOF container's code missing STOP bytecode at it's end.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INPUTS_OUTPUTS_NUM_ABOVE_LIMIT","title":"INPUTS_OUTPUTS_NUM_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    EOF container code section inputs/outputs number is above the limit

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.UNREACHABLE_INSTRUCTIONS","title":"UNREACHABLE_INSTRUCTIONS = auto() class-attribute instance-attribute","text":"

    EOF container's code have instructions that are unreachable.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.UNREACHABLE_CODE_SECTIONS","title":"UNREACHABLE_CODE_SECTIONS = auto() class-attribute instance-attribute","text":"

    EOF container's body have code sections that are unreachable.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.STACK_UNDERFLOW","title":"STACK_UNDERFLOW = auto() class-attribute instance-attribute","text":"

    EOF container's code produces an stack underflow.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.STACK_HEIGHT_MISMATCH","title":"STACK_HEIGHT_MISMATCH = auto() class-attribute instance-attribute","text":"

    EOF container section stack height mismatch.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT","title":"MAX_STACK_HEIGHT_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    EOF container's specified max stack height is above the limit.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.STACK_HIGHER_THAN_OUTPUTS","title":"STACK_HIGHER_THAN_OUTPUTS = auto() class-attribute instance-attribute","text":"

    EOF container section stack height is higher than the outputs. when returning

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS","title":"JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS = auto() class-attribute instance-attribute","text":"

    EOF container section JUMPF's to a destination section with incompatible outputs.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_MAX_STACK_HEIGHT","title":"INVALID_MAX_STACK_HEIGHT = auto() class-attribute instance-attribute","text":"

    EOF container section's specified max stack height does not match the actual stack height.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_DATALOADN_INDEX","title":"INVALID_DATALOADN_INDEX = auto() class-attribute instance-attribute","text":"

    A DATALOADN instruction has out-of-bounds index for the data section.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.TRUNCATED_INSTRUCTION","title":"TRUNCATED_INSTRUCTION = auto() class-attribute instance-attribute","text":"

    EOF container's code section has truncated instruction.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.TOPLEVEL_CONTAINER_TRUNCATED","title":"TOPLEVEL_CONTAINER_TRUNCATED = auto() class-attribute instance-attribute","text":"

    Top-level EOF container has data section truncated

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.ORPHAN_SUBCONTAINER","title":"ORPHAN_SUBCONTAINER = auto() class-attribute instance-attribute","text":"

    EOF container has an unreferenced subcontainer. '

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.CONTAINER_SIZE_ABOVE_LIMIT","title":"CONTAINER_SIZE_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    EOF container is above size limit

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_CONTAINER_SECTION_INDEX","title":"INVALID_CONTAINER_SECTION_INDEX = auto() class-attribute instance-attribute","text":"

    Instruction references container section that does not exist.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INCOMPATIBLE_CONTAINER_KIND","title":"INCOMPATIBLE_CONTAINER_KIND = auto() class-attribute instance-attribute","text":"

    Incompatible instruction found in a container of a specific kind.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.TOO_MANY_CONTAINERS","title":"TOO_MANY_CONTAINERS = auto() class-attribute instance-attribute","text":"

    EOF container header has too many sub-containers.

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.INVALID_CODE_SECTION_INDEX","title":"INVALID_CODE_SECTION_INDEX = auto() class-attribute instance-attribute","text":"

    CALLF Operation referes to a non-existent code section

    "},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.EOFException.UNEXPECTED_HEADER_KIND","title":"UNEXPECTED_HEADER_KIND = auto() class-attribute instance-attribute","text":"

    Header parsing encounterd a section kind it wasn't expecting

    "},{"location":"consuming_tests/state_test/","title":"State Tests","text":"

    The State Test fixture format tests are included in the fixtures subdirectory state_tests.

    These are produced by the StateTest and StateTestOnly test specs.

    "},{"location":"consuming_tests/state_test/#description","title":"Description","text":"

    The state test fixture format is used to test the state transition function of the Ethereum Virtual Machine (EVM).

    It does so by defining a transaction, a pre-execution state, and a post-execution state, and verifying that the transaction execution results in the expected post-execution state.

    A single JSON fixture file is composed of a JSON object where each key-value pair is a different Fixture test object, with the key string representing the test name.

    The JSON file path plus the test name are used as the unique test identifier.

    As opposed to other fixture formats, the state test fixture format could contain multiple test vectors per test object, each represented by an element in the mapping of lists of the post field.

    However tests generated by the execution-spec-tests repository do not use this feature, as every single test object contains only a single test vector.

    "},{"location":"consuming_tests/state_test/#consumption","title":"Consumption","text":"

    For each Fixture test object in the JSON fixture file, perform the following steps:

    1. Use pre as the starting state allocation of the execution environment for the test.
    2. Use env to configure the current execution environment.
    3. For each Fork key of post in the test, and for each of the elements of the list of FixtureForkPost values:

      1. Configure the execution fork schedule according to the current Fork key.
      2. Using the indexes values, and the transaction object, decode the transaction to be executed.
      3. If the serialized version of the decoded transaction does not match txbytes, fail the test.
      4. Attempt to apply the transaction using the current execution environment:

        1. If the transaction could not be applied to the current execution context:
          • If expectException is empty, fail the test.
          • If expectException is not empty, revert the state to the pre-state.
        2. If the transaction could be applied to the current execution context:
          • If expectException is not empty, fail the test.
      5. Compare the resulting post-state root with the expected post-state root contained in the hash field of the current FixtureForkPost, and fail the test if they do not match.

      6. Compare the resulting logs hash with the expected logs contained in the logs field of the current FixtureForkPost, and fail the test if they do not match.
    "},{"location":"consuming_tests/state_test/#structures","title":"Structures","text":""},{"location":"consuming_tests/state_test/#fixture","title":"Fixture","text":""},{"location":"consuming_tests/state_test/#-env-fixtureenvironment","title":"- env: FixtureEnvironment","text":"

    Execution environment description for the test.

    "},{"location":"consuming_tests/state_test/#-pre-alloc","title":"- pre: Alloc","text":"

    Starting account allocation for the test.

    "},{"location":"consuming_tests/state_test/#-transaction-fixturetransaction","title":"- transaction: FixtureTransaction","text":"

    Transaction to be executed.

    "},{"location":"consuming_tests/state_test/#-post-mappingforklist-fixtureforkpost","title":"- post: Mapping(Fork,List[ FixtureForkPost ])","text":"

    Mapping of lists of post for verification per fork, where each element represents a single possible outcome of the transaction execution after being applied to the pre.

    "},{"location":"consuming_tests/state_test/#fixtureenvironment","title":"FixtureEnvironment","text":""},{"location":"consuming_tests/state_test/#-currentcoinbase-address","title":"- currentCoinbase: Address","text":"

    The address of the account that will receive the rewards for building the block.

    "},{"location":"consuming_tests/state_test/#-currentgaslimit-zeropaddedhexnumber","title":"- currentGasLimit: ZeroPaddedHexNumber","text":"

    Total gas limit of the block where the transaction is executed.

    "},{"location":"consuming_tests/state_test/#-currentnumber-zeropaddedhexnumber","title":"- currentNumber: ZeroPaddedHexNumber","text":"

    Number of the block where the transaction is executed.

    "},{"location":"consuming_tests/state_test/#-currentdifficulty-zeropaddedhexnumber","title":"- currentDifficulty: ZeroPaddedHexNumber","text":"

    Difficulty of the block where the transaction is executed.

    "},{"location":"consuming_tests/state_test/#-currenttimestamp-zeropaddedhexnumber","title":"- currentTimestamp: ZeroPaddedHexNumber","text":"

    Timestamp of the block where the transaction is executed.

    "},{"location":"consuming_tests/state_test/#-currentbasefee-zeropaddedhexnumber-fork-london","title":"- currentBaseFee: ZeroPaddedHexNumber (fork: London)","text":"

    Base fee of the block where the transaction is executed.

    "},{"location":"consuming_tests/state_test/#-currentrandom-hash-fork-paris","title":"- currentRandom: Hash (fork: Paris)","text":"

    Randao value of the block where the transaction is executed.

    "},{"location":"consuming_tests/state_test/#-currentexcessblobgas-zeropaddedhexnumber-fork-cancun","title":"- currentExcessBlobGas: ZeroPaddedHexNumber (fork: Cancun)","text":"

    Excess blob gas of the block where the transaction is executed.

    "},{"location":"consuming_tests/state_test/#fixturetransaction","title":"FixtureTransaction","text":""},{"location":"consuming_tests/state_test/#-nonce-zeropaddedhexnumber","title":"- nonce: ZeroPaddedHexNumber","text":"

    Nonce of the account that sends the transaction

    "},{"location":"consuming_tests/state_test/#-gasprice-zeropaddedhexnumber","title":"- gasPrice: ZeroPaddedHexNumber","text":"

    Gas price for the transaction (Transaction types 0 & 1)

    "},{"location":"consuming_tests/state_test/#-maxpriorityfeepergas-hexnumber","title":"- maxPriorityFeePerGas: HexNumber","text":"

    Max priority fee per gas to pay (Transaction types 2 & 3)

    "},{"location":"consuming_tests/state_test/#-maxfeepergas-hexnumber","title":"- maxFeePerGas: HexNumber","text":"

    Max base fee per gas to pay (Transaction types 2 & 3)

    "},{"location":"consuming_tests/state_test/#-gaslimit-listzeropaddedhexnumber","title":"- gasLimit: List[ZeroPaddedHexNumber]","text":"

    List of gas limits used on each indexed test combination

    "},{"location":"consuming_tests/state_test/#-to-addressemptyaddress","title":"- to: Address|EmptyAddress","text":"

    Destination address of the transaction, or an empty string to create a contract

    "},{"location":"consuming_tests/state_test/#-value-listzeropaddedhexnumber","title":"- value: List[ZeroPaddedHexNumber]","text":"

    List of values used on each indexed test combination

    "},{"location":"consuming_tests/state_test/#-data-listbytes","title":"- data: List[Bytes]","text":"

    List of data bytes used on each indexed test combination

    "},{"location":"consuming_tests/state_test/#-accesslists-listlistmappingaddresslisthash-fork-berlin","title":"- accessLists: List[List[Mapping[Address,List[Hash]]]] (fork: Berlin)","text":"

    List of account access lists used on each indexed test combination (Transaction types 1, 2 & 3)

    "},{"location":"consuming_tests/state_test/#-maxfeeperblobgas-hexnumber-fork-cancun","title":"- maxFeePerBlobGas: HexNumber (fork: Cancun)","text":"

    Max fee per blob gas to pay (Transaction type 3)

    "},{"location":"consuming_tests/state_test/#-blobversionedhashes-listhash-fork-cancun","title":"- blobVersionedHashes: List[Hash] (fork: Cancun)","text":"

    List of blob versioned hashes the transaction includes (Transaction type 3)

    "},{"location":"consuming_tests/state_test/#-sender-address","title":"- sender: Address","text":"

    Sender address of the transaction

    "},{"location":"consuming_tests/state_test/#-secretkey-hash","title":"- secretKey: Hash","text":"

    Private key that must be used to sign the transaction

    "},{"location":"consuming_tests/state_test/#fixtureforkpost","title":"FixtureForkPost","text":""},{"location":"consuming_tests/state_test/#-indexes-fixtureforkpostindexes","title":"- indexes: FixtureForkPostIndexes","text":"

    Transaction field indexes that must be used to obtain the transaction to be executed

    "},{"location":"consuming_tests/state_test/#-txbytes-bytes","title":"- txbytes: Bytes","text":"

    Serialized bytes version of the FixtureTransaction that was executed to produce this post-state

    "},{"location":"consuming_tests/state_test/#-hash-hash","title":"- hash: Hash","text":"

    Expected state root value that results of applying the transaction to the pre-state

    "},{"location":"consuming_tests/state_test/#-logs-hash","title":"- logs: Hash","text":"

    Hash of the RLP representation of the state logs result of applying the transaction to the pre-state (TODO: double-check this.)

    "},{"location":"consuming_tests/state_test/#-expectexception-transactionexception","title":"- expectException: TransactionException","text":"

    Exception that is expected to be thrown by the transaction execution (Field is missing if the transaction is expected to succeed)

    "},{"location":"consuming_tests/state_test/#fixtureforkpostindexes","title":"FixtureForkPostIndexes","text":""},{"location":"consuming_tests/state_test/#-data-int","title":"- data: int","text":"

    Index of the data field in the transaction

    "},{"location":"consuming_tests/state_test/#-gas-int","title":"- gas: int","text":"

    Index of the gas limit field in the transaction

    "},{"location":"consuming_tests/state_test/#-value-int","title":"- value: int","text":"

    Index of the value field in the transaction

    "},{"location":"dev/","title":"Developer Documentation","text":"

    This documentation is aimed at maintainers of execution-spec-tests but may be helpful during test case development:

    • generating documentation.
    • coding style.
    • enabling pre-commit checks.
    • running github actions locally.
    "},{"location":"dev/coding_style/","title":"Coding Style","text":""},{"location":"dev/coding_style/#formatting-and-line-length","title":"Formatting and Line Length","text":"

    The Python code in execution-spec-tests is black formatted with a maximum line length of 100. Using VS Code with editor.formatOnSave is a big help to ensure files conform to the repo's coding style, see VS Code Setup to configure this and other useful settings.

    "},{"location":"dev/coding_style/#ignoring-bulk-change-commits","title":"Ignoring Bulk Change Commits","text":"

    The max line length was changed from 80 to 100 in Q2 2023. To ignore this bulk change commit in git blame output, use the .git-blame-ignore-revs file, for example:

    git blame --ignore-revs-file .git-blame-ignore-revs docs/gen_test_case_reference.py\n

    To use the revs file persistently with git blame, run

    git config blame.ignoreRevsFile .git-blame-ignore-revs\n
    "},{"location":"dev/docs/","title":"Documentation","text":"

    The execution-spec-tests documentation is generated via mkdocs and hosted remotely on Github Pages at ethereum.github.io/execution-spec-tests.

    "},{"location":"dev/docs/#prerequisites","title":"Prerequisites","text":"
    pip install -e .[docs]\n
    "},{"location":"dev/docs/#build-the-documentation","title":"Build the Documentation","text":"

    One time build:

    mkdocs build\n

    Pre-commit check: One time build and lint/type checking:

    tox -e docs\n
    "},{"location":"dev/docs/#local-deployment-and-test","title":"Local Deployment and Test","text":"

    This runs continually: Deploys the site locally and re-generates the site upon modifications to docs/**/*.md or tests/**/*.py:

    mkdocs serve\n
    "},{"location":"dev/docs/#remote-deployment-and-versioning","title":"Remote Deployment and Versioning","text":"

    The execution-specs-test docs are hosted on Github pages at the repo's Github pages. Versions are updated/deployed automatically as part of Github Actions, but this can also be performed on the command-line.

    Our mkdocs configuration uses mike as a version provider. All deployments should be made via mike (whether as part of CI/CD or executed locally).

    The deployed versions of the docs managed via mike are kept in the gh-pages branch. When you run mike it commits to this branch and optionally pushes the changes directly to remote.

    "},{"location":"dev/docs/#aliases","title":"Aliases","text":"

    We currently use two aliases:

    • latest: the latest stable release.
    • development: the current state of the main branch.

    These aliases point to specific versions, as configured below. It's possible to share links containing either of these aliases or to specific versions, i.e, the following are all valid links:

    • https://ethereum.github.io/execution-spec-tests/ (redirects to latest/main)
    • https://ethereum.github.io/execution-spec-tests/latest (redirects to main)
    • https://ethereum.github.io/execution-spec-tests/development (redirects to tagged version)
    • https://ethereum.github.io/execution-spec-tests/main
    • https://ethereum.github.io/execution-spec-tests/v1.0.0
    "},{"location":"dev/docs/#cicd-doc-deployment-via-github-actions","title":"CI/CD: Doc Deployment via Github Actions","text":"

    There are two workflows that automatically deploy updated/new versions of the docs:

    | Workflow yaml File | What | When | |-----------------_____|------|------| | docs_main.yaml | Update \"main\" version of docs | Push to 'main' branch, (e.g., on PR merge) | | docs_tags.yaml | Deploy new version of docs; tag is used as version name | Upon creating a tag matching v* |

    "},{"location":"dev/docs/#build-and-deployment-without-alias-update","title":"Build and Deployment (without alias update)","text":"

    Build a new version and deploy it to remote (this version will then show up in the version selector list):

    mike deploy --push v1.2.3\n

    Local deployment

    If you deploy locally, the documentation will be built with any changes made in your local repository. Check out the tag to deploy tagged versions.

    "},{"location":"dev/docs/#build-deploy-and-update-the-alias","title":"Build, Deploy and Update the Alias","text":"

    Build, deploy and update the version an alias points to with:

    mike deploy --push --update-aliases v1.2.3 latest\n

    where v1.2.3 indicates the version's name and development is the alias. This will overwrite the version if it already exists.

    Updating the 'main' version locally

    \"main\" is just a version name (intended to reflect that it is build from the main branch). However, mike will build the docs site from the current local repository state (including local modifications). Therefore, make sure you're on the HEAD of the main branch before executing (unless you know what you're doing )!

    mike deploy --push main\n

    If the alias accidentally go change:

    mike deploy --push --update-aliases main development\n
    "},{"location":"dev/docs/#viewing-and-deleting-versions","title":"Viewing and Deleting Versions","text":"

    List versions:

    mike list\n

    Delete a version:

    mike delete v1.2.3a1-eof\n
    "},{"location":"dev/docs/#set-default-version","title":"Set Default Version","text":"

    Set the default version of the docs to open upon loading the page:

    mike set-default --push latest\n

    Typically, this must only be executed once for a repo.

    "},{"location":"dev/docs/#implementation","title":"Implementation","text":""},{"location":"dev/docs/#plugins","title":"Plugins","text":"

    The documentation flow uses mkdocs and the following additional plugins:

    • mkdocs: The main doc generation tool.
    • mkdocs-material: Provides many additional features and styling for mkdocs.
    • mkdocstrings and mkdocstrings-python: To generate documentation from Python docstrings.
    • mkdocs-gen-files: To generate markdown files automatically for each test case Python module. See this page for example usage. This plugin is used to programmatically generate the nav section for the generated test case reference documentation.
    • mkdocs-literate-nav: Is used to define the navigation layout for non-generated content and was created to work well with mkdocs-gen-files to add nav content for generated content.
    • blueswen/mkdocs-glightbox - for improved image and inline content display.
    "},{"location":"dev/docs/#the-test-case-reference-section","title":"The \"Test Case Reference\" Section","text":"

    This section is auto-generated via a combination of:

    1. mkdocstrings and mkdocstrings-python,
    2. mkdocs-gen-files,
    3. mkdocs-literate-nav.

    It auto-generates a sequence of nested pages (with nav entries) of all python modules detected under ./tests. Each page contains a stub to the doc generated by mkdocstrings from the module's docstrings and source code. The mkdocs-gen-files and mkdocs-literate-nav plugins were created exactly for this purpose.

    No action is necessary if a new test directory or module is added to ./tests, it will be picked up automatically.

    Working with generated content

    The files in the ./tests directory are watched by mkdocs serve. Run mkdocs serve and edit the source docstrings: The browser will reload with the new content automatically.

    "},{"location":"dev/docs/#navigation","title":"Navigation","text":"

    All pages that are to be included in the documentation and the navigation bar must be included in navigation.md, except \"Test Case Reference\" entries. This is enabled by mkdocs-literate-nav. The nav entries for the automatically generated \"Test Case Reference\" section are generated in mkdocs-gen-files and appended to navigation.md.

    Current nav ordering limitations

    The \"Test Case Reference\" section must currently be the last section in the nav. This is because our mkdocs flow:

    1. Reads navigation.md.
    2. Generates the Test Case Reference documentation and appends the Test Case Reference entries to navigation.md
    3. Generates the nav.

    If necessary, we could probably split navigation.md into two files

    • navigation-pre-test-case-reference.md,
    • navigation-post-test-case-reference.md,

    and create an arbitrary ordering in the Test Case Reference doc gen script. But this is untested.

    "},{"location":"dev/docs/#read-the-docs","title":"Read the Docs","text":"

    Originally, documentation was hosted at readthedocs.io. Currently, this now defunct page (execution-spec-tests.readthedocs.io) is configured to redirect to the Github Pages site. This is achieved by following the steps listed in the second half of this answer on stackoverflow. A public repo with a dummy Sphinx project is required to achieve this: danceratopz/est-docs-redirect.

    "},{"location":"dev/precommit/","title":"Enabling Pre-Commit Checks","text":"

    There's a pre-commit config file available in the repository root (.pre-commit-config.yaml) that can be used to enable automatic checks upon commit - the commit will not go through if the checks don't pass.

    To enable pre-commit, the following must be ran once:

    pip install pre-commit\npre-commit install\n

    Bypassing pre-commit checks

    Enabling of pre-commit checks is not mandatory (it cannot be enforced) and even if it is enabled, it can always be bypassed with:

    git commit --no-verify\n
    "},{"location":"dev/test_actions_locally/","title":"Testing Github Actions Locally","text":"

    The Github Actions workflows can be tested locally using nektos/act which allows you to test Github Actions locally, without pushing changes to the remote.

    "},{"location":"dev/test_actions_locally/#prerequisites","title":"Prerequisites","text":"
    1. Install the act tool, docs.
    2. Install the Github CLI (gh) for authentication: linux, macos.
    3. Authenticate with the Github CLI:

      gh auth login\n
    "},{"location":"dev/test_actions_locally/#testing-workflows","title":"Testing Workflows","text":""},{"location":"dev/test_actions_locally/#testing-a-workflow-that-uses-a-matrix-strategy","title":"Testing a Workflow that uses a Matrix Strategy","text":"

    bash act -j build --workflows .github/workflows/tox_verify.yaml -s GITHUB_TOKEN=$(gh auth token) --matrix python:3.10

    "},{"location":"dev/test_actions_locally/#testing-release-builds","title":"Testing Release Builds","text":"

    Release builds require the ref input to be specified. To test a release build locally:

    1. Create a JSON file specifying the input data required for a release build (the release tag), e.g, event.json:

      json { \"ref\": \"refs/tags/stable@v4.2.0\" }

    2. Run act and specify the workflow file, the Github token, and the event file:

      bash act -j build --workflows .github/workflows/fixtures_feature.yaml -s GITHUB_TOKEN=$(gh auth token) -e event.json

    "},{"location":"getting_help/","title":"Getting Help","text":"

    The tests in this repository are a community effort to help improve the development cycle of all Ethereum execution clients.

    We encourage contributions and recognize that Python is not everyone's primary language - if you stumble over issues or need help, please reach out to one of the execution-spec-tests maintainers either directly or in the #testing channel in the Ethereum R&D Discord Server.

    "},{"location":"getting_help/#contact-the-maintainers","title":"Contact the Maintainers","text":"

    Write to:

    • Dan on Discord or Telegram (danceratopz).
    • Spencer on Discord or Telegram (spencertaylorbrown/@techbro_ccoli).
    • Mario on Discord or Telegram (marioevz/@marioevz).

    "},{"location":"getting_started/debugging_t8n_tools/","title":"Debugging Transition Tools","text":"

    There are two flags that can help debugging t8n tools or the execution-spec-tests framework:

    1. --evm-dump-dir: Write debug information from t8n tool calls to the specified directory.
    2. --traces: Collect traces of the execution from the transition tool.
    3. --verify-fixtures: Run go-ethereum's evm blocktest command to verify the generated test fixtures.
    "},{"location":"getting_started/debugging_t8n_tools/#evm-dump-directory","title":"EVM Dump Directory","text":"

    The --evm-dump-dir flag tells the framework to write the inputs and outputs of every call made to the t8n command to the specified output directory. The aim is to help debugging or simply understand how a test is interacting with the EVM.

    Each test case receives its own sub-directory under the --evm-dump-dir that contains these files which can be easily accessed from the HTML test report generated by fill (located by default in the root of the --output directory).

    In particular, a script t8n.sh is generated for each call to the t8n command which can be used to reproduce the call to trigger errors or attach a debugger without the need to execute Python.

    For example, running:

    fill tests/berlin/eip2930_access_list/ --fork Berlin -m blockchain_test \\\n    --evm-dump-dir=/tmp/evm-dump --traces\n

    will produce the directory structure:

    \ud83d\udcc2 /tmp/evm-dump\n\u2514\u2500\u2500 \ud83d\udcc2 berlin__eip2930_access_list__test_acl__test_access_list\n    \u2514\u2500\u2500 \ud83d\udcc2 fork_Berlin_blockchain_test\n        \u2514\u2500\u2500 \ud83d\udcc2 0\n         \u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 args.py\n         \u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc2 input\n         \u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 alloc.json\n         \u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 env.json\n         \u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 \ud83d\udcc4 txs.json\n         \u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc2 output\n         \u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 alloc.json\n         \u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 result.json\n         \u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 \ud83d\udcc4 txs.rlp\n         \u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 returncode.txt\n         \u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 stderr.txt\n         \u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 stdin.txt\n         \u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 stdout.txt\n         \u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 t8n.sh\n            \u2514\u2500\u2500 \ud83d\udcc4 trace-0-0x5c4f07ce52f0a276a06aabdfff16cc693b5e007c018f9a42431e68200e2da515.jsonl\n

    where the directory 0 is the starting index of the different calls made to the t8n tool executed during the test, and since the test only contains one block, there is only one directory present.

    Note, there may be more directories present 1, 2, 3,... if the test executes more blocks.

    Each directory contains files containing information corresponding to the call, for example, the args.py file contains the arguments passed to the t8n command and the output/alloc.json file contains the output of the t8n command's --output-alloc flag.

    "},{"location":"getting_started/debugging_t8n_tools/#the-t8nsh-script","title":"The t8n.sh Script","text":"

    The t8n.sh script written to the debug directory can be used to reproduce a specific call made to the t8n command during the test session. For example, if a Besu t8n-server has been started on port 3001, the request made by the test for first block can be reproduced as:

    /tmp/besu/test_access_list_fork_Berlin/0/t8n.sh 3001\n

    which writes the response the from the t8n-server to the console output:

    {\n  \"alloc\" : {\n    \"0x000000000000000000000000000000000000aaaa\" : {\n      \"code\" : \"0x5854505854\",\n      \"balance\" : \"0x4\",\n      \"nonce\" : \"0x1\"\n    },\n    \"0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba\" : {\n      \"balance\" : \"0x1bc16d674ecb26ce\"\n    },\n    \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\" : {\n      \"balance\" : \"0x2cd931\",\n      \"nonce\" : \"0x1\"\n    }\n  },\n  \"body\" : \"0xf8a0b89e01f89b0180078304ef0094000000000000000000000000000000000000aaaa0180f838f7940000000000000000000000000000000000000000e1a0000000000000000000000000000000000000000000000000000000000000000001a02e16eb72206c93c471b5894800495ee9c64ae2d9823bcc4d6adeb5d9d9af0dd4a03be6691e933a0816c59d059a556c27c6753e6ce76d1e357b9201865c80b28df3\",\n  \"result\" : {\n    \"stateRoot\" : \"0x51799508f764047aee6606bc6a00863856f83ee5b91555f00c8a3cbdfbec5acb\",\n    ...\n    ...\n  }\n}\n

    The t8n.sh is written to the debug directory for all supported t8n tools.

    "},{"location":"getting_started/debugging_t8n_tools/#verifying-test-fixtures-via-evm-blocktest","title":"Verifying Test Fixtures via evm blocktest","text":"

    The --verify-fixtures flag can be used to run go-ethereum's evm blocktest command in order to verify the generated JSON test fixtures.

    For example, running:

    fill tests/berlin/eip2930_access_list/ --fork Berlin -m blockchain_test \\\n    --evm-dump-dir==/tmp/evm-dump \\\n    --evm-bin=../evmone/build/bin/evmone-t8n \\\n    --verify-fixtures-bin=../go-ethereum/build/bin/evm \\\n    --verify-fixtures\n

    will additionally run the evm blocktest command on every JSON fixture file and write its output to the EVM dump directory:

    \ud83d\udcc2 /tmp/evm-dump\n\u2514\u2500\u2500 \ud83d\udcc2 berlin__eip2930_access_list__test_acl__test_access_list\n    \u251c\u2500\u2500 \ud83d\udcc4 fixtures.json\n    \u251c\u2500\u2500 \ud83d\udcc2 fork_Berlin_blockchain_test\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc2 0\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 args.py\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc2 input\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 alloc.json\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 env.json\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 \ud83d\udcc4 txs.json\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc2 output\n    \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \ud83d\udcc4 alloc.json\n    \u2502   ... ... ...\n    \u2502\n    \u251c\u2500\u2500 \ud83d\udcc4 verify_fixtures_args.py\n    \u251c\u2500\u2500 \ud83d\udcc4 verify_fixtures_returncode.txt\n    \u251c\u2500\u2500 \ud83d\udcc4 verify_fixtures.sh\n    \u251c\u2500\u2500 \ud83d\udcc4 verify_fixtures_stderr.txt\n    \u2514\u2500\u2500 \ud83d\udcc4 verify_fixtures_stdout.txt\n

    where the verify_fixtures.sh script can be used to reproduce the evm blocktest command.

    "},{"location":"getting_started/debugging_t8n_tools/#further-verify-fixtures-examples","title":"Further --verify-fixtures Examples","text":"
    1. No fixture verification performed:

      fill\n
    2. Verify fixtures: Use the first evm binary in the PATH to execute both the t8n and blocktest commands (i.e., same binary used; this must be a geth binary):

      fill --verify-fixtures\n
    3. Explicitly specify the evm binary to execute the blocktest command (the first evm binary in the PATH is used for t8n commands; --verify-fixtures is not necessary):

      fill --verify-fixtures-bin=../go-ethereum/build/bin/evm\n
    4. Explicitly set two different evm binaries to execute the t8n and blocktest commands; write debug data to the specified --evm-dump-dir:

      fill --evm-bin=../evmone/build/bin/evmone-t8n \\\n  --verify-fixtures-bin=../go-ethereum/build/bin/evm \\\n  --evm-dump-dir=/tmp/evm-dump\n
    5. Additionally use --single-fixture-per-file to improve the granularity of the reporting of the evm blocktest command by writing the fixture generated by each parametrized test case to its own file.

      fill --evm-bin=../evmone/build/bin/evmone-t8n \\\n  --verify-fixtures-bin=../go-ethereum/build/bin/evm \\\n  --evm-dump-dir=/tmp/evm-dump \\\n  --single-fixture-per-file\n

    Execution scope of evm blocktest

    Note, by default, that evm blocktest is not executed per parametrized test case, but rather per test function. This is because each fixture JSON file contains fixtures for all the parametrized test cases for one test function. This means only one error will be reported, even if multiple fixtures fail within one fixture file.

    Additionally, it is only executed after all the test cases in the module have been executed1 and will only report the first failing test fixture in all files, even if there are multiple failing fixture files.

    This means, by default, that the feedback is not as granular as for test case execution. To improve granularity, and get feedback per parametrized test case use --single-fixture-per-file.

    1. This limitation is required to enable support of the pytest-xdist plugin for concurrent test execution across multiple CPUs. To achieve this we use the we apply the --dist loadscope xdist flag in our pytest.ini.\u00a0\u21a9

    "},{"location":"getting_started/executing_tests_command_line/","title":"Executing Tests at a Prompt","text":"

    The execution-spec-tests test framework uses the pytest framework for test case collection and execution. The fill command is essentially an alias for pytest, which uses several custom pytest plugins to run transition tools against test cases and generate JSON fixtures.

    Options specific to execution-spec-tests

    The command-line options specific to filling tests can be listed via:

    fill --help\n

    See Custom fill Command-Line Options for all options.

    "},{"location":"getting_started/executing_tests_command_line/#collection-test-exploration","title":"Collection - Test Exploration","text":"

    The test cases implemented in the ./tests sub-directory can be listed in the console using:

    fill --collect-only\n

    and can be filtered (by test path, function and parameter substring):

    fill --collect-only -k warm_coinbase\n

    Docstrings are additionally displayed when ran verbosely:

    fill --collect-only -k warm_coinbase -vv\n
    "},{"location":"getting_started/executing_tests_command_line/#execution","title":"Execution","text":"

    By default, test cases are executed for all forks already deployed to mainnet, but not for forks still under active development, i.e., as of time of writing, Q2 2023:

    fill\n

    will generate fixtures for test cases from Frontier to Shanghai.

    To generate all the test fixtures defined in the ./tests/shanghai sub-directory and write them to the ./fixtures-shanghai directory, run fill in the top-level directory as:

    fill ./tests/shanghai --output=\"fixtures-shanghai\"\n

    Test case verification

    Note, that the (limited set of) test post conditions are tested against the output of the evm t8n command during test generation.

    To generate all the test fixtures in the tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py module, for example, run:

    fill tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py\n

    To generate specific test fixtures from a specific test function or even test function and parameter set, obtain the corresponding test ID using:

    fill --collect-only -q -k test_warm_coinbase\n

    This filters the tests by test_warm_coinbase. Then find the relevant test ID in the console output and provide it to fill, for example, for a test function:

    fill tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage\n

    or, for a test function and specific parameter combination:

    fill tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Paris-DELEGATECALL]\n
    "},{"location":"getting_started/executing_tests_command_line/#execution-for-development-forks","title":"Execution for Development Forks","text":"

    By default, test cases are not executed with upcoming Ethereum forks so that they can be readily executed against the evm tool from the latest geth release.

    In order to execute test cases for an upcoming fork, ensure that the evm tool used supports that fork and features under test and use the --until or --fork flag.

    For example, as of Q2 2023, the current fork under active development is Cancun:

    fill --until Cancun\n

    See: Executing Tests for Features under Development.

    "},{"location":"getting_started/executing_tests_command_line/#debugging-the-t8n-command","title":"Debugging the t8n Command","text":"

    The --evm-dump-dir flag can be used to dump the inputs and outputs of every call made to the t8n command for debugging purposes, see Debugging Transition Tools.

    "},{"location":"getting_started/executing_tests_command_line/#other-useful-pytest-command-line-options","title":"Other Useful Pytest Command-Line Options","text":"
    fill -vv            # More verbose output\nfill -x             # Exit instantly on first error or failed test case\nfill --pdb -nauto   # Drop into the debugger upon error in a test case\nfill -s             # Print stdout from tests to the console during execution\n
    "},{"location":"getting_started/executing_tests_command_line/#custom-fill-command-line-options","title":"Custom fill Command-Line Options","text":"

    To see all the options available to fill, including pytest and pytest plugin options, use --pytest-help.

    To list the options that only specific to fill, use:

    fill --help\n

    Output:

    usage: fill [-h] [--strict-alloc] [--ca-start CA_START] [--ca-incr CA_INCR]\n            [--evm-code-type EVM_CODE_TYPE] [--solc-bin SOLC_BIN]\n            [--solc-version SOLC_VERSION] [--evm-bin EVM_BIN] [--traces]\n            [--verify-fixtures] [--verify-fixtures-bin VERIFY_FIXTURES_BIN]\n            [--filler-path FILLER_PATH] [--output OUTPUT] [--flat-output]\n            [--single-fixture-per-file] [--no-html] [--build-name BUILD_NAME]\n            [--index] [--evm-dump-dir EVM_DUMP_DIR] [--forks] [--fork FORK]\n            [--from FROM] [--until UNTIL] [--test-help]\n\noptions:\n  -h, --help            show this help message and exit\n\nArguments defining pre-allocation behavior.:\n  --strict-alloc        [DEBUG ONLY] Disallows deploying a contract in a\n                        predefined address.\n  --ca-start CA_START, --contract-address-start CA_START\n                        The starting address from which tests will deploy\n                        contracts.\n  --ca-incr CA_INCR, --contract-address-increment CA_INCR\n                        The address increment value to each deployed contract by\n                        a test.\n  --evm-code-type EVM_CODE_TYPE\n                        Type of EVM code to deploy in each test by default.\n\nArguments defining the solc executable:\n  --solc-bin SOLC_BIN   Path to a solc executable (for Yul source compilation).\n                        No default; if unspecified `--solc-version` is used.\n  --solc-version SOLC_VERSION\n                        Version of the solc compiler to use. Default: 0.8.24.\n\nArguments defining evm executable behavior:\n  --evm-bin EVM_BIN     Path to an evm executable that provides `t8n`. Default:\n                        First 'evm' entry in PATH.\n  --traces              Collect traces of the execution information from the\n                        transition tool.\n  --verify-fixtures     Verify generated fixture JSON files using geth's evm\n                        blocktest command. By default, the same evm binary as for\n                        the t8n tool is used. A different (geth) evm binary may\n                        be specified via --verify-fixtures-bin, this must be\n                        specified if filling with a non-geth t8n tool that does\n                        not support blocktest.\n  --verify-fixtures-bin VERIFY_FIXTURES_BIN\n                        Path to an evm executable that provides the `blocktest`\n                        command. Default: The first (geth) 'evm' entry in PATH.\n\nArguments defining filler location and output:\n  --filler-path FILLER_PATH\n                        Path to filler directives\n  --output OUTPUT       Directory path to store the generated test fixtures. If\n                        the specified path ends in '.tar.gz', then the specified\n                        tarball is additionally created (the fixtures are still\n                        written to the specified path without the '.tar.gz'\n                        suffix). Can be deleted. Default: './fixtures'.\n  --flat-output         Output each test case in the directory without the folder\n                        structure.\n  --single-fixture-per-file\n                        Don't group fixtures in JSON files by test function;\n                        write each fixture to its own file. This can be used to\n                        increase the granularity of --verify-fixtures.\n  --no-html             Don't generate an HTML test report (in the output\n                        directory). The --html flag can be used to specify a\n                        different path.\n  --build-name BUILD_NAME\n                        Specify a build name for the fixtures.ini file, e.g.,\n                        'stable'.\n  --index               Generate an index file for all produced fixtures.\n\nArguments defining debug behavior:\n  --evm-dump-dir EVM_DUMP_DIR, --t8n-dump-dir EVM_DUMP_DIR\n                        Path to dump the transition tool debug output.\n\nSpecify the fork range to generate fixtures for:\n  --forks               Display forks supported by the test framework and exit.\n  --fork FORK           Only fill tests for the specified fork.\n  --from FROM           Fill tests from and including the specified fork.\n  --until UNTIL         Fill tests until and including the specified fork.\n\nArguments related to running execution-spec-tests:\n  --test-help           Only show help options specific to a specific execution-\n                        spec-tests command and exit.\n\nExit: After displaying help.\n
    "},{"location":"getting_started/executing_tests_dev_fork/","title":"Executing Tests for Features under Development","text":""},{"location":"getting_started/executing_tests_dev_fork/#requirements","title":"Requirements","text":"

    By default, execution-spec-tests only generates fixtures for forks that have been deployed to mainnet. In order to generate fixtures for evm features that are actively under development:

    1. A version of the evm and solc tools that implement the feature must be available (although, typically only a developer version of the evm tool is required, usually the latest stable release of solc is adequate), and,
    2. The development fork to test must be explicitly specified on the command-line:

      via the --fork flagvia the --from flagvia the --until flag
      fill -k 4844 --fork=Cancun -v\n
      fill -k 4844 --from=Cancun -v\n
      fill -k 4844 --until=Cancun -v\n

    Specifying the evm binary via evm-bin

    It is possible to explicitly specify the evm binary used to generate fixtures via the --evm-bin flag, for example,

    fill --fork=Cancun --evm-bin=/opt/bin/evm -v\n
    "},{"location":"getting_started/executing_tests_dev_fork/#further-help","title":"Further Help","text":"
    1. geth/evm build documentation.
    2. solc build documentation.

    Verifying evm and solc versions used

    The versions used to generate fixtures are displayed in the console output:

    "},{"location":"getting_started/executing_tests_dev_fork/#vs-code-setup","title":"VS Code Setup","text":"

    By default, VS Code's Testing View will only show tests for stable forks. To show tests for development forks, uncomment the relevant line in the python.testing.pytestArgs configuration section of included settings file (.vscode/settings.json) to enable the --until=FORK flag. See VS Code Setup for help finding the settings files.

    "},{"location":"getting_started/executing_tests_vs_code/","title":"Executing Tests in VS Code","text":"

    Prerequisite: VS Code Setup.

    "},{"location":"getting_started/executing_tests_vs_code/#exploring-test-cases","title":"Exploring Test Cases","text":"

    Implemented test cases can be explored in VS Code's \"Testing\" View; click on the conical flask highlighted in the screenshot below.

    Testing EVM Features Under Active Development

    See the VS Code section in Executing Tests for Features under Development to explore tests targeting EVM features under development.

    "},{"location":"getting_started/executing_tests_vs_code/#executing-and-debugging-test-cases","title":"Executing and Debugging Test Cases","text":""},{"location":"getting_started/installation_troubleshooting/","title":"Installation Troubleshooting","text":"

    This page provides guidance on how to troubleshoot common issues that may arise when installing the Execution Spec Tests repository.

    "},{"location":"getting_started/installation_troubleshooting/#pip-installation-issues","title":"Pip Installation Issues","text":""},{"location":"getting_started/installation_troubleshooting/#coincurve-installation","title":"Coincurve Installation","text":"

    If you encounter an error when installing the coincurve package like the following:

    Stored in directory: /tmp/...\n  Building wheel for coincurve (pyproject.toml) ... error\n  error: subprocess-exited-with-error\n\n  \u00d7 Building wheel for coincurve (pyproject.toml) did not run successfully.\n  \u2502 exit code: 1\n  \u2570\u2500> [27 lines of output]\n      ...\n        571 | #include <secp256k1_extrakeys.h>\n            |          ^~~~~~~~~~~~~~~~~~~~~~~\n      compilation terminated.\n      error: command '/usr/bin/gcc' failed with exit code 1\n      [end of output]\n\n  note: This error originates from a subprocess, and is likely not a problem with pip.\n  ERROR: Failed building wheel for coincurve\n

    You may need to install the libsecp256k1 library. On Ubuntu, you can install this library by running the following command:

    sudo apt update\nsudo apt-get install libsecp256k1-dev\n
    "},{"location":"getting_started/quick_start/","title":"Quick Start","text":"

    Testing features under active development

    The EVM features under test must be implemented in the evm tool and solc executables that are used by the execution-spec-tests framework. The following guide installs the stable version of the geth evm; solc will be installed by the fill command.

    To test features under active development, start with this base configuration and then follow the steps in executing tests for features under development.

    The following requires a Python 3.10, 3.11 or 3.12 installation.

    1. Ensure go-ethereum's evm tool is in your path. Either build the required version, or alternatively:

      UbuntumacOSWindows

      sudo add-apt-repository -y ppa:ethereum/ethereum\nsudo apt-get update\nsudo apt-get install ethereum\n
      More help:

      • geth installation doc.

      brew update\nbrew upgrade\nbrew tap ethereum/ethereum\nbrew install ethereum solidity\n
      More help:

      • geth installation doc.

      Binaries available here:

      • geth (binary or installer).
      • solc.

      More help:

      • geth installation doc.
    2. Clone the execution-spec-tests repo and install its dependencies (it's recommended to use a virtual environment for the installation):

      git clone https://github.com/ethereum/execution-spec-tests\ncd execution-spec-tests\npython3 -m venv ./venv/\nsource ./venv/bin/activate\npip install -e '.[docs,lint,test]'\n
    3. Verify installation:

      1. Explore test cases:

        fill --collect-only\n

        Expected console output:

      2. Execute the test cases (verbosely) in the ./tests/berlin/eip2930_access_list/test_acl.py module:

        fill -v tests/berlin/eip2930_access_list/test_acl.py\n

        Expected console output: Check:

        1. The versions of the evm tool is as expected (your versions may differ from those in the highlighted box).
        2. The generated HTML test report by clicking the link at the bottom of the console output.
        3. The corresponding fixture file has been generated:

          head fixtures/blockchain_tests/berlin/eip2930_access_list/acl/access_list.json\n
    "},{"location":"getting_started/quick_start/#installation-troubleshooting","title":"Installation Troubleshooting","text":"

    If you encounter issues during installation, see the Installation Troubleshooting guide.

    "},{"location":"getting_started/quick_start/#next-steps","title":"Next Steps","text":"
    1. Learn useful command-line flags.
    2. Execute tests for features under development via the --fork flag.
    3. Optional: Configure VS Code to auto-format Python code and execute tests within VS Code.
    4. Implement a new test case, see Writing Tests.
    "},{"location":"getting_started/repository_overview/","title":"Repository Overview","text":""},{"location":"getting_started/repository_overview/#repository-overview","title":"Repository Overview","text":"

    The most relevant folders and files in the repo are:

    \ud83d\udcc1 execution-test-specs/\n\u251c\u2500\u2574\ud83d\udcc1 tests/                     # test cases\n\u2502   \u251c\u2500\u2500 \ud83d\udcc1 eips/\n\u2502   \u251c\u2500\u2500 \ud83d\udcc1 vm/\n\u2502   \u2514\u2500\u2500 \ud83d\udcc1 ...\n\u251c\u2500\u2574\ud83d\udcc1 fixtures/                  # default fixture output dir\n\u2502   \u251c\u2500\u2500 \ud83d\udcc1 blockchain_tests/\n\u2502   \u251c\u2500\u2500 \ud83d\udcc1 blockchain_tests_engine/\n\u2502   \u251c\u2500\u2500 \ud83d\udcc1 state_tests/\n\u2502   \u2514\u2500\u2500 \ud83d\udcc1 ...\n\u251c\u2500\u2574\ud83d\udcc1 src/                       # library & framework packages\n\u2502   \u251c\u2500\u2500 \ud83d\udcc1 ethereum_test_fork/\n\u2502   \u251c\u2500\u2500 \ud83d\udcc1 ethereum_test_tools/\n\u2502   \u2514\u2500\u2500 \ud83d\udcc1 ...\n\u251c\u2500\u2574\ud83d\udcc1 docs/                      # markdown documentation\n\u2502   \u251c\u2500\u2500 \ud83d\udcc1 getting_started\n\u2502   \u251c\u2500\u2500 \ud83d\udcc1 dev\n\u2502   \u2514\u2500\u2500 \ud83d\udcc1 ...\n\u251c\u2500\u2574\ud83d\udcc1 .vscode/                   # visual studio code config\n\u2502   \u251c\u2500\u2500 \ud83d\udcc4 settings.recommended.json # copy to settings.json\n\u2502   \u251c\u2500\u2500 \ud83d\udcc4 launch.recommended.json\n\u2502   \u2514\u2500\u2500 \ud83d\udcc4 extensions.json\n\u2514\u2500\u2500 \ud83d\udcc4 whitelist.txt             # spellcheck dictionary\n
    "},{"location":"getting_started/repository_overview/#tests","title":"tests/","text":"

    Contains the implementation of the Ethereum consensus tests available in this repository.

    "},{"location":"getting_started/repository_overview/#src","title":"src/","text":"

    Contains various packages that help to define test cases and to interface with the evm t8n command. Additionally, it contains some packages that enable test case execution by customizing pytest which acts as the test framework.

    "},{"location":"getting_started/repository_overview/#docs","title":"docs/","text":"

    Contains documentation configuration and source files.

    "},{"location":"getting_started/repository_overview/#vscode","title":".vscode/","text":"

    See VS Code Setup.

    "},{"location":"getting_started/setup_vs_code/","title":"VS Code Setup","text":"

    VS Code setup is optional, but does offer the following advantages:

    • Auto-format your Python code to conform to the repository's code standards (black).
    • Inline linting and auto-completion (thanks to Python type hints).
    • Spell-check your code and docs.
    • Graphical exploration of test cases and easy test execution/debug.
    "},{"location":"getting_started/setup_vs_code/#installation","title":"Installation","text":"

    Please refer to the Visual Studio Code docs for help with installation.

    "},{"location":"getting_started/setup_vs_code/#vs-code-settings-file","title":"VS Code Settings file","text":"

    The ethereum/execution-spec-tests repo includes configuration files for VS Code in the .vscode/ sub-directory:

    \ud83d\udcc1 execution-test-specs/\n\u2514\u2500\u2500\ud83d\udcc1 .vscode/\n    \u251c\u2500\u2500 \ud83d\udcc4 settings.recommended.json\n    \u251c\u2500\u2500 \ud83d\udcc4 extensions.json\n    \u2514\u2500\u2500 \ud83d\udcc4 launch.recommended.json\n

    To enable the recommended settings, copy the settings file to the expected location:

    cp .vscode/settings.recommended.json .vscode/settings.json\n

    To additionally enable the recommended launch configurations:

    cp .vscode/launch.recommended.json .vscode/launch.json\n
    "},{"location":"getting_started/setup_vs_code/#additional-vs-code-extensions","title":"Additional VS Code Extensions","text":"

    Open the folder in VS Code where execution-spec-tests is cloned: VS Code should prompt to install the repository's required extensions from .vscode/extensions.json:

    • ms-python.python
    • ms-python.isort
    • ms-python.flake8
    • ms-python.black-formatter
    • esbenp.prettier-vscode
    • streetsidesoftware.code-spell-checker
    • tamasfe.even-better-toml

    Workspace Trust

    Trust the execution-specs-test repository when opening in VS Code to be prompted to install the plugins recommended via the extensions.json file.

    "},{"location":"getting_started/setup_vs_code/#configuration-for-testing-evm-features-under-active-development","title":"Configuration for Testing EVM Features Under Active Development","text":"

    An additional step is required to enable fixture generations for features from forks that are under active development and have not been deployed to mainnet, see Executing Tests for Features under Development.

    "},{"location":"library/","title":"Library (Tools) Reference Documentation","text":"

    Execution spec tests consists of several packages that implement helper classes and tools that enable and simplify test case implementation. This section contains their reference documentation:

    • ethereum_test_base_types - provides the basic types on top of which other testing libraries are built.
    • ethereum_test_exceptions - provides definitions for exceptions used in all tests.
    • ethereum_test_fixtures - provides definitions of all test fixture types that are produced in this repository and can be consumed by clients.
    • ethereum_test_forks - provides definitions for supported forks used in tests.
    • ethereum_test_specs - provides definitions for all spec types used to define test cases, and generate different kinds of test fixtures.
    • ethereum_test_tools - provides primitives and helpers to test Ethereum execution clients.
    • ethereum_test_types - provides Ethereum types built on top of the base types which are used to define test cases and interact with other libraries.
    • ethereum_test_vm - provides definitions for the Ethereum Virtual Machine (EVM) as used to define bytecode in test cases.
    • evm_transition_tool - a wrapper for the transition (t8n) tool.
    • pytest_plugins - contains pytest customizations that provide additional functionality for generating test fixtures.
    "},{"location":"library/ethereum_test_base_types/","title":"Ethereum Test Base Types package","text":"

    Common definitions and types.

    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Address","title":"Address","text":"

    Bases: FixedSizeBytes[20]

    Class that helps represent Ethereum addresses in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class Address(FixedSizeBytes[20]):  # type: ignore\n    \"\"\"\n    Class that helps represent Ethereum addresses in tests.\n    \"\"\"\n\n    label: str | None = None\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Bloom","title":"Bloom","text":"

    Bases: FixedSizeBytes[256]

    Class that helps represent blooms in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class Bloom(FixedSizeBytes[256]):  # type: ignore\n    \"\"\"\n    Class that helps represent blooms in tests.\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.BLSPublicKey","title":"BLSPublicKey","text":"

    Bases: FixedSizeBytes[48]

    Class that helps represent BLS public keys in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class BLSPublicKey(FixedSizeBytes[48]):  # type: ignore\n    \"\"\"\n    Class that helps represent BLS public keys in tests.\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.BLSSignature","title":"BLSSignature","text":"

    Bases: FixedSizeBytes[96]

    Class that helps represent BLS signatures in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class BLSSignature(FixedSizeBytes[96]):  # type: ignore\n    \"\"\"\n    Class that helps represent BLS signatures in tests.\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Bytes","title":"Bytes","text":"

    Bases: bytes, ToStringSchema

    Class that helps represent bytes of variable length in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class Bytes(bytes, ToStringSchema):\n    \"\"\"\n    Class that helps represent bytes of variable length in tests.\n    \"\"\"\n\n    def __new__(cls, input: BytesConvertible):\n        \"\"\"\n        Creates a new Bytes object.\n        \"\"\"\n        if type(input) is cls:\n            return input\n        return super(Bytes, cls).__new__(cls, to_bytes(input))\n\n    def __hash__(self) -> int:\n        \"\"\"\n        Returns the hash of the bytes.\n        \"\"\"\n        return super(Bytes, self).__hash__()\n\n    def __str__(self) -> str:\n        \"\"\"\n        Returns the hexadecimal representation of the bytes.\n        \"\"\"\n        return self.hex()\n\n    def hex(self, *args, **kwargs) -> str:\n        \"\"\"\n        Returns the hexadecimal representation of the bytes.\n        \"\"\"\n        return \"0x\" + super().hex(*args, **kwargs)\n\n    @classmethod\n    def or_none(cls, input: \"Bytes | BytesConvertible | None\") -> \"Bytes | None\":\n        \"\"\"\n        Converts the input to a Bytes while accepting None.\n        \"\"\"\n        if input is None:\n            return input\n        return cls(input)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Bytes.__new__","title":"__new__(input)","text":"

    Creates a new Bytes object.

    Source code in src/ethereum_test_base_types/base_types.py
    def __new__(cls, input: BytesConvertible):\n    \"\"\"\n    Creates a new Bytes object.\n    \"\"\"\n    if type(input) is cls:\n        return input\n    return super(Bytes, cls).__new__(cls, to_bytes(input))\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Bytes.__hash__","title":"__hash__()","text":"

    Returns the hash of the bytes.

    Source code in src/ethereum_test_base_types/base_types.py
    def __hash__(self) -> int:\n    \"\"\"\n    Returns the hash of the bytes.\n    \"\"\"\n    return super(Bytes, self).__hash__()\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Bytes.__str__","title":"__str__()","text":"

    Returns the hexadecimal representation of the bytes.

    Source code in src/ethereum_test_base_types/base_types.py
    def __str__(self) -> str:\n    \"\"\"\n    Returns the hexadecimal representation of the bytes.\n    \"\"\"\n    return self.hex()\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Bytes.hex","title":"hex(*args, **kwargs)","text":"

    Returns the hexadecimal representation of the bytes.

    Source code in src/ethereum_test_base_types/base_types.py
    def hex(self, *args, **kwargs) -> str:\n    \"\"\"\n    Returns the hexadecimal representation of the bytes.\n    \"\"\"\n    return \"0x\" + super().hex(*args, **kwargs)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Bytes.or_none","title":"or_none(input) classmethod","text":"

    Converts the input to a Bytes while accepting None.

    Source code in src/ethereum_test_base_types/base_types.py
    @classmethod\ndef or_none(cls, input: \"Bytes | BytesConvertible | None\") -> \"Bytes | None\":\n    \"\"\"\n    Converts the input to a Bytes while accepting None.\n    \"\"\"\n    if input is None:\n        return input\n    return cls(input)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.FixedSizeBytes","title":"FixedSizeBytes","text":"

    Bases: Bytes

    Class that helps represent bytes of fixed length in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class FixedSizeBytes(Bytes):\n    \"\"\"\n    Class that helps represent bytes of fixed length in tests.\n    \"\"\"\n\n    byte_length: ClassVar[int]\n\n    def __class_getitem__(cls, length: int) -> Type[\"FixedSizeBytes\"]:\n        \"\"\"\n        Creates a new FixedSizeBytes class with the given length.\n        \"\"\"\n\n        class Sized(cls):  # type: ignore\n            byte_length = length\n\n        return Sized\n\n    def __new__(cls, input: FixedSizeBytesConvertible | T):\n        \"\"\"\n        Creates a new FixedSizeBytes object.\n        \"\"\"\n        if type(input) is cls:\n            return input\n        return super(FixedSizeBytes, cls).__new__(cls, to_fixed_size_bytes(input, cls.byte_length))\n\n    def __hash__(self) -> int:\n        \"\"\"\n        Returns the hash of the bytes.\n        \"\"\"\n        return super(FixedSizeBytes, self).__hash__()\n\n    @classmethod\n    def or_none(cls: Type[T], input: T | FixedSizeBytesConvertible | None) -> T | None:\n        \"\"\"\n        Converts the input to a Fixed Size Bytes while accepting None.\n        \"\"\"\n        if input is None:\n            return input\n        return cls(input)\n\n    def __eq__(self, other: object) -> bool:\n        \"\"\"\n        Compares two FixedSizeBytes objects to be equal.\n        \"\"\"\n        if not isinstance(other, FixedSizeBytes):\n            assert (\n                isinstance(other, str)\n                or isinstance(other, int)\n                or isinstance(other, bytes)\n                or isinstance(other, SupportsBytes)\n            )\n            other = self.__class__(other)\n        return super().__eq__(other)\n\n    def __ne__(self, other: object) -> bool:\n        \"\"\"\n        Compares two FixedSizeBytes objects to be not equal.\n        \"\"\"\n        return not self.__eq__(other)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.FixedSizeBytes.__class_getitem__","title":"__class_getitem__(length)","text":"

    Creates a new FixedSizeBytes class with the given length.

    Source code in src/ethereum_test_base_types/base_types.py
    def __class_getitem__(cls, length: int) -> Type[\"FixedSizeBytes\"]:\n    \"\"\"\n    Creates a new FixedSizeBytes class with the given length.\n    \"\"\"\n\n    class Sized(cls):  # type: ignore\n        byte_length = length\n\n    return Sized\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.FixedSizeBytes.__new__","title":"__new__(input)","text":"

    Creates a new FixedSizeBytes object.

    Source code in src/ethereum_test_base_types/base_types.py
    def __new__(cls, input: FixedSizeBytesConvertible | T):\n    \"\"\"\n    Creates a new FixedSizeBytes object.\n    \"\"\"\n    if type(input) is cls:\n        return input\n    return super(FixedSizeBytes, cls).__new__(cls, to_fixed_size_bytes(input, cls.byte_length))\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.FixedSizeBytes.__hash__","title":"__hash__()","text":"

    Returns the hash of the bytes.

    Source code in src/ethereum_test_base_types/base_types.py
    def __hash__(self) -> int:\n    \"\"\"\n    Returns the hash of the bytes.\n    \"\"\"\n    return super(FixedSizeBytes, self).__hash__()\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.FixedSizeBytes.or_none","title":"or_none(input) classmethod","text":"

    Converts the input to a Fixed Size Bytes while accepting None.

    Source code in src/ethereum_test_base_types/base_types.py
    @classmethod\ndef or_none(cls: Type[T], input: T | FixedSizeBytesConvertible | None) -> T | None:\n    \"\"\"\n    Converts the input to a Fixed Size Bytes while accepting None.\n    \"\"\"\n    if input is None:\n        return input\n    return cls(input)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.FixedSizeBytes.__eq__","title":"__eq__(other)","text":"

    Compares two FixedSizeBytes objects to be equal.

    Source code in src/ethereum_test_base_types/base_types.py
    def __eq__(self, other: object) -> bool:\n    \"\"\"\n    Compares two FixedSizeBytes objects to be equal.\n    \"\"\"\n    if not isinstance(other, FixedSizeBytes):\n        assert (\n            isinstance(other, str)\n            or isinstance(other, int)\n            or isinstance(other, bytes)\n            or isinstance(other, SupportsBytes)\n        )\n        other = self.__class__(other)\n    return super().__eq__(other)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.FixedSizeBytes.__ne__","title":"__ne__(other)","text":"

    Compares two FixedSizeBytes objects to be not equal.

    Source code in src/ethereum_test_base_types/base_types.py
    def __ne__(self, other: object) -> bool:\n    \"\"\"\n    Compares two FixedSizeBytes objects to be not equal.\n    \"\"\"\n    return not self.__eq__(other)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Hash","title":"Hash","text":"

    Bases: FixedSizeBytes[32]

    Class that helps represent hashes in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class Hash(FixedSizeBytes[32]):  # type: ignore\n    \"\"\"\n    Class that helps represent hashes in tests.\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.HashInt","title":"HashInt","text":"

    Bases: FixedSizeHexNumber[32]

    Class that helps represent hashes in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class HashInt(FixedSizeHexNumber[32]):  # type: ignore\n    \"\"\"\n    Class that helps represent hashes in tests.\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.HeaderNonce","title":"HeaderNonce","text":"

    Bases: FixedSizeBytes[8]

    Class that helps represent the header nonce in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class HeaderNonce(FixedSizeBytes[8]):  # type: ignore\n    \"\"\"\n    Class that helps represent the header nonce in tests.\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.HexNumber","title":"HexNumber","text":"

    Bases: Number

    Class that helps represent an hexadecimal numbers in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class HexNumber(Number):\n    \"\"\"\n    Class that helps represent an hexadecimal numbers in tests.\n    \"\"\"\n\n    def __str__(self) -> str:\n        \"\"\"\n        Returns the string representation of the number.\n        \"\"\"\n        return self.hex()\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.HexNumber.__str__","title":"__str__()","text":"

    Returns the string representation of the number.

    Source code in src/ethereum_test_base_types/base_types.py
    def __str__(self) -> str:\n    \"\"\"\n    Returns the string representation of the number.\n    \"\"\"\n    return self.hex()\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Number","title":"Number","text":"

    Bases: int, ToStringSchema

    Class that helps represent numbers in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class Number(int, ToStringSchema):\n    \"\"\"\n    Class that helps represent numbers in tests.\n    \"\"\"\n\n    def __new__(cls, input: NumberConvertible | N):\n        \"\"\"\n        Creates a new Number object.\n        \"\"\"\n        return super(Number, cls).__new__(cls, to_number(input))\n\n    def __str__(self) -> str:\n        \"\"\"\n        Returns the string representation of the number.\n        \"\"\"\n        return str(int(self))\n\n    def hex(self) -> str:\n        \"\"\"\n        Returns the hexadecimal representation of the number.\n        \"\"\"\n        return hex(self)\n\n    @classmethod\n    def or_none(cls: Type[N], input: N | NumberConvertible | None) -> N | None:\n        \"\"\"\n        Converts the input to a Number while accepting None.\n        \"\"\"\n        if input is None:\n            return input\n        return cls(input)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Number.__new__","title":"__new__(input)","text":"

    Creates a new Number object.

    Source code in src/ethereum_test_base_types/base_types.py
    def __new__(cls, input: NumberConvertible | N):\n    \"\"\"\n    Creates a new Number object.\n    \"\"\"\n    return super(Number, cls).__new__(cls, to_number(input))\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Number.__str__","title":"__str__()","text":"

    Returns the string representation of the number.

    Source code in src/ethereum_test_base_types/base_types.py
    def __str__(self) -> str:\n    \"\"\"\n    Returns the string representation of the number.\n    \"\"\"\n    return str(int(self))\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Number.hex","title":"hex()","text":"

    Returns the hexadecimal representation of the number.

    Source code in src/ethereum_test_base_types/base_types.py
    def hex(self) -> str:\n    \"\"\"\n    Returns the hexadecimal representation of the number.\n    \"\"\"\n    return hex(self)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Number.or_none","title":"or_none(input) classmethod","text":"

    Converts the input to a Number while accepting None.

    Source code in src/ethereum_test_base_types/base_types.py
    @classmethod\ndef or_none(cls: Type[N], input: N | NumberConvertible | None) -> N | None:\n    \"\"\"\n    Converts the input to a Number while accepting None.\n    \"\"\"\n    if input is None:\n        return input\n    return cls(input)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ZeroPaddedHexNumber","title":"ZeroPaddedHexNumber","text":"

    Bases: HexNumber

    Class that helps represent zero padded hexadecimal numbers in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class ZeroPaddedHexNumber(HexNumber):\n    \"\"\"\n    Class that helps represent zero padded hexadecimal numbers in tests.\n    \"\"\"\n\n    def hex(self) -> str:\n        \"\"\"\n        Returns the hexadecimal representation of the number.\n        \"\"\"\n        if self == 0:\n            return \"0x00\"\n        hex_str = hex(self)[2:]\n        if len(hex_str) % 2 == 1:\n            return \"0x0\" + hex_str\n        return \"0x\" + hex_str\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ZeroPaddedHexNumber.hex","title":"hex()","text":"

    Returns the hexadecimal representation of the number.

    Source code in src/ethereum_test_base_types/base_types.py
    def hex(self) -> str:\n    \"\"\"\n    Returns the hexadecimal representation of the number.\n    \"\"\"\n    if self == 0:\n        return \"0x00\"\n    hex_str = hex(self)[2:]\n    if len(hex_str) % 2 == 1:\n        return \"0x0\" + hex_str\n    return \"0x\" + hex_str\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account","title":"Account","text":"

    Bases: CamelModel

    State associated with an address.

    Source code in src/ethereum_test_base_types/composite_types.py
    class Account(CamelModel):\n    \"\"\"\n    State associated with an address.\n    \"\"\"\n\n    nonce: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0)\n    \"\"\"\n    The scalar value equal to a) the number of transactions sent by\n    an Externally Owned Account, b) the amount of contracts created by a\n    contract.\n    \"\"\"\n    balance: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0)\n    \"\"\"\n    The amount of Wei (10<sup>-18</sup> Eth) the account has.\n    \"\"\"\n    code: Bytes = Bytes(b\"\")\n    \"\"\"\n    Bytecode contained by the account.\n    \"\"\"\n    storage: Storage = Field(default_factory=Storage)\n    \"\"\"\n    Storage within a contract.\n    \"\"\"\n\n    NONEXISTENT: ClassVar[None] = None\n    \"\"\"\n    Sentinel object used to specify when an account should not exist in the\n    state.\n    \"\"\"\n\n    @dataclass(kw_only=True)\n    class NonceMismatch(Exception):\n        \"\"\"\n        Test expected a certain nonce value for an account but a different\n        value was found.\n        \"\"\"\n\n        address: Address\n        want: int | None\n        got: int | None\n\n        def __init__(self, address: Address, want: int | None, got: int | None, *args):\n            super().__init__(args)\n            self.address = address\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"unexpected nonce for account {self.address}{label_str}: \"\n                + f\"want {self.want}, got {self.got}\"\n            )\n\n    @dataclass(kw_only=True)\n    class BalanceMismatch(Exception):\n        \"\"\"\n        Test expected a certain balance for an account but a different\n        value was found.\n        \"\"\"\n\n        address: Address\n        want: int | None\n        got: int | None\n\n        def __init__(self, address: Address, want: int | None, got: int | None, *args):\n            super().__init__(args)\n            self.address = address\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"unexpected balance for account {self.address}{label_str}: \"\n                + f\"want {self.want}, got {self.got}\"\n            )\n\n    @dataclass(kw_only=True)\n    class CodeMismatch(Exception):\n        \"\"\"\n        Test expected a certain bytecode for an account but a different\n        one was found.\n        \"\"\"\n\n        address: Address\n        want: bytes | None\n        got: bytes | None\n\n        def __init__(self, address: Address, want: bytes | None, got: bytes | None, *args):\n            super().__init__(args)\n            self.address = address\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"unexpected code for account {self.address}{label_str}: \"\n                + f\"want {self.want}, got {self.got}\"\n            )\n\n    def check_alloc(self: \"Account\", address: Address, account: \"Account\"):\n        \"\"\"\n        Checks the returned alloc against an expected account in post state.\n        Raises exception on failure.\n        \"\"\"\n        if \"nonce\" in self.model_fields_set:\n            if self.nonce != account.nonce:\n                raise Account.NonceMismatch(\n                    address=address,\n                    want=self.nonce,\n                    got=account.nonce,\n                )\n\n        if \"balance\" in self.model_fields_set:\n            if self.balance != account.balance:\n                raise Account.BalanceMismatch(\n                    address=address,\n                    want=self.balance,\n                    got=account.balance,\n                )\n\n        if \"code\" in self.model_fields_set:\n            if self.code != account.code:\n                raise Account.CodeMismatch(\n                    address=address,\n                    want=self.code,\n                    got=account.code,\n                )\n\n        if \"storage\" in self.model_fields_set:\n            self.storage.must_be_equal(address=address, other=account.storage)\n\n    def __bool__(self: \"Account\") -> bool:\n        \"\"\"\n        Returns True on a non-empty account.\n        \"\"\"\n        return any((self.nonce, self.balance, self.code, self.storage))\n\n    @classmethod\n    def with_code(cls: Type, code: BytesConvertible) -> \"Account\":\n        \"\"\"\n        Create account with provided `code` and nonce of `1`.\n        \"\"\"\n        return Account(nonce=HexNumber(1), code=Bytes(code))\n\n    @classmethod\n    def merge(\n        cls: Type, account_1: \"Dict | Account | None\", account_2: \"Dict | Account | None\"\n    ) -> \"Account\":\n        \"\"\"\n        Create a merged account from two sources.\n        \"\"\"\n\n        def to_kwargs_dict(account: \"Dict | Account | None\") -> Dict:\n            if account is None:\n                return {}\n            if isinstance(account, dict):\n                return account\n            elif isinstance(account, cls):\n                return account.model_dump(exclude_unset=True)\n            raise TypeError(f\"Unexpected type for account merge: {type(account)}\")\n\n        kwargs = to_kwargs_dict(account_1)\n        kwargs.update(to_kwargs_dict(account_2))\n\n        return cls(**kwargs)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.nonce","title":"nonce: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0) class-attribute instance-attribute","text":"

    The scalar value equal to a) the number of transactions sent by an Externally Owned Account, b) the amount of contracts created by a contract.

    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.balance","title":"balance: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0) class-attribute instance-attribute","text":"

    The amount of Wei (10-18 Eth) the account has.

    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.code","title":"code: Bytes = Bytes(b'') class-attribute instance-attribute","text":"

    Bytecode contained by the account.

    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.storage","title":"storage: Storage = Field(default_factory=Storage) class-attribute instance-attribute","text":"

    Storage within a contract.

    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.NONEXISTENT","title":"NONEXISTENT: None = None class-attribute","text":"

    Sentinel object used to specify when an account should not exist in the state.

    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.NonceMismatch","title":"NonceMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain nonce value for an account but a different value was found.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass NonceMismatch(Exception):\n    \"\"\"\n    Test expected a certain nonce value for an account but a different\n    value was found.\n    \"\"\"\n\n    address: Address\n    want: int | None\n    got: int | None\n\n    def __init__(self, address: Address, want: int | None, got: int | None, *args):\n        super().__init__(args)\n        self.address = address\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"unexpected nonce for account {self.address}{label_str}: \"\n            + f\"want {self.want}, got {self.got}\"\n        )\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.NonceMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"unexpected nonce for account {self.address}{label_str}: \"\n        + f\"want {self.want}, got {self.got}\"\n    )\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.BalanceMismatch","title":"BalanceMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain balance for an account but a different value was found.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass BalanceMismatch(Exception):\n    \"\"\"\n    Test expected a certain balance for an account but a different\n    value was found.\n    \"\"\"\n\n    address: Address\n    want: int | None\n    got: int | None\n\n    def __init__(self, address: Address, want: int | None, got: int | None, *args):\n        super().__init__(args)\n        self.address = address\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"unexpected balance for account {self.address}{label_str}: \"\n            + f\"want {self.want}, got {self.got}\"\n        )\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.BalanceMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"unexpected balance for account {self.address}{label_str}: \"\n        + f\"want {self.want}, got {self.got}\"\n    )\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.CodeMismatch","title":"CodeMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain bytecode for an account but a different one was found.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass CodeMismatch(Exception):\n    \"\"\"\n    Test expected a certain bytecode for an account but a different\n    one was found.\n    \"\"\"\n\n    address: Address\n    want: bytes | None\n    got: bytes | None\n\n    def __init__(self, address: Address, want: bytes | None, got: bytes | None, *args):\n        super().__init__(args)\n        self.address = address\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"unexpected code for account {self.address}{label_str}: \"\n            + f\"want {self.want}, got {self.got}\"\n        )\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.CodeMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"unexpected code for account {self.address}{label_str}: \"\n        + f\"want {self.want}, got {self.got}\"\n    )\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.check_alloc","title":"check_alloc(address, account)","text":"

    Checks the returned alloc against an expected account in post state. Raises exception on failure.

    Source code in src/ethereum_test_base_types/composite_types.py
    def check_alloc(self: \"Account\", address: Address, account: \"Account\"):\n    \"\"\"\n    Checks the returned alloc against an expected account in post state.\n    Raises exception on failure.\n    \"\"\"\n    if \"nonce\" in self.model_fields_set:\n        if self.nonce != account.nonce:\n            raise Account.NonceMismatch(\n                address=address,\n                want=self.nonce,\n                got=account.nonce,\n            )\n\n    if \"balance\" in self.model_fields_set:\n        if self.balance != account.balance:\n            raise Account.BalanceMismatch(\n                address=address,\n                want=self.balance,\n                got=account.balance,\n            )\n\n    if \"code\" in self.model_fields_set:\n        if self.code != account.code:\n            raise Account.CodeMismatch(\n                address=address,\n                want=self.code,\n                got=account.code,\n            )\n\n    if \"storage\" in self.model_fields_set:\n        self.storage.must_be_equal(address=address, other=account.storage)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.__bool__","title":"__bool__()","text":"

    Returns True on a non-empty account.

    Source code in src/ethereum_test_base_types/composite_types.py
    def __bool__(self: \"Account\") -> bool:\n    \"\"\"\n    Returns True on a non-empty account.\n    \"\"\"\n    return any((self.nonce, self.balance, self.code, self.storage))\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.with_code","title":"with_code(code) classmethod","text":"

    Create account with provided code and nonce of 1.

    Source code in src/ethereum_test_base_types/composite_types.py
    @classmethod\ndef with_code(cls: Type, code: BytesConvertible) -> \"Account\":\n    \"\"\"\n    Create account with provided `code` and nonce of `1`.\n    \"\"\"\n    return Account(nonce=HexNumber(1), code=Bytes(code))\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Account.merge","title":"merge(account_1, account_2) classmethod","text":"

    Create a merged account from two sources.

    Source code in src/ethereum_test_base_types/composite_types.py
    @classmethod\ndef merge(\n    cls: Type, account_1: \"Dict | Account | None\", account_2: \"Dict | Account | None\"\n) -> \"Account\":\n    \"\"\"\n    Create a merged account from two sources.\n    \"\"\"\n\n    def to_kwargs_dict(account: \"Dict | Account | None\") -> Dict:\n        if account is None:\n            return {}\n        if isinstance(account, dict):\n            return account\n        elif isinstance(account, cls):\n            return account.model_dump(exclude_unset=True)\n        raise TypeError(f\"Unexpected type for account merge: {type(account)}\")\n\n    kwargs = to_kwargs_dict(account_1)\n    kwargs.update(to_kwargs_dict(account_2))\n\n    return cls(**kwargs)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Alloc","title":"Alloc","text":"

    Bases: RootModel[Dict[Address, Account | None]]

    Allocation of accounts in the state, pre and post test execution.

    Source code in src/ethereum_test_base_types/composite_types.py
    class Alloc(RootModel[Dict[Address, Account | None]]):\n    \"\"\"\n    Allocation of accounts in the state, pre and post test execution.\n    \"\"\"\n\n    root: Dict[Address, Account | None] = Field(default_factory=dict, validate_default=True)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage","title":"Storage","text":"

    Bases: RootModel[Dict[StorageKeyValueType, StorageKeyValueType]]

    Definition of a storage in pre or post state of a test

    Source code in src/ethereum_test_base_types/composite_types.py
    class Storage(RootModel[Dict[StorageKeyValueType, StorageKeyValueType]]):\n    \"\"\"\n    Definition of a storage in pre or post state of a test\n    \"\"\"\n\n    root: Dict[StorageKeyValueType, StorageKeyValueType] = Field(default_factory=dict)\n\n    _current_slot: int = PrivateAttr(0)\n\n    StorageDictType: ClassVar[TypeAlias] = Dict[\n        str | int | bytes | SupportsBytes, str | int | bytes | SupportsBytes\n    ]\n    \"\"\"\n    Dictionary type to be used when defining an input to initialize a storage.\n    \"\"\"\n\n    @dataclass(kw_only=True)\n    class InvalidType(Exception):\n        \"\"\"\n        Invalid type used when describing test's expected storage key or value.\n        \"\"\"\n\n        key_or_value: Any\n\n        def __init__(self, key_or_value: Any, *args):\n            super().__init__(args)\n            self.key_or_value = key_or_value\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            return f\"invalid type for key/value: {self.key_or_value}\"\n\n    @dataclass(kw_only=True)\n    class InvalidValue(Exception):\n        \"\"\"\n        Invalid value used when describing test's expected storage key or\n        value.\n        \"\"\"\n\n        key_or_value: Any\n\n        def __init__(self, key_or_value: Any, *args):\n            super().__init__(args)\n            self.key_or_value = key_or_value\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            return f\"invalid value for key/value: {self.key_or_value}\"\n\n    @dataclass(kw_only=True)\n    class MissingKey(Exception):\n        \"\"\"\n        Test expected to find a storage key set but key was missing.\n        \"\"\"\n\n        key: int\n\n        def __init__(self, key: int, *args):\n            super().__init__(args)\n            self.key = key\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            return \"key {0} not found in storage\".format(Hash(self.key))\n\n    @dataclass(kw_only=True)\n    class KeyValueMismatch(Exception):\n        \"\"\"\n        Test expected a certain value in a storage key but value found\n        was different.\n        \"\"\"\n\n        address: Address\n        key: int\n        want: int\n        got: int\n\n        def __init__(self, address: Address, key: int, want: int, got: int, *args):\n            super().__init__(args)\n            self.address = address\n            self.key = key\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"incorrect value in address {self.address}{label_str} for \"\n                + f\"key {Hash(self.key)}:\"\n                + f\" want {HexNumber(self.want)} (dec:{int(self.want)}),\"\n                + f\" got {HexNumber(self.got)} (dec:{int(self.got)})\"\n            )\n\n    def __contains__(self, key: StorageKeyValueTypeConvertible | StorageKeyValueType) -> bool:\n        \"\"\"Checks for an item in the storage\"\"\"\n        return StorageKeyValueTypeAdapter.validate_python(key) in self.root\n\n    def __getitem__(\n        self, key: StorageKeyValueTypeConvertible | StorageKeyValueType\n    ) -> StorageKeyValueType:\n        \"\"\"Returns an item from the storage\"\"\"\n        return self.root[StorageKeyValueTypeAdapter.validate_python(key)]\n\n    def __setitem__(\n        self,\n        key: StorageKeyValueTypeConvertible | StorageKeyValueType,\n        value: StorageKeyValueTypeConvertible | StorageKeyValueType,\n    ):  # noqa: SC200\n        \"\"\"Sets an item in the storage\"\"\"\n        self.root[\n            StorageKeyValueTypeAdapter.validate_python(key)\n        ] = StorageKeyValueTypeAdapter.validate_python(value)\n\n    def __delitem__(self, key: StorageKeyValueTypeConvertible | StorageKeyValueType):\n        \"\"\"Deletes an item from the storage\"\"\"\n        del self.root[StorageKeyValueTypeAdapter.validate_python(key)]\n\n    def __iter__(self):\n        \"\"\"Returns an iterator over the storage\"\"\"\n        return iter(self.root)\n\n    def __eq__(self, other) -> bool:\n        \"\"\"\n        Returns True if both storages are equal.\n        \"\"\"\n        if not isinstance(other, Storage):\n            return False\n        return self.root == other.root\n\n    def __ne__(self, other) -> bool:\n        \"\"\"\n        Returns True if both storages are not equal.\n        \"\"\"\n        if not isinstance(other, Storage):\n            return False\n        return self.root != other.root\n\n    def __bool__(self) -> bool:\n        \"\"\"Returns True if the storage is not empty\"\"\"\n        return any(v for v in self.root.values())\n\n    def __add__(self, other: \"Storage\") -> \"Storage\":\n        \"\"\"\n        Returns a new storage that is the sum of two storages.\n        \"\"\"\n        return Storage({**self.root, **other.root})\n\n    def keys(self) -> set[StorageKeyValueType]:\n        \"\"\"Returns the keys of the storage\"\"\"\n        return set(self.root.keys())\n\n    def set_next_slot(self, slot: int) -> \"Storage\":\n        \"\"\"\n        Sets the next slot to be used by `store_next`.\n        \"\"\"\n        self._current_slot = slot\n        return self\n\n    def store_next(\n        self, value: StorageKeyValueTypeConvertible | StorageKeyValueType | bool\n    ) -> StorageKeyValueType:\n        \"\"\"\n        Stores a value in the storage and returns the key where the value is stored.\n\n        Increments the key counter so the next time this function is called,\n        the next key is used.\n        \"\"\"\n        slot = StorageKeyValueTypeAdapter.validate_python(self._current_slot)\n        self._current_slot += 1\n        self[slot] = StorageKeyValueTypeAdapter.validate_python(value)\n        return slot\n\n    def peek_slot(self) -> int:\n        \"\"\"\n        Peeks the next slot that will be used by `store_next`.\n        \"\"\"\n        return self._current_slot\n\n    def contains(self, other: \"Storage\") -> bool:\n        \"\"\"\n        Returns True if self contains all keys with equal value as\n        contained by second storage.\n        Used for comparison with test expected post state and alloc returned\n        by the transition tool.\n        \"\"\"\n        for key in other.keys():\n            if key not in self:\n                return False\n            if self[key] != other[key]:\n                return False\n        return True\n\n    def must_contain(self, address: Address, other: \"Storage\"):\n        \"\"\"\n        Succeeds only if self contains all keys with equal value as\n        contained by second storage.\n        Used for comparison with test expected post state and alloc returned\n        by the transition tool.\n        Raises detailed exception when a difference is found.\n        \"\"\"\n        for key in other.keys():\n            if key not in self:\n                # storage[key]==0 is equal to missing storage\n                if other[key] != 0:\n                    raise Storage.MissingKey(key=key)\n            elif self[key] != other[key]:\n                raise Storage.KeyValueMismatch(\n                    address=address, key=key, want=self[key], got=other[key]\n                )\n\n    def must_be_equal(self, address: Address, other: \"Storage | None\"):\n        \"\"\"\n        Succeeds only if \"self\" is equal to \"other\" storage.\n        \"\"\"\n        # Test keys contained in both storage objects\n        if other is None:\n            other = Storage({})\n        for key in self.keys() & other.keys():\n            if self[key] != other[key]:\n                raise Storage.KeyValueMismatch(\n                    address=address, key=key, want=self[key], got=other[key]\n                )\n\n        # Test keys contained in either one of the storage objects\n        for key in self.keys() ^ other.keys():\n            if key in self:\n                if self[key] != 0:\n                    raise Storage.KeyValueMismatch(address=address, key=key, want=self[key], got=0)\n\n            elif other[key] != 0:\n                raise Storage.KeyValueMismatch(address=address, key=key, want=0, got=other[key])\n\n    def canary(self) -> \"Storage\":\n        \"\"\"\n        Returns a canary storage filled with non-zero values where the current storage expects\n        zero values, to guarantee that the test overwrites the storage.\n        \"\"\"\n        return Storage({key: HashInt(0xBA5E) for key in self.keys() if self[key] == 0})\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.StorageDictType","title":"StorageDictType: TypeAlias = Dict[str | int | bytes | SupportsBytes, str | int | bytes | SupportsBytes] class-attribute","text":"

    Dictionary type to be used when defining an input to initialize a storage.

    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.InvalidType","title":"InvalidType dataclass","text":"

    Bases: Exception

    Invalid type used when describing test's expected storage key or value.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass InvalidType(Exception):\n    \"\"\"\n    Invalid type used when describing test's expected storage key or value.\n    \"\"\"\n\n    key_or_value: Any\n\n    def __init__(self, key_or_value: Any, *args):\n        super().__init__(args)\n        self.key_or_value = key_or_value\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        return f\"invalid type for key/value: {self.key_or_value}\"\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.InvalidType.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    return f\"invalid type for key/value: {self.key_or_value}\"\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.InvalidValue","title":"InvalidValue dataclass","text":"

    Bases: Exception

    Invalid value used when describing test's expected storage key or value.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass InvalidValue(Exception):\n    \"\"\"\n    Invalid value used when describing test's expected storage key or\n    value.\n    \"\"\"\n\n    key_or_value: Any\n\n    def __init__(self, key_or_value: Any, *args):\n        super().__init__(args)\n        self.key_or_value = key_or_value\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        return f\"invalid value for key/value: {self.key_or_value}\"\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.InvalidValue.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    return f\"invalid value for key/value: {self.key_or_value}\"\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.MissingKey","title":"MissingKey dataclass","text":"

    Bases: Exception

    Test expected to find a storage key set but key was missing.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass MissingKey(Exception):\n    \"\"\"\n    Test expected to find a storage key set but key was missing.\n    \"\"\"\n\n    key: int\n\n    def __init__(self, key: int, *args):\n        super().__init__(args)\n        self.key = key\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        return \"key {0} not found in storage\".format(Hash(self.key))\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.MissingKey.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    return \"key {0} not found in storage\".format(Hash(self.key))\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.KeyValueMismatch","title":"KeyValueMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain value in a storage key but value found was different.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass KeyValueMismatch(Exception):\n    \"\"\"\n    Test expected a certain value in a storage key but value found\n    was different.\n    \"\"\"\n\n    address: Address\n    key: int\n    want: int\n    got: int\n\n    def __init__(self, address: Address, key: int, want: int, got: int, *args):\n        super().__init__(args)\n        self.address = address\n        self.key = key\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"incorrect value in address {self.address}{label_str} for \"\n            + f\"key {Hash(self.key)}:\"\n            + f\" want {HexNumber(self.want)} (dec:{int(self.want)}),\"\n            + f\" got {HexNumber(self.got)} (dec:{int(self.got)})\"\n        )\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.KeyValueMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"incorrect value in address {self.address}{label_str} for \"\n        + f\"key {Hash(self.key)}:\"\n        + f\" want {HexNumber(self.want)} (dec:{int(self.want)}),\"\n        + f\" got {HexNumber(self.got)} (dec:{int(self.got)})\"\n    )\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.__contains__","title":"__contains__(key)","text":"

    Checks for an item in the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def __contains__(self, key: StorageKeyValueTypeConvertible | StorageKeyValueType) -> bool:\n    \"\"\"Checks for an item in the storage\"\"\"\n    return StorageKeyValueTypeAdapter.validate_python(key) in self.root\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.__getitem__","title":"__getitem__(key)","text":"

    Returns an item from the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def __getitem__(\n    self, key: StorageKeyValueTypeConvertible | StorageKeyValueType\n) -> StorageKeyValueType:\n    \"\"\"Returns an item from the storage\"\"\"\n    return self.root[StorageKeyValueTypeAdapter.validate_python(key)]\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.__setitem__","title":"__setitem__(key, value)","text":"

    Sets an item in the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def __setitem__(\n    self,\n    key: StorageKeyValueTypeConvertible | StorageKeyValueType,\n    value: StorageKeyValueTypeConvertible | StorageKeyValueType,\n):  # noqa: SC200\n    \"\"\"Sets an item in the storage\"\"\"\n    self.root[\n        StorageKeyValueTypeAdapter.validate_python(key)\n    ] = StorageKeyValueTypeAdapter.validate_python(value)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.__delitem__","title":"__delitem__(key)","text":"

    Deletes an item from the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def __delitem__(self, key: StorageKeyValueTypeConvertible | StorageKeyValueType):\n    \"\"\"Deletes an item from the storage\"\"\"\n    del self.root[StorageKeyValueTypeAdapter.validate_python(key)]\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.__iter__","title":"__iter__()","text":"

    Returns an iterator over the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def __iter__(self):\n    \"\"\"Returns an iterator over the storage\"\"\"\n    return iter(self.root)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.__eq__","title":"__eq__(other)","text":"

    Returns True if both storages are equal.

    Source code in src/ethereum_test_base_types/composite_types.py
    def __eq__(self, other) -> bool:\n    \"\"\"\n    Returns True if both storages are equal.\n    \"\"\"\n    if not isinstance(other, Storage):\n        return False\n    return self.root == other.root\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.__ne__","title":"__ne__(other)","text":"

    Returns True if both storages are not equal.

    Source code in src/ethereum_test_base_types/composite_types.py
    def __ne__(self, other) -> bool:\n    \"\"\"\n    Returns True if both storages are not equal.\n    \"\"\"\n    if not isinstance(other, Storage):\n        return False\n    return self.root != other.root\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.__bool__","title":"__bool__()","text":"

    Returns True if the storage is not empty

    Source code in src/ethereum_test_base_types/composite_types.py
    def __bool__(self) -> bool:\n    \"\"\"Returns True if the storage is not empty\"\"\"\n    return any(v for v in self.root.values())\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.__add__","title":"__add__(other)","text":"

    Returns a new storage that is the sum of two storages.

    Source code in src/ethereum_test_base_types/composite_types.py
    def __add__(self, other: \"Storage\") -> \"Storage\":\n    \"\"\"\n    Returns a new storage that is the sum of two storages.\n    \"\"\"\n    return Storage({**self.root, **other.root})\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.keys","title":"keys()","text":"

    Returns the keys of the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def keys(self) -> set[StorageKeyValueType]:\n    \"\"\"Returns the keys of the storage\"\"\"\n    return set(self.root.keys())\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.set_next_slot","title":"set_next_slot(slot)","text":"

    Sets the next slot to be used by store_next.

    Source code in src/ethereum_test_base_types/composite_types.py
    def set_next_slot(self, slot: int) -> \"Storage\":\n    \"\"\"\n    Sets the next slot to be used by `store_next`.\n    \"\"\"\n    self._current_slot = slot\n    return self\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.store_next","title":"store_next(value)","text":"

    Stores a value in the storage and returns the key where the value is stored.

    Increments the key counter so the next time this function is called, the next key is used.

    Source code in src/ethereum_test_base_types/composite_types.py
    def store_next(\n    self, value: StorageKeyValueTypeConvertible | StorageKeyValueType | bool\n) -> StorageKeyValueType:\n    \"\"\"\n    Stores a value in the storage and returns the key where the value is stored.\n\n    Increments the key counter so the next time this function is called,\n    the next key is used.\n    \"\"\"\n    slot = StorageKeyValueTypeAdapter.validate_python(self._current_slot)\n    self._current_slot += 1\n    self[slot] = StorageKeyValueTypeAdapter.validate_python(value)\n    return slot\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.peek_slot","title":"peek_slot()","text":"

    Peeks the next slot that will be used by store_next.

    Source code in src/ethereum_test_base_types/composite_types.py
    def peek_slot(self) -> int:\n    \"\"\"\n    Peeks the next slot that will be used by `store_next`.\n    \"\"\"\n    return self._current_slot\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.contains","title":"contains(other)","text":"

    Returns True if self contains all keys with equal value as contained by second storage. Used for comparison with test expected post state and alloc returned by the transition tool.

    Source code in src/ethereum_test_base_types/composite_types.py
    def contains(self, other: \"Storage\") -> bool:\n    \"\"\"\n    Returns True if self contains all keys with equal value as\n    contained by second storage.\n    Used for comparison with test expected post state and alloc returned\n    by the transition tool.\n    \"\"\"\n    for key in other.keys():\n        if key not in self:\n            return False\n        if self[key] != other[key]:\n            return False\n    return True\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.must_contain","title":"must_contain(address, other)","text":"

    Succeeds only if self contains all keys with equal value as contained by second storage. Used for comparison with test expected post state and alloc returned by the transition tool. Raises detailed exception when a difference is found.

    Source code in src/ethereum_test_base_types/composite_types.py
    def must_contain(self, address: Address, other: \"Storage\"):\n    \"\"\"\n    Succeeds only if self contains all keys with equal value as\n    contained by second storage.\n    Used for comparison with test expected post state and alloc returned\n    by the transition tool.\n    Raises detailed exception when a difference is found.\n    \"\"\"\n    for key in other.keys():\n        if key not in self:\n            # storage[key]==0 is equal to missing storage\n            if other[key] != 0:\n                raise Storage.MissingKey(key=key)\n        elif self[key] != other[key]:\n            raise Storage.KeyValueMismatch(\n                address=address, key=key, want=self[key], got=other[key]\n            )\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.must_be_equal","title":"must_be_equal(address, other)","text":"

    Succeeds only if \"self\" is equal to \"other\" storage.

    Source code in src/ethereum_test_base_types/composite_types.py
    def must_be_equal(self, address: Address, other: \"Storage | None\"):\n    \"\"\"\n    Succeeds only if \"self\" is equal to \"other\" storage.\n    \"\"\"\n    # Test keys contained in both storage objects\n    if other is None:\n        other = Storage({})\n    for key in self.keys() & other.keys():\n        if self[key] != other[key]:\n            raise Storage.KeyValueMismatch(\n                address=address, key=key, want=self[key], got=other[key]\n            )\n\n    # Test keys contained in either one of the storage objects\n    for key in self.keys() ^ other.keys():\n        if key in self:\n            if self[key] != 0:\n                raise Storage.KeyValueMismatch(address=address, key=key, want=self[key], got=0)\n\n        elif other[key] != 0:\n            raise Storage.KeyValueMismatch(address=address, key=key, want=0, got=other[key])\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Storage.canary","title":"canary()","text":"

    Returns a canary storage filled with non-zero values where the current storage expects zero values, to guarantee that the test overwrites the storage.

    Source code in src/ethereum_test_base_types/composite_types.py
    def canary(self) -> \"Storage\":\n    \"\"\"\n    Returns a canary storage filled with non-zero values where the current storage expects\n    zero values, to guarantee that the test overwrites the storage.\n    \"\"\"\n    return Storage({key: HashInt(0xBA5E) for key in self.keys() if self[key] == 0})\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.to_bytes","title":"to_bytes(input)","text":"

    Converts multiple types into bytes.

    Source code in src/ethereum_test_base_types/conversions.py
    def to_bytes(input: BytesConvertible) -> bytes:\n    \"\"\"\n    Converts multiple types into bytes.\n    \"\"\"\n    if input is None:\n        raise Exception(\"Cannot convert `None` input to bytes\")\n\n    if isinstance(input, SupportsBytes) or isinstance(input, bytes) or isinstance(input, list):\n        return bytes(input)\n\n    if isinstance(input, str):\n        # We can have a hex representation of bytes with spaces for\n        # readability\n        input = sub(r\"\\s+\", \"\", input)\n        if input.startswith(\"0x\"):\n            input = input[2:]\n        if len(input) % 2 == 1:\n            input = \"0\" + input\n        return bytes.fromhex(input)\n\n    raise Exception(\"invalid type for `bytes`\")\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.to_hex","title":"to_hex(input)","text":"

    Converts multiple types into a bytes hex string.

    Source code in src/ethereum_test_base_types/conversions.py
    def to_hex(input: BytesConvertible) -> str:\n    \"\"\"\n    Converts multiple types into a bytes hex string.\n    \"\"\"\n    return \"0x\" + to_bytes(input).hex()\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.to_json","title":"to_json(input)","text":"

    Converts a model to its json data representation.

    Source code in src/ethereum_test_base_types/json.py
    def to_json(\n    input: BaseModel | RootModel | AnyStr | List[BaseModel | RootModel | AnyStr],\n) -> Any:\n    \"\"\"\n    Converts a model to its json data representation.\n    \"\"\"\n    if isinstance(input, list):\n        return [to_json(item) for item in input]\n    elif isinstance(input, (BaseModel, RootModel)):\n        return input.model_dump(mode=\"json\", by_alias=True, exclude_none=True)\n    else:\n        return str(input)\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.CamelModel","title":"CamelModel","text":"

    Bases: CopyValidateModel

    A base model that converts field names to camel case when serializing.

    For example, the field name current_timestamp in a Python model will be represented as currentTimestamp when it is serialized to json.

    Source code in src/ethereum_test_base_types/pydantic.py
    class CamelModel(CopyValidateModel):\n    \"\"\"\n    A base model that converts field names to camel case when serializing.\n\n    For example, the field name `current_timestamp` in a Python model will be represented\n    as `currentTimestamp` when it is serialized to json.\n    \"\"\"\n\n    model_config = ConfigDict(\n        alias_generator=to_camel,\n        populate_by_name=True,\n        validate_default=True,\n    )\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ReferenceSpec","title":"ReferenceSpec","text":"

    Reference Specification Description Abstract Class.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    class ReferenceSpec:\n    \"\"\"\n    Reference Specification Description Abstract Class.\n    \"\"\"\n\n    @abstractmethod\n    def name(self) -> str:\n        \"\"\"\n        Returns the name of the spec.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def has_known_version(self) -> bool:\n        \"\"\"\n        Returns true if the reference spec object is hard-coded with a latest\n        known version.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def known_version(self) -> str:\n        \"\"\"\n        Returns the latest known version in the reference.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def api_url(self) -> str:\n        \"\"\"\n        Returns the URL required to poll the version from an API, if needed.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def latest_version(self) -> str:\n        \"\"\"\n        Returns a digest that points to the latest version of the spec.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def is_outdated(self) -> bool:\n        \"\"\"\n        Checks whether the reference specification has been updated since the\n        test was last updated.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def write_info(self, info: Dict[str, str]):\n        \"\"\"\n        Writes info about the reference specification used into the output\n        fixture.\n        \"\"\"\n        pass\n\n    @staticmethod\n    @abstractmethod\n    def parseable_from_module(module_dict: Dict[str, Any]) -> bool:\n        \"\"\"\n        Checks whether the module's dict contains required reference spec\n        information.\n        \"\"\"\n        pass\n\n    @staticmethod\n    @abstractmethod\n    def parse_from_module(module_dict: Dict[str, Any]) -> \"ReferenceSpec\":\n        \"\"\"\n        Parses the module's dict into a reference spec.\n        \"\"\"\n        pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ReferenceSpec.name","title":"name() abstractmethod","text":"

    Returns the name of the spec.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef name(self) -> str:\n    \"\"\"\n    Returns the name of the spec.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ReferenceSpec.has_known_version","title":"has_known_version() abstractmethod","text":"

    Returns true if the reference spec object is hard-coded with a latest known version.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef has_known_version(self) -> bool:\n    \"\"\"\n    Returns true if the reference spec object is hard-coded with a latest\n    known version.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ReferenceSpec.known_version","title":"known_version() abstractmethod","text":"

    Returns the latest known version in the reference.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef known_version(self) -> str:\n    \"\"\"\n    Returns the latest known version in the reference.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ReferenceSpec.api_url","title":"api_url() abstractmethod","text":"

    Returns the URL required to poll the version from an API, if needed.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef api_url(self) -> str:\n    \"\"\"\n    Returns the URL required to poll the version from an API, if needed.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ReferenceSpec.latest_version","title":"latest_version() abstractmethod","text":"

    Returns a digest that points to the latest version of the spec.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef latest_version(self) -> str:\n    \"\"\"\n    Returns a digest that points to the latest version of the spec.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ReferenceSpec.is_outdated","title":"is_outdated() abstractmethod","text":"

    Checks whether the reference specification has been updated since the test was last updated.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef is_outdated(self) -> bool:\n    \"\"\"\n    Checks whether the reference specification has been updated since the\n    test was last updated.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ReferenceSpec.write_info","title":"write_info(info) abstractmethod","text":"

    Writes info about the reference specification used into the output fixture.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef write_info(self, info: Dict[str, str]):\n    \"\"\"\n    Writes info about the reference specification used into the output\n    fixture.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ReferenceSpec.parseable_from_module","title":"parseable_from_module(module_dict) abstractmethod staticmethod","text":"

    Checks whether the module's dict contains required reference spec information.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @staticmethod\n@abstractmethod\ndef parseable_from_module(module_dict: Dict[str, Any]) -> bool:\n    \"\"\"\n    Checks whether the module's dict contains required reference spec\n    information.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.ReferenceSpec.parse_from_module","title":"parse_from_module(module_dict) abstractmethod staticmethod","text":"

    Parses the module's dict into a reference spec.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @staticmethod\n@abstractmethod\ndef parse_from_module(module_dict: Dict[str, Any]) -> \"ReferenceSpec\":\n    \"\"\"\n    Parses the module's dict into a reference spec.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_exceptions/","title":"Ethereum Test Exceptions package","text":"

    Exceptions for invalid execution.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EngineAPIError","title":"EngineAPIError","text":"

    Bases: IntEnum

    List of Engine API errors

    Source code in src/ethereum_test_exceptions/engine_api.py
    class EngineAPIError(IntEnum):\n    \"\"\"\n    List of Engine API errors\n    \"\"\"\n\n    ParseError = -32700\n    InvalidRequest = -32600\n    MethodNotFound = -32601\n    InvalidParams = -32602\n    InternalError = -32603\n    ServerError = -32000\n    UnknownPayload = -38001\n    InvalidForkchoiceState = -38002\n    InvalidPayloadAttributes = -38003\n    TooLargeRequest = -38004\n    UnsupportedFork = -38005\n
    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EvmoneExceptionMapper","title":"EvmoneExceptionMapper","text":"

    Translate between EEST exceptions and error strings returned by evmone.

    Source code in src/ethereum_test_exceptions/evmone_exceptions.py
    class EvmoneExceptionMapper:\n    \"\"\"\n    Translate between EEST exceptions and error strings returned by evmone.\n    \"\"\"\n\n    _mapping_data = (\n        # TODO EVMONE needs to differentiate when the section is missing in the header or body\n        ExceptionMessage(EOFException.MISSING_STOP_OPCODE, \"err: no_terminating_instruction\"),\n        ExceptionMessage(EOFException.MISSING_CODE_HEADER, \"err: code_section_missing\"),\n        ExceptionMessage(EOFException.MISSING_TYPE_HEADER, \"err: type_section_missing\"),\n        # TODO EVMONE these exceptions are too similar, this leeds to ambiguity\n        ExceptionMessage(EOFException.MISSING_TERMINATOR, \"err: header_terminator_missing\"),\n        ExceptionMessage(\n            EOFException.MISSING_HEADERS_TERMINATOR, \"err: section_headers_not_terminated\"\n        ),\n        ExceptionMessage(EOFException.INVALID_VERSION, \"err: eof_version_unknown\"),\n        ExceptionMessage(\n            EOFException.INVALID_NON_RETURNING_FLAG, \"err: invalid_non_returning_flag\"\n        ),\n        ExceptionMessage(EOFException.INVALID_MAGIC, \"err: invalid_prefix\"),\n        ExceptionMessage(\n            EOFException.INVALID_FIRST_SECTION_TYPE, \"err: invalid_first_section_type\"\n        ),\n        ExceptionMessage(\n            EOFException.INVALID_SECTION_BODIES_SIZE, \"err: invalid_section_bodies_size\"\n        ),\n        ExceptionMessage(EOFException.INVALID_TYPE_SECTION_SIZE, \"err: invalid_type_section_size\"),\n        ExceptionMessage(EOFException.INCOMPLETE_SECTION_SIZE, \"err: incomplete_section_size\"),\n        ExceptionMessage(EOFException.INCOMPLETE_SECTION_NUMBER, \"err: incomplete_section_number\"),\n        ExceptionMessage(EOFException.TOO_MANY_CODE_SECTIONS, \"err: too_many_code_sections\"),\n        ExceptionMessage(EOFException.ZERO_SECTION_SIZE, \"err: zero_section_size\"),\n        ExceptionMessage(EOFException.MISSING_DATA_SECTION, \"err: data_section_missing\"),\n        ExceptionMessage(EOFException.UNDEFINED_INSTRUCTION, \"err: undefined_instruction\"),\n        ExceptionMessage(\n            EOFException.INPUTS_OUTPUTS_NUM_ABOVE_LIMIT, \"err: inputs_outputs_num_above_limit\"\n        ),\n        ExceptionMessage(EOFException.UNREACHABLE_INSTRUCTIONS, \"err: unreachable_instructions\"),\n        ExceptionMessage(EOFException.INVALID_RJUMP_DESTINATION, \"err: invalid_rjump_destination\"),\n        ExceptionMessage(EOFException.UNREACHABLE_CODE_SECTIONS, \"err: unreachable_code_sections\"),\n        ExceptionMessage(EOFException.STACK_UNDERFLOW, \"err: stack_underflow\"),\n        ExceptionMessage(\n            EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT, \"err: max_stack_height_above_limit\"\n        ),\n        ExceptionMessage(\n            EOFException.STACK_HIGHER_THAN_OUTPUTS, \"err: stack_higher_than_outputs_required\"\n        ),\n        ExceptionMessage(\n            EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS,\n            \"err: jumpf_destination_incompatible_outputs\",\n        ),\n        ExceptionMessage(EOFException.INVALID_MAX_STACK_HEIGHT, \"err: invalid_max_stack_height\"),\n        ExceptionMessage(EOFException.INVALID_DATALOADN_INDEX, \"err: invalid_dataloadn_index\"),\n        ExceptionMessage(EOFException.TRUNCATED_INSTRUCTION, \"err: truncated_instruction\"),\n        ExceptionMessage(\n            EOFException.TOPLEVEL_CONTAINER_TRUNCATED, \"err: toplevel_container_truncated\"\n        ),\n        ExceptionMessage(EOFException.ORPHAN_SUBCONTAINER, \"err: unreferenced_subcontainer\"),\n        ExceptionMessage(\n            EOFException.CONTAINER_SIZE_ABOVE_LIMIT, \"err: container_size_above_limit\"\n        ),\n        ExceptionMessage(\n            EOFException.INVALID_CONTAINER_SECTION_INDEX, \"err: invalid_container_section_index\"\n        ),\n        ExceptionMessage(\n            EOFException.INCOMPATIBLE_CONTAINER_KIND, \"err: incompatible_container_kind\"\n        ),\n        ExceptionMessage(EOFException.STACK_HEIGHT_MISMATCH, \"err: stack_height_mismatch\"),\n        ExceptionMessage(EOFException.TOO_MANY_CONTAINERS, \"err: too_many_container_sections\"),\n        ExceptionMessage(\n            EOFException.INVALID_CODE_SECTION_INDEX, \"err: invalid_code_section_index\"\n        ),\n    )\n\n    def __init__(self) -> None:\n        assert len(set(entry.exception for entry in self._mapping_data)) == len(\n            self._mapping_data\n        ), \"Duplicate exception in _mapping_data\"\n        assert len(set(entry.message for entry in self._mapping_data)) == len(\n            self._mapping_data\n        ), \"Duplicate message in _mapping_data\"\n        self.exception_to_message_map: frozenbidict = frozenbidict(\n            {entry.exception: entry.message for entry in self._mapping_data}\n        )\n\n    def exception_to_message(self, exception: EOFException) -> str:\n        \"\"\"Takes an EOFException and returns a formatted string.\"\"\"\n        message = self.exception_to_message_map.get(\n            exception,\n            f\"No message defined for {exception}; please add it to {self.__class__.__name__}\",\n        )\n        return message\n\n    def message_to_exception(self, exception_string: str) -> EOFException:\n        \"\"\"Takes a string and tries to find matching exception\"\"\"\n        # TODO inform tester where to add the missing exception if get uses default\n        exception = self.exception_to_message_map.inverse.get(\n            exception_string, EOFException.UNDEFINED_EXCEPTION\n        )\n        return exception\n
    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EvmoneExceptionMapper.exception_to_message","title":"exception_to_message(exception)","text":"

    Takes an EOFException and returns a formatted string.

    Source code in src/ethereum_test_exceptions/evmone_exceptions.py
    def exception_to_message(self, exception: EOFException) -> str:\n    \"\"\"Takes an EOFException and returns a formatted string.\"\"\"\n    message = self.exception_to_message_map.get(\n        exception,\n        f\"No message defined for {exception}; please add it to {self.__class__.__name__}\",\n    )\n    return message\n
    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EvmoneExceptionMapper.message_to_exception","title":"message_to_exception(exception_string)","text":"

    Takes a string and tries to find matching exception

    Source code in src/ethereum_test_exceptions/evmone_exceptions.py
    def message_to_exception(self, exception_string: str) -> EOFException:\n    \"\"\"Takes a string and tries to find matching exception\"\"\"\n    # TODO inform tester where to add the missing exception if get uses default\n    exception = self.exception_to_message_map.inverse.get(\n        exception_string, EOFException.UNDEFINED_EXCEPTION\n    )\n    return exception\n
    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException","title":"BlockException","text":"

    Bases: ExceptionBase

    Exception raised when a block is invalid, but not due to a transaction.

    E.g. all transactions in the block are valid, and can be applied to the state, but the block header contains an invalid field.

    Source code in src/ethereum_test_exceptions/exceptions.py
    @unique\nclass BlockException(ExceptionBase):\n    \"\"\"\n    Exception raised when a block is invalid, but not due to a transaction.\n\n    E.g. all transactions in the block are valid, and can be applied to the state, but the\n    block header contains an invalid field.\n    \"\"\"\n\n    TOO_MANY_UNCLES = auto()\n    \"\"\"\n    Block declares too many uncles over the allowed limit.\n    \"\"\"\n    UNCLE_IN_CHAIN = auto()\n    \"\"\"\n    Block declares uncle header that is already imported into chain.\n    \"\"\"\n    UNCLE_IS_ANCESTOR = auto()\n    \"\"\"\n    Block declares uncle header that is directly a parent of this block.\n    \"\"\"\n    UNCLE_IS_BROTHER = auto()\n    \"\"\"\n    Block declares two similar uncle headers.\n    \"\"\"\n    UNCLE_PARENT_INCORRECT = auto()\n    \"\"\"\n    Block declares uncle header that is an outdated block to be an uncle.\n    \"\"\"\n    EXTRA_DATA_TOO_BIG = auto()\n    \"\"\"\n    Block header's extra data >32 bytes.\n    \"\"\"\n    EXTRA_DATA_INVALID_DAO = auto()\n    \"\"\"\n    Block header's extra data after dao fork must be a fixed pre defined hash.\n    \"\"\"\n    UNKNOWN_PARENT = auto()\n    \"\"\"\n    Block header's parent hash does not correspond to any of existing blocks on chain.\n    \"\"\"\n    UNCLE_UNKNOWN_PARENT = auto()\n    \"\"\"\n    Uncle header's parent hash does not correspond to any of existing blocks on chain.\n    \"\"\"\n    UNKNOWN_PARENT_ZERO = auto()\n    \"\"\"\n    Block header's parent hash is zero hash.\n    \"\"\"\n    GASLIMIT_TOO_BIG = auto()\n    \"\"\"\n    Block header's gas limit > 0x7fffffffffffffff.\n    \"\"\"\n    INVALID_BLOCK_NUMBER = auto()\n    \"\"\"\n    Block header's number != parent header's number + 1.\n    \"\"\"\n    INVALID_BLOCK_TIMESTAMP_OLDER_THAN_PARENT = auto()\n    \"\"\"\n    Block header's timestamp <= parent header's timestamp.\n    \"\"\"\n    INVALID_DIFFICULTY = auto()\n    \"\"\"\n    Block header's difficulty does not match the difficulty formula calculated from previous block.\n    \"\"\"\n    INVALID_LOG_BLOOM = auto()\n    \"\"\"\n    Block header's logs bloom hash does not match the actually computed log bloom.\n    \"\"\"\n    INVALID_STATE_ROOT = auto()\n    \"\"\"\n    Block header's state root hash does not match the actually computed hash of the state.\n    \"\"\"\n    INVALID_RECEIPTS_ROOT = auto()\n    \"\"\"\n    Block header's receipts root hash does not match the actually computed hash of receipts.\n    \"\"\"\n    INVALID_TRANSACTIONS_ROOT = auto()\n    \"\"\"\n    Block header's transactions root hash does not match the actually computed hash of tx tree.\n    \"\"\"\n    INVALID_UNCLES_HASH = auto()\n    \"\"\"\n    Block header's uncle hash does not match the actually computed hash of block's uncles.\n    \"\"\"\n    GAS_USED_OVERFLOW = auto()\n    \"\"\"\n    Block transactions consume more gas than block header allow.\n    \"\"\"\n    INVALID_GASLIMIT = auto()\n    \"\"\"\n    Block header's gas limit does not match the gas limit formula calculated from previous block.\n    \"\"\"\n    INVALID_BASEFEE_PER_GAS = auto()\n    \"\"\"\n    Block header's base_fee_per_gas field is calculated incorrect.\n    \"\"\"\n    INVALID_GAS_USED = auto()\n    \"\"\"\n    Block header's actual gas used does not match the provided header's value\n    \"\"\"\n    INVALID_WITHDRAWALS_ROOT = auto()\n    \"\"\"\n    Block header's withdrawals root does not match calculated withdrawals root.\n    \"\"\"\n    INCORRECT_BLOCK_FORMAT = auto()\n    \"\"\"\n    Block's format is incorrect, contains invalid fields, is missing fields, or contains fields of\n    a fork that is not active yet.\n    \"\"\"\n    BLOB_GAS_USED_ABOVE_LIMIT = auto()\n    \"\"\"\n    Block's blob gas used in header is above the limit.\n    \"\"\"\n    INCORRECT_BLOB_GAS_USED = auto()\n    \"\"\"\n    Block's blob gas used in header is incorrect.\n    \"\"\"\n    INCORRECT_EXCESS_BLOB_GAS = auto()\n    \"\"\"\n    Block's excess blob gas in header is incorrect.\n    \"\"\"\n    RLP_STRUCTURES_ENCODING = auto()\n    \"\"\"\n    Block's rlp encoding is valid but ethereum structures in it are invalid.\n    \"\"\"\n    RLP_WITHDRAWALS_NOT_READ = auto()\n    \"\"\"\n    Block's rlp encoding is missing withdrawals.\n    \"\"\"\n    RLP_INVALID_FIELD_OVERFLOW_64 = auto()\n    \"\"\"\n    One of block's fields rlp is overflow 2**64 value.\n    \"\"\"\n    RLP_INVALID_ADDRESS = auto()\n    \"\"\"\n    Block withdrawals address is rlp of invalid address != 20 bytes.\n    \"\"\"\n    INVALID_REQUESTS = auto()\n    \"\"\"\n    Block's requests are invalid.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LEGACY = auto()\n    \"\"\"\n    Legacy block import is impossible in this chain configuration.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LEGACY_WRONG_PARENT = auto()\n    \"\"\"\n    Legacy block import is impossible, trying to import on top of a block that is not legacy.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LONDON_WRONG_PARENT = auto()\n    \"\"\"\n    Trying to import london (basefee) block on top of block that is not 1559.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_PARIS_WRONG_POW = auto()\n    \"\"\"\n    Trying to import paris(merge) block with PoW enabled.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_PARIS_WRONG_POS = auto()\n    \"\"\"\n    Trying to import paris(merge) block with PoS enabled before TTD is reached.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LONDON_OVER_PARIS = auto()\n    \"\"\"\n    Trying to import london looking block over paris network (POS).\n    \"\"\"\n    IMPORT_IMPOSSIBLE_PARIS_OVER_SHANGHAI = auto()\n    \"\"\"\n    Trying to import paris block on top of shanghai block.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_SHANGHAI = auto()\n    \"\"\"\n    Shanghai block import is impossible in this chain configuration.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_UNCLES_OVER_PARIS = auto()\n    \"\"\"\n    Trying to import a block after paris fork that has not empty uncles hash.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_DIFFICULTY_OVER_PARIS = auto()\n    \"\"\"\n    Trying to import a block after paris fork that has difficulty != 0.\n    \"\"\"\n
    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.TOO_MANY_UNCLES","title":"TOO_MANY_UNCLES = auto() class-attribute instance-attribute","text":"

    Block declares too many uncles over the allowed limit.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.UNCLE_IN_CHAIN","title":"UNCLE_IN_CHAIN = auto() class-attribute instance-attribute","text":"

    Block declares uncle header that is already imported into chain.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.UNCLE_IS_ANCESTOR","title":"UNCLE_IS_ANCESTOR = auto() class-attribute instance-attribute","text":"

    Block declares uncle header that is directly a parent of this block.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.UNCLE_IS_BROTHER","title":"UNCLE_IS_BROTHER = auto() class-attribute instance-attribute","text":"

    Block declares two similar uncle headers.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.UNCLE_PARENT_INCORRECT","title":"UNCLE_PARENT_INCORRECT = auto() class-attribute instance-attribute","text":"

    Block declares uncle header that is an outdated block to be an uncle.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.EXTRA_DATA_TOO_BIG","title":"EXTRA_DATA_TOO_BIG = auto() class-attribute instance-attribute","text":"

    Block header's extra data >32 bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.EXTRA_DATA_INVALID_DAO","title":"EXTRA_DATA_INVALID_DAO = auto() class-attribute instance-attribute","text":"

    Block header's extra data after dao fork must be a fixed pre defined hash.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.UNKNOWN_PARENT","title":"UNKNOWN_PARENT = auto() class-attribute instance-attribute","text":"

    Block header's parent hash does not correspond to any of existing blocks on chain.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.UNCLE_UNKNOWN_PARENT","title":"UNCLE_UNKNOWN_PARENT = auto() class-attribute instance-attribute","text":"

    Uncle header's parent hash does not correspond to any of existing blocks on chain.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.UNKNOWN_PARENT_ZERO","title":"UNKNOWN_PARENT_ZERO = auto() class-attribute instance-attribute","text":"

    Block header's parent hash is zero hash.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.GASLIMIT_TOO_BIG","title":"GASLIMIT_TOO_BIG = auto() class-attribute instance-attribute","text":"

    Block header's gas limit > 0x7fffffffffffffff.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_BLOCK_NUMBER","title":"INVALID_BLOCK_NUMBER = auto() class-attribute instance-attribute","text":"

    Block header's number != parent header's number + 1.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_BLOCK_TIMESTAMP_OLDER_THAN_PARENT","title":"INVALID_BLOCK_TIMESTAMP_OLDER_THAN_PARENT = auto() class-attribute instance-attribute","text":"

    Block header's timestamp <= parent header's timestamp.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_DIFFICULTY","title":"INVALID_DIFFICULTY = auto() class-attribute instance-attribute","text":"

    Block header's difficulty does not match the difficulty formula calculated from previous block.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_LOG_BLOOM","title":"INVALID_LOG_BLOOM = auto() class-attribute instance-attribute","text":"

    Block header's logs bloom hash does not match the actually computed log bloom.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_STATE_ROOT","title":"INVALID_STATE_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's state root hash does not match the actually computed hash of the state.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_RECEIPTS_ROOT","title":"INVALID_RECEIPTS_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's receipts root hash does not match the actually computed hash of receipts.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_TRANSACTIONS_ROOT","title":"INVALID_TRANSACTIONS_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's transactions root hash does not match the actually computed hash of tx tree.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_UNCLES_HASH","title":"INVALID_UNCLES_HASH = auto() class-attribute instance-attribute","text":"

    Block header's uncle hash does not match the actually computed hash of block's uncles.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.GAS_USED_OVERFLOW","title":"GAS_USED_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Block transactions consume more gas than block header allow.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_GASLIMIT","title":"INVALID_GASLIMIT = auto() class-attribute instance-attribute","text":"

    Block header's gas limit does not match the gas limit formula calculated from previous block.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_BASEFEE_PER_GAS","title":"INVALID_BASEFEE_PER_GAS = auto() class-attribute instance-attribute","text":"

    Block header's base_fee_per_gas field is calculated incorrect.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_GAS_USED","title":"INVALID_GAS_USED = auto() class-attribute instance-attribute","text":"

    Block header's actual gas used does not match the provided header's value

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_WITHDRAWALS_ROOT","title":"INVALID_WITHDRAWALS_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's withdrawals root does not match calculated withdrawals root.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INCORRECT_BLOCK_FORMAT","title":"INCORRECT_BLOCK_FORMAT = auto() class-attribute instance-attribute","text":"

    Block's format is incorrect, contains invalid fields, is missing fields, or contains fields of a fork that is not active yet.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.BLOB_GAS_USED_ABOVE_LIMIT","title":"BLOB_GAS_USED_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    Block's blob gas used in header is above the limit.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INCORRECT_BLOB_GAS_USED","title":"INCORRECT_BLOB_GAS_USED = auto() class-attribute instance-attribute","text":"

    Block's blob gas used in header is incorrect.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INCORRECT_EXCESS_BLOB_GAS","title":"INCORRECT_EXCESS_BLOB_GAS = auto() class-attribute instance-attribute","text":"

    Block's excess blob gas in header is incorrect.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.RLP_STRUCTURES_ENCODING","title":"RLP_STRUCTURES_ENCODING = auto() class-attribute instance-attribute","text":"

    Block's rlp encoding is valid but ethereum structures in it are invalid.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.RLP_WITHDRAWALS_NOT_READ","title":"RLP_WITHDRAWALS_NOT_READ = auto() class-attribute instance-attribute","text":"

    Block's rlp encoding is missing withdrawals.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.RLP_INVALID_FIELD_OVERFLOW_64","title":"RLP_INVALID_FIELD_OVERFLOW_64 = auto() class-attribute instance-attribute","text":"

    One of block's fields rlp is overflow 2**64 value.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.RLP_INVALID_ADDRESS","title":"RLP_INVALID_ADDRESS = auto() class-attribute instance-attribute","text":"

    Block withdrawals address is rlp of invalid address != 20 bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.INVALID_REQUESTS","title":"INVALID_REQUESTS = auto() class-attribute instance-attribute","text":"

    Block's requests are invalid.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_LEGACY","title":"IMPORT_IMPOSSIBLE_LEGACY = auto() class-attribute instance-attribute","text":"

    Legacy block import is impossible in this chain configuration.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_LEGACY_WRONG_PARENT","title":"IMPORT_IMPOSSIBLE_LEGACY_WRONG_PARENT = auto() class-attribute instance-attribute","text":"

    Legacy block import is impossible, trying to import on top of a block that is not legacy.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_LONDON_WRONG_PARENT","title":"IMPORT_IMPOSSIBLE_LONDON_WRONG_PARENT = auto() class-attribute instance-attribute","text":"

    Trying to import london (basefee) block on top of block that is not 1559.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_PARIS_WRONG_POW","title":"IMPORT_IMPOSSIBLE_PARIS_WRONG_POW = auto() class-attribute instance-attribute","text":"

    Trying to import paris(merge) block with PoW enabled.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_PARIS_WRONG_POS","title":"IMPORT_IMPOSSIBLE_PARIS_WRONG_POS = auto() class-attribute instance-attribute","text":"

    Trying to import paris(merge) block with PoS enabled before TTD is reached.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_LONDON_OVER_PARIS","title":"IMPORT_IMPOSSIBLE_LONDON_OVER_PARIS = auto() class-attribute instance-attribute","text":"

    Trying to import london looking block over paris network (POS).

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_PARIS_OVER_SHANGHAI","title":"IMPORT_IMPOSSIBLE_PARIS_OVER_SHANGHAI = auto() class-attribute instance-attribute","text":"

    Trying to import paris block on top of shanghai block.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_SHANGHAI","title":"IMPORT_IMPOSSIBLE_SHANGHAI = auto() class-attribute instance-attribute","text":"

    Shanghai block import is impossible in this chain configuration.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_UNCLES_OVER_PARIS","title":"IMPORT_IMPOSSIBLE_UNCLES_OVER_PARIS = auto() class-attribute instance-attribute","text":"

    Trying to import a block after paris fork that has not empty uncles hash.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.BlockException.IMPORT_IMPOSSIBLE_DIFFICULTY_OVER_PARIS","title":"IMPORT_IMPOSSIBLE_DIFFICULTY_OVER_PARIS = auto() class-attribute instance-attribute","text":"

    Trying to import a block after paris fork that has difficulty != 0.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException","title":"EOFException","text":"

    Bases: ExceptionBase

    Exception raised when an EOF container is invalid.

    Source code in src/ethereum_test_exceptions/exceptions.py
    @unique\nclass EOFException(ExceptionBase):\n    \"\"\"\n    Exception raised when an EOF container is invalid.\n    \"\"\"\n\n    DEFAULT_EXCEPTION = auto()\n    \"\"\"\n    Expect some exception, not yet known.\n    \"\"\"\n\n    UNDEFINED_EXCEPTION = auto()\n    \"\"\"\n    Indicates that exception string is not mapped to an exception enum.\n    \"\"\"\n\n    UNDEFINED_INSTRUCTION = auto()\n    \"\"\"\n    EOF container has undefined instruction in it's body code.\n    \"\"\"\n\n    UNKNOWN_VERSION = auto()\n    \"\"\"\n    EOF container has an unknown version.\n    \"\"\"\n    INCOMPLETE_MAGIC = auto()\n    \"\"\"\n    EOF container has not enough bytes to read magic.\n    \"\"\"\n    INVALID_MAGIC = auto()\n    \"\"\"\n    EOF container has not allowed magic version byte.\n    \"\"\"\n    INVALID_VERSION = auto()\n    \"\"\"\n    EOF container version bytes mismatch.\n    \"\"\"\n    INVALID_NON_RETURNING_FLAG = auto()\n    \"\"\"\n    EOF container's section has non-returning flag set incorrectly.\n    \"\"\"\n    INVALID_RJUMP_DESTINATION = auto()\n    \"\"\"\n    Code has RJUMP instruction with invalid parameters.\n    \"\"\"\n    MISSING_TYPE_HEADER = auto()\n    \"\"\"\n    EOF container missing types section.\n    \"\"\"\n    INVALID_TYPE_SECTION_SIZE = auto()\n    \"\"\"\n    EOF container types section has wrong size.\n    \"\"\"\n    INVALID_TYPE_BODY = auto()\n    \"\"\"\n    EOF container types body section bytes are wrong.\n    \"\"\"\n    MISSING_CODE_HEADER = auto()\n    \"\"\"\n    EOF container missing code section.\n    \"\"\"\n    INVALID_CODE_SECTION = auto()\n    \"\"\"\n    EOF container code section bytes are incorrect.\n    \"\"\"\n    INCOMPLETE_CODE_HEADER = auto()\n    \"\"\"\n    EOF container code header missing bytes.\n    \"\"\"\n    INCOMPLETE_DATA_HEADER = auto()\n    \"\"\"\n    EOF container data header missing bytes.\n    \"\"\"\n    ZERO_SECTION_SIZE = auto()\n    \"\"\"\n    EOF container data header construction is wrong.\n    \"\"\"\n    MISSING_DATA_SECTION = auto()\n    \"\"\"\n    EOF container missing data section\n    \"\"\"\n    INCOMPLETE_CONTAINER = auto()\n    \"\"\"\n    EOF container bytes are incomplete.\n    \"\"\"\n    INVALID_SECTION_BODIES_SIZE = auto()\n    \"\"\"\n    Sections bodies does not match sections headers.\n    \"\"\"\n    TRAILING_BYTES = auto()\n    \"\"\"\n    EOF container has bytes beyond data section.\n    \"\"\"\n    MISSING_TERMINATOR = auto()\n    \"\"\"\n    EOF container missing terminator bytes between header and body.\n    \"\"\"\n    MISSING_HEADERS_TERMINATOR = auto()\n    \"\"\"\n    Some type of another exception about missing headers terminator.\n    \"\"\"\n    INVALID_FIRST_SECTION_TYPE = auto()\n    \"\"\"\n    EOF container header does not have types section first.\n    \"\"\"\n    INCOMPLETE_SECTION_NUMBER = auto()\n    \"\"\"\n    EOF container header has section that is missing declaration bytes.\n    \"\"\"\n    INCOMPLETE_SECTION_SIZE = auto()\n    \"\"\"\n    EOF container header has section that is defined incorrectly.\n    \"\"\"\n    TOO_MANY_CODE_SECTIONS = auto()\n    \"\"\"\n    EOF container header has too many code sections.\n    \"\"\"\n    MISSING_STOP_OPCODE = auto()\n    \"\"\"\n    EOF container's code missing STOP bytecode at it's end.\n    \"\"\"\n    INPUTS_OUTPUTS_NUM_ABOVE_LIMIT = auto()\n    \"\"\"\n    EOF container code section inputs/outputs number is above the limit\n    \"\"\"\n    UNREACHABLE_INSTRUCTIONS = auto()\n    \"\"\"\n    EOF container's code have instructions that are unreachable.\n    \"\"\"\n    UNREACHABLE_CODE_SECTIONS = auto()\n    \"\"\"\n    EOF container's body have code sections that are unreachable.\n    \"\"\"\n    STACK_UNDERFLOW = auto()\n    \"\"\"\n    EOF container's code produces an stack underflow.\n    \"\"\"\n    STACK_HEIGHT_MISMATCH = auto()\n    \"\"\"\n    EOF container section stack height mismatch.\n    \"\"\"\n    MAX_STACK_HEIGHT_ABOVE_LIMIT = auto()\n    \"\"\"\n    EOF container's specified max stack height is above the limit.\n    \"\"\"\n    STACK_HIGHER_THAN_OUTPUTS = auto()\n    \"\"\"\n    EOF container section stack height is higher than the outputs.\n    when returning\n    \"\"\"\n    JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS = auto()\n    \"\"\"\n    EOF container section JUMPF's to a destination section with incompatible outputs.\n    \"\"\"\n    INVALID_MAX_STACK_HEIGHT = auto()\n    \"\"\"\n    EOF container section's specified max stack height does not match the actual stack height.\n    \"\"\"\n    INVALID_DATALOADN_INDEX = auto()\n    \"\"\"\n    A DATALOADN instruction has out-of-bounds index for the data section.\n    \"\"\"\n    TRUNCATED_INSTRUCTION = auto()\n    \"\"\"\n    EOF container's code section has truncated instruction.\n    \"\"\"\n    TOPLEVEL_CONTAINER_TRUNCATED = auto()\n    \"\"\"\n    Top-level EOF container has data section truncated\n    \"\"\"\n    ORPHAN_SUBCONTAINER = auto()\n    \"\"\"\n    EOF container has an unreferenced subcontainer.\n    '\"\"\"\n    CONTAINER_SIZE_ABOVE_LIMIT = auto()\n    \"\"\"\n    EOF container is above size limit\n    \"\"\"\n    INVALID_CONTAINER_SECTION_INDEX = auto()\n    \"\"\"\n    Instruction references container section that does not exist.\n    \"\"\"\n    INCOMPATIBLE_CONTAINER_KIND = auto()\n    \"\"\"\n    Incompatible instruction found in a container of a specific kind.\n    \"\"\"\n    TOO_MANY_CONTAINERS = auto()\n    \"\"\"\n    EOF container header has too many sub-containers.\n    \"\"\"\n    INVALID_CODE_SECTION_INDEX = auto()\n    \"\"\"\n    CALLF Operation referes to a non-existent code section\n    \"\"\"\n    UNEXPECTED_HEADER_KIND = auto()\n    \"\"\"\n    Header parsing encounterd a section kind it wasn't expecting\n    \"\"\"\n
    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.DEFAULT_EXCEPTION","title":"DEFAULT_EXCEPTION = auto() class-attribute instance-attribute","text":"

    Expect some exception, not yet known.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.UNDEFINED_EXCEPTION","title":"UNDEFINED_EXCEPTION = auto() class-attribute instance-attribute","text":"

    Indicates that exception string is not mapped to an exception enum.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.UNDEFINED_INSTRUCTION","title":"UNDEFINED_INSTRUCTION = auto() class-attribute instance-attribute","text":"

    EOF container has undefined instruction in it's body code.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.UNKNOWN_VERSION","title":"UNKNOWN_VERSION = auto() class-attribute instance-attribute","text":"

    EOF container has an unknown version.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_MAGIC","title":"INCOMPLETE_MAGIC = auto() class-attribute instance-attribute","text":"

    EOF container has not enough bytes to read magic.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_MAGIC","title":"INVALID_MAGIC = auto() class-attribute instance-attribute","text":"

    EOF container has not allowed magic version byte.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_VERSION","title":"INVALID_VERSION = auto() class-attribute instance-attribute","text":"

    EOF container version bytes mismatch.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_NON_RETURNING_FLAG","title":"INVALID_NON_RETURNING_FLAG = auto() class-attribute instance-attribute","text":"

    EOF container's section has non-returning flag set incorrectly.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_RJUMP_DESTINATION","title":"INVALID_RJUMP_DESTINATION = auto() class-attribute instance-attribute","text":"

    Code has RJUMP instruction with invalid parameters.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.MISSING_TYPE_HEADER","title":"MISSING_TYPE_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container missing types section.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_TYPE_SECTION_SIZE","title":"INVALID_TYPE_SECTION_SIZE = auto() class-attribute instance-attribute","text":"

    EOF container types section has wrong size.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_TYPE_BODY","title":"INVALID_TYPE_BODY = auto() class-attribute instance-attribute","text":"

    EOF container types body section bytes are wrong.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.MISSING_CODE_HEADER","title":"MISSING_CODE_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container missing code section.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_CODE_SECTION","title":"INVALID_CODE_SECTION = auto() class-attribute instance-attribute","text":"

    EOF container code section bytes are incorrect.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_CODE_HEADER","title":"INCOMPLETE_CODE_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container code header missing bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_DATA_HEADER","title":"INCOMPLETE_DATA_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container data header missing bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.ZERO_SECTION_SIZE","title":"ZERO_SECTION_SIZE = auto() class-attribute instance-attribute","text":"

    EOF container data header construction is wrong.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.MISSING_DATA_SECTION","title":"MISSING_DATA_SECTION = auto() class-attribute instance-attribute","text":"

    EOF container missing data section

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_CONTAINER","title":"INCOMPLETE_CONTAINER = auto() class-attribute instance-attribute","text":"

    EOF container bytes are incomplete.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_SECTION_BODIES_SIZE","title":"INVALID_SECTION_BODIES_SIZE = auto() class-attribute instance-attribute","text":"

    Sections bodies does not match sections headers.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.TRAILING_BYTES","title":"TRAILING_BYTES = auto() class-attribute instance-attribute","text":"

    EOF container has bytes beyond data section.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.MISSING_TERMINATOR","title":"MISSING_TERMINATOR = auto() class-attribute instance-attribute","text":"

    EOF container missing terminator bytes between header and body.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.MISSING_HEADERS_TERMINATOR","title":"MISSING_HEADERS_TERMINATOR = auto() class-attribute instance-attribute","text":"

    Some type of another exception about missing headers terminator.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_FIRST_SECTION_TYPE","title":"INVALID_FIRST_SECTION_TYPE = auto() class-attribute instance-attribute","text":"

    EOF container header does not have types section first.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_SECTION_NUMBER","title":"INCOMPLETE_SECTION_NUMBER = auto() class-attribute instance-attribute","text":"

    EOF container header has section that is missing declaration bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INCOMPLETE_SECTION_SIZE","title":"INCOMPLETE_SECTION_SIZE = auto() class-attribute instance-attribute","text":"

    EOF container header has section that is defined incorrectly.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.TOO_MANY_CODE_SECTIONS","title":"TOO_MANY_CODE_SECTIONS = auto() class-attribute instance-attribute","text":"

    EOF container header has too many code sections.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.MISSING_STOP_OPCODE","title":"MISSING_STOP_OPCODE = auto() class-attribute instance-attribute","text":"

    EOF container's code missing STOP bytecode at it's end.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INPUTS_OUTPUTS_NUM_ABOVE_LIMIT","title":"INPUTS_OUTPUTS_NUM_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    EOF container code section inputs/outputs number is above the limit

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.UNREACHABLE_INSTRUCTIONS","title":"UNREACHABLE_INSTRUCTIONS = auto() class-attribute instance-attribute","text":"

    EOF container's code have instructions that are unreachable.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.UNREACHABLE_CODE_SECTIONS","title":"UNREACHABLE_CODE_SECTIONS = auto() class-attribute instance-attribute","text":"

    EOF container's body have code sections that are unreachable.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.STACK_UNDERFLOW","title":"STACK_UNDERFLOW = auto() class-attribute instance-attribute","text":"

    EOF container's code produces an stack underflow.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.STACK_HEIGHT_MISMATCH","title":"STACK_HEIGHT_MISMATCH = auto() class-attribute instance-attribute","text":"

    EOF container section stack height mismatch.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT","title":"MAX_STACK_HEIGHT_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    EOF container's specified max stack height is above the limit.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.STACK_HIGHER_THAN_OUTPUTS","title":"STACK_HIGHER_THAN_OUTPUTS = auto() class-attribute instance-attribute","text":"

    EOF container section stack height is higher than the outputs. when returning

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS","title":"JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS = auto() class-attribute instance-attribute","text":"

    EOF container section JUMPF's to a destination section with incompatible outputs.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_MAX_STACK_HEIGHT","title":"INVALID_MAX_STACK_HEIGHT = auto() class-attribute instance-attribute","text":"

    EOF container section's specified max stack height does not match the actual stack height.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_DATALOADN_INDEX","title":"INVALID_DATALOADN_INDEX = auto() class-attribute instance-attribute","text":"

    A DATALOADN instruction has out-of-bounds index for the data section.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.TRUNCATED_INSTRUCTION","title":"TRUNCATED_INSTRUCTION = auto() class-attribute instance-attribute","text":"

    EOF container's code section has truncated instruction.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.TOPLEVEL_CONTAINER_TRUNCATED","title":"TOPLEVEL_CONTAINER_TRUNCATED = auto() class-attribute instance-attribute","text":"

    Top-level EOF container has data section truncated

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.ORPHAN_SUBCONTAINER","title":"ORPHAN_SUBCONTAINER = auto() class-attribute instance-attribute","text":"

    EOF container has an unreferenced subcontainer. '

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.CONTAINER_SIZE_ABOVE_LIMIT","title":"CONTAINER_SIZE_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    EOF container is above size limit

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_CONTAINER_SECTION_INDEX","title":"INVALID_CONTAINER_SECTION_INDEX = auto() class-attribute instance-attribute","text":"

    Instruction references container section that does not exist.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INCOMPATIBLE_CONTAINER_KIND","title":"INCOMPATIBLE_CONTAINER_KIND = auto() class-attribute instance-attribute","text":"

    Incompatible instruction found in a container of a specific kind.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.TOO_MANY_CONTAINERS","title":"TOO_MANY_CONTAINERS = auto() class-attribute instance-attribute","text":"

    EOF container header has too many sub-containers.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.INVALID_CODE_SECTION_INDEX","title":"INVALID_CODE_SECTION_INDEX = auto() class-attribute instance-attribute","text":"

    CALLF Operation referes to a non-existent code section

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.EOFException.UNEXPECTED_HEADER_KIND","title":"UNEXPECTED_HEADER_KIND = auto() class-attribute instance-attribute","text":"

    Header parsing encounterd a section kind it wasn't expecting

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException","title":"TransactionException","text":"

    Bases: ExceptionBase

    Exception raised when a transaction is invalid, and thus cannot be executed.

    If a transaction with any of these exceptions is included in a block, the block is invalid.

    Source code in src/ethereum_test_exceptions/exceptions.py
    @unique\nclass TransactionException(ExceptionBase):\n    \"\"\"\n    Exception raised when a transaction is invalid, and thus cannot be executed.\n\n    If a transaction with any of these exceptions is included in a block, the block is invalid.\n    \"\"\"\n\n    TYPE_NOT_SUPPORTED = auto()\n    \"\"\"\n    Transaction type is not supported on this chain configuration.\n    \"\"\"\n    SENDER_NOT_EOA = auto()\n    \"\"\"\n    Transaction is coming from address that is not exist anymore.\n    \"\"\"\n    ADDRESS_TOO_SHORT = auto()\n    \"\"\"\n    Transaction `to` is not allowed to be less than 20 bytes.\n    \"\"\"\n    ADDRESS_TOO_LONG = auto()\n    \"\"\"\n    Transaction `to` is not allowed to be more than 20 bytes.\n    \"\"\"\n    NONCE_MISMATCH_TOO_HIGH = auto()\n    \"\"\"\n    Transaction nonce > sender.nonce.\n    \"\"\"\n    NONCE_MISMATCH_TOO_LOW = auto()\n    \"\"\"\n    Transaction nonce < sender.nonce.\n    \"\"\"\n    NONCE_TOO_BIG = auto()\n    \"\"\"\n    Transaction `nonce` is not allowed to be max_uint64 - 1 (this is probably TransactionTest).\n    \"\"\"\n    NONCE_IS_MAX = auto()\n    \"\"\"\n    Transaction `nonce` is not allowed to be max_uint64 - 1 (this is StateTests).\n    \"\"\"\n    NONCE_OVERFLOW = auto()\n    \"\"\"\n    Transaction `nonce` is not allowed to be more than uint64.\n    \"\"\"\n    GASLIMIT_OVERFLOW = auto()\n    \"\"\"\n    Transaction gaslimit exceeds 2^64-1 maximum value.\n    \"\"\"\n    VALUE_OVERFLOW = auto()\n    \"\"\"\n    Transaction value exceeds 2^256-1 maximum value.\n    \"\"\"\n    GASPRICE_OVERFLOW = auto()\n    \"\"\"\n    Transaction gasPrice exceeds 2^256-1 maximum value.\n    \"\"\"\n    GASLIMIT_PRICE_PRODUCT_OVERFLOW = auto()\n    \"\"\"\n    Transaction gasPrice * gasLimit exceeds 2^256-1 maximum value.\n    \"\"\"\n    INVALID_SIGNATURE_VRS = auto()\n    \"\"\"\n    Invalid transaction v, r, s values.\n    \"\"\"\n    RLP_INVALID_SIGNATURE_R = auto()\n    \"\"\"\n    Error reading transaction signature R value.\n    \"\"\"\n    RLP_INVALID_SIGNATURE_S = auto()\n    \"\"\"\n    Error reading transaction signature S value.\n    \"\"\"\n    RLP_LEADING_ZEROS_GASLIMIT = auto()\n    \"\"\"\n    Error reading transaction gaslimit field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_GASPRICE = auto()\n    \"\"\"\n    Error reading transaction gasprice field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_VALUE = auto()\n    \"\"\"\n    Error reading transaction value field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_NONCE = auto()\n    \"\"\"\n    Error reading transaction nonce field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_R = auto()\n    \"\"\"\n    Error reading transaction signature R field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_S = auto()\n    \"\"\"\n    Error reading transaction signature S field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_V = auto()\n    \"\"\"\n    Error reading transaction signature V field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_BASEFEE = auto()\n    \"\"\"\n    Error reading transaction basefee field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_PRIORITY_FEE = auto()\n    \"\"\"\n    Error reading transaction priority fee field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_DATA_SIZE = auto()\n    \"\"\"\n    Error reading transaction data field RLP, (rlp field length has leading zeros).\n    \"\"\"\n    RLP_LEADING_ZEROS_NONCE_SIZE = auto()\n    \"\"\"\n    Error reading transaction nonce field RLP, (rlp field length has leading zeros).\n    \"\"\"\n    RLP_TOO_FEW_ELEMENTS = auto()\n    \"\"\"\n    Error reading transaction RLP, structure has too few elements than expected.\n    \"\"\"\n    RLP_TOO_MANY_ELEMENTS = auto()\n    \"\"\"\n    Error reading transaction RLP, structure has too many elements than expected.\n    \"\"\"\n    RLP_ERROR_EOF = auto()\n    \"\"\"\n    Error reading transaction RLP, rlp stream unexpectedly finished.\n    \"\"\"\n    RLP_ERROR_SIZE = auto()\n    \"\"\"\n    Error reading transaction RLP, rlp size is invalid.\n    \"\"\"\n    RLP_ERROR_SIZE_LEADING_ZEROS = auto()\n    \"\"\"\n    Error reading transaction RLP, field size has leading zeros.\n    \"\"\"\n    INVALID_CHAINID = auto()\n    \"\"\"\n    Transaction chain id encoding is incorrect.\n    \"\"\"\n    RLP_INVALID_DATA = auto()\n    \"\"\"\n    Transaction data field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_GASLIMIT = auto()\n    \"\"\"\n    Transaction gaslimit field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_NONCE = auto()\n    \"\"\"\n    Transaction nonce field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_TO = auto()\n    \"\"\"\n    Transaction to field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_LONG = auto()\n    \"\"\"\n    Transaction access list address is > 20 bytes.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_SHORT = auto()\n    \"\"\"\n    Transaction access list address is < 20 bytes.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_STORAGE_TOO_LONG = auto()\n    \"\"\"\n    Transaction access list storage hash > 32 bytes.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_STORAGE_TOO_SHORT = auto()\n    \"\"\"\n    Transaction access list storage hash < 32 bytes.\n    \"\"\"\n    RLP_INVALID_HEADER = auto()\n    \"\"\"\n    Transaction failed to read from RLP as rlp header is invalid.\n    \"\"\"\n    RLP_INVALID_VALUE = auto()\n    \"\"\"\n    Transaction value field is invalid rlp/structure.\n    \"\"\"\n    EC_RECOVERY_FAIL = auto()\n    \"\"\"\n    Transaction has correct signature, but ec recovery failed.\n    \"\"\"\n    INSUFFICIENT_ACCOUNT_FUNDS = auto()\n    \"\"\"\n    Transaction's sender does not have enough funds to pay for the transaction.\n    \"\"\"\n    INSUFFICIENT_MAX_FEE_PER_GAS = auto()\n    \"\"\"\n    Transaction's max-fee-per-gas is lower than the block base-fee.\n    \"\"\"\n    PRIORITY_OVERFLOW = auto()\n    \"\"\"\n    Transaction's max-priority-fee-per-gas is exceeds 2^256-1 maximum value.\n    \"\"\"\n    PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS = auto()\n    \"\"\"\n    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas.\n    \"\"\"\n    PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS_2 = auto()\n    \"\"\"\n    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas (TransactionTests).\n    \"\"\"\n    INSUFFICIENT_MAX_FEE_PER_BLOB_GAS = auto()\n    \"\"\"\n    Transaction's max-fee-per-blob-gas is lower than the block's blob-gas price.\n    \"\"\"\n    INTRINSIC_GAS_TOO_LOW = auto()\n    \"\"\"\n    Transaction's gas limit is too low.\n    \"\"\"\n    INITCODE_SIZE_EXCEEDED = auto()\n    \"\"\"\n    Transaction's initcode for a contract-creating transaction is too large.\n    \"\"\"\n    TYPE_3_TX_PRE_FORK = auto()\n    \"\"\"\n    Transaction type 3 included before activation fork.\n    \"\"\"\n    TYPE_3_TX_ZERO_BLOBS_PRE_FORK = auto()\n    \"\"\"\n    Transaction type 3, with zero blobs, included before activation fork.\n    \"\"\"\n    TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH = auto()\n    \"\"\"\n    Transaction contains a blob versioned hash with an invalid version.\n    \"\"\"\n    TYPE_3_TX_WITH_FULL_BLOBS = auto()\n    \"\"\"\n    Transaction contains full blobs (network-version of the transaction).\n    \"\"\"\n    TYPE_3_TX_BLOB_COUNT_EXCEEDED = auto()\n    \"\"\"\n    Transaction contains too many blob versioned hashes.\n    \"\"\"\n    TYPE_3_TX_CONTRACT_CREATION = auto()\n    \"\"\"\n    Transaction is a type 3 transaction and has an empty `to`.\n    \"\"\"\n    TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED = auto()\n    \"\"\"\n    Transaction causes block to go over blob gas limit.\n    \"\"\"\n    GAS_ALLOWANCE_EXCEEDED = auto()\n    \"\"\"\n    Transaction causes block to go over blob gas limit.\n    \"\"\"\n    TYPE_3_TX_ZERO_BLOBS = auto()\n    \"\"\"\n    Transaction is type 3, but has no blobs.\n    \"\"\"\n
    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_NOT_SUPPORTED","title":"TYPE_NOT_SUPPORTED = auto() class-attribute instance-attribute","text":"

    Transaction type is not supported on this chain configuration.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.SENDER_NOT_EOA","title":"SENDER_NOT_EOA = auto() class-attribute instance-attribute","text":"

    Transaction is coming from address that is not exist anymore.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.ADDRESS_TOO_SHORT","title":"ADDRESS_TOO_SHORT = auto() class-attribute instance-attribute","text":"

    Transaction to is not allowed to be less than 20 bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.ADDRESS_TOO_LONG","title":"ADDRESS_TOO_LONG = auto() class-attribute instance-attribute","text":"

    Transaction to is not allowed to be more than 20 bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.NONCE_MISMATCH_TOO_HIGH","title":"NONCE_MISMATCH_TOO_HIGH = auto() class-attribute instance-attribute","text":"

    Transaction nonce > sender.nonce.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.NONCE_MISMATCH_TOO_LOW","title":"NONCE_MISMATCH_TOO_LOW = auto() class-attribute instance-attribute","text":"

    Transaction nonce < sender.nonce.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.NONCE_TOO_BIG","title":"NONCE_TOO_BIG = auto() class-attribute instance-attribute","text":"

    Transaction nonce is not allowed to be max_uint64 - 1 (this is probably TransactionTest).

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.NONCE_IS_MAX","title":"NONCE_IS_MAX = auto() class-attribute instance-attribute","text":"

    Transaction nonce is not allowed to be max_uint64 - 1 (this is StateTests).

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.NONCE_OVERFLOW","title":"NONCE_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction nonce is not allowed to be more than uint64.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.GASLIMIT_OVERFLOW","title":"GASLIMIT_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction gaslimit exceeds 2^64-1 maximum value.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.VALUE_OVERFLOW","title":"VALUE_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction value exceeds 2^256-1 maximum value.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.GASPRICE_OVERFLOW","title":"GASPRICE_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction gasPrice exceeds 2^256-1 maximum value.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.GASLIMIT_PRICE_PRODUCT_OVERFLOW","title":"GASLIMIT_PRICE_PRODUCT_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction gasPrice * gasLimit exceeds 2^256-1 maximum value.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.INVALID_SIGNATURE_VRS","title":"INVALID_SIGNATURE_VRS = auto() class-attribute instance-attribute","text":"

    Invalid transaction v, r, s values.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_SIGNATURE_R","title":"RLP_INVALID_SIGNATURE_R = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature R value.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_SIGNATURE_S","title":"RLP_INVALID_SIGNATURE_S = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature S value.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_GASLIMIT","title":"RLP_LEADING_ZEROS_GASLIMIT = auto() class-attribute instance-attribute","text":"

    Error reading transaction gaslimit field RLP.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_GASPRICE","title":"RLP_LEADING_ZEROS_GASPRICE = auto() class-attribute instance-attribute","text":"

    Error reading transaction gasprice field RLP.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_VALUE","title":"RLP_LEADING_ZEROS_VALUE = auto() class-attribute instance-attribute","text":"

    Error reading transaction value field RLP.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_NONCE","title":"RLP_LEADING_ZEROS_NONCE = auto() class-attribute instance-attribute","text":"

    Error reading transaction nonce field RLP.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_R","title":"RLP_LEADING_ZEROS_R = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature R field RLP.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_S","title":"RLP_LEADING_ZEROS_S = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature S field RLP.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_V","title":"RLP_LEADING_ZEROS_V = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature V field RLP.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_BASEFEE","title":"RLP_LEADING_ZEROS_BASEFEE = auto() class-attribute instance-attribute","text":"

    Error reading transaction basefee field RLP.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_PRIORITY_FEE","title":"RLP_LEADING_ZEROS_PRIORITY_FEE = auto() class-attribute instance-attribute","text":"

    Error reading transaction priority fee field RLP.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_DATA_SIZE","title":"RLP_LEADING_ZEROS_DATA_SIZE = auto() class-attribute instance-attribute","text":"

    Error reading transaction data field RLP, (rlp field length has leading zeros).

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_LEADING_ZEROS_NONCE_SIZE","title":"RLP_LEADING_ZEROS_NONCE_SIZE = auto() class-attribute instance-attribute","text":"

    Error reading transaction nonce field RLP, (rlp field length has leading zeros).

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_TOO_FEW_ELEMENTS","title":"RLP_TOO_FEW_ELEMENTS = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, structure has too few elements than expected.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_TOO_MANY_ELEMENTS","title":"RLP_TOO_MANY_ELEMENTS = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, structure has too many elements than expected.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_ERROR_EOF","title":"RLP_ERROR_EOF = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, rlp stream unexpectedly finished.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_ERROR_SIZE","title":"RLP_ERROR_SIZE = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, rlp size is invalid.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_ERROR_SIZE_LEADING_ZEROS","title":"RLP_ERROR_SIZE_LEADING_ZEROS = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, field size has leading zeros.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.INVALID_CHAINID","title":"INVALID_CHAINID = auto() class-attribute instance-attribute","text":"

    Transaction chain id encoding is incorrect.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_DATA","title":"RLP_INVALID_DATA = auto() class-attribute instance-attribute","text":"

    Transaction data field is invalid rlp.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_GASLIMIT","title":"RLP_INVALID_GASLIMIT = auto() class-attribute instance-attribute","text":"

    Transaction gaslimit field is invalid rlp.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_NONCE","title":"RLP_INVALID_NONCE = auto() class-attribute instance-attribute","text":"

    Transaction nonce field is invalid rlp.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_TO","title":"RLP_INVALID_TO = auto() class-attribute instance-attribute","text":"

    Transaction to field is invalid rlp.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_LONG","title":"RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_LONG = auto() class-attribute instance-attribute","text":"

    Transaction access list address is > 20 bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_SHORT","title":"RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_SHORT = auto() class-attribute instance-attribute","text":"

    Transaction access list address is < 20 bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_ACCESS_LIST_STORAGE_TOO_LONG","title":"RLP_INVALID_ACCESS_LIST_STORAGE_TOO_LONG = auto() class-attribute instance-attribute","text":"

    Transaction access list storage hash > 32 bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_ACCESS_LIST_STORAGE_TOO_SHORT","title":"RLP_INVALID_ACCESS_LIST_STORAGE_TOO_SHORT = auto() class-attribute instance-attribute","text":"

    Transaction access list storage hash < 32 bytes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_HEADER","title":"RLP_INVALID_HEADER = auto() class-attribute instance-attribute","text":"

    Transaction failed to read from RLP as rlp header is invalid.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.RLP_INVALID_VALUE","title":"RLP_INVALID_VALUE = auto() class-attribute instance-attribute","text":"

    Transaction value field is invalid rlp/structure.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.EC_RECOVERY_FAIL","title":"EC_RECOVERY_FAIL = auto() class-attribute instance-attribute","text":"

    Transaction has correct signature, but ec recovery failed.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.INSUFFICIENT_ACCOUNT_FUNDS","title":"INSUFFICIENT_ACCOUNT_FUNDS = auto() class-attribute instance-attribute","text":"

    Transaction's sender does not have enough funds to pay for the transaction.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS","title":"INSUFFICIENT_MAX_FEE_PER_GAS = auto() class-attribute instance-attribute","text":"

    Transaction's max-fee-per-gas is lower than the block base-fee.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.PRIORITY_OVERFLOW","title":"PRIORITY_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction's max-priority-fee-per-gas is exceeds 2^256-1 maximum value.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS","title":"PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS = auto() class-attribute instance-attribute","text":"

    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS_2","title":"PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS_2 = auto() class-attribute instance-attribute","text":"

    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas (TransactionTests).

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS","title":"INSUFFICIENT_MAX_FEE_PER_BLOB_GAS = auto() class-attribute instance-attribute","text":"

    Transaction's max-fee-per-blob-gas is lower than the block's blob-gas price.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.INTRINSIC_GAS_TOO_LOW","title":"INTRINSIC_GAS_TOO_LOW = auto() class-attribute instance-attribute","text":"

    Transaction's gas limit is too low.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.INITCODE_SIZE_EXCEEDED","title":"INITCODE_SIZE_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction's initcode for a contract-creating transaction is too large.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_PRE_FORK","title":"TYPE_3_TX_PRE_FORK = auto() class-attribute instance-attribute","text":"

    Transaction type 3 included before activation fork.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_ZERO_BLOBS_PRE_FORK","title":"TYPE_3_TX_ZERO_BLOBS_PRE_FORK = auto() class-attribute instance-attribute","text":"

    Transaction type 3, with zero blobs, included before activation fork.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH","title":"TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH = auto() class-attribute instance-attribute","text":"

    Transaction contains a blob versioned hash with an invalid version.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_WITH_FULL_BLOBS","title":"TYPE_3_TX_WITH_FULL_BLOBS = auto() class-attribute instance-attribute","text":"

    Transaction contains full blobs (network-version of the transaction).

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED","title":"TYPE_3_TX_BLOB_COUNT_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction contains too many blob versioned hashes.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_CONTRACT_CREATION","title":"TYPE_3_TX_CONTRACT_CREATION = auto() class-attribute instance-attribute","text":"

    Transaction is a type 3 transaction and has an empty to.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED","title":"TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction causes block to go over blob gas limit.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.GAS_ALLOWANCE_EXCEEDED","title":"GAS_ALLOWANCE_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction causes block to go over blob gas limit.

    "},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_3_TX_ZERO_BLOBS","title":"TYPE_3_TX_ZERO_BLOBS = auto() class-attribute instance-attribute","text":"

    Transaction is type 3, but has no blobs.

    "},{"location":"library/ethereum_test_fixtures/","title":"Ethereum Test Fixtures package","text":"

    Ethereum test fixture format definitions.

    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.BaseFixture","title":"BaseFixture","text":"

    Bases: CamelModel

    Represents a base Ethereum test fixture of any type.

    Source code in src/ethereum_test_fixtures/base.py
    class BaseFixture(CamelModel):\n    \"\"\"Represents a base Ethereum test fixture of any type.\"\"\"\n\n    info: Dict[str, str] = Field(default_factory=dict, alias=\"_info\")\n    format: ClassVar[FixtureFormats] = FixtureFormats.UNSET_TEST_FORMAT\n\n    @cached_property\n    def json_dict(self) -> Dict[str, Any]:\n        \"\"\"\n        Returns the JSON representation of the fixture.\n        \"\"\"\n        return self.model_dump(mode=\"json\", by_alias=True, exclude_none=True, exclude={\"info\"})\n\n    @cached_property\n    def hash(self) -> str:\n        \"\"\"\n        Returns the hash of the fixture.\n        \"\"\"\n        json_str = json.dumps(self.json_dict, sort_keys=True, separators=(\",\", \":\"))\n        h = hashlib.sha256(json_str.encode(\"utf-8\")).hexdigest()\n        return f\"0x{h}\"\n\n    def json_dict_with_info(self, hash_only: bool = False) -> Dict[str, Any]:\n        \"\"\"\n        Returns the JSON representation of the fixture with the info field.\n        \"\"\"\n        dict_with_info = self.json_dict.copy()\n        dict_with_info[\"_info\"] = {\"hash\": self.hash}\n        if not hash_only:\n            dict_with_info[\"_info\"].update(self.info)\n        return dict_with_info\n\n    def fill_info(\n        self,\n        t8n_version: str,\n        fixture_description: str,\n        fixture_source_url: str,\n        ref_spec: ReferenceSpec | None,\n    ):\n        \"\"\"\n        Fill the info field for this fixture\n        \"\"\"\n        if \"comment\" not in self.info:\n            self.info[\"comment\"] = \"`execution-spec-tests` generated test\"\n        self.info[\"filling-transition-tool\"] = t8n_version\n        self.info[\"description\"] = fixture_description\n        self.info[\"url\"] = fixture_source_url\n        if ref_spec is not None:\n            ref_spec.write_info(self.info)\n\n    def get_fork(self) -> str | None:\n        \"\"\"\n        Returns the fork of the fixture as a string.\n        \"\"\"\n        raise NotImplementedError\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.BaseFixture.json_dict","title":"json_dict: Dict[str, Any] cached property","text":"

    Returns the JSON representation of the fixture.

    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.BaseFixture.hash","title":"hash: str cached property","text":"

    Returns the hash of the fixture.

    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.BaseFixture.json_dict_with_info","title":"json_dict_with_info(hash_only=False)","text":"

    Returns the JSON representation of the fixture with the info field.

    Source code in src/ethereum_test_fixtures/base.py
    def json_dict_with_info(self, hash_only: bool = False) -> Dict[str, Any]:\n    \"\"\"\n    Returns the JSON representation of the fixture with the info field.\n    \"\"\"\n    dict_with_info = self.json_dict.copy()\n    dict_with_info[\"_info\"] = {\"hash\": self.hash}\n    if not hash_only:\n        dict_with_info[\"_info\"].update(self.info)\n    return dict_with_info\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.BaseFixture.fill_info","title":"fill_info(t8n_version, fixture_description, fixture_source_url, ref_spec)","text":"

    Fill the info field for this fixture

    Source code in src/ethereum_test_fixtures/base.py
    def fill_info(\n    self,\n    t8n_version: str,\n    fixture_description: str,\n    fixture_source_url: str,\n    ref_spec: ReferenceSpec | None,\n):\n    \"\"\"\n    Fill the info field for this fixture\n    \"\"\"\n    if \"comment\" not in self.info:\n        self.info[\"comment\"] = \"`execution-spec-tests` generated test\"\n    self.info[\"filling-transition-tool\"] = t8n_version\n    self.info[\"description\"] = fixture_description\n    self.info[\"url\"] = fixture_source_url\n    if ref_spec is not None:\n        ref_spec.write_info(self.info)\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.BaseFixture.get_fork","title":"get_fork()","text":"

    Returns the fork of the fixture as a string.

    Source code in src/ethereum_test_fixtures/base.py
    def get_fork(self) -> str | None:\n    \"\"\"\n    Returns the fork of the fixture as a string.\n    \"\"\"\n    raise NotImplementedError\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.BlockchainEngineFixture","title":"BlockchainEngineFixture","text":"

    Bases: FixtureCommon

    Engine specific test fixture information.

    Source code in src/ethereum_test_fixtures/blockchain.py
    class EngineFixture(FixtureCommon):\n    \"\"\"\n    Engine specific test fixture information.\n    \"\"\"\n\n    payloads: List[FixtureEngineNewPayload] = Field(..., alias=\"engineNewPayloads\")\n    sync_payload: FixtureEngineNewPayload | None = None\n\n    format: ClassVar[FixtureFormats] = FixtureFormats.BLOCKCHAIN_TEST_ENGINE\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.BlockchainFixture","title":"BlockchainFixture","text":"

    Bases: FixtureCommon

    Cross-client specific blockchain test model use in JSON fixtures.

    Source code in src/ethereum_test_fixtures/blockchain.py
    class Fixture(FixtureCommon):\n    \"\"\"\n    Cross-client specific blockchain test model use in JSON fixtures.\n    \"\"\"\n\n    genesis_rlp: Bytes = Field(..., alias=\"genesisRLP\")\n    blocks: List[FixtureBlock | InvalidFixtureBlock]\n    seal_engine: Literal[\"NoProof\"] = Field(\"NoProof\")\n\n    format: ClassVar[FixtureFormats] = FixtureFormats.BLOCKCHAIN_TEST\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.BlockchainFixtureCommon","title":"BlockchainFixtureCommon","text":"

    Bases: BaseFixture

    Base blockchain test fixture model.

    Source code in src/ethereum_test_fixtures/blockchain.py
    class FixtureCommon(BaseFixture):\n    \"\"\"\n    Base blockchain test fixture model.\n    \"\"\"\n\n    fork: str = Field(..., alias=\"network\")\n    genesis: FixtureHeader = Field(..., alias=\"genesisBlockHeader\")\n    pre: Alloc\n    post_state: Alloc | None = Field(None)\n    last_block_hash: Hash = Field(..., alias=\"lastblockhash\")  # FIXME: lastBlockHash\n\n    def get_fork(self) -> str | None:\n        \"\"\"\n        Returns the fork of the fixture as a string.\n        \"\"\"\n        return self.fork\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.BlockchainFixtureCommon.get_fork","title":"get_fork()","text":"

    Returns the fork of the fixture as a string.

    Source code in src/ethereum_test_fixtures/blockchain.py
    def get_fork(self) -> str | None:\n    \"\"\"\n    Returns the fork of the fixture as a string.\n    \"\"\"\n    return self.fork\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureCollector","title":"FixtureCollector dataclass","text":"

    Collects all fixtures generated by the test cases.

    Source code in src/ethereum_test_fixtures/collector.py
    @dataclass(kw_only=True)\nclass FixtureCollector:\n    \"\"\"\n    Collects all fixtures generated by the test cases.\n    \"\"\"\n\n    output_dir: Path\n    flat_output: bool\n    single_fixture_per_file: bool\n    filler_path: Path\n    base_dump_dir: Optional[Path] = None\n\n    # Internal state\n    all_fixtures: Dict[Path, Fixtures] = field(default_factory=dict)\n    json_path_to_test_item: Dict[Path, TestInfo] = field(default_factory=dict)\n\n    def get_fixture_basename(self, info: TestInfo) -> Path:\n        \"\"\"\n        Returns the basename of the fixture file for a given test case.\n        \"\"\"\n        if self.flat_output:\n            if self.single_fixture_per_file:\n                return Path(strip_test_prefix(info.get_single_test_name()))\n            return Path(strip_test_prefix(info.original_name))\n        else:\n            relative_fixture_output_dir = Path(info.path).parent / strip_test_prefix(\n                Path(info.path).stem\n            )\n            module_relative_output_dir = get_module_relative_output_dir(\n                relative_fixture_output_dir, self.filler_path\n            )\n\n            if self.single_fixture_per_file:\n                return module_relative_output_dir / strip_test_prefix(info.get_single_test_name())\n            return module_relative_output_dir / strip_test_prefix(info.original_name)\n\n    def add_fixture(self, info: TestInfo, fixture: BaseFixture) -> Path:\n        \"\"\"\n        Adds a fixture to the list of fixtures of a given test case.\n        \"\"\"\n        fixture_basename = self.get_fixture_basename(info)\n\n        fixture_path = (\n            self.output_dir\n            / fixture.format.output_base_dir_name\n            / fixture_basename.with_suffix(fixture.format.output_file_extension)\n        )\n        if fixture_path not in self.all_fixtures.keys():  # relevant when we group by test function\n            self.all_fixtures[fixture_path] = Fixtures(root={})\n            self.json_path_to_test_item[fixture_path] = info\n\n        self.all_fixtures[fixture_path][info.id] = fixture\n\n        return fixture_path\n\n    def dump_fixtures(self) -> None:\n        \"\"\"\n        Dumps all collected fixtures to their respective files.\n        \"\"\"\n        if self.output_dir.name == \"stdout\":\n            combined_fixtures = {\n                k: to_json(v) for fixture in self.all_fixtures.values() for k, v in fixture.items()\n            }\n            json.dump(combined_fixtures, sys.stdout, indent=4)\n            return\n        os.makedirs(self.output_dir, exist_ok=True)\n        for fixture_path, fixtures in self.all_fixtures.items():\n            os.makedirs(fixture_path.parent, exist_ok=True)\n            if len({fixture.format for fixture in fixtures.values()}) != 1:\n                raise TypeError(\"All fixtures in a single file must have the same format.\")\n            fixtures.collect_into_file(fixture_path)\n\n    def verify_fixture_files(self, evm_fixture_verification: FixtureVerifier) -> None:\n        \"\"\"\n        Runs `evm [state|block]test` on each fixture.\n        \"\"\"\n        for fixture_path, name_fixture_dict in self.all_fixtures.items():\n            for fixture_name, fixture in name_fixture_dict.items():\n                if FixtureFormats.is_verifiable(fixture.format):\n                    info = self.json_path_to_test_item[fixture_path]\n                    verify_fixtures_dump_dir = self._get_verify_fixtures_dump_dir(info)\n                    evm_fixture_verification.verify_fixture(\n                        fixture.format,\n                        fixture_path,\n                        fixture_name=None,\n                        debug_output_path=verify_fixtures_dump_dir,\n                    )\n\n    def _get_verify_fixtures_dump_dir(\n        self,\n        info: TestInfo,\n    ):\n        \"\"\"\n        The directory to dump the current test function's fixture.json and fixture\n        verification debug output.\n        \"\"\"\n        if not self.base_dump_dir:\n            return None\n        if self.single_fixture_per_file:\n            return info.get_dump_dir_path(\n                self.base_dump_dir, self.filler_path, level=\"test_parameter\"\n            )\n        else:\n            return info.get_dump_dir_path(\n                self.base_dump_dir, self.filler_path, level=\"test_function\"\n            )\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureCollector.get_fixture_basename","title":"get_fixture_basename(info)","text":"

    Returns the basename of the fixture file for a given test case.

    Source code in src/ethereum_test_fixtures/collector.py
    def get_fixture_basename(self, info: TestInfo) -> Path:\n    \"\"\"\n    Returns the basename of the fixture file for a given test case.\n    \"\"\"\n    if self.flat_output:\n        if self.single_fixture_per_file:\n            return Path(strip_test_prefix(info.get_single_test_name()))\n        return Path(strip_test_prefix(info.original_name))\n    else:\n        relative_fixture_output_dir = Path(info.path).parent / strip_test_prefix(\n            Path(info.path).stem\n        )\n        module_relative_output_dir = get_module_relative_output_dir(\n            relative_fixture_output_dir, self.filler_path\n        )\n\n        if self.single_fixture_per_file:\n            return module_relative_output_dir / strip_test_prefix(info.get_single_test_name())\n        return module_relative_output_dir / strip_test_prefix(info.original_name)\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureCollector.add_fixture","title":"add_fixture(info, fixture)","text":"

    Adds a fixture to the list of fixtures of a given test case.

    Source code in src/ethereum_test_fixtures/collector.py
    def add_fixture(self, info: TestInfo, fixture: BaseFixture) -> Path:\n    \"\"\"\n    Adds a fixture to the list of fixtures of a given test case.\n    \"\"\"\n    fixture_basename = self.get_fixture_basename(info)\n\n    fixture_path = (\n        self.output_dir\n        / fixture.format.output_base_dir_name\n        / fixture_basename.with_suffix(fixture.format.output_file_extension)\n    )\n    if fixture_path not in self.all_fixtures.keys():  # relevant when we group by test function\n        self.all_fixtures[fixture_path] = Fixtures(root={})\n        self.json_path_to_test_item[fixture_path] = info\n\n    self.all_fixtures[fixture_path][info.id] = fixture\n\n    return fixture_path\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureCollector.dump_fixtures","title":"dump_fixtures()","text":"

    Dumps all collected fixtures to their respective files.

    Source code in src/ethereum_test_fixtures/collector.py
    def dump_fixtures(self) -> None:\n    \"\"\"\n    Dumps all collected fixtures to their respective files.\n    \"\"\"\n    if self.output_dir.name == \"stdout\":\n        combined_fixtures = {\n            k: to_json(v) for fixture in self.all_fixtures.values() for k, v in fixture.items()\n        }\n        json.dump(combined_fixtures, sys.stdout, indent=4)\n        return\n    os.makedirs(self.output_dir, exist_ok=True)\n    for fixture_path, fixtures in self.all_fixtures.items():\n        os.makedirs(fixture_path.parent, exist_ok=True)\n        if len({fixture.format for fixture in fixtures.values()}) != 1:\n            raise TypeError(\"All fixtures in a single file must have the same format.\")\n        fixtures.collect_into_file(fixture_path)\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureCollector.verify_fixture_files","title":"verify_fixture_files(evm_fixture_verification)","text":"

    Runs evm [state|block]test on each fixture.

    Source code in src/ethereum_test_fixtures/collector.py
    def verify_fixture_files(self, evm_fixture_verification: FixtureVerifier) -> None:\n    \"\"\"\n    Runs `evm [state|block]test` on each fixture.\n    \"\"\"\n    for fixture_path, name_fixture_dict in self.all_fixtures.items():\n        for fixture_name, fixture in name_fixture_dict.items():\n            if FixtureFormats.is_verifiable(fixture.format):\n                info = self.json_path_to_test_item[fixture_path]\n                verify_fixtures_dump_dir = self._get_verify_fixtures_dump_dir(info)\n                evm_fixture_verification.verify_fixture(\n                    fixture.format,\n                    fixture_path,\n                    fixture_name=None,\n                    debug_output_path=verify_fixtures_dump_dir,\n                )\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.TestInfo","title":"TestInfo dataclass","text":"

    Contains test information from the current node.

    Source code in src/ethereum_test_fixtures/collector.py
    @dataclass(kw_only=True)\nclass TestInfo:\n    \"\"\"\n    Contains test information from the current node.\n    \"\"\"\n\n    name: str  # pytest: Item.name\n    id: str  # pytest: Item.nodeid\n    original_name: str  # pytest: Item.originalname\n    path: Path  # pytest: Item.path\n\n    def get_name_and_parameters(self) -> Tuple[str, str]:\n        \"\"\"\n        Converts a test name to a tuple containing the test name and test parameters.\n\n        Example:\n        test_push0_key_sstore[fork_Shanghai] -> test_push0_key_sstore, fork_Shanghai\n        \"\"\"\n        test_name, parameters = self.name.split(\"[\")\n        return test_name, re.sub(r\"[\\[\\-]\", \"_\", parameters).replace(\"]\", \"\")\n\n    def get_single_test_name(self) -> str:\n        \"\"\"\n        Converts a test name to a single test name.\n        \"\"\"\n        test_name, test_parameters = self.get_name_and_parameters()\n        return f\"{test_name}__{test_parameters}\"\n\n    def get_dump_dir_path(\n        self,\n        base_dump_dir: Optional[Path],\n        filler_path: Path,\n        level: Literal[\"test_module\", \"test_function\", \"test_parameter\"] = \"test_parameter\",\n    ) -> Optional[Path]:\n        \"\"\"\n        The path to dump the debug output as defined by the level to dump at.\n        \"\"\"\n        if not base_dump_dir:\n            return None\n        test_module_relative_dir = get_module_relative_output_dir(self.path, filler_path)\n        if level == \"test_module\":\n            return Path(base_dump_dir) / Path(str(test_module_relative_dir).replace(os.sep, \"__\"))\n        test_name, test_parameter_string = self.get_name_and_parameters()\n        flat_path = f\"{str(test_module_relative_dir).replace(os.sep, '__')}__{test_name}\"\n        if level == \"test_function\":\n            return Path(base_dump_dir) / flat_path\n        elif level == \"test_parameter\":\n            return Path(base_dump_dir) / flat_path / test_parameter_string\n        raise Exception(\"Unexpected level.\")\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.TestInfo.get_name_and_parameters","title":"get_name_and_parameters()","text":"

    Converts a test name to a tuple containing the test name and test parameters.

    Example: test_push0_key_sstore[fork_Shanghai] -> test_push0_key_sstore, fork_Shanghai

    Source code in src/ethereum_test_fixtures/collector.py
    def get_name_and_parameters(self) -> Tuple[str, str]:\n    \"\"\"\n    Converts a test name to a tuple containing the test name and test parameters.\n\n    Example:\n    test_push0_key_sstore[fork_Shanghai] -> test_push0_key_sstore, fork_Shanghai\n    \"\"\"\n    test_name, parameters = self.name.split(\"[\")\n    return test_name, re.sub(r\"[\\[\\-]\", \"_\", parameters).replace(\"]\", \"\")\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.TestInfo.get_single_test_name","title":"get_single_test_name()","text":"

    Converts a test name to a single test name.

    Source code in src/ethereum_test_fixtures/collector.py
    def get_single_test_name(self) -> str:\n    \"\"\"\n    Converts a test name to a single test name.\n    \"\"\"\n    test_name, test_parameters = self.get_name_and_parameters()\n    return f\"{test_name}__{test_parameters}\"\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.TestInfo.get_dump_dir_path","title":"get_dump_dir_path(base_dump_dir, filler_path, level='test_parameter')","text":"

    The path to dump the debug output as defined by the level to dump at.

    Source code in src/ethereum_test_fixtures/collector.py
    def get_dump_dir_path(\n    self,\n    base_dump_dir: Optional[Path],\n    filler_path: Path,\n    level: Literal[\"test_module\", \"test_function\", \"test_parameter\"] = \"test_parameter\",\n) -> Optional[Path]:\n    \"\"\"\n    The path to dump the debug output as defined by the level to dump at.\n    \"\"\"\n    if not base_dump_dir:\n        return None\n    test_module_relative_dir = get_module_relative_output_dir(self.path, filler_path)\n    if level == \"test_module\":\n        return Path(base_dump_dir) / Path(str(test_module_relative_dir).replace(os.sep, \"__\"))\n    test_name, test_parameter_string = self.get_name_and_parameters()\n    flat_path = f\"{str(test_module_relative_dir).replace(os.sep, '__')}__{test_name}\"\n    if level == \"test_function\":\n        return Path(base_dump_dir) / flat_path\n    elif level == \"test_parameter\":\n        return Path(base_dump_dir) / flat_path / test_parameter_string\n    raise Exception(\"Unexpected level.\")\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.EOFFixture","title":"EOFFixture","text":"

    Bases: BaseFixture

    Fixture for a single EOFTest.

    Source code in src/ethereum_test_fixtures/eof.py
    class Fixture(BaseFixture):\n    \"\"\"\n    Fixture for a single EOFTest.\n    \"\"\"\n\n    vectors: Mapping[Number, Vector]\n\n    format: ClassVar[FixtureFormats] = FixtureFormats.EOF_TEST\n\n    def get_fork(self) -> str | None:\n        \"\"\"\n        Returns the fork of the fixture as a string.\n        \"\"\"\n        return None\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.EOFFixture.get_fork","title":"get_fork()","text":"

    Returns the fork of the fixture as a string.

    Source code in src/ethereum_test_fixtures/eof.py
    def get_fork(self) -> str | None:\n    \"\"\"\n    Returns the fork of the fixture as a string.\n    \"\"\"\n    return None\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureFormats","title":"FixtureFormats","text":"

    Bases: Enum

    Helper class to define fixture formats.

    Source code in src/ethereum_test_fixtures/formats.py
    class FixtureFormats(Enum):\n    \"\"\"\n    Helper class to define fixture formats.\n    \"\"\"\n\n    UNSET_TEST_FORMAT = \"unset_test_format\"\n    STATE_TEST = \"state_test\"\n    BLOCKCHAIN_TEST = \"blockchain_test\"\n    BLOCKCHAIN_TEST_ENGINE = \"blockchain_test_engine\"\n    EOF_TEST = \"eof_test\"\n\n    @classmethod\n    def is_state_test(cls, format):  # noqa: D102\n        return format == cls.STATE_TEST\n\n    @classmethod\n    def is_blockchain_test(cls, format):  # noqa: D102\n        return format in (cls.BLOCKCHAIN_TEST, cls.BLOCKCHAIN_TEST_ENGINE)\n\n    @classmethod\n    def is_hive_format(cls, format):  # noqa: D102\n        return format == cls.BLOCKCHAIN_TEST_ENGINE\n\n    @classmethod\n    def is_standard_format(cls, format):  # noqa: D102\n        return format in (cls.STATE_TEST, cls.BLOCKCHAIN_TEST)\n\n    @classmethod\n    def is_verifiable(cls, format):  # noqa: D102\n        return format in (cls.STATE_TEST, cls.BLOCKCHAIN_TEST)\n\n    @classmethod\n    def get_format_description(cls, format):\n        \"\"\"\n        Returns a description of the fixture format.\n\n        Used to add a description to the generated pytest marks.\n        \"\"\"\n        if format == cls.UNSET_TEST_FORMAT:\n            return \"Unknown fixture format; it has not been set.\"\n        elif format == cls.STATE_TEST:\n            return \"Tests that generate a state test fixture.\"\n        elif format == cls.BLOCKCHAIN_TEST:\n            return \"Tests that generate a blockchain test fixture.\"\n        elif format == cls.BLOCKCHAIN_TEST_ENGINE:\n            return \"Tests that generate a blockchain test fixture in Engine API format.\"\n        elif format == cls.EOF_TEST:\n            return \"Tests that generate an EOF test fixture.\"\n        raise Exception(f\"Unknown fixture format: {format}.\")\n\n    @property\n    def output_base_dir_name(self) -> Path:\n        \"\"\"\n        Returns the name of the subdirectory where this type of fixture should be dumped to.\n        \"\"\"\n        return Path(self.value.replace(\"test\", \"tests\"))\n\n    @property\n    def output_file_extension(self) -> str:\n        \"\"\"\n        Returns the file extension for this type of fixture.\n\n        By default, fixtures are dumped as JSON files.\n        \"\"\"\n        return \".json\"\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureFormats.get_format_description","title":"get_format_description(format) classmethod","text":"

    Returns a description of the fixture format.

    Used to add a description to the generated pytest marks.

    Source code in src/ethereum_test_fixtures/formats.py
    @classmethod\ndef get_format_description(cls, format):\n    \"\"\"\n    Returns a description of the fixture format.\n\n    Used to add a description to the generated pytest marks.\n    \"\"\"\n    if format == cls.UNSET_TEST_FORMAT:\n        return \"Unknown fixture format; it has not been set.\"\n    elif format == cls.STATE_TEST:\n        return \"Tests that generate a state test fixture.\"\n    elif format == cls.BLOCKCHAIN_TEST:\n        return \"Tests that generate a blockchain test fixture.\"\n    elif format == cls.BLOCKCHAIN_TEST_ENGINE:\n        return \"Tests that generate a blockchain test fixture in Engine API format.\"\n    elif format == cls.EOF_TEST:\n        return \"Tests that generate an EOF test fixture.\"\n    raise Exception(f\"Unknown fixture format: {format}.\")\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureFormats.output_base_dir_name","title":"output_base_dir_name: Path property","text":"

    Returns the name of the subdirectory where this type of fixture should be dumped to.

    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureFormats.output_file_extension","title":"output_file_extension: str property","text":"

    Returns the file extension for this type of fixture.

    By default, fixtures are dumped as JSON files.

    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.StateFixture","title":"StateFixture","text":"

    Bases: BaseFixture

    Fixture for a single StateTest.

    Source code in src/ethereum_test_fixtures/state.py
    class Fixture(BaseFixture):\n    \"\"\"\n    Fixture for a single StateTest.\n    \"\"\"\n\n    env: FixtureEnvironment\n    pre: Alloc\n    transaction: FixtureTransaction\n    post: Mapping[str, List[FixtureForkPost]]\n\n    format: ClassVar[FixtureFormats] = FixtureFormats.STATE_TEST\n\n    def get_fork(self) -> str | None:\n        \"\"\"\n        Returns the fork of the fixture as a string.\n        \"\"\"\n        forks = list(self.post.keys())\n        assert len(forks) == 1, \"Expected state test fixture with single fork\"\n        return forks[0]\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.StateFixture.get_fork","title":"get_fork()","text":"

    Returns the fork of the fixture as a string.

    Source code in src/ethereum_test_fixtures/state.py
    def get_fork(self) -> str | None:\n    \"\"\"\n    Returns the fork of the fixture as a string.\n    \"\"\"\n    forks = list(self.post.keys())\n    assert len(forks) == 1, \"Expected state test fixture with single fork\"\n    return forks[0]\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureVerifier","title":"FixtureVerifier","text":"

    Bases: ABC

    Abstract class for verifying Ethereum test fixtures.

    Source code in src/ethereum_test_fixtures/verify.py
    class FixtureVerifier(ABC):\n    \"\"\"\n    Abstract class for verifying Ethereum test fixtures.\n    \"\"\"\n\n    @abstractmethod\n    def verify_fixture(\n        self,\n        fixture_format: FixtureFormats,\n        fixture_path: Path,\n        fixture_name: str | None = None,\n        debug_output_path: Path | None = None,\n    ):\n        \"\"\"\n        Executes `evm [state|block]test` to verify the fixture at `fixture_path`.\n\n        Currently only implemented by geth's evm.\n        \"\"\"\n        raise NotImplementedError(\n            \"The `verify_fixture()` function is not supported by this tool. Use geth's evm tool.\"\n        )\n
    "},{"location":"library/ethereum_test_fixtures/#ethereum_test_fixtures.FixtureVerifier.verify_fixture","title":"verify_fixture(fixture_format, fixture_path, fixture_name=None, debug_output_path=None) abstractmethod","text":"

    Executes evm [state|block]test to verify the fixture at fixture_path.

    Currently only implemented by geth's evm.

    Source code in src/ethereum_test_fixtures/verify.py
    @abstractmethod\ndef verify_fixture(\n    self,\n    fixture_format: FixtureFormats,\n    fixture_path: Path,\n    fixture_name: str | None = None,\n    debug_output_path: Path | None = None,\n):\n    \"\"\"\n    Executes `evm [state|block]test` to verify the fixture at `fixture_path`.\n\n    Currently only implemented by geth's evm.\n    \"\"\"\n    raise NotImplementedError(\n        \"The `verify_fixture()` function is not supported by this tool. Use geth's evm tool.\"\n    )\n
    "},{"location":"library/ethereum_test_forks/","title":"Ethereum Test Forks package","text":"

    Ethereum test fork definitions.

    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.ForkAttribute","title":"ForkAttribute","text":"

    Bases: Protocol

    A protocol to get the attribute of a fork at a given block number and timestamp.

    Source code in src/ethereum_test_forks/base_fork.py
    class ForkAttribute(Protocol):\n    \"\"\"\n    A protocol to get the attribute of a fork at a given block number and timestamp.\n    \"\"\"\n\n    def __call__(self, block_number: int = 0, timestamp: int = 0) -> Any:\n        \"\"\"\n        Returns the value of the attribute at the given block number and timestamp.\n        \"\"\"\n        pass\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.ForkAttribute.__call__","title":"__call__(block_number=0, timestamp=0)","text":"

    Returns the value of the attribute at the given block number and timestamp.

    Source code in src/ethereum_test_forks/base_fork.py
    def __call__(self, block_number: int = 0, timestamp: int = 0) -> Any:\n    \"\"\"\n    Returns the value of the attribute at the given block number and timestamp.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.ArrowGlacier","title":"ArrowGlacier","text":"

    Bases: London

    Arrow Glacier fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class ArrowGlacier(London, solc_name=\"london\", ignore=True):\n    \"\"\"\n    Arrow Glacier fork\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Berlin","title":"Berlin","text":"

    Bases: Istanbul

    Berlin fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class Berlin(Istanbul):\n    \"\"\"\n    Berlin fork\n    \"\"\"\n\n    @classmethod\n    def tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n        \"\"\"\n        At Berlin, access list transactions are introduced\n        \"\"\"\n        return [1] + super(Berlin, cls).tx_types(block_number, timestamp)\n\n    @classmethod\n    def contract_creating_tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n        \"\"\"\n        At Berlin, access list transactions are introduced\n        \"\"\"\n        return [1] + super(Berlin, cls).contract_creating_tx_types(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Berlin.tx_types","title":"tx_types(block_number=0, timestamp=0) classmethod","text":"

    At Berlin, access list transactions are introduced

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n    \"\"\"\n    At Berlin, access list transactions are introduced\n    \"\"\"\n    return [1] + super(Berlin, cls).tx_types(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Berlin.contract_creating_tx_types","title":"contract_creating_tx_types(block_number=0, timestamp=0) classmethod","text":"

    At Berlin, access list transactions are introduced

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef contract_creating_tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n    \"\"\"\n    At Berlin, access list transactions are introduced\n    \"\"\"\n    return [1] + super(Berlin, cls).contract_creating_tx_types(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Byzantium","title":"Byzantium","text":"

    Bases: Homestead

    Byzantium fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class Byzantium(Homestead):\n    \"\"\"\n    Byzantium fork\n    \"\"\"\n\n    @classmethod\n    def get_reward(cls, block_number: int = 0, timestamp: int = 0) -> int:\n        \"\"\"\n        At Byzantium, the block reward is reduced to\n        3_000_000_000_000_000_000 wei\n        \"\"\"\n        return 3_000_000_000_000_000_000\n\n    @classmethod\n    def precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n        \"\"\"\n        At Byzantium, pre-compiles for bigint modular exponentiation, addition and scalar\n        multiplication on elliptic curve alt_bn128, and optimal ate pairing check on\n        elliptic curve alt_bn128 are introduced\n        \"\"\"\n        return list(Address(i) for i in range(5, 9)) + super(Byzantium, cls).precompiles(\n            block_number, timestamp\n        )\n\n    @classmethod\n    def call_opcodes(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> List[Tuple[Opcodes, EVMCodeType]]:\n        \"\"\"\n        At Byzantium, STATICCALL opcode was introduced.\n        \"\"\"\n        return [(Opcodes.STATICCALL, EVMCodeType.LEGACY),] + super(\n            Byzantium, cls\n        ).call_opcodes(block_number, timestamp)\n\n    @classmethod\n    def valid_opcodes(\n        cls,\n    ) -> List[Opcodes]:\n        \"\"\"\n        Returns the list of Opcodes that are valid to work on this fork.\n        \"\"\"\n        return [Opcodes.RETURNDATASIZE, Opcodes.STATICCALL] + super(Byzantium, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Byzantium.get_reward","title":"get_reward(block_number=0, timestamp=0) classmethod","text":"

    At Byzantium, the block reward is reduced to 3_000_000_000_000_000_000 wei

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef get_reward(cls, block_number: int = 0, timestamp: int = 0) -> int:\n    \"\"\"\n    At Byzantium, the block reward is reduced to\n    3_000_000_000_000_000_000 wei\n    \"\"\"\n    return 3_000_000_000_000_000_000\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Byzantium.precompiles","title":"precompiles(block_number=0, timestamp=0) classmethod","text":"

    At Byzantium, pre-compiles for bigint modular exponentiation, addition and scalar multiplication on elliptic curve alt_bn128, and optimal ate pairing check on elliptic curve alt_bn128 are introduced

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n    \"\"\"\n    At Byzantium, pre-compiles for bigint modular exponentiation, addition and scalar\n    multiplication on elliptic curve alt_bn128, and optimal ate pairing check on\n    elliptic curve alt_bn128 are introduced\n    \"\"\"\n    return list(Address(i) for i in range(5, 9)) + super(Byzantium, cls).precompiles(\n        block_number, timestamp\n    )\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Byzantium.call_opcodes","title":"call_opcodes(block_number=0, timestamp=0) classmethod","text":"

    At Byzantium, STATICCALL opcode was introduced.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef call_opcodes(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> List[Tuple[Opcodes, EVMCodeType]]:\n    \"\"\"\n    At Byzantium, STATICCALL opcode was introduced.\n    \"\"\"\n    return [(Opcodes.STATICCALL, EVMCodeType.LEGACY),] + super(\n        Byzantium, cls\n    ).call_opcodes(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Byzantium.valid_opcodes","title":"valid_opcodes() classmethod","text":"

    Returns the list of Opcodes that are valid to work on this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef valid_opcodes(\n    cls,\n) -> List[Opcodes]:\n    \"\"\"\n    Returns the list of Opcodes that are valid to work on this fork.\n    \"\"\"\n    return [Opcodes.RETURNDATASIZE, Opcodes.STATICCALL] + super(Byzantium, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun","title":"Cancun","text":"

    Bases: Shanghai

    Cancun fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class Cancun(Shanghai):\n    \"\"\"\n    Cancun fork\n    \"\"\"\n\n    @classmethod\n    def solc_min_version(cls) -> Version:\n        \"\"\"\n        Returns the minimum version of solc that supports this fork.\n        \"\"\"\n        return Version.parse(\"0.8.24\")\n\n    @classmethod\n    def header_excess_blob_gas_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        Excess blob gas is required starting from Cancun.\n        \"\"\"\n        return True\n\n    @classmethod\n    def header_blob_gas_used_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        Blob gas used is required starting from Cancun.\n        \"\"\"\n        return True\n\n    @classmethod\n    def header_beacon_root_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        Parent beacon block root is required starting from Cancun.\n        \"\"\"\n        return True\n\n    @classmethod\n    def blob_gas_per_blob(cls, block_number: int, timestamp: int) -> int:\n        \"\"\"\n        Blobs are enabled started from Cancun.\n        \"\"\"\n        return 2**17\n\n    @classmethod\n    def tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n        \"\"\"\n        At Cancun, blob type transactions are introduced\n        \"\"\"\n        return [3] + super(Cancun, cls).tx_types(block_number, timestamp)\n\n    @classmethod\n    def precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n        \"\"\"\n        At Cancun, pre-compile for kzg point evaluation is introduced\n        \"\"\"\n        return [Address(0xA)] + super(Cancun, cls).precompiles(block_number, timestamp)\n\n    @classmethod\n    def system_contracts(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n        \"\"\"\n        Cancun introduces the system contract for EIP-4788\n        \"\"\"\n        return [Address(0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02)]\n\n    @classmethod\n    def pre_allocation_blockchain(cls) -> Mapping:\n        \"\"\"\n        Cancun requires pre-allocation of the beacon root contract for EIP-4788 on blockchain\n        type tests\n        \"\"\"\n        new_allocation = {\n            0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02: {\n                \"nonce\": 1,\n                \"code\": \"0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5f\"\n                \"fd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f\"\n                \"5ffd5b62001fff42064281555f359062001fff015500\",\n            }\n        }\n        return new_allocation | super(Cancun, cls).pre_allocation_blockchain()\n\n    @classmethod\n    def engine_new_payload_version(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> Optional[int]:\n        \"\"\"\n        Starting at Cancun, new payload calls must use version 3\n        \"\"\"\n        return 3\n\n    @classmethod\n    def engine_new_payload_blob_hashes(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        Starting at Cancun, payloads must have blob hashes.\n        \"\"\"\n        return True\n\n    @classmethod\n    def engine_new_payload_beacon_root(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        Starting at Cancun, payloads must have a parent beacon block root.\n        \"\"\"\n        return True\n\n    @classmethod\n    def valid_opcodes(\n        cls,\n    ) -> List[Opcodes]:\n        \"\"\"\n        Returns the list of Opcodes that are valid to work on this fork.\n        \"\"\"\n        return [\n            Opcodes.BLOBHASH,\n            Opcodes.BLOBBASEFEE,\n            Opcodes.TLOAD,\n            Opcodes.TSTORE,\n            Opcodes.MCOPY,\n        ] + super(Cancun, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.solc_min_version","title":"solc_min_version() classmethod","text":"

    Returns the minimum version of solc that supports this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef solc_min_version(cls) -> Version:\n    \"\"\"\n    Returns the minimum version of solc that supports this fork.\n    \"\"\"\n    return Version.parse(\"0.8.24\")\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.header_excess_blob_gas_required","title":"header_excess_blob_gas_required(block_number=0, timestamp=0) classmethod","text":"

    Excess blob gas is required starting from Cancun.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_excess_blob_gas_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    Excess blob gas is required starting from Cancun.\n    \"\"\"\n    return True\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.header_blob_gas_used_required","title":"header_blob_gas_used_required(block_number=0, timestamp=0) classmethod","text":"

    Blob gas used is required starting from Cancun.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_blob_gas_used_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    Blob gas used is required starting from Cancun.\n    \"\"\"\n    return True\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.header_beacon_root_required","title":"header_beacon_root_required(block_number=0, timestamp=0) classmethod","text":"

    Parent beacon block root is required starting from Cancun.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_beacon_root_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    Parent beacon block root is required starting from Cancun.\n    \"\"\"\n    return True\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.blob_gas_per_blob","title":"blob_gas_per_blob(block_number, timestamp) classmethod","text":"

    Blobs are enabled started from Cancun.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef blob_gas_per_blob(cls, block_number: int, timestamp: int) -> int:\n    \"\"\"\n    Blobs are enabled started from Cancun.\n    \"\"\"\n    return 2**17\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.tx_types","title":"tx_types(block_number=0, timestamp=0) classmethod","text":"

    At Cancun, blob type transactions are introduced

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n    \"\"\"\n    At Cancun, blob type transactions are introduced\n    \"\"\"\n    return [3] + super(Cancun, cls).tx_types(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.precompiles","title":"precompiles(block_number=0, timestamp=0) classmethod","text":"

    At Cancun, pre-compile for kzg point evaluation is introduced

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n    \"\"\"\n    At Cancun, pre-compile for kzg point evaluation is introduced\n    \"\"\"\n    return [Address(0xA)] + super(Cancun, cls).precompiles(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.system_contracts","title":"system_contracts(block_number=0, timestamp=0) classmethod","text":"

    Cancun introduces the system contract for EIP-4788

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef system_contracts(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n    \"\"\"\n    Cancun introduces the system contract for EIP-4788\n    \"\"\"\n    return [Address(0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02)]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.pre_allocation_blockchain","title":"pre_allocation_blockchain() classmethod","text":"

    Cancun requires pre-allocation of the beacon root contract for EIP-4788 on blockchain type tests

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef pre_allocation_blockchain(cls) -> Mapping:\n    \"\"\"\n    Cancun requires pre-allocation of the beacon root contract for EIP-4788 on blockchain\n    type tests\n    \"\"\"\n    new_allocation = {\n        0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02: {\n            \"nonce\": 1,\n            \"code\": \"0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5f\"\n            \"fd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f\"\n            \"5ffd5b62001fff42064281555f359062001fff015500\",\n        }\n    }\n    return new_allocation | super(Cancun, cls).pre_allocation_blockchain()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.engine_new_payload_version","title":"engine_new_payload_version(block_number=0, timestamp=0) classmethod","text":"

    Starting at Cancun, new payload calls must use version 3

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_new_payload_version(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> Optional[int]:\n    \"\"\"\n    Starting at Cancun, new payload calls must use version 3\n    \"\"\"\n    return 3\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.engine_new_payload_blob_hashes","title":"engine_new_payload_blob_hashes(block_number=0, timestamp=0) classmethod","text":"

    Starting at Cancun, payloads must have blob hashes.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_new_payload_blob_hashes(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    Starting at Cancun, payloads must have blob hashes.\n    \"\"\"\n    return True\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.engine_new_payload_beacon_root","title":"engine_new_payload_beacon_root(block_number=0, timestamp=0) classmethod","text":"

    Starting at Cancun, payloads must have a parent beacon block root.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_new_payload_beacon_root(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    Starting at Cancun, payloads must have a parent beacon block root.\n    \"\"\"\n    return True\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Cancun.valid_opcodes","title":"valid_opcodes() classmethod","text":"

    Returns the list of Opcodes that are valid to work on this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef valid_opcodes(\n    cls,\n) -> List[Opcodes]:\n    \"\"\"\n    Returns the list of Opcodes that are valid to work on this fork.\n    \"\"\"\n    return [\n        Opcodes.BLOBHASH,\n        Opcodes.BLOBBASEFEE,\n        Opcodes.TLOAD,\n        Opcodes.TSTORE,\n        Opcodes.MCOPY,\n    ] + super(Cancun, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Constantinople","title":"Constantinople","text":"

    Bases: Byzantium

    Constantinople fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class Constantinople(Byzantium):\n    \"\"\"\n    Constantinople fork\n    \"\"\"\n\n    @classmethod\n    def get_reward(cls, block_number: int = 0, timestamp: int = 0) -> int:\n        \"\"\"\n        At Constantinople, the block reward is reduced to\n        2_000_000_000_000_000_000 wei\n        \"\"\"\n        return 2_000_000_000_000_000_000\n\n    @classmethod\n    def create_opcodes(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> List[Tuple[Opcodes, EVMCodeType]]:\n        \"\"\"\n        At Constantinople, `CREATE2` opcode is added.\n        \"\"\"\n        return [(Opcodes.CREATE2, EVMCodeType.LEGACY),] + super(\n            Constantinople, cls\n        ).create_opcodes(block_number, timestamp)\n\n    @classmethod\n    def valid_opcodes(\n        cls,\n    ) -> List[Opcodes]:\n        \"\"\"\n        Returns the list of Opcodes that are valid to work on this fork.\n        \"\"\"\n        return [\n            Opcodes.SHL,\n            Opcodes.SHR,\n            Opcodes.SAR,\n            Opcodes.EXTCODEHASH,\n            Opcodes.CREATE2,\n        ] + super(Constantinople, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Constantinople.get_reward","title":"get_reward(block_number=0, timestamp=0) classmethod","text":"

    At Constantinople, the block reward is reduced to 2_000_000_000_000_000_000 wei

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef get_reward(cls, block_number: int = 0, timestamp: int = 0) -> int:\n    \"\"\"\n    At Constantinople, the block reward is reduced to\n    2_000_000_000_000_000_000 wei\n    \"\"\"\n    return 2_000_000_000_000_000_000\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Constantinople.create_opcodes","title":"create_opcodes(block_number=0, timestamp=0) classmethod","text":"

    At Constantinople, CREATE2 opcode is added.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef create_opcodes(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> List[Tuple[Opcodes, EVMCodeType]]:\n    \"\"\"\n    At Constantinople, `CREATE2` opcode is added.\n    \"\"\"\n    return [(Opcodes.CREATE2, EVMCodeType.LEGACY),] + super(\n        Constantinople, cls\n    ).create_opcodes(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Constantinople.valid_opcodes","title":"valid_opcodes() classmethod","text":"

    Returns the list of Opcodes that are valid to work on this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef valid_opcodes(\n    cls,\n) -> List[Opcodes]:\n    \"\"\"\n    Returns the list of Opcodes that are valid to work on this fork.\n    \"\"\"\n    return [\n        Opcodes.SHL,\n        Opcodes.SHR,\n        Opcodes.SAR,\n        Opcodes.EXTCODEHASH,\n        Opcodes.CREATE2,\n    ] + super(Constantinople, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.ConstantinopleFix","title":"ConstantinopleFix","text":"

    Bases: Constantinople

    Constantinople Fix fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class ConstantinopleFix(Constantinople, solc_name=\"constantinople\"):\n    \"\"\"\n    Constantinople Fix fork\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier","title":"Frontier","text":"

    Bases: BaseFork

    Frontier fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class Frontier(BaseFork, solc_name=\"homestead\"):\n    \"\"\"\n    Frontier fork\n    \"\"\"\n\n    @classmethod\n    def transition_tool_name(cls, block_number: int = 0, timestamp: int = 0) -> str:\n        \"\"\"\n        Returns fork name as it's meant to be passed to the transition tool for execution.\n        \"\"\"\n        if cls._transition_tool_name is not None:\n            return cls._transition_tool_name\n        return cls.name()\n\n    @classmethod\n    def solc_name(cls) -> str:\n        \"\"\"\n        Returns fork name as it's meant to be passed to the solc compiler.\n        \"\"\"\n        if cls._solc_name is not None:\n            return cls._solc_name\n        return cls.name().lower()\n\n    @classmethod\n    def solc_min_version(cls) -> Version:\n        \"\"\"\n        Returns the minimum version of solc that supports this fork.\n        \"\"\"\n        return Version.parse(\"0.8.20\")\n\n    @classmethod\n    def header_base_fee_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        At genesis, header must not contain base fee\n        \"\"\"\n        return False\n\n    @classmethod\n    def header_prev_randao_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        At genesis, header must not contain Prev Randao value\n        \"\"\"\n        return False\n\n    @classmethod\n    def header_zero_difficulty_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        At genesis, header must not have difficulty zero\n        \"\"\"\n        return False\n\n    @classmethod\n    def header_withdrawals_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        At genesis, header must not contain withdrawals\n        \"\"\"\n        return False\n\n    @classmethod\n    def header_excess_blob_gas_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        At genesis, header must not contain excess blob gas\n        \"\"\"\n        return False\n\n    @classmethod\n    def header_blob_gas_used_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        At genesis, header must not contain blob gas used\n        \"\"\"\n        return False\n\n    @classmethod\n    def blob_gas_per_blob(cls, block_number: int, timestamp: int) -> int:\n        \"\"\"\n        Returns the amount of blob gas used per blob for a given fork.\n        \"\"\"\n        return 0\n\n    @classmethod\n    def header_requests_required(cls, block_number: int, timestamp: int) -> bool:\n        \"\"\"\n        At genesis, header must not contain beacon chain requests.\n        \"\"\"\n        return False\n\n    @classmethod\n    def engine_new_payload_version(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> Optional[int]:\n        \"\"\"\n        At genesis, payloads cannot be sent through the engine API\n        \"\"\"\n        return None\n\n    @classmethod\n    def header_beacon_root_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        At genesis, header must not contain parent beacon block root\n        \"\"\"\n        return False\n\n    @classmethod\n    def engine_new_payload_blob_hashes(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        At genesis, payloads do not have blob hashes.\n        \"\"\"\n        return False\n\n    @classmethod\n    def engine_new_payload_beacon_root(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        At genesis, payloads do not have a parent beacon block root.\n        \"\"\"\n        return False\n\n    @classmethod\n    def engine_forkchoice_updated_version(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> Optional[int]:\n        \"\"\"\n        At genesis, forkchoice updates cannot be sent through the engine API.\n        \"\"\"\n        return cls.engine_new_payload_version(block_number, timestamp)\n\n    @classmethod\n    def get_reward(cls, block_number: int = 0, timestamp: int = 0) -> int:\n        \"\"\"\n        At Genesis the expected reward amount in wei is\n        5_000_000_000_000_000_000\n        \"\"\"\n        return 5_000_000_000_000_000_000\n\n    @classmethod\n    def tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n        \"\"\"\n        At Genesis, only legacy transactions are allowed\n        \"\"\"\n        return [0]\n\n    @classmethod\n    def contract_creating_tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n        \"\"\"\n        At Genesis, only legacy transactions are allowed\n        \"\"\"\n        return [0]\n\n    @classmethod\n    def precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n        \"\"\"\n        At Genesis, no pre-compiles are present\n        \"\"\"\n        return []\n\n    @classmethod\n    def system_contracts(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n        \"\"\"\n        At Genesis, no system-contracts are present\n        \"\"\"\n        return []\n\n    @classmethod\n    def evm_code_types(cls, block_number: int = 0, timestamp: int = 0) -> List[EVMCodeType]:\n        \"\"\"\n        At Genesis, only legacy EVM code is supported.\n        \"\"\"\n        return [EVMCodeType.LEGACY]\n\n    @classmethod\n    def call_opcodes(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> List[Tuple[Opcodes, EVMCodeType]]:\n        \"\"\"\n        Returns the list of call opcodes supported by the fork.\n        \"\"\"\n        return [\n            (Opcodes.CALL, EVMCodeType.LEGACY),\n            (Opcodes.CALLCODE, EVMCodeType.LEGACY),\n        ]\n\n    @classmethod\n    def valid_opcodes(\n        cls,\n    ) -> List[Opcodes]:\n        \"\"\"\n        Returns the list of Opcodes that are valid to work on this fork.\n        \"\"\"\n        return [\n            Opcodes.STOP,\n            Opcodes.ADD,\n            Opcodes.MUL,\n            Opcodes.SUB,\n            Opcodes.DIV,\n            Opcodes.SDIV,\n            Opcodes.MOD,\n            Opcodes.SMOD,\n            Opcodes.ADDMOD,\n            Opcodes.MULMOD,\n            Opcodes.EXP,\n            Opcodes.SIGNEXTEND,\n            Opcodes.LT,\n            Opcodes.GT,\n            Opcodes.SLT,\n            Opcodes.SGT,\n            Opcodes.EQ,\n            Opcodes.ISZERO,\n            Opcodes.AND,\n            Opcodes.OR,\n            Opcodes.XOR,\n            Opcodes.NOT,\n            Opcodes.BYTE,\n            Opcodes.SHA3,\n            Opcodes.ADDRESS,\n            Opcodes.BALANCE,\n            Opcodes.ORIGIN,\n            Opcodes.CALLER,\n            Opcodes.CALLVALUE,\n            Opcodes.CALLDATALOAD,\n            Opcodes.CALLDATASIZE,\n            Opcodes.CALLDATACOPY,\n            Opcodes.CODESIZE,\n            Opcodes.CODECOPY,\n            Opcodes.GASPRICE,\n            Opcodes.EXTCODESIZE,\n            Opcodes.EXTCODECOPY,\n            Opcodes.BLOCKHASH,\n            Opcodes.COINBASE,\n            Opcodes.TIMESTAMP,\n            Opcodes.NUMBER,\n            Opcodes.PREVRANDAO,\n            Opcodes.GASLIMIT,\n            Opcodes.POP,\n            Opcodes.MLOAD,\n            Opcodes.MSTORE,\n            Opcodes.MSTORE8,\n            Opcodes.SLOAD,\n            Opcodes.SSTORE,\n            Opcodes.PC,\n            Opcodes.MSIZE,\n            Opcodes.GAS,\n            Opcodes.JUMP,\n            Opcodes.JUMPI,\n            Opcodes.JUMPDEST,\n            Opcodes.PUSH1,\n            Opcodes.PUSH2,\n            Opcodes.PUSH3,\n            Opcodes.PUSH4,\n            Opcodes.PUSH5,\n            Opcodes.PUSH6,\n            Opcodes.PUSH7,\n            Opcodes.PUSH8,\n            Opcodes.PUSH9,\n            Opcodes.PUSH10,\n            Opcodes.PUSH11,\n            Opcodes.PUSH12,\n            Opcodes.PUSH13,\n            Opcodes.PUSH14,\n            Opcodes.PUSH15,\n            Opcodes.PUSH16,\n            Opcodes.PUSH17,\n            Opcodes.PUSH18,\n            Opcodes.PUSH19,\n            Opcodes.PUSH20,\n            Opcodes.PUSH21,\n            Opcodes.PUSH22,\n            Opcodes.PUSH23,\n            Opcodes.PUSH24,\n            Opcodes.PUSH25,\n            Opcodes.PUSH26,\n            Opcodes.PUSH27,\n            Opcodes.PUSH28,\n            Opcodes.PUSH29,\n            Opcodes.PUSH30,\n            Opcodes.PUSH31,\n            Opcodes.PUSH32,\n            Opcodes.DUP1,\n            Opcodes.DUP2,\n            Opcodes.DUP3,\n            Opcodes.DUP4,\n            Opcodes.DUP5,\n            Opcodes.DUP6,\n            Opcodes.DUP7,\n            Opcodes.DUP8,\n            Opcodes.DUP9,\n            Opcodes.DUP10,\n            Opcodes.DUP11,\n            Opcodes.DUP12,\n            Opcodes.DUP13,\n            Opcodes.DUP14,\n            Opcodes.DUP15,\n            Opcodes.DUP16,\n            Opcodes.SWAP1,\n            Opcodes.SWAP2,\n            Opcodes.SWAP3,\n            Opcodes.SWAP4,\n            Opcodes.SWAP5,\n            Opcodes.SWAP6,\n            Opcodes.SWAP7,\n            Opcodes.SWAP8,\n            Opcodes.SWAP9,\n            Opcodes.SWAP10,\n            Opcodes.SWAP11,\n            Opcodes.SWAP12,\n            Opcodes.SWAP13,\n            Opcodes.SWAP14,\n            Opcodes.SWAP15,\n            Opcodes.SWAP16,\n            Opcodes.LOG0,\n            Opcodes.LOG1,\n            Opcodes.LOG2,\n            Opcodes.LOG3,\n            Opcodes.LOG4,\n            Opcodes.CREATE,\n            Opcodes.CALL,\n            Opcodes.CALLCODE,\n            Opcodes.RETURN,\n            Opcodes.SELFDESTRUCT,\n        ]\n\n    @classmethod\n    def create_opcodes(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> List[Tuple[Opcodes, EVMCodeType]]:\n        \"\"\"\n        At Genesis, only `CREATE` opcode is supported.\n        \"\"\"\n        return [\n            (Opcodes.CREATE, EVMCodeType.LEGACY),\n        ]\n\n    @classmethod\n    def pre_allocation(cls) -> Mapping:\n        \"\"\"\n        Returns whether the fork expects pre-allocation of accounts\n\n        Frontier does not require pre-allocated accounts\n        \"\"\"\n        return {}\n\n    @classmethod\n    def pre_allocation_blockchain(cls) -> Mapping:\n        \"\"\"\n        Returns whether the fork expects pre-allocation of accounts\n\n        Frontier does not require pre-allocated accounts\n        \"\"\"\n        return {}\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.transition_tool_name","title":"transition_tool_name(block_number=0, timestamp=0) classmethod","text":"

    Returns fork name as it's meant to be passed to the transition tool for execution.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef transition_tool_name(cls, block_number: int = 0, timestamp: int = 0) -> str:\n    \"\"\"\n    Returns fork name as it's meant to be passed to the transition tool for execution.\n    \"\"\"\n    if cls._transition_tool_name is not None:\n        return cls._transition_tool_name\n    return cls.name()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.solc_name","title":"solc_name() classmethod","text":"

    Returns fork name as it's meant to be passed to the solc compiler.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef solc_name(cls) -> str:\n    \"\"\"\n    Returns fork name as it's meant to be passed to the solc compiler.\n    \"\"\"\n    if cls._solc_name is not None:\n        return cls._solc_name\n    return cls.name().lower()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.solc_min_version","title":"solc_min_version() classmethod","text":"

    Returns the minimum version of solc that supports this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef solc_min_version(cls) -> Version:\n    \"\"\"\n    Returns the minimum version of solc that supports this fork.\n    \"\"\"\n    return Version.parse(\"0.8.20\")\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.header_base_fee_required","title":"header_base_fee_required(block_number=0, timestamp=0) classmethod","text":"

    At genesis, header must not contain base fee

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_base_fee_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    At genesis, header must not contain base fee\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.header_prev_randao_required","title":"header_prev_randao_required(block_number=0, timestamp=0) classmethod","text":"

    At genesis, header must not contain Prev Randao value

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_prev_randao_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    At genesis, header must not contain Prev Randao value\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.header_zero_difficulty_required","title":"header_zero_difficulty_required(block_number=0, timestamp=0) classmethod","text":"

    At genesis, header must not have difficulty zero

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_zero_difficulty_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    At genesis, header must not have difficulty zero\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.header_withdrawals_required","title":"header_withdrawals_required(block_number=0, timestamp=0) classmethod","text":"

    At genesis, header must not contain withdrawals

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_withdrawals_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    At genesis, header must not contain withdrawals\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.header_excess_blob_gas_required","title":"header_excess_blob_gas_required(block_number=0, timestamp=0) classmethod","text":"

    At genesis, header must not contain excess blob gas

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_excess_blob_gas_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    At genesis, header must not contain excess blob gas\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.header_blob_gas_used_required","title":"header_blob_gas_used_required(block_number=0, timestamp=0) classmethod","text":"

    At genesis, header must not contain blob gas used

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_blob_gas_used_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    At genesis, header must not contain blob gas used\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.blob_gas_per_blob","title":"blob_gas_per_blob(block_number, timestamp) classmethod","text":"

    Returns the amount of blob gas used per blob for a given fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef blob_gas_per_blob(cls, block_number: int, timestamp: int) -> int:\n    \"\"\"\n    Returns the amount of blob gas used per blob for a given fork.\n    \"\"\"\n    return 0\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.header_requests_required","title":"header_requests_required(block_number, timestamp) classmethod","text":"

    At genesis, header must not contain beacon chain requests.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_requests_required(cls, block_number: int, timestamp: int) -> bool:\n    \"\"\"\n    At genesis, header must not contain beacon chain requests.\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.engine_new_payload_version","title":"engine_new_payload_version(block_number=0, timestamp=0) classmethod","text":"

    At genesis, payloads cannot be sent through the engine API

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_new_payload_version(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> Optional[int]:\n    \"\"\"\n    At genesis, payloads cannot be sent through the engine API\n    \"\"\"\n    return None\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.header_beacon_root_required","title":"header_beacon_root_required(block_number=0, timestamp=0) classmethod","text":"

    At genesis, header must not contain parent beacon block root

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_beacon_root_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    At genesis, header must not contain parent beacon block root\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.engine_new_payload_blob_hashes","title":"engine_new_payload_blob_hashes(block_number=0, timestamp=0) classmethod","text":"

    At genesis, payloads do not have blob hashes.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_new_payload_blob_hashes(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    At genesis, payloads do not have blob hashes.\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.engine_new_payload_beacon_root","title":"engine_new_payload_beacon_root(block_number=0, timestamp=0) classmethod","text":"

    At genesis, payloads do not have a parent beacon block root.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_new_payload_beacon_root(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    At genesis, payloads do not have a parent beacon block root.\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.engine_forkchoice_updated_version","title":"engine_forkchoice_updated_version(block_number=0, timestamp=0) classmethod","text":"

    At genesis, forkchoice updates cannot be sent through the engine API.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_forkchoice_updated_version(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> Optional[int]:\n    \"\"\"\n    At genesis, forkchoice updates cannot be sent through the engine API.\n    \"\"\"\n    return cls.engine_new_payload_version(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.get_reward","title":"get_reward(block_number=0, timestamp=0) classmethod","text":"

    At Genesis the expected reward amount in wei is 5_000_000_000_000_000_000

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef get_reward(cls, block_number: int = 0, timestamp: int = 0) -> int:\n    \"\"\"\n    At Genesis the expected reward amount in wei is\n    5_000_000_000_000_000_000\n    \"\"\"\n    return 5_000_000_000_000_000_000\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.tx_types","title":"tx_types(block_number=0, timestamp=0) classmethod","text":"

    At Genesis, only legacy transactions are allowed

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n    \"\"\"\n    At Genesis, only legacy transactions are allowed\n    \"\"\"\n    return [0]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.contract_creating_tx_types","title":"contract_creating_tx_types(block_number=0, timestamp=0) classmethod","text":"

    At Genesis, only legacy transactions are allowed

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef contract_creating_tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n    \"\"\"\n    At Genesis, only legacy transactions are allowed\n    \"\"\"\n    return [0]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.precompiles","title":"precompiles(block_number=0, timestamp=0) classmethod","text":"

    At Genesis, no pre-compiles are present

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n    \"\"\"\n    At Genesis, no pre-compiles are present\n    \"\"\"\n    return []\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.system_contracts","title":"system_contracts(block_number=0, timestamp=0) classmethod","text":"

    At Genesis, no system-contracts are present

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef system_contracts(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n    \"\"\"\n    At Genesis, no system-contracts are present\n    \"\"\"\n    return []\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.evm_code_types","title":"evm_code_types(block_number=0, timestamp=0) classmethod","text":"

    At Genesis, only legacy EVM code is supported.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef evm_code_types(cls, block_number: int = 0, timestamp: int = 0) -> List[EVMCodeType]:\n    \"\"\"\n    At Genesis, only legacy EVM code is supported.\n    \"\"\"\n    return [EVMCodeType.LEGACY]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.call_opcodes","title":"call_opcodes(block_number=0, timestamp=0) classmethod","text":"

    Returns the list of call opcodes supported by the fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef call_opcodes(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> List[Tuple[Opcodes, EVMCodeType]]:\n    \"\"\"\n    Returns the list of call opcodes supported by the fork.\n    \"\"\"\n    return [\n        (Opcodes.CALL, EVMCodeType.LEGACY),\n        (Opcodes.CALLCODE, EVMCodeType.LEGACY),\n    ]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.valid_opcodes","title":"valid_opcodes() classmethod","text":"

    Returns the list of Opcodes that are valid to work on this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef valid_opcodes(\n    cls,\n) -> List[Opcodes]:\n    \"\"\"\n    Returns the list of Opcodes that are valid to work on this fork.\n    \"\"\"\n    return [\n        Opcodes.STOP,\n        Opcodes.ADD,\n        Opcodes.MUL,\n        Opcodes.SUB,\n        Opcodes.DIV,\n        Opcodes.SDIV,\n        Opcodes.MOD,\n        Opcodes.SMOD,\n        Opcodes.ADDMOD,\n        Opcodes.MULMOD,\n        Opcodes.EXP,\n        Opcodes.SIGNEXTEND,\n        Opcodes.LT,\n        Opcodes.GT,\n        Opcodes.SLT,\n        Opcodes.SGT,\n        Opcodes.EQ,\n        Opcodes.ISZERO,\n        Opcodes.AND,\n        Opcodes.OR,\n        Opcodes.XOR,\n        Opcodes.NOT,\n        Opcodes.BYTE,\n        Opcodes.SHA3,\n        Opcodes.ADDRESS,\n        Opcodes.BALANCE,\n        Opcodes.ORIGIN,\n        Opcodes.CALLER,\n        Opcodes.CALLVALUE,\n        Opcodes.CALLDATALOAD,\n        Opcodes.CALLDATASIZE,\n        Opcodes.CALLDATACOPY,\n        Opcodes.CODESIZE,\n        Opcodes.CODECOPY,\n        Opcodes.GASPRICE,\n        Opcodes.EXTCODESIZE,\n        Opcodes.EXTCODECOPY,\n        Opcodes.BLOCKHASH,\n        Opcodes.COINBASE,\n        Opcodes.TIMESTAMP,\n        Opcodes.NUMBER,\n        Opcodes.PREVRANDAO,\n        Opcodes.GASLIMIT,\n        Opcodes.POP,\n        Opcodes.MLOAD,\n        Opcodes.MSTORE,\n        Opcodes.MSTORE8,\n        Opcodes.SLOAD,\n        Opcodes.SSTORE,\n        Opcodes.PC,\n        Opcodes.MSIZE,\n        Opcodes.GAS,\n        Opcodes.JUMP,\n        Opcodes.JUMPI,\n        Opcodes.JUMPDEST,\n        Opcodes.PUSH1,\n        Opcodes.PUSH2,\n        Opcodes.PUSH3,\n        Opcodes.PUSH4,\n        Opcodes.PUSH5,\n        Opcodes.PUSH6,\n        Opcodes.PUSH7,\n        Opcodes.PUSH8,\n        Opcodes.PUSH9,\n        Opcodes.PUSH10,\n        Opcodes.PUSH11,\n        Opcodes.PUSH12,\n        Opcodes.PUSH13,\n        Opcodes.PUSH14,\n        Opcodes.PUSH15,\n        Opcodes.PUSH16,\n        Opcodes.PUSH17,\n        Opcodes.PUSH18,\n        Opcodes.PUSH19,\n        Opcodes.PUSH20,\n        Opcodes.PUSH21,\n        Opcodes.PUSH22,\n        Opcodes.PUSH23,\n        Opcodes.PUSH24,\n        Opcodes.PUSH25,\n        Opcodes.PUSH26,\n        Opcodes.PUSH27,\n        Opcodes.PUSH28,\n        Opcodes.PUSH29,\n        Opcodes.PUSH30,\n        Opcodes.PUSH31,\n        Opcodes.PUSH32,\n        Opcodes.DUP1,\n        Opcodes.DUP2,\n        Opcodes.DUP3,\n        Opcodes.DUP4,\n        Opcodes.DUP5,\n        Opcodes.DUP6,\n        Opcodes.DUP7,\n        Opcodes.DUP8,\n        Opcodes.DUP9,\n        Opcodes.DUP10,\n        Opcodes.DUP11,\n        Opcodes.DUP12,\n        Opcodes.DUP13,\n        Opcodes.DUP14,\n        Opcodes.DUP15,\n        Opcodes.DUP16,\n        Opcodes.SWAP1,\n        Opcodes.SWAP2,\n        Opcodes.SWAP3,\n        Opcodes.SWAP4,\n        Opcodes.SWAP5,\n        Opcodes.SWAP6,\n        Opcodes.SWAP7,\n        Opcodes.SWAP8,\n        Opcodes.SWAP9,\n        Opcodes.SWAP10,\n        Opcodes.SWAP11,\n        Opcodes.SWAP12,\n        Opcodes.SWAP13,\n        Opcodes.SWAP14,\n        Opcodes.SWAP15,\n        Opcodes.SWAP16,\n        Opcodes.LOG0,\n        Opcodes.LOG1,\n        Opcodes.LOG2,\n        Opcodes.LOG3,\n        Opcodes.LOG4,\n        Opcodes.CREATE,\n        Opcodes.CALL,\n        Opcodes.CALLCODE,\n        Opcodes.RETURN,\n        Opcodes.SELFDESTRUCT,\n    ]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.create_opcodes","title":"create_opcodes(block_number=0, timestamp=0) classmethod","text":"

    At Genesis, only CREATE opcode is supported.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef create_opcodes(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> List[Tuple[Opcodes, EVMCodeType]]:\n    \"\"\"\n    At Genesis, only `CREATE` opcode is supported.\n    \"\"\"\n    return [\n        (Opcodes.CREATE, EVMCodeType.LEGACY),\n    ]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.pre_allocation","title":"pre_allocation() classmethod","text":"

    Returns whether the fork expects pre-allocation of accounts

    Frontier does not require pre-allocated accounts

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef pre_allocation(cls) -> Mapping:\n    \"\"\"\n    Returns whether the fork expects pre-allocation of accounts\n\n    Frontier does not require pre-allocated accounts\n    \"\"\"\n    return {}\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Frontier.pre_allocation_blockchain","title":"pre_allocation_blockchain() classmethod","text":"

    Returns whether the fork expects pre-allocation of accounts

    Frontier does not require pre-allocated accounts

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef pre_allocation_blockchain(cls) -> Mapping:\n    \"\"\"\n    Returns whether the fork expects pre-allocation of accounts\n\n    Frontier does not require pre-allocated accounts\n    \"\"\"\n    return {}\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.GrayGlacier","title":"GrayGlacier","text":"

    Bases: ArrowGlacier

    Gray Glacier fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class GrayGlacier(ArrowGlacier, solc_name=\"london\", ignore=True):\n    \"\"\"\n    Gray Glacier fork\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Homestead","title":"Homestead","text":"

    Bases: Frontier

    Homestead fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class Homestead(Frontier):\n    \"\"\"\n    Homestead fork\n    \"\"\"\n\n    @classmethod\n    def precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n        \"\"\"\n        At Homestead, EC-recover, SHA256, RIPEMD160, and Identity pre-compiles are introduced\n        \"\"\"\n        return list(Address(i) for i in range(1, 5)) + super(Homestead, cls).precompiles(\n            block_number, timestamp\n        )\n\n    @classmethod\n    def call_opcodes(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> List[Tuple[Opcodes, EVMCodeType]]:\n        \"\"\"\n        At Homestead, DELEGATECALL opcode was introduced.\n        \"\"\"\n        return [(Opcodes.DELEGATECALL, EVMCodeType.LEGACY),] + super(\n            Homestead, cls\n        ).call_opcodes(block_number, timestamp)\n\n    @classmethod\n    def valid_opcodes(\n        cls,\n    ) -> List[Opcodes]:\n        \"\"\"\n        Returns the list of Opcodes that are valid to work on this fork.\n        \"\"\"\n        return [Opcodes.DELEGATECALL] + super(Homestead, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Homestead.precompiles","title":"precompiles(block_number=0, timestamp=0) classmethod","text":"

    At Homestead, EC-recover, SHA256, RIPEMD160, and Identity pre-compiles are introduced

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n    \"\"\"\n    At Homestead, EC-recover, SHA256, RIPEMD160, and Identity pre-compiles are introduced\n    \"\"\"\n    return list(Address(i) for i in range(1, 5)) + super(Homestead, cls).precompiles(\n        block_number, timestamp\n    )\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Homestead.call_opcodes","title":"call_opcodes(block_number=0, timestamp=0) classmethod","text":"

    At Homestead, DELEGATECALL opcode was introduced.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef call_opcodes(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> List[Tuple[Opcodes, EVMCodeType]]:\n    \"\"\"\n    At Homestead, DELEGATECALL opcode was introduced.\n    \"\"\"\n    return [(Opcodes.DELEGATECALL, EVMCodeType.LEGACY),] + super(\n        Homestead, cls\n    ).call_opcodes(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Homestead.valid_opcodes","title":"valid_opcodes() classmethod","text":"

    Returns the list of Opcodes that are valid to work on this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef valid_opcodes(\n    cls,\n) -> List[Opcodes]:\n    \"\"\"\n    Returns the list of Opcodes that are valid to work on this fork.\n    \"\"\"\n    return [Opcodes.DELEGATECALL] + super(Homestead, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Istanbul","title":"Istanbul","text":"

    Bases: ConstantinopleFix

    Istanbul fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class Istanbul(ConstantinopleFix):\n    \"\"\"\n    Istanbul fork\n    \"\"\"\n\n    @classmethod\n    def precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n        \"\"\"\n        At Istanbul, pre-compile for blake2 compression is introduced\n        \"\"\"\n        return [Address(9)] + super(Istanbul, cls).precompiles(block_number, timestamp)\n\n    @classmethod\n    def valid_opcodes(\n        cls,\n    ) -> List[Opcodes]:\n        \"\"\"\n        Returns the list of Opcodes that are valid to work on this fork.\n        \"\"\"\n        return [Opcodes.CHAINID, Opcodes.SELFBALANCE] + super(Istanbul, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Istanbul.precompiles","title":"precompiles(block_number=0, timestamp=0) classmethod","text":"

    At Istanbul, pre-compile for blake2 compression is introduced

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n    \"\"\"\n    At Istanbul, pre-compile for blake2 compression is introduced\n    \"\"\"\n    return [Address(9)] + super(Istanbul, cls).precompiles(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Istanbul.valid_opcodes","title":"valid_opcodes() classmethod","text":"

    Returns the list of Opcodes that are valid to work on this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef valid_opcodes(\n    cls,\n) -> List[Opcodes]:\n    \"\"\"\n    Returns the list of Opcodes that are valid to work on this fork.\n    \"\"\"\n    return [Opcodes.CHAINID, Opcodes.SELFBALANCE] + super(Istanbul, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.London","title":"London","text":"

    Bases: Berlin

    London fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class London(Berlin):\n    \"\"\"\n    London fork\n    \"\"\"\n\n    @classmethod\n    def header_base_fee_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        Base Fee is required starting from London.\n        \"\"\"\n        return True\n\n    @classmethod\n    def tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n        \"\"\"\n        At London, dynamic fee transactions are introduced\n        \"\"\"\n        return [2] + super(London, cls).tx_types(block_number, timestamp)\n\n    @classmethod\n    def contract_creating_tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n        \"\"\"\n        At London, dynamic fee transactions are introduced\n        \"\"\"\n        return [2] + super(London, cls).contract_creating_tx_types(block_number, timestamp)\n\n    @classmethod\n    def valid_opcodes(\n        cls,\n    ) -> List[Opcodes]:\n        \"\"\"\n        Returns the list of Opcodes that are valid to work on this fork.\n        \"\"\"\n        return [Opcodes.BASEFEE] + super(London, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.London.header_base_fee_required","title":"header_base_fee_required(block_number=0, timestamp=0) classmethod","text":"

    Base Fee is required starting from London.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_base_fee_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    Base Fee is required starting from London.\n    \"\"\"\n    return True\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.London.tx_types","title":"tx_types(block_number=0, timestamp=0) classmethod","text":"

    At London, dynamic fee transactions are introduced

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n    \"\"\"\n    At London, dynamic fee transactions are introduced\n    \"\"\"\n    return [2] + super(London, cls).tx_types(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.London.contract_creating_tx_types","title":"contract_creating_tx_types(block_number=0, timestamp=0) classmethod","text":"

    At London, dynamic fee transactions are introduced

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef contract_creating_tx_types(cls, block_number: int = 0, timestamp: int = 0) -> List[int]:\n    \"\"\"\n    At London, dynamic fee transactions are introduced\n    \"\"\"\n    return [2] + super(London, cls).contract_creating_tx_types(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.London.valid_opcodes","title":"valid_opcodes() classmethod","text":"

    Returns the list of Opcodes that are valid to work on this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef valid_opcodes(\n    cls,\n) -> List[Opcodes]:\n    \"\"\"\n    Returns the list of Opcodes that are valid to work on this fork.\n    \"\"\"\n    return [Opcodes.BASEFEE] + super(London, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.MuirGlacier","title":"MuirGlacier","text":"

    Bases: Istanbul

    Muir Glacier fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class MuirGlacier(Istanbul, solc_name=\"istanbul\", ignore=True):\n    \"\"\"\n    Muir Glacier fork\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Paris","title":"Paris","text":"

    Bases: London

    Paris (Merge) fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class Paris(\n    London,\n    transition_tool_name=\"Merge\",\n    blockchain_test_network_name=\"Paris\",\n):\n    \"\"\"\n    Paris (Merge) fork\n    \"\"\"\n\n    @classmethod\n    def header_prev_randao_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        Prev Randao is required starting from Paris.\n        \"\"\"\n        return True\n\n    @classmethod\n    def header_zero_difficulty_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        Zero difficulty is required starting from Paris.\n        \"\"\"\n        return True\n\n    @classmethod\n    def get_reward(cls, block_number: int = 0, timestamp: int = 0) -> int:\n        \"\"\"\n        Paris updates the reward to 0.\n        \"\"\"\n        return 0\n\n    @classmethod\n    def engine_new_payload_version(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> Optional[int]:\n        \"\"\"\n        Starting at Paris, payloads can be sent through the engine API\n        \"\"\"\n        return 1\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Paris.header_prev_randao_required","title":"header_prev_randao_required(block_number=0, timestamp=0) classmethod","text":"

    Prev Randao is required starting from Paris.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_prev_randao_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    Prev Randao is required starting from Paris.\n    \"\"\"\n    return True\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Paris.header_zero_difficulty_required","title":"header_zero_difficulty_required(block_number=0, timestamp=0) classmethod","text":"

    Zero difficulty is required starting from Paris.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_zero_difficulty_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    Zero difficulty is required starting from Paris.\n    \"\"\"\n    return True\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Paris.get_reward","title":"get_reward(block_number=0, timestamp=0) classmethod","text":"

    Paris updates the reward to 0.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef get_reward(cls, block_number: int = 0, timestamp: int = 0) -> int:\n    \"\"\"\n    Paris updates the reward to 0.\n    \"\"\"\n    return 0\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Paris.engine_new_payload_version","title":"engine_new_payload_version(block_number=0, timestamp=0) classmethod","text":"

    Starting at Paris, payloads can be sent through the engine API

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_new_payload_version(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> Optional[int]:\n    \"\"\"\n    Starting at Paris, payloads can be sent through the engine API\n    \"\"\"\n    return 1\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Prague","title":"Prague","text":"

    Bases: Cancun

    Prague fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class Prague(Cancun):\n    \"\"\"\n    Prague fork\n    \"\"\"\n\n    @classmethod\n    def is_deployed(cls) -> bool:\n        \"\"\"\n        Flags that the fork has not been deployed to mainnet; it is under active\n        development.\n        \"\"\"\n        return False\n\n    @classmethod\n    def solc_min_version(cls) -> Version:\n        \"\"\"\n        Returns the minimum version of solc that supports this fork.\n        \"\"\"\n        return Version.parse(\"1.0.0\")  # set a high version; currently unknown\n\n    @classmethod\n    def precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n        \"\"\"\n        At Prague, pre-compile for BLS operations are added:\n\n        G1ADD = 0x0B\n        G1MUL = 0x0C\n        G1MSM = 0x0D\n        G2ADD = 0x0E\n        G2MUL = 0x0F\n        G2MSM = 0x10\n        PAIRING = 0x11\n        MAP_FP_TO_G1 = 0x12\n        MAP_FP2_TO_G2 = 0x13\n        \"\"\"\n        return list(Address(i) for i in range(0xB, 0x13 + 1)) + super(Prague, cls).precompiles(\n            block_number, timestamp\n        )\n\n    @classmethod\n    def system_contracts(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n        \"\"\"\n        Prague introduces the system contracts for EIP-6110, EIP-7002, EIP-7251 and EIP-2935\n        \"\"\"\n        return [\n            Address(0x00000000219AB540356CBB839CBE05303D7705FA),\n            Address(0x00A3CA265EBCB825B45F985A16CEFB49958CE017),\n            Address(0x00B42DBF2194E931E80326D950320F7D9DBEAC02),\n            Address(0x0AAE40965E6800CD9B1F4B05FF21581047E3F91E),\n        ] + super(Prague, cls).system_contracts(block_number, timestamp)\n\n    @classmethod\n    def pre_allocation_blockchain(cls) -> Mapping:\n        \"\"\"\n        Prague requires pre-allocation of the beacon chain deposit contract for EIP-6110,\n        the exits contract for EIP-7002, and the history storage contract for EIP-2935.\n        \"\"\"\n        new_allocation = {}\n\n        # Add the beacon chain deposit contract\n        DEPOSIT_CONTRACT_TREE_DEPTH = 32\n        storage = {}\n        next_hash = sha256(b\"\\x00\" * 64).digest()\n        for i in range(DEPOSIT_CONTRACT_TREE_DEPTH + 2, DEPOSIT_CONTRACT_TREE_DEPTH * 2 + 1):\n            storage[i] = next_hash\n            next_hash = sha256(next_hash + next_hash).digest()\n\n        with open(CURRENT_FOLDER / \"contracts\" / \"deposit_contract.bin\", mode=\"rb\") as f:\n            new_allocation.update(\n                {\n                    0x00000000219AB540356CBB839CBE05303D7705FA: {\n                        \"nonce\": 1,\n                        \"code\": f.read(),\n                        \"storage\": storage,\n                    }\n                }\n            )\n\n        # Add the withdrawal request contract\n        with open(CURRENT_FOLDER / \"contracts\" / \"withdrawal_request.bin\", mode=\"rb\") as f:\n            new_allocation.update(\n                {\n                    0x00A3CA265EBCB825B45F985A16CEFB49958CE017: {\n                        \"nonce\": 1,\n                        \"code\": f.read(),\n                    },\n                }\n            )\n\n        # Add the consolidation request contract\n        with open(CURRENT_FOLDER / \"contracts\" / \"consolidation_request.bin\", mode=\"rb\") as f:\n            new_allocation.update(\n                {\n                    0x00B42DBF2194E931E80326D950320F7D9DBEAC02: {\n                        \"nonce\": 1,\n                        \"code\": f.read(),\n                    },\n                }\n            )\n\n        # Add the history storage contract\n        with open(CURRENT_FOLDER / \"contracts\" / \"history_contract.bin\", mode=\"rb\") as f:\n            new_allocation.update(\n                {\n                    0x0AAE40965E6800CD9B1F4B05FF21581047E3F91E: {\n                        \"nonce\": 1,\n                        \"code\": f.read(),\n                    }\n                }\n            )\n\n        return new_allocation | super(Prague, cls).pre_allocation_blockchain()\n\n    @classmethod\n    def header_requests_required(cls, block_number: int, timestamp: int) -> bool:\n        \"\"\"\n        Prague requires that the execution layer block contains the beacon\n        chain requests.\n        \"\"\"\n        return True\n\n    @classmethod\n    def engine_new_payload_version(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> Optional[int]:\n        \"\"\"\n        Starting at Prague, new payload calls must use version 4\n        \"\"\"\n        return 4\n\n    @classmethod\n    def engine_forkchoice_updated_version(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> Optional[int]:\n        \"\"\"\n        At Prague, version number of NewPayload and ForkchoiceUpdated diverge.\n        \"\"\"\n        return 3\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Prague.is_deployed","title":"is_deployed() classmethod","text":"

    Flags that the fork has not been deployed to mainnet; it is under active development.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef is_deployed(cls) -> bool:\n    \"\"\"\n    Flags that the fork has not been deployed to mainnet; it is under active\n    development.\n    \"\"\"\n    return False\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Prague.solc_min_version","title":"solc_min_version() classmethod","text":"

    Returns the minimum version of solc that supports this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef solc_min_version(cls) -> Version:\n    \"\"\"\n    Returns the minimum version of solc that supports this fork.\n    \"\"\"\n    return Version.parse(\"1.0.0\")  # set a high version; currently unknown\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Prague.precompiles","title":"precompiles(block_number=0, timestamp=0) classmethod","text":"

    At Prague, pre-compile for BLS operations are added:

    G1ADD = 0x0B G1MUL = 0x0C G1MSM = 0x0D G2ADD = 0x0E G2MUL = 0x0F G2MSM = 0x10 PAIRING = 0x11 MAP_FP_TO_G1 = 0x12 MAP_FP2_TO_G2 = 0x13

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef precompiles(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n    \"\"\"\n    At Prague, pre-compile for BLS operations are added:\n\n    G1ADD = 0x0B\n    G1MUL = 0x0C\n    G1MSM = 0x0D\n    G2ADD = 0x0E\n    G2MUL = 0x0F\n    G2MSM = 0x10\n    PAIRING = 0x11\n    MAP_FP_TO_G1 = 0x12\n    MAP_FP2_TO_G2 = 0x13\n    \"\"\"\n    return list(Address(i) for i in range(0xB, 0x13 + 1)) + super(Prague, cls).precompiles(\n        block_number, timestamp\n    )\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Prague.system_contracts","title":"system_contracts(block_number=0, timestamp=0) classmethod","text":"

    Prague introduces the system contracts for EIP-6110, EIP-7002, EIP-7251 and EIP-2935

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef system_contracts(cls, block_number: int = 0, timestamp: int = 0) -> List[Address]:\n    \"\"\"\n    Prague introduces the system contracts for EIP-6110, EIP-7002, EIP-7251 and EIP-2935\n    \"\"\"\n    return [\n        Address(0x00000000219AB540356CBB839CBE05303D7705FA),\n        Address(0x00A3CA265EBCB825B45F985A16CEFB49958CE017),\n        Address(0x00B42DBF2194E931E80326D950320F7D9DBEAC02),\n        Address(0x0AAE40965E6800CD9B1F4B05FF21581047E3F91E),\n    ] + super(Prague, cls).system_contracts(block_number, timestamp)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Prague.pre_allocation_blockchain","title":"pre_allocation_blockchain() classmethod","text":"

    Prague requires pre-allocation of the beacon chain deposit contract for EIP-6110, the exits contract for EIP-7002, and the history storage contract for EIP-2935.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef pre_allocation_blockchain(cls) -> Mapping:\n    \"\"\"\n    Prague requires pre-allocation of the beacon chain deposit contract for EIP-6110,\n    the exits contract for EIP-7002, and the history storage contract for EIP-2935.\n    \"\"\"\n    new_allocation = {}\n\n    # Add the beacon chain deposit contract\n    DEPOSIT_CONTRACT_TREE_DEPTH = 32\n    storage = {}\n    next_hash = sha256(b\"\\x00\" * 64).digest()\n    for i in range(DEPOSIT_CONTRACT_TREE_DEPTH + 2, DEPOSIT_CONTRACT_TREE_DEPTH * 2 + 1):\n        storage[i] = next_hash\n        next_hash = sha256(next_hash + next_hash).digest()\n\n    with open(CURRENT_FOLDER / \"contracts\" / \"deposit_contract.bin\", mode=\"rb\") as f:\n        new_allocation.update(\n            {\n                0x00000000219AB540356CBB839CBE05303D7705FA: {\n                    \"nonce\": 1,\n                    \"code\": f.read(),\n                    \"storage\": storage,\n                }\n            }\n        )\n\n    # Add the withdrawal request contract\n    with open(CURRENT_FOLDER / \"contracts\" / \"withdrawal_request.bin\", mode=\"rb\") as f:\n        new_allocation.update(\n            {\n                0x00A3CA265EBCB825B45F985A16CEFB49958CE017: {\n                    \"nonce\": 1,\n                    \"code\": f.read(),\n                },\n            }\n        )\n\n    # Add the consolidation request contract\n    with open(CURRENT_FOLDER / \"contracts\" / \"consolidation_request.bin\", mode=\"rb\") as f:\n        new_allocation.update(\n            {\n                0x00B42DBF2194E931E80326D950320F7D9DBEAC02: {\n                    \"nonce\": 1,\n                    \"code\": f.read(),\n                },\n            }\n        )\n\n    # Add the history storage contract\n    with open(CURRENT_FOLDER / \"contracts\" / \"history_contract.bin\", mode=\"rb\") as f:\n        new_allocation.update(\n            {\n                0x0AAE40965E6800CD9B1F4B05FF21581047E3F91E: {\n                    \"nonce\": 1,\n                    \"code\": f.read(),\n                }\n            }\n        )\n\n    return new_allocation | super(Prague, cls).pre_allocation_blockchain()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Prague.header_requests_required","title":"header_requests_required(block_number, timestamp) classmethod","text":"

    Prague requires that the execution layer block contains the beacon chain requests.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_requests_required(cls, block_number: int, timestamp: int) -> bool:\n    \"\"\"\n    Prague requires that the execution layer block contains the beacon\n    chain requests.\n    \"\"\"\n    return True\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Prague.engine_new_payload_version","title":"engine_new_payload_version(block_number=0, timestamp=0) classmethod","text":"

    Starting at Prague, new payload calls must use version 4

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_new_payload_version(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> Optional[int]:\n    \"\"\"\n    Starting at Prague, new payload calls must use version 4\n    \"\"\"\n    return 4\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Prague.engine_forkchoice_updated_version","title":"engine_forkchoice_updated_version(block_number=0, timestamp=0) classmethod","text":"

    At Prague, version number of NewPayload and ForkchoiceUpdated diverge.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_forkchoice_updated_version(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> Optional[int]:\n    \"\"\"\n    At Prague, version number of NewPayload and ForkchoiceUpdated diverge.\n    \"\"\"\n    return 3\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Shanghai","title":"Shanghai","text":"

    Bases: Paris

    Shanghai fork

    Source code in src/ethereum_test_forks/forks/forks.py
    class Shanghai(Paris):\n    \"\"\"\n    Shanghai fork\n    \"\"\"\n\n    @classmethod\n    def header_withdrawals_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n        \"\"\"\n        Withdrawals are required starting from Shanghai.\n        \"\"\"\n        return True\n\n    @classmethod\n    def engine_new_payload_version(\n        cls, block_number: int = 0, timestamp: int = 0\n    ) -> Optional[int]:\n        \"\"\"\n        Starting at Shanghai, new payload calls must use version 2\n        \"\"\"\n        return 2\n\n    @classmethod\n    def valid_opcodes(\n        cls,\n    ) -> List[Opcodes]:\n        \"\"\"\n        Returns the list of Opcodes that are valid to work on this fork.\n        \"\"\"\n        return [Opcodes.PUSH0] + super(Shanghai, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Shanghai.header_withdrawals_required","title":"header_withdrawals_required(block_number=0, timestamp=0) classmethod","text":"

    Withdrawals are required starting from Shanghai.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef header_withdrawals_required(cls, block_number: int = 0, timestamp: int = 0) -> bool:\n    \"\"\"\n    Withdrawals are required starting from Shanghai.\n    \"\"\"\n    return True\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Shanghai.engine_new_payload_version","title":"engine_new_payload_version(block_number=0, timestamp=0) classmethod","text":"

    Starting at Shanghai, new payload calls must use version 2

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef engine_new_payload_version(\n    cls, block_number: int = 0, timestamp: int = 0\n) -> Optional[int]:\n    \"\"\"\n    Starting at Shanghai, new payload calls must use version 2\n    \"\"\"\n    return 2\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.Shanghai.valid_opcodes","title":"valid_opcodes() classmethod","text":"

    Returns the list of Opcodes that are valid to work on this fork.

    Source code in src/ethereum_test_forks/forks/forks.py
    @classmethod\ndef valid_opcodes(\n    cls,\n) -> List[Opcodes]:\n    \"\"\"\n    Returns the list of Opcodes that are valid to work on this fork.\n    \"\"\"\n    return [Opcodes.PUSH0] + super(Shanghai, cls).valid_opcodes()\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.BerlinToLondonAt5","title":"BerlinToLondonAt5","text":"

    Bases: Berlin

    Berlin to London transition at Block 5

    Source code in src/ethereum_test_forks/forks/transition.py
    @transition_fork(to_fork=London, at_block=5)\nclass BerlinToLondonAt5(Berlin):\n    \"\"\"\n    Berlin to London transition at Block 5\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.ParisToShanghaiAtTime15k","title":"ParisToShanghaiAtTime15k","text":"

    Bases: Paris

    Paris to Shanghai transition at Timestamp 15k

    Source code in src/ethereum_test_forks/forks/transition.py
    @transition_fork(to_fork=Shanghai, at_timestamp=15_000)\nclass ParisToShanghaiAtTime15k(Paris, blockchain_test_network_name=\"ParisToShanghaiAtTime15k\"):\n    \"\"\"\n    Paris to Shanghai transition at Timestamp 15k\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.ShanghaiToCancunAtTime15k","title":"ShanghaiToCancunAtTime15k","text":"

    Bases: Shanghai

    Shanghai to Cancun transition at Timestamp 15k

    Source code in src/ethereum_test_forks/forks/transition.py
    @transition_fork(to_fork=Cancun, at_timestamp=15_000)\nclass ShanghaiToCancunAtTime15k(Shanghai):\n    \"\"\"\n    Shanghai to Cancun transition at Timestamp 15k\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.InvalidForkError","title":"InvalidForkError","text":"

    Bases: Exception

    Invalid fork error raised when the fork specified by command-line option --latest-fork is not found.

    Source code in src/ethereum_test_forks/helpers.py
    class InvalidForkError(Exception):\n    \"\"\"\n    Invalid fork error raised when the fork specified by command-line option\n    --latest-fork is not found.\n    \"\"\"\n\n    def __init__(self, message):\n        super().__init__(message)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.forks_from","title":"forks_from(fork, deployed_only=True)","text":"

    Returns the specified fork and all forks after it.

    Source code in src/ethereum_test_forks/helpers.py
    def forks_from(fork: Fork, deployed_only: bool = True) -> List[Fork]:\n    \"\"\"\n    Returns the specified fork and all forks after it.\n    \"\"\"\n    if deployed_only:\n        latest_fork = get_deployed_forks()[-1]\n    else:\n        latest_fork = get_forks()[-1]\n    return forks_from_until(fork, latest_fork)\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.forks_from_until","title":"forks_from_until(fork_from, fork_until)","text":"

    Returns the specified fork and all forks after it until and including the second specified fork

    Source code in src/ethereum_test_forks/helpers.py
    def forks_from_until(fork_from: Fork, fork_until: Fork) -> List[Fork]:\n    \"\"\"\n    Returns the specified fork and all forks after it until and including the\n    second specified fork\n    \"\"\"\n    prev_fork = fork_until\n\n    forks: List[Fork] = []\n\n    while prev_fork != BaseFork and prev_fork != fork_from:\n        forks.insert(0, prev_fork)\n\n        prev_fork = prev_fork.__base__\n\n    if prev_fork == BaseFork:\n        return []\n\n    forks.insert(0, fork_from)\n\n    return forks\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.get_closest_fork_with_solc_support","title":"get_closest_fork_with_solc_support(fork, solc_version)","text":"

    Returns the closest fork, potentially the provided fork itself, that has solc support.

    Source code in src/ethereum_test_forks/helpers.py
    def get_closest_fork_with_solc_support(fork: Fork, solc_version: Version) -> Optional[Fork]:\n    \"\"\"\n    Returns the closest fork, potentially the provided fork itself, that has\n    solc support.\n    \"\"\"\n    if fork is BaseFork:\n        return None\n    return (\n        fork\n        if solc_version >= fork.solc_min_version()\n        else get_closest_fork_with_solc_support(get_parent_fork(fork), solc_version)\n    )\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.get_deployed_forks","title":"get_deployed_forks()","text":"

    Returns a list of all the fork classes implemented by ethereum_test_forks that have been deployed to mainnet, chronologically ordered by deployment.

    Source code in src/ethereum_test_forks/helpers.py
    def get_deployed_forks() -> List[Fork]:\n    \"\"\"\n    Returns a list of all the fork classes implemented by `ethereum_test_forks`\n    that have been deployed to mainnet, chronologically ordered by deployment.\n    \"\"\"\n    return [fork for fork in get_forks() if fork.is_deployed()]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.get_development_forks","title":"get_development_forks()","text":"

    Returns a list of all the fork classes implemented by ethereum_test_forks that have been not yet deployed to mainnet and are currently under development. The list is ordered by their planned deployment date.

    Source code in src/ethereum_test_forks/helpers.py
    def get_development_forks() -> List[Fork]:\n    \"\"\"\n    Returns a list of all the fork classes implemented by `ethereum_test_forks`\n    that have been not yet deployed to mainnet and are currently under\n    development. The list is ordered by their planned deployment date.\n    \"\"\"\n    return [fork for fork in get_forks() if not fork.is_deployed()]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.get_forks","title":"get_forks()","text":"

    Returns a list of all the fork classes implemented by ethereum_test_forks ordered chronologically by deployment.

    Source code in src/ethereum_test_forks/helpers.py
    def get_forks() -> List[Fork]:\n    \"\"\"\n    Returns a list of all the fork classes implemented by\n    `ethereum_test_forks` ordered chronologically by deployment.\n    \"\"\"\n    all_forks: List[Fork] = []\n    for fork_name in forks.__dict__:\n        fork = forks.__dict__[fork_name]\n        if not isinstance(fork, type):\n            continue\n        if issubclass(fork, BaseFork) and fork is not BaseFork:\n            all_forks.append(fork)\n    return all_forks\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.get_forks_with_no_descendants","title":"get_forks_with_no_descendants(forks)","text":"

    Get the forks with no descendants in the inheritance hierarchy.

    Source code in src/ethereum_test_forks/helpers.py
    def get_forks_with_no_descendants(forks: Set[Fork]) -> Set[Fork]:\n    \"\"\"\n    Get the forks with no descendants in the inheritance hierarchy.\n    \"\"\"\n    resulting_forks: Set[Fork] = set()\n    for fork in forks:\n        descendants = False\n        for next_fork in forks - {fork}:\n            if next_fork > fork:\n                descendants = True\n                break\n        if not descendants:\n            resulting_forks = resulting_forks | {fork}\n    return resulting_forks\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.get_forks_with_no_parents","title":"get_forks_with_no_parents(forks)","text":"

    Get the forks with no parents in the inheritance hierarchy.

    Source code in src/ethereum_test_forks/helpers.py
    def get_forks_with_no_parents(forks: Set[Fork]) -> Set[Fork]:\n    \"\"\"\n    Get the forks with no parents in the inheritance hierarchy.\n    \"\"\"\n    resulting_forks: Set[Fork] = set()\n    for fork in forks:\n        parents = False\n        for next_fork in forks - {fork}:\n            if next_fork < fork:\n                parents = True\n                break\n        if not parents:\n            resulting_forks = resulting_forks | {fork}\n    return resulting_forks\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.get_forks_with_solc_support","title":"get_forks_with_solc_support(solc_version)","text":"

    Returns a list of all fork classes that are supported by solc.

    Source code in src/ethereum_test_forks/helpers.py
    def get_forks_with_solc_support(solc_version: Version) -> List[Fork]:\n    \"\"\"\n    Returns a list of all fork classes that are supported by solc.\n    \"\"\"\n    return [fork for fork in get_forks() if solc_version >= fork.solc_min_version()]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.get_forks_without_solc_support","title":"get_forks_without_solc_support(solc_version)","text":"

    Returns a list of all fork classes that aren't supported by solc.

    Source code in src/ethereum_test_forks/helpers.py
    def get_forks_without_solc_support(solc_version: Version) -> List[Fork]:\n    \"\"\"\n    Returns a list of all fork classes that aren't supported by solc.\n    \"\"\"\n    return [fork for fork in get_forks() if solc_version < fork.solc_min_version()]\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.get_from_until_fork_set","title":"get_from_until_fork_set(forks, forks_from, forks_until)","text":"

    Get the fork range from forks_from to forks_until.

    Source code in src/ethereum_test_forks/helpers.py
    def get_from_until_fork_set(\n    forks: Set[Fork], forks_from: Set[Fork], forks_until: Set[Fork]\n) -> Set[Fork]:\n    \"\"\"\n    Get the fork range from forks_from to forks_until.\n    \"\"\"\n    resulting_set = set()\n    for fork_from in forks_from:\n        for fork_until in forks_until:\n            for fork in forks:\n                if fork <= fork_until and fork >= fork_from:\n                    resulting_set.add(fork)\n    return resulting_set\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.get_last_descendants","title":"get_last_descendants(forks, forks_from)","text":"

    Get the last descendant of a class in the inheritance hierarchy.

    Source code in src/ethereum_test_forks/helpers.py
    def get_last_descendants(forks: Set[Fork], forks_from: Set[Fork]) -> Set[Fork]:\n    \"\"\"\n    Get the last descendant of a class in the inheritance hierarchy.\n    \"\"\"\n    resulting_forks: Set[Fork] = set()\n    forks = get_forks_with_no_descendants(forks)\n    for fork_from in forks_from:\n        for fork in forks:\n            if fork >= fork_from:\n                resulting_forks = resulting_forks | {fork}\n    return resulting_forks\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.get_transition_forks","title":"get_transition_forks()","text":"

    Returns all the transition forks

    Source code in src/ethereum_test_forks/helpers.py
    def get_transition_forks() -> List[Fork]:\n    \"\"\"\n    Returns all the transition forks\n    \"\"\"\n    transition_forks: List[Fork] = []\n\n    for fork_name in transition.__dict__:\n        fork = transition.__dict__[fork_name]\n        if not isinstance(fork, type):\n            continue\n        if issubclass(fork, TransitionBaseClass) and issubclass(fork, BaseFork):\n            transition_forks.append(fork)\n\n    return transition_forks\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.transition_fork_from_to","title":"transition_fork_from_to(fork_from, fork_to)","text":"

    Returns the transition fork that transitions to and from the specified forks.

    Source code in src/ethereum_test_forks/helpers.py
    def transition_fork_from_to(fork_from: Fork, fork_to: Fork) -> Fork | None:\n    \"\"\"\n    Returns the transition fork that transitions to and from the specified\n    forks.\n    \"\"\"\n    for transition_fork in get_transition_forks():\n        if not issubclass(transition_fork, TransitionBaseClass):\n            continue\n        if (\n            transition_fork.transitions_to() == fork_to\n            and transition_fork.transitions_from() == fork_from\n        ):\n            return transition_fork\n\n    return None\n
    "},{"location":"library/ethereum_test_forks/#ethereum_test_forks.transition_fork_to","title":"transition_fork_to(fork_to)","text":"

    Returns the transition fork that transitions to the specified fork.

    Source code in src/ethereum_test_forks/helpers.py
    def transition_fork_to(fork_to: Fork) -> List[Fork]:\n    \"\"\"\n    Returns the transition fork that transitions to the specified fork.\n    \"\"\"\n    transition_forks: List[Fork] = []\n    for transition_fork in get_transition_forks():\n        if not issubclass(transition_fork, TransitionBaseClass):\n            continue\n        if transition_fork.transitions_to() == fork_to:\n            transition_forks.append(transition_fork)\n\n    return transition_forks\n
    "},{"location":"library/ethereum_test_specs/","title":"Ethereum Test Specs package","text":"

    Test spec definitions and utilities.

    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BaseTest","title":"BaseTest","text":"

    Bases: BaseModel

    Represents a base Ethereum test which must return a single test fixture.

    Source code in src/ethereum_test_specs/base.py
    class BaseTest(BaseModel):\n    \"\"\"\n    Represents a base Ethereum test which must return a single test fixture.\n    \"\"\"\n\n    tag: str = \"\"\n\n    # Transition tool specific fields\n    t8n_dump_dir: Path | None = Field(None, exclude=True)\n    _t8n_call_counter: Iterator[int] = count(0)\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = []\n\n    @abstractmethod\n    def generate(\n        self,\n        *,\n        t8n: TransitionTool,\n        fork: Fork,\n        fixture_format: FixtureFormats,\n        eips: Optional[List[int]] = None,\n    ) -> BaseFixture:\n        \"\"\"\n        Generate the list of test fixtures.\n        \"\"\"\n        pass\n\n    @classmethod\n    def pytest_parameter_name(cls) -> str:\n        \"\"\"\n        Must return the name of the parameter used in pytest to select this\n        spec type as filler for the test.\n\n        By default, it returns the underscore separated name of the class.\n        \"\"\"\n        return reduce(lambda x, y: x + (\"_\" if y.isupper() else \"\") + y, cls.__name__).lower()\n\n    def get_next_transition_tool_output_path(self) -> str:\n        \"\"\"\n        Returns the path to the next transition tool output file.\n        \"\"\"\n        if not self.t8n_dump_dir:\n            return \"\"\n        return path.join(\n            self.t8n_dump_dir,\n            str(next(self._t8n_call_counter)),\n        )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BaseTest.generate","title":"generate(*, t8n, fork, fixture_format, eips=None) abstractmethod","text":"

    Generate the list of test fixtures.

    Source code in src/ethereum_test_specs/base.py
    @abstractmethod\ndef generate(\n    self,\n    *,\n    t8n: TransitionTool,\n    fork: Fork,\n    fixture_format: FixtureFormats,\n    eips: Optional[List[int]] = None,\n) -> BaseFixture:\n    \"\"\"\n    Generate the list of test fixtures.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BaseTest.pytest_parameter_name","title":"pytest_parameter_name() classmethod","text":"

    Must return the name of the parameter used in pytest to select this spec type as filler for the test.

    By default, it returns the underscore separated name of the class.

    Source code in src/ethereum_test_specs/base.py
    @classmethod\ndef pytest_parameter_name(cls) -> str:\n    \"\"\"\n    Must return the name of the parameter used in pytest to select this\n    spec type as filler for the test.\n\n    By default, it returns the underscore separated name of the class.\n    \"\"\"\n    return reduce(lambda x, y: x + (\"_\" if y.isupper() else \"\") + y, cls.__name__).lower()\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BaseTest.get_next_transition_tool_output_path","title":"get_next_transition_tool_output_path()","text":"

    Returns the path to the next transition tool output file.

    Source code in src/ethereum_test_specs/base.py
    def get_next_transition_tool_output_path(self) -> str:\n    \"\"\"\n    Returns the path to the next transition tool output file.\n    \"\"\"\n    if not self.t8n_dump_dir:\n        return \"\"\n    return path.join(\n        self.t8n_dump_dir,\n        str(next(self._t8n_call_counter)),\n    )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BlockchainTest","title":"BlockchainTest","text":"

    Bases: BaseTest

    Filler type that tests multiple blocks (valid or invalid) in a chain.

    Source code in src/ethereum_test_specs/blockchain.py
    class BlockchainTest(BaseTest):\n    \"\"\"\n    Filler type that tests multiple blocks (valid or invalid) in a chain.\n    \"\"\"\n\n    pre: Alloc\n    post: Alloc\n    blocks: List[Block]\n    genesis_environment: Environment = Field(default_factory=Environment)\n    verify_sync: bool = False\n    chain_id: int = 1\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = [\n        FixtureFormats.BLOCKCHAIN_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST_ENGINE,\n    ]\n\n    def make_genesis(\n        self,\n        fork: Fork,\n    ) -> Tuple[Alloc, FixtureBlock]:\n        \"\"\"\n        Create a genesis block from the blockchain test definition.\n        \"\"\"\n        env = self.genesis_environment.set_fork_requirements(fork)\n        assert (\n            env.withdrawals is None or len(env.withdrawals) == 0\n        ), \"withdrawals must be empty at genesis\"\n        assert env.parent_beacon_block_root is None or env.parent_beacon_block_root == Hash(\n            0\n        ), \"parent_beacon_block_root must be empty at genesis\"\n\n        pre_alloc = Alloc.merge(\n            Alloc.model_validate(fork.pre_allocation_blockchain()),\n            self.pre,\n        )\n        if empty_accounts := pre_alloc.empty_accounts():\n            raise Exception(f\"Empty accounts in pre state: {empty_accounts}\")\n        state_root = pre_alloc.state_root()\n        genesis = FixtureHeader(\n            parent_hash=0,\n            ommers_hash=EmptyOmmersRoot,\n            fee_recipient=0,\n            state_root=state_root,\n            transactions_trie=EmptyTrieRoot,\n            receipts_root=EmptyTrieRoot,\n            logs_bloom=0,\n            difficulty=0x20000 if env.difficulty is None else env.difficulty,\n            number=0,\n            gas_limit=env.gas_limit,\n            gas_used=0,\n            timestamp=0,\n            extra_data=b\"\\x00\",\n            prev_randao=0,\n            nonce=0,\n            base_fee_per_gas=env.base_fee_per_gas,\n            blob_gas_used=env.blob_gas_used,\n            excess_blob_gas=env.excess_blob_gas,\n            withdrawals_root=Withdrawal.list_root(env.withdrawals)\n            if env.withdrawals is not None\n            else None,\n            parent_beacon_block_root=env.parent_beacon_block_root,\n            requests_root=Requests(root=[]).trie_root\n            if fork.header_requests_required(0, 0)\n            else None,\n        )\n\n        return (\n            pre_alloc,\n            FixtureBlockBase(\n                header=genesis,\n                withdrawals=None if env.withdrawals is None else [],\n                deposit_requests=[] if fork.header_requests_required(0, 0) else None,\n                withdrawal_requests=[] if fork.header_requests_required(0, 0) else None,\n                consolidation_requests=[] if fork.header_requests_required(0, 0) else None,\n            ).with_rlp(\n                txs=[], requests=Requests() if fork.header_requests_required(0, 0) else None\n            ),\n        )\n\n    def generate_block_data(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        block: Block,\n        previous_env: Environment,\n        previous_alloc: Alloc,\n        eips: Optional[List[int]] = None,\n    ) -> Tuple[FixtureHeader, List[Transaction], Requests | None, Alloc, Environment]:\n        \"\"\"\n        Generate common block data for both make_fixture and make_hive_fixture.\n        \"\"\"\n        if block.rlp and block.exception is not None:\n            raise Exception(\n                \"test correctness: post-state cannot be verified if the \"\n                + \"block's rlp is supplied and the block is not supposed \"\n                + \"to produce an exception\"\n            )\n\n        env = block.set_environment(previous_env)\n        env = env.set_fork_requirements(fork)\n\n        txs = [tx.with_signature_and_sender() for tx in block.txs]\n\n        if failing_tx_count := len([tx for tx in txs if tx.error]) > 0:\n            if failing_tx_count > 1:\n                raise Exception(\n                    \"test correctness: only one transaction can produce an exception in a block\"\n                )\n            if not txs[-1].error:\n                raise Exception(\n                    \"test correctness: the transaction that produces an exception \"\n                    + \"must be the last transaction in the block\"\n                )\n\n        transition_tool_output = t8n.evaluate(\n            alloc=previous_alloc,\n            txs=txs,\n            env=env,\n            fork=fork,\n            chain_id=self.chain_id,\n            reward=fork.get_reward(env.number, env.timestamp),\n            eips=eips,\n            debug_output_path=self.get_next_transition_tool_output_path(),\n        )\n\n        try:\n            rejected_txs = verify_transactions(txs, transition_tool_output.result)\n            verify_result(transition_tool_output.result, env)\n        except Exception as e:\n            print_traces(t8n.get_traces())\n            pprint(transition_tool_output.result)\n            pprint(previous_alloc)\n            pprint(transition_tool_output.alloc)\n            raise e\n\n        if len(rejected_txs) > 0 and block.exception is None:\n            print_traces(t8n.get_traces())\n            raise Exception(\n                \"one or more transactions in `BlockchainTest` are \"\n                + \"intrinsically invalid, but the block was not expected \"\n                + \"to be invalid. Please verify whether the transaction \"\n                + \"was indeed expected to fail and add the proper \"\n                + \"`block.exception`\"\n            )\n\n        # One special case of the invalid transactions is the blob gas used, since this value\n        # is not included in the transition tool result, but it is included in the block header,\n        # and some clients check it before executing the block by simply counting the type-3 txs,\n        # we need to set the correct value by default.\n        blob_gas_used: int | None = None\n        if (blob_gas_per_blob := fork.blob_gas_per_blob(env.number, env.timestamp)) > 0:\n            blob_gas_used = blob_gas_per_blob * count_blobs(txs)\n\n        header = FixtureHeader(\n            **(\n                transition_tool_output.result.model_dump(\n                    exclude_none=True, exclude={\"blob_gas_used\", \"transactions_trie\"}\n                )\n                | env.model_dump(exclude_none=True, exclude={\"blob_gas_used\"})\n            ),\n            blob_gas_used=blob_gas_used,\n            transactions_trie=Transaction.list_root(txs),\n            extra_data=block.extra_data if block.extra_data is not None else b\"\",\n            fork=fork,\n        )\n\n        if block.header_verify is not None:\n            # Verify the header after transition tool processing.\n            block.header_verify.verify(header)\n\n        if block.rlp_modifier is not None:\n            # Modify any parameter specified in the `rlp_modifier` after\n            # transition tool processing.\n            header = block.rlp_modifier.apply(header)\n\n        requests = None\n        if fork.header_requests_required(header.number, header.timestamp):\n            requests_list: List[DepositRequest | WithdrawalRequest | ConsolidationRequest] = []\n            if transition_tool_output.result.deposit_requests is not None:\n                requests_list += transition_tool_output.result.deposit_requests\n            if transition_tool_output.result.withdrawal_requests is not None:\n                requests_list += transition_tool_output.result.withdrawal_requests\n            if transition_tool_output.result.consolidation_requests is not None:\n                requests_list += transition_tool_output.result.consolidation_requests\n            requests = Requests(root=requests_list)\n\n        if requests is not None and requests.trie_root != header.requests_root:\n            raise Exception(\n                f\"Requests root in header does not match the requests root in the transition tool \"\n                \"output: \"\n                f\"{header.requests_root} != {requests.trie_root}\"\n            )\n\n        if block.requests is not None:\n            requests = Requests(root=block.requests)\n            header.requests_root = requests.trie_root\n\n        return (\n            header,\n            txs,\n            requests,\n            transition_tool_output.alloc,\n            env,\n        )\n\n    def network_info(self, fork: Fork, eips: Optional[List[int]] = None):\n        \"\"\"\n        Returns fixture network information for the fork & EIP/s.\n        \"\"\"\n        return (\n            \"+\".join([fork.blockchain_test_network_name()] + [str(eip) for eip in eips])\n            if eips\n            else fork.blockchain_test_network_name()\n        )\n\n    def verify_post_state(self, t8n, alloc: Alloc):\n        \"\"\"\n        Verifies the post alloc after all block/s or payload/s are generated.\n        \"\"\"\n        try:\n            self.post.verify_post_alloc(alloc)\n        except Exception as e:\n            print_traces(t8n.get_traces())\n            raise e\n\n    def make_fixture(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        eips: Optional[List[int]] = None,\n    ) -> Fixture:\n        \"\"\"\n        Create a fixture from the blockchain test definition.\n        \"\"\"\n        fixture_blocks: List[FixtureBlock | InvalidFixtureBlock] = []\n\n        pre, genesis = self.make_genesis(fork)\n\n        alloc = pre\n        env = environment_from_parent_header(genesis.header)\n        head = genesis.header.block_hash\n\n        for block in self.blocks:\n            if block.rlp is None:\n                # This is the most common case, the RLP needs to be constructed\n                # based on the transactions to be included in the block.\n                # Set the environment according to the block to execute.\n                header, txs, requests, new_alloc, new_env = self.generate_block_data(\n                    t8n=t8n,\n                    fork=fork,\n                    block=block,\n                    previous_env=env,\n                    previous_alloc=alloc,\n                    eips=eips,\n                )\n                fixture_block = FixtureBlockBase(\n                    header=header,\n                    txs=[FixtureTransaction.from_transaction(tx) for tx in txs],\n                    ommers=[],\n                    withdrawals=[FixtureWithdrawal.from_withdrawal(w) for w in new_env.withdrawals]\n                    if new_env.withdrawals is not None\n                    else None,\n                    deposit_requests=[\n                        FixtureDepositRequest.from_deposit_request(d)\n                        for d in requests.deposit_requests()\n                    ]\n                    if requests is not None\n                    else None,\n                    withdrawal_requests=[\n                        FixtureWithdrawalRequest.from_withdrawal_request(w)\n                        for w in requests.withdrawal_requests()\n                    ]\n                    if requests is not None\n                    else None,\n                    consolidation_requests=[\n                        FixtureConsolidationRequest.from_consolidation_request(c)\n                        for c in requests.consolidation_requests()\n                    ]\n                    if requests is not None\n                    else None,\n                ).with_rlp(txs=txs, requests=requests)\n                if block.exception is None:\n                    fixture_blocks.append(fixture_block)\n                    # Update env, alloc and last block hash for the next block.\n                    alloc = new_alloc\n                    env = apply_new_parent(new_env, header)\n                    head = header.block_hash\n                else:\n                    fixture_blocks.append(\n                        InvalidFixtureBlock(\n                            rlp=fixture_block.rlp,\n                            expect_exception=block.exception,\n                            rlp_decoded=(\n                                None\n                                if BlockException.RLP_STRUCTURES_ENCODING in block.exception\n                                else fixture_block.without_rlp()\n                            ),\n                        ),\n                    )\n            else:\n                assert block.exception is not None, (\n                    \"test correctness: if the block's rlp is hard-coded, \"\n                    + \"the block is expected to produce an exception\"\n                )\n                fixture_blocks.append(\n                    InvalidFixtureBlock(\n                        rlp=block.rlp,\n                        expect_exception=block.exception,\n                    ),\n                )\n\n        self.verify_post_state(t8n, alloc)\n        return Fixture(\n            fork=self.network_info(fork, eips),\n            genesis=genesis.header,\n            genesis_rlp=genesis.rlp,\n            blocks=fixture_blocks,\n            last_block_hash=head,\n            pre=pre,\n            post_state=alloc,\n        )\n\n    def make_hive_fixture(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        eips: Optional[List[int]] = None,\n    ) -> EngineFixture:\n        \"\"\"\n        Create a hive fixture from the blocktest definition.\n        \"\"\"\n        fixture_payloads: List[FixtureEngineNewPayload] = []\n\n        pre, genesis = self.make_genesis(fork)\n        alloc = pre\n        env = environment_from_parent_header(genesis.header)\n        head_hash = genesis.header.block_hash\n\n        for block in self.blocks:\n            header, txs, requests, new_alloc, new_env = self.generate_block_data(\n                t8n=t8n, fork=fork, block=block, previous_env=env, previous_alloc=alloc, eips=eips\n            )\n            if block.rlp is None:\n                fixture_payloads.append(\n                    FixtureEngineNewPayload.from_fixture_header(\n                        fork=fork,\n                        header=header,\n                        transactions=txs,\n                        withdrawals=new_env.withdrawals,\n                        requests=requests,\n                        validation_error=block.exception,\n                        error_code=block.engine_api_error_code,\n                    )\n                )\n                if block.exception is None:\n                    alloc = new_alloc\n                    env = apply_new_parent(env, header)\n                    head_hash = header.block_hash\n        fcu_version = fork.engine_forkchoice_updated_version(header.number, header.timestamp)\n        assert (\n            fcu_version is not None\n        ), \"A hive fixture was requested but no forkchoice update is defined. The framework should\"\n        \" never try to execute this test case.\"\n\n        self.verify_post_state(t8n, alloc)\n\n        sync_payload: Optional[FixtureEngineNewPayload] = None\n        if self.verify_sync:\n            # Test is marked for syncing verification.\n            assert (\n                genesis.header.block_hash != head_hash\n            ), \"Invalid payload tests negative test via sync is not supported yet.\"\n\n            # Most clients require the header to start the sync process, so we create an empty\n            # block on top of the last block of the test to send it as new payload and trigger the\n            # sync process.\n            sync_header, _, requests, _, _ = self.generate_block_data(\n                t8n=t8n,\n                fork=fork,\n                block=Block(),\n                previous_env=env,\n                previous_alloc=alloc,\n                eips=eips,\n            )\n            sync_payload = FixtureEngineNewPayload.from_fixture_header(\n                fork=fork,\n                header=sync_header,\n                transactions=[],\n                withdrawals=[],\n                requests=requests,\n                validation_error=None,\n                error_code=None,\n            )\n\n        return EngineFixture(\n            fork=self.network_info(fork, eips),\n            genesis=genesis.header,\n            payloads=fixture_payloads,\n            fcu_version=fcu_version,\n            pre=pre,\n            post_state=alloc,\n            sync_payload=sync_payload,\n            last_block_hash=head_hash,\n        )\n\n    def generate(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        fixture_format: FixtureFormats,\n        eips: Optional[List[int]] = None,\n    ) -> BaseFixture:\n        \"\"\"\n        Generate the BlockchainTest fixture.\n        \"\"\"\n        t8n.reset_traces()\n        if fixture_format == FixtureFormats.BLOCKCHAIN_TEST_ENGINE:\n            return self.make_hive_fixture(t8n, fork, eips)\n        elif fixture_format == FixtureFormats.BLOCKCHAIN_TEST:\n            return self.make_fixture(t8n, fork, eips)\n\n        raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BlockchainTest.make_genesis","title":"make_genesis(fork)","text":"

    Create a genesis block from the blockchain test definition.

    Source code in src/ethereum_test_specs/blockchain.py
    def make_genesis(\n    self,\n    fork: Fork,\n) -> Tuple[Alloc, FixtureBlock]:\n    \"\"\"\n    Create a genesis block from the blockchain test definition.\n    \"\"\"\n    env = self.genesis_environment.set_fork_requirements(fork)\n    assert (\n        env.withdrawals is None or len(env.withdrawals) == 0\n    ), \"withdrawals must be empty at genesis\"\n    assert env.parent_beacon_block_root is None or env.parent_beacon_block_root == Hash(\n        0\n    ), \"parent_beacon_block_root must be empty at genesis\"\n\n    pre_alloc = Alloc.merge(\n        Alloc.model_validate(fork.pre_allocation_blockchain()),\n        self.pre,\n    )\n    if empty_accounts := pre_alloc.empty_accounts():\n        raise Exception(f\"Empty accounts in pre state: {empty_accounts}\")\n    state_root = pre_alloc.state_root()\n    genesis = FixtureHeader(\n        parent_hash=0,\n        ommers_hash=EmptyOmmersRoot,\n        fee_recipient=0,\n        state_root=state_root,\n        transactions_trie=EmptyTrieRoot,\n        receipts_root=EmptyTrieRoot,\n        logs_bloom=0,\n        difficulty=0x20000 if env.difficulty is None else env.difficulty,\n        number=0,\n        gas_limit=env.gas_limit,\n        gas_used=0,\n        timestamp=0,\n        extra_data=b\"\\x00\",\n        prev_randao=0,\n        nonce=0,\n        base_fee_per_gas=env.base_fee_per_gas,\n        blob_gas_used=env.blob_gas_used,\n        excess_blob_gas=env.excess_blob_gas,\n        withdrawals_root=Withdrawal.list_root(env.withdrawals)\n        if env.withdrawals is not None\n        else None,\n        parent_beacon_block_root=env.parent_beacon_block_root,\n        requests_root=Requests(root=[]).trie_root\n        if fork.header_requests_required(0, 0)\n        else None,\n    )\n\n    return (\n        pre_alloc,\n        FixtureBlockBase(\n            header=genesis,\n            withdrawals=None if env.withdrawals is None else [],\n            deposit_requests=[] if fork.header_requests_required(0, 0) else None,\n            withdrawal_requests=[] if fork.header_requests_required(0, 0) else None,\n            consolidation_requests=[] if fork.header_requests_required(0, 0) else None,\n        ).with_rlp(\n            txs=[], requests=Requests() if fork.header_requests_required(0, 0) else None\n        ),\n    )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BlockchainTest.generate_block_data","title":"generate_block_data(t8n, fork, block, previous_env, previous_alloc, eips=None)","text":"

    Generate common block data for both make_fixture and make_hive_fixture.

    Source code in src/ethereum_test_specs/blockchain.py
    def generate_block_data(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    block: Block,\n    previous_env: Environment,\n    previous_alloc: Alloc,\n    eips: Optional[List[int]] = None,\n) -> Tuple[FixtureHeader, List[Transaction], Requests | None, Alloc, Environment]:\n    \"\"\"\n    Generate common block data for both make_fixture and make_hive_fixture.\n    \"\"\"\n    if block.rlp and block.exception is not None:\n        raise Exception(\n            \"test correctness: post-state cannot be verified if the \"\n            + \"block's rlp is supplied and the block is not supposed \"\n            + \"to produce an exception\"\n        )\n\n    env = block.set_environment(previous_env)\n    env = env.set_fork_requirements(fork)\n\n    txs = [tx.with_signature_and_sender() for tx in block.txs]\n\n    if failing_tx_count := len([tx for tx in txs if tx.error]) > 0:\n        if failing_tx_count > 1:\n            raise Exception(\n                \"test correctness: only one transaction can produce an exception in a block\"\n            )\n        if not txs[-1].error:\n            raise Exception(\n                \"test correctness: the transaction that produces an exception \"\n                + \"must be the last transaction in the block\"\n            )\n\n    transition_tool_output = t8n.evaluate(\n        alloc=previous_alloc,\n        txs=txs,\n        env=env,\n        fork=fork,\n        chain_id=self.chain_id,\n        reward=fork.get_reward(env.number, env.timestamp),\n        eips=eips,\n        debug_output_path=self.get_next_transition_tool_output_path(),\n    )\n\n    try:\n        rejected_txs = verify_transactions(txs, transition_tool_output.result)\n        verify_result(transition_tool_output.result, env)\n    except Exception as e:\n        print_traces(t8n.get_traces())\n        pprint(transition_tool_output.result)\n        pprint(previous_alloc)\n        pprint(transition_tool_output.alloc)\n        raise e\n\n    if len(rejected_txs) > 0 and block.exception is None:\n        print_traces(t8n.get_traces())\n        raise Exception(\n            \"one or more transactions in `BlockchainTest` are \"\n            + \"intrinsically invalid, but the block was not expected \"\n            + \"to be invalid. Please verify whether the transaction \"\n            + \"was indeed expected to fail and add the proper \"\n            + \"`block.exception`\"\n        )\n\n    # One special case of the invalid transactions is the blob gas used, since this value\n    # is not included in the transition tool result, but it is included in the block header,\n    # and some clients check it before executing the block by simply counting the type-3 txs,\n    # we need to set the correct value by default.\n    blob_gas_used: int | None = None\n    if (blob_gas_per_blob := fork.blob_gas_per_blob(env.number, env.timestamp)) > 0:\n        blob_gas_used = blob_gas_per_blob * count_blobs(txs)\n\n    header = FixtureHeader(\n        **(\n            transition_tool_output.result.model_dump(\n                exclude_none=True, exclude={\"blob_gas_used\", \"transactions_trie\"}\n            )\n            | env.model_dump(exclude_none=True, exclude={\"blob_gas_used\"})\n        ),\n        blob_gas_used=blob_gas_used,\n        transactions_trie=Transaction.list_root(txs),\n        extra_data=block.extra_data if block.extra_data is not None else b\"\",\n        fork=fork,\n    )\n\n    if block.header_verify is not None:\n        # Verify the header after transition tool processing.\n        block.header_verify.verify(header)\n\n    if block.rlp_modifier is not None:\n        # Modify any parameter specified in the `rlp_modifier` after\n        # transition tool processing.\n        header = block.rlp_modifier.apply(header)\n\n    requests = None\n    if fork.header_requests_required(header.number, header.timestamp):\n        requests_list: List[DepositRequest | WithdrawalRequest | ConsolidationRequest] = []\n        if transition_tool_output.result.deposit_requests is not None:\n            requests_list += transition_tool_output.result.deposit_requests\n        if transition_tool_output.result.withdrawal_requests is not None:\n            requests_list += transition_tool_output.result.withdrawal_requests\n        if transition_tool_output.result.consolidation_requests is not None:\n            requests_list += transition_tool_output.result.consolidation_requests\n        requests = Requests(root=requests_list)\n\n    if requests is not None and requests.trie_root != header.requests_root:\n        raise Exception(\n            f\"Requests root in header does not match the requests root in the transition tool \"\n            \"output: \"\n            f\"{header.requests_root} != {requests.trie_root}\"\n        )\n\n    if block.requests is not None:\n        requests = Requests(root=block.requests)\n        header.requests_root = requests.trie_root\n\n    return (\n        header,\n        txs,\n        requests,\n        transition_tool_output.alloc,\n        env,\n    )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BlockchainTest.network_info","title":"network_info(fork, eips=None)","text":"

    Returns fixture network information for the fork & EIP/s.

    Source code in src/ethereum_test_specs/blockchain.py
    def network_info(self, fork: Fork, eips: Optional[List[int]] = None):\n    \"\"\"\n    Returns fixture network information for the fork & EIP/s.\n    \"\"\"\n    return (\n        \"+\".join([fork.blockchain_test_network_name()] + [str(eip) for eip in eips])\n        if eips\n        else fork.blockchain_test_network_name()\n    )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BlockchainTest.verify_post_state","title":"verify_post_state(t8n, alloc)","text":"

    Verifies the post alloc after all block/s or payload/s are generated.

    Source code in src/ethereum_test_specs/blockchain.py
    def verify_post_state(self, t8n, alloc: Alloc):\n    \"\"\"\n    Verifies the post alloc after all block/s or payload/s are generated.\n    \"\"\"\n    try:\n        self.post.verify_post_alloc(alloc)\n    except Exception as e:\n        print_traces(t8n.get_traces())\n        raise e\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BlockchainTest.make_fixture","title":"make_fixture(t8n, fork, eips=None)","text":"

    Create a fixture from the blockchain test definition.

    Source code in src/ethereum_test_specs/blockchain.py
    def make_fixture(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    eips: Optional[List[int]] = None,\n) -> Fixture:\n    \"\"\"\n    Create a fixture from the blockchain test definition.\n    \"\"\"\n    fixture_blocks: List[FixtureBlock | InvalidFixtureBlock] = []\n\n    pre, genesis = self.make_genesis(fork)\n\n    alloc = pre\n    env = environment_from_parent_header(genesis.header)\n    head = genesis.header.block_hash\n\n    for block in self.blocks:\n        if block.rlp is None:\n            # This is the most common case, the RLP needs to be constructed\n            # based on the transactions to be included in the block.\n            # Set the environment according to the block to execute.\n            header, txs, requests, new_alloc, new_env = self.generate_block_data(\n                t8n=t8n,\n                fork=fork,\n                block=block,\n                previous_env=env,\n                previous_alloc=alloc,\n                eips=eips,\n            )\n            fixture_block = FixtureBlockBase(\n                header=header,\n                txs=[FixtureTransaction.from_transaction(tx) for tx in txs],\n                ommers=[],\n                withdrawals=[FixtureWithdrawal.from_withdrawal(w) for w in new_env.withdrawals]\n                if new_env.withdrawals is not None\n                else None,\n                deposit_requests=[\n                    FixtureDepositRequest.from_deposit_request(d)\n                    for d in requests.deposit_requests()\n                ]\n                if requests is not None\n                else None,\n                withdrawal_requests=[\n                    FixtureWithdrawalRequest.from_withdrawal_request(w)\n                    for w in requests.withdrawal_requests()\n                ]\n                if requests is not None\n                else None,\n                consolidation_requests=[\n                    FixtureConsolidationRequest.from_consolidation_request(c)\n                    for c in requests.consolidation_requests()\n                ]\n                if requests is not None\n                else None,\n            ).with_rlp(txs=txs, requests=requests)\n            if block.exception is None:\n                fixture_blocks.append(fixture_block)\n                # Update env, alloc and last block hash for the next block.\n                alloc = new_alloc\n                env = apply_new_parent(new_env, header)\n                head = header.block_hash\n            else:\n                fixture_blocks.append(\n                    InvalidFixtureBlock(\n                        rlp=fixture_block.rlp,\n                        expect_exception=block.exception,\n                        rlp_decoded=(\n                            None\n                            if BlockException.RLP_STRUCTURES_ENCODING in block.exception\n                            else fixture_block.without_rlp()\n                        ),\n                    ),\n                )\n        else:\n            assert block.exception is not None, (\n                \"test correctness: if the block's rlp is hard-coded, \"\n                + \"the block is expected to produce an exception\"\n            )\n            fixture_blocks.append(\n                InvalidFixtureBlock(\n                    rlp=block.rlp,\n                    expect_exception=block.exception,\n                ),\n            )\n\n    self.verify_post_state(t8n, alloc)\n    return Fixture(\n        fork=self.network_info(fork, eips),\n        genesis=genesis.header,\n        genesis_rlp=genesis.rlp,\n        blocks=fixture_blocks,\n        last_block_hash=head,\n        pre=pre,\n        post_state=alloc,\n    )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BlockchainTest.make_hive_fixture","title":"make_hive_fixture(t8n, fork, eips=None)","text":"

    Create a hive fixture from the blocktest definition.

    Source code in src/ethereum_test_specs/blockchain.py
    def make_hive_fixture(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    eips: Optional[List[int]] = None,\n) -> EngineFixture:\n    \"\"\"\n    Create a hive fixture from the blocktest definition.\n    \"\"\"\n    fixture_payloads: List[FixtureEngineNewPayload] = []\n\n    pre, genesis = self.make_genesis(fork)\n    alloc = pre\n    env = environment_from_parent_header(genesis.header)\n    head_hash = genesis.header.block_hash\n\n    for block in self.blocks:\n        header, txs, requests, new_alloc, new_env = self.generate_block_data(\n            t8n=t8n, fork=fork, block=block, previous_env=env, previous_alloc=alloc, eips=eips\n        )\n        if block.rlp is None:\n            fixture_payloads.append(\n                FixtureEngineNewPayload.from_fixture_header(\n                    fork=fork,\n                    header=header,\n                    transactions=txs,\n                    withdrawals=new_env.withdrawals,\n                    requests=requests,\n                    validation_error=block.exception,\n                    error_code=block.engine_api_error_code,\n                )\n            )\n            if block.exception is None:\n                alloc = new_alloc\n                env = apply_new_parent(env, header)\n                head_hash = header.block_hash\n    fcu_version = fork.engine_forkchoice_updated_version(header.number, header.timestamp)\n    assert (\n        fcu_version is not None\n    ), \"A hive fixture was requested but no forkchoice update is defined. The framework should\"\n    \" never try to execute this test case.\"\n\n    self.verify_post_state(t8n, alloc)\n\n    sync_payload: Optional[FixtureEngineNewPayload] = None\n    if self.verify_sync:\n        # Test is marked for syncing verification.\n        assert (\n            genesis.header.block_hash != head_hash\n        ), \"Invalid payload tests negative test via sync is not supported yet.\"\n\n        # Most clients require the header to start the sync process, so we create an empty\n        # block on top of the last block of the test to send it as new payload and trigger the\n        # sync process.\n        sync_header, _, requests, _, _ = self.generate_block_data(\n            t8n=t8n,\n            fork=fork,\n            block=Block(),\n            previous_env=env,\n            previous_alloc=alloc,\n            eips=eips,\n        )\n        sync_payload = FixtureEngineNewPayload.from_fixture_header(\n            fork=fork,\n            header=sync_header,\n            transactions=[],\n            withdrawals=[],\n            requests=requests,\n            validation_error=None,\n            error_code=None,\n        )\n\n    return EngineFixture(\n        fork=self.network_info(fork, eips),\n        genesis=genesis.header,\n        payloads=fixture_payloads,\n        fcu_version=fcu_version,\n        pre=pre,\n        post_state=alloc,\n        sync_payload=sync_payload,\n        last_block_hash=head_hash,\n    )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.BlockchainTest.generate","title":"generate(t8n, fork, fixture_format, eips=None)","text":"

    Generate the BlockchainTest fixture.

    Source code in src/ethereum_test_specs/blockchain.py
    def generate(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    fixture_format: FixtureFormats,\n    eips: Optional[List[int]] = None,\n) -> BaseFixture:\n    \"\"\"\n    Generate the BlockchainTest fixture.\n    \"\"\"\n    t8n.reset_traces()\n    if fixture_format == FixtureFormats.BLOCKCHAIN_TEST_ENGINE:\n        return self.make_hive_fixture(t8n, fork, eips)\n    elif fixture_format == FixtureFormats.BLOCKCHAIN_TEST:\n        return self.make_fixture(t8n, fork, eips)\n\n    raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFStateTest","title":"EOFStateTest","text":"

    Bases: EOFTest

    Filler type that tests EOF containers and also generates a state/blockchain test.

    Source code in src/ethereum_test_specs/eof.py
    class EOFStateTest(EOFTest):\n    \"\"\"\n    Filler type that tests EOF containers and also generates a state/blockchain test.\n    \"\"\"\n\n    deploy_tx: bool = False\n    tx_gas_limit: int = 10_000_000\n    tx_data: Bytes = Bytes(b\"\")\n    tx_sender_funding_amount: int = 1_000_000_000_000_000_000_000\n    env: Environment = Field(default_factory=Environment)\n    container_post: Account = Field(default_factory=Account)\n    pre: Alloc | None = None\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = [\n        FixtureFormats.EOF_TEST,\n        FixtureFormats.STATE_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST_ENGINE,\n    ]\n\n    @model_validator(mode=\"before\")\n    @classmethod\n    def check_container_type(cls, data: Any) -> Any:\n        \"\"\"\n        Check if the container exception matches the expected exception.\n        \"\"\"\n        if isinstance(data, dict):\n            container = data.get(\"data\")\n            deploy_tx = data.get(\"deploy_tx\")\n            container_kind = data.get(\"container_kind\")\n            if deploy_tx is None:\n                if (\n                    container is not None\n                    and isinstance(container, Container)\n                    and \"kind\" in container.model_fields_set\n                    and container.kind == ContainerKind.INITCODE\n                ) or (container_kind is not None and container_kind == ContainerKind.INITCODE):\n                    data[\"deploy_tx\"] = True\n        return data\n\n    @classmethod\n    def pytest_parameter_name(cls) -> str:\n        \"\"\"\n        Workaround for pytest parameter name.\n        \"\"\"\n        return \"eof_state_test\"\n\n    def generate_state_test(self) -> StateTest:\n        \"\"\"\n        Generate the StateTest filler.\n        \"\"\"\n        assert self.pre is not None, \"pre must be set to generate a StateTest.\"\n        tx = Transaction(\n            sender=self.pre.fund_eoa(amount=self.tx_sender_funding_amount),\n            gas_limit=self.tx_gas_limit,\n        )\n        post = Alloc()\n        if self.expect_exception is not None:  # Invalid EOF\n            tx.to = None  # Make EIP-7698 create transaction\n            tx.data = Bytes(self.data + self.tx_data)  # by concatenating container and tx data.\n            post[tx.created_contract] = None  # Expect failure.\n        elif self.deploy_tx:\n            tx.to = None  # Make EIP-7698 create transaction\n            tx.data = Bytes(self.data + self.tx_data)  # by concatenating container and tx data.\n            post[tx.created_contract] = self.container_post  # Successful.\n        else:\n            tx.to = self.pre.deploy_contract(code=self.data)\n            tx.data = self.tx_data\n            post[tx.to] = self.container_post\n        return StateTest(\n            pre=self.pre,\n            tx=tx,\n            env=self.env,\n            post=post,\n            t8n_dump_dir=self.t8n_dump_dir,\n        )\n\n    def generate(\n        self,\n        *,\n        t8n: TransitionTool,\n        fork: Fork,\n        eips: Optional[List[int]] = None,\n        fixture_format: FixtureFormats,\n        **_,\n    ) -> BaseFixture:\n        \"\"\"\n        Generate the BlockchainTest fixture.\n        \"\"\"\n        if fixture_format == FixtureFormats.EOF_TEST:\n            return self.make_eof_test_fixture(fork=fork, eips=eips)\n        elif fixture_format in (\n            FixtureFormats.STATE_TEST,\n            FixtureFormats.BLOCKCHAIN_TEST,\n            FixtureFormats.BLOCKCHAIN_TEST_ENGINE,\n        ):\n            return self.generate_state_test().generate(\n                t8n=t8n, fork=fork, fixture_format=fixture_format, eips=eips\n            )\n\n        raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFStateTest.check_container_type","title":"check_container_type(data) classmethod","text":"

    Check if the container exception matches the expected exception.

    Source code in src/ethereum_test_specs/eof.py
    @model_validator(mode=\"before\")\n@classmethod\ndef check_container_type(cls, data: Any) -> Any:\n    \"\"\"\n    Check if the container exception matches the expected exception.\n    \"\"\"\n    if isinstance(data, dict):\n        container = data.get(\"data\")\n        deploy_tx = data.get(\"deploy_tx\")\n        container_kind = data.get(\"container_kind\")\n        if deploy_tx is None:\n            if (\n                container is not None\n                and isinstance(container, Container)\n                and \"kind\" in container.model_fields_set\n                and container.kind == ContainerKind.INITCODE\n            ) or (container_kind is not None and container_kind == ContainerKind.INITCODE):\n                data[\"deploy_tx\"] = True\n    return data\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFStateTest.pytest_parameter_name","title":"pytest_parameter_name() classmethod","text":"

    Workaround for pytest parameter name.

    Source code in src/ethereum_test_specs/eof.py
    @classmethod\ndef pytest_parameter_name(cls) -> str:\n    \"\"\"\n    Workaround for pytest parameter name.\n    \"\"\"\n    return \"eof_state_test\"\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFStateTest.generate_state_test","title":"generate_state_test()","text":"

    Generate the StateTest filler.

    Source code in src/ethereum_test_specs/eof.py
    def generate_state_test(self) -> StateTest:\n    \"\"\"\n    Generate the StateTest filler.\n    \"\"\"\n    assert self.pre is not None, \"pre must be set to generate a StateTest.\"\n    tx = Transaction(\n        sender=self.pre.fund_eoa(amount=self.tx_sender_funding_amount),\n        gas_limit=self.tx_gas_limit,\n    )\n    post = Alloc()\n    if self.expect_exception is not None:  # Invalid EOF\n        tx.to = None  # Make EIP-7698 create transaction\n        tx.data = Bytes(self.data + self.tx_data)  # by concatenating container and tx data.\n        post[tx.created_contract] = None  # Expect failure.\n    elif self.deploy_tx:\n        tx.to = None  # Make EIP-7698 create transaction\n        tx.data = Bytes(self.data + self.tx_data)  # by concatenating container and tx data.\n        post[tx.created_contract] = self.container_post  # Successful.\n    else:\n        tx.to = self.pre.deploy_contract(code=self.data)\n        tx.data = self.tx_data\n        post[tx.to] = self.container_post\n    return StateTest(\n        pre=self.pre,\n        tx=tx,\n        env=self.env,\n        post=post,\n        t8n_dump_dir=self.t8n_dump_dir,\n    )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFStateTest.generate","title":"generate(*, t8n, fork, eips=None, fixture_format, **_)","text":"

    Generate the BlockchainTest fixture.

    Source code in src/ethereum_test_specs/eof.py
    def generate(\n    self,\n    *,\n    t8n: TransitionTool,\n    fork: Fork,\n    eips: Optional[List[int]] = None,\n    fixture_format: FixtureFormats,\n    **_,\n) -> BaseFixture:\n    \"\"\"\n    Generate the BlockchainTest fixture.\n    \"\"\"\n    if fixture_format == FixtureFormats.EOF_TEST:\n        return self.make_eof_test_fixture(fork=fork, eips=eips)\n    elif fixture_format in (\n        FixtureFormats.STATE_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST_ENGINE,\n    ):\n        return self.generate_state_test().generate(\n            t8n=t8n, fork=fork, fixture_format=fixture_format, eips=eips\n        )\n\n    raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFTest","title":"EOFTest","text":"

    Bases: BaseTest

    Filler type that tests EOF containers.

    Source code in src/ethereum_test_specs/eof.py
    class EOFTest(BaseTest):\n    \"\"\"\n    Filler type that tests EOF containers.\n    \"\"\"\n\n    data: Bytes\n    expect_exception: EOFExceptionInstanceOrList | None = None\n    container_kind: ContainerKind | None = None\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = [\n        FixtureFormats.EOF_TEST,\n    ]\n\n    @model_validator(mode=\"before\")\n    @classmethod\n    def check_container_exception(cls, data: Any) -> Any:\n        \"\"\"\n        Check if the container exception matches the expected exception.\n        \"\"\"\n        if isinstance(data, dict):\n            container = data.get(\"data\")\n            expect_exception = data.get(\"expect_exception\")\n            container_kind = data.get(\"container_kind\")\n            if container is not None and isinstance(container, Container):\n                if (\n                    \"validity_error\" in container.model_fields_set\n                    and container.validity_error is not None\n                ):\n                    if expect_exception is not None:\n                        assert container.validity_error == expect_exception, (\n                            f\"Container validity error {container.validity_error} \"\n                            f\"does not match expected exception {expect_exception}.\"\n                        )\n                    if expect_exception is None:\n                        data[\"expect_exception\"] = container.validity_error\n                if \"kind\" in container.model_fields_set:\n                    if container_kind is not None:\n                        assert container.kind == container_kind, (\n                            f\"Container kind type {str(container.kind)} \"\n                            f\"does not match test {container_kind}.\"\n                        )\n                    if container.kind != ContainerKind.RUNTIME:\n                        data[\"container_kind\"] = container.kind\n        return data\n\n    @classmethod\n    def pytest_parameter_name(cls) -> str:\n        \"\"\"\n        Workaround for pytest parameter name.\n        \"\"\"\n        return \"eof_test\"\n\n    def make_eof_test_fixture(\n        self,\n        *,\n        fork: Fork,\n        eips: Optional[List[int]],\n    ) -> Fixture:\n        \"\"\"\n        Generate the EOF test fixture.\n        \"\"\"\n        vectors = [\n            Vector(\n                code=self.data,\n                container_kind=self.container_kind,\n                results={\n                    fork.blockchain_test_network_name(): Result(\n                        exception=self.expect_exception,\n                        valid=self.expect_exception is None,\n                    ),\n                },\n            )\n        ]\n        fixture = Fixture(vectors=dict(enumerate(vectors)))\n        try:\n            eof_parse = EOFParse()\n        except FileNotFoundError as e:\n            warnings.warn(f\"{e} Skipping EOF fixture verification. Fixtures may be invalid!\")\n            return fixture\n\n        for _, vector in fixture.vectors.items():\n            expected_result = vector.results.get(fork.blockchain_test_network_name())\n            if expected_result is None:\n                raise Exception(f\"EOF Fixture missing vector result for fork: {fork}\")\n            args = []\n            if vector.container_kind == ContainerKind.INITCODE:\n                args.append(\"--initcode\")\n            result = eof_parse.run(*args, input=str(vector.code))\n            self.verify_result(result, expected_result, vector.code)\n\n        return fixture\n\n    def verify_result(self, result: CompletedProcess, expected_result: Result, code: Bytes):\n        \"\"\"\n        Checks that the reported exception string matches the expected error.\n        \"\"\"\n        parser = EvmoneExceptionMapper()\n        actual_message = result.stdout.strip()\n        actual_exception = parser.message_to_exception(actual_message)\n\n        if expected_result.exception is None:\n            if \"OK\" in actual_message:\n                return\n            else:\n                raise UnexpectedEOFException(\n                    code=code, got=f\"{actual_exception} ({actual_message})\"\n                )\n        else:\n            expected_string = to_pipe_str(expected_result.exception)\n            print(expected_string)\n            print(actual_exception)\n            if \"OK\" in actual_message:\n                raise ExpectedEOFException(\n                    code=code,\n                    expected=f\"{expected_string}\",\n                )\n            elif actual_exception in expected_result.exception:\n                return\n            else:\n                raise EOFExceptionMismatch(\n                    code=code,\n                    expected=f\"{expected_string}\",\n                    got=f\"{actual_exception} ({actual_message})\",\n                )\n\n    def generate(\n        self,\n        *,\n        t8n: TransitionTool,\n        fork: Fork,\n        eips: Optional[List[int]] = None,\n        fixture_format: FixtureFormats,\n        **_,\n    ) -> BaseFixture:\n        \"\"\"\n        Generate the BlockchainTest fixture.\n        \"\"\"\n        if fixture_format == FixtureFormats.EOF_TEST:\n            return self.make_eof_test_fixture(fork=fork, eips=eips)\n\n        raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFTest.check_container_exception","title":"check_container_exception(data) classmethod","text":"

    Check if the container exception matches the expected exception.

    Source code in src/ethereum_test_specs/eof.py
    @model_validator(mode=\"before\")\n@classmethod\ndef check_container_exception(cls, data: Any) -> Any:\n    \"\"\"\n    Check if the container exception matches the expected exception.\n    \"\"\"\n    if isinstance(data, dict):\n        container = data.get(\"data\")\n        expect_exception = data.get(\"expect_exception\")\n        container_kind = data.get(\"container_kind\")\n        if container is not None and isinstance(container, Container):\n            if (\n                \"validity_error\" in container.model_fields_set\n                and container.validity_error is not None\n            ):\n                if expect_exception is not None:\n                    assert container.validity_error == expect_exception, (\n                        f\"Container validity error {container.validity_error} \"\n                        f\"does not match expected exception {expect_exception}.\"\n                    )\n                if expect_exception is None:\n                    data[\"expect_exception\"] = container.validity_error\n            if \"kind\" in container.model_fields_set:\n                if container_kind is not None:\n                    assert container.kind == container_kind, (\n                        f\"Container kind type {str(container.kind)} \"\n                        f\"does not match test {container_kind}.\"\n                    )\n                if container.kind != ContainerKind.RUNTIME:\n                    data[\"container_kind\"] = container.kind\n    return data\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFTest.pytest_parameter_name","title":"pytest_parameter_name() classmethod","text":"

    Workaround for pytest parameter name.

    Source code in src/ethereum_test_specs/eof.py
    @classmethod\ndef pytest_parameter_name(cls) -> str:\n    \"\"\"\n    Workaround for pytest parameter name.\n    \"\"\"\n    return \"eof_test\"\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFTest.make_eof_test_fixture","title":"make_eof_test_fixture(*, fork, eips)","text":"

    Generate the EOF test fixture.

    Source code in src/ethereum_test_specs/eof.py
    def make_eof_test_fixture(\n    self,\n    *,\n    fork: Fork,\n    eips: Optional[List[int]],\n) -> Fixture:\n    \"\"\"\n    Generate the EOF test fixture.\n    \"\"\"\n    vectors = [\n        Vector(\n            code=self.data,\n            container_kind=self.container_kind,\n            results={\n                fork.blockchain_test_network_name(): Result(\n                    exception=self.expect_exception,\n                    valid=self.expect_exception is None,\n                ),\n            },\n        )\n    ]\n    fixture = Fixture(vectors=dict(enumerate(vectors)))\n    try:\n        eof_parse = EOFParse()\n    except FileNotFoundError as e:\n        warnings.warn(f\"{e} Skipping EOF fixture verification. Fixtures may be invalid!\")\n        return fixture\n\n    for _, vector in fixture.vectors.items():\n        expected_result = vector.results.get(fork.blockchain_test_network_name())\n        if expected_result is None:\n            raise Exception(f\"EOF Fixture missing vector result for fork: {fork}\")\n        args = []\n        if vector.container_kind == ContainerKind.INITCODE:\n            args.append(\"--initcode\")\n        result = eof_parse.run(*args, input=str(vector.code))\n        self.verify_result(result, expected_result, vector.code)\n\n    return fixture\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFTest.verify_result","title":"verify_result(result, expected_result, code)","text":"

    Checks that the reported exception string matches the expected error.

    Source code in src/ethereum_test_specs/eof.py
    def verify_result(self, result: CompletedProcess, expected_result: Result, code: Bytes):\n    \"\"\"\n    Checks that the reported exception string matches the expected error.\n    \"\"\"\n    parser = EvmoneExceptionMapper()\n    actual_message = result.stdout.strip()\n    actual_exception = parser.message_to_exception(actual_message)\n\n    if expected_result.exception is None:\n        if \"OK\" in actual_message:\n            return\n        else:\n            raise UnexpectedEOFException(\n                code=code, got=f\"{actual_exception} ({actual_message})\"\n            )\n    else:\n        expected_string = to_pipe_str(expected_result.exception)\n        print(expected_string)\n        print(actual_exception)\n        if \"OK\" in actual_message:\n            raise ExpectedEOFException(\n                code=code,\n                expected=f\"{expected_string}\",\n            )\n        elif actual_exception in expected_result.exception:\n            return\n        else:\n            raise EOFExceptionMismatch(\n                code=code,\n                expected=f\"{expected_string}\",\n                got=f\"{actual_exception} ({actual_message})\",\n            )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.EOFTest.generate","title":"generate(*, t8n, fork, eips=None, fixture_format, **_)","text":"

    Generate the BlockchainTest fixture.

    Source code in src/ethereum_test_specs/eof.py
    def generate(\n    self,\n    *,\n    t8n: TransitionTool,\n    fork: Fork,\n    eips: Optional[List[int]] = None,\n    fixture_format: FixtureFormats,\n    **_,\n) -> BaseFixture:\n    \"\"\"\n    Generate the BlockchainTest fixture.\n    \"\"\"\n    if fixture_format == FixtureFormats.EOF_TEST:\n        return self.make_eof_test_fixture(fork=fork, eips=eips)\n\n    raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.StateTest","title":"StateTest","text":"

    Bases: BaseTest

    Filler type that tests transactions over the period of a single block.

    Source code in src/ethereum_test_specs/state.py
    class StateTest(BaseTest):\n    \"\"\"\n    Filler type that tests transactions over the period of a single block.\n    \"\"\"\n\n    env: Environment\n    pre: Alloc\n    post: Alloc\n    tx: Transaction\n    engine_api_error_code: Optional[EngineAPIError] = None\n    blockchain_test_header_verify: Optional[Header] = None\n    blockchain_test_rlp_modifier: Optional[Header] = None\n    chain_id: int = 1\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = [\n        FixtureFormats.BLOCKCHAIN_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST_ENGINE,\n        FixtureFormats.STATE_TEST,\n    ]\n\n    def _generate_blockchain_genesis_environment(self) -> Environment:\n        \"\"\"\n        Generate the genesis environment for the BlockchainTest formatted test.\n        \"\"\"\n        assert (\n            self.env.number >= 1\n        ), \"genesis block number cannot be negative, set state test env.number to 1\"\n\n        # Modify values to the proper values for the genesis block\n        # TODO: All of this can be moved to a new method in `Fork`\n        updated_values: Dict[str, Any] = {\n            \"withdrawals\": None,\n            \"parent_beacon_block_root\": None,\n            \"number\": self.env.number - 1,\n        }\n        if self.env.excess_blob_gas:\n            # The excess blob gas environment value means the value of the context (block header)\n            # where the transaction is executed. In a blockchain test, we need to indirectly\n            # set the excess blob gas by setting the excess blob gas of the genesis block\n            # to the expected value plus the TARGET_BLOB_GAS_PER_BLOCK, which is the value\n            # that will be subtracted from the excess blob gas when the first block is mined.\n            updated_values[\"excess_blob_gas\"] = (\n                self.env.excess_blob_gas + TARGET_BLOB_GAS_PER_BLOCK\n            )\n\n        return self.env.copy(**updated_values)\n\n    def _generate_blockchain_blocks(self) -> List[Block]:\n        \"\"\"\n        Generate the single block that represents this state test in a BlockchainTest format.\n        \"\"\"\n        return [\n            Block(\n                number=self.env.number,\n                timestamp=self.env.timestamp,\n                fee_recipient=self.env.fee_recipient,\n                difficulty=self.env.difficulty,\n                gas_limit=self.env.gas_limit,\n                extra_data=self.env.extra_data,\n                withdrawals=self.env.withdrawals,\n                parent_beacon_block_root=self.env.parent_beacon_block_root,\n                txs=[self.tx],\n                ommers=[],\n                exception=self.tx.error,\n                header_verify=self.blockchain_test_header_verify,\n                rlp_modifier=self.blockchain_test_rlp_modifier,\n            )\n        ]\n\n    def generate_blockchain_test(self) -> BlockchainTest:\n        \"\"\"\n        Generate a BlockchainTest fixture from this StateTest fixture.\n        \"\"\"\n        return BlockchainTest(\n            genesis_environment=self._generate_blockchain_genesis_environment(),\n            pre=self.pre,\n            post=self.post,\n            blocks=self._generate_blockchain_blocks(),\n            t8n_dump_dir=self.t8n_dump_dir,\n        )\n\n    def make_state_test_fixture(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        eips: Optional[List[int]] = None,\n    ) -> Fixture:\n        \"\"\"\n        Create a fixture from the state test definition.\n        \"\"\"\n        # We can't generate a state test fixture that names a transition fork,\n        # so we get the fork at the block number and timestamp of the state test\n        fork = fork.fork_at(self.env.number, self.env.timestamp)\n\n        env = self.env.set_fork_requirements(fork)\n        tx = self.tx.with_signature_and_sender(keep_secret_key=True)\n        pre_alloc = Alloc.merge(\n            Alloc.model_validate(fork.pre_allocation()),\n            self.pre,\n        )\n        if empty_accounts := pre_alloc.empty_accounts():\n            raise Exception(f\"Empty accounts in pre state: {empty_accounts}\")\n\n        transition_tool_output = t8n.evaluate(\n            alloc=pre_alloc,\n            txs=[tx],\n            env=env,\n            fork=fork,\n            chain_id=self.chain_id,\n            reward=0,  # Reward on state tests is always zero\n            eips=eips,\n            debug_output_path=self.get_next_transition_tool_output_path(),\n        )\n\n        try:\n            self.post.verify_post_alloc(transition_tool_output.alloc)\n        except Exception as e:\n            print_traces(t8n.get_traces())\n            raise e\n\n        return Fixture(\n            env=FixtureEnvironment(**env.model_dump(exclude_none=True)),\n            pre=pre_alloc,\n            post={\n                fork.blockchain_test_network_name(): [\n                    FixtureForkPost(\n                        state_root=transition_tool_output.result.state_root,\n                        logs_hash=transition_tool_output.result.logs_hash,\n                        tx_bytes=tx.rlp,\n                        expect_exception=tx.error,\n                    )\n                ]\n            },\n            transaction=FixtureTransaction.from_transaction(tx),\n        )\n\n    def generate(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        fixture_format: FixtureFormats,\n        eips: Optional[List[int]] = None,\n    ) -> BaseFixture:\n        \"\"\"\n        Generate the BlockchainTest fixture.\n        \"\"\"\n        if fixture_format in BlockchainTest.supported_fixture_formats:\n            return self.generate_blockchain_test().generate(\n                t8n=t8n, fork=fork, fixture_format=fixture_format, eips=eips\n            )\n        elif fixture_format == FixtureFormats.STATE_TEST:\n            return self.make_state_test_fixture(t8n, fork, eips)\n\n        raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.StateTest.generate_blockchain_test","title":"generate_blockchain_test()","text":"

    Generate a BlockchainTest fixture from this StateTest fixture.

    Source code in src/ethereum_test_specs/state.py
    def generate_blockchain_test(self) -> BlockchainTest:\n    \"\"\"\n    Generate a BlockchainTest fixture from this StateTest fixture.\n    \"\"\"\n    return BlockchainTest(\n        genesis_environment=self._generate_blockchain_genesis_environment(),\n        pre=self.pre,\n        post=self.post,\n        blocks=self._generate_blockchain_blocks(),\n        t8n_dump_dir=self.t8n_dump_dir,\n    )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.StateTest.make_state_test_fixture","title":"make_state_test_fixture(t8n, fork, eips=None)","text":"

    Create a fixture from the state test definition.

    Source code in src/ethereum_test_specs/state.py
    def make_state_test_fixture(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    eips: Optional[List[int]] = None,\n) -> Fixture:\n    \"\"\"\n    Create a fixture from the state test definition.\n    \"\"\"\n    # We can't generate a state test fixture that names a transition fork,\n    # so we get the fork at the block number and timestamp of the state test\n    fork = fork.fork_at(self.env.number, self.env.timestamp)\n\n    env = self.env.set_fork_requirements(fork)\n    tx = self.tx.with_signature_and_sender(keep_secret_key=True)\n    pre_alloc = Alloc.merge(\n        Alloc.model_validate(fork.pre_allocation()),\n        self.pre,\n    )\n    if empty_accounts := pre_alloc.empty_accounts():\n        raise Exception(f\"Empty accounts in pre state: {empty_accounts}\")\n\n    transition_tool_output = t8n.evaluate(\n        alloc=pre_alloc,\n        txs=[tx],\n        env=env,\n        fork=fork,\n        chain_id=self.chain_id,\n        reward=0,  # Reward on state tests is always zero\n        eips=eips,\n        debug_output_path=self.get_next_transition_tool_output_path(),\n    )\n\n    try:\n        self.post.verify_post_alloc(transition_tool_output.alloc)\n    except Exception as e:\n        print_traces(t8n.get_traces())\n        raise e\n\n    return Fixture(\n        env=FixtureEnvironment(**env.model_dump(exclude_none=True)),\n        pre=pre_alloc,\n        post={\n            fork.blockchain_test_network_name(): [\n                FixtureForkPost(\n                    state_root=transition_tool_output.result.state_root,\n                    logs_hash=transition_tool_output.result.logs_hash,\n                    tx_bytes=tx.rlp,\n                    expect_exception=tx.error,\n                )\n            ]\n        },\n        transaction=FixtureTransaction.from_transaction(tx),\n    )\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.StateTest.generate","title":"generate(t8n, fork, fixture_format, eips=None)","text":"

    Generate the BlockchainTest fixture.

    Source code in src/ethereum_test_specs/state.py
    def generate(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    fixture_format: FixtureFormats,\n    eips: Optional[List[int]] = None,\n) -> BaseFixture:\n    \"\"\"\n    Generate the BlockchainTest fixture.\n    \"\"\"\n    if fixture_format in BlockchainTest.supported_fixture_formats:\n        return self.generate_blockchain_test().generate(\n            t8n=t8n, fork=fork, fixture_format=fixture_format, eips=eips\n        )\n    elif fixture_format == FixtureFormats.STATE_TEST:\n        return self.make_state_test_fixture(t8n, fork, eips)\n\n    raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_specs/#ethereum_test_specs.StateTestOnly","title":"StateTestOnly","text":"

    Bases: StateTest

    StateTest filler that only generates a state test fixture.

    Source code in src/ethereum_test_specs/state.py
    class StateTestOnly(StateTest):\n    \"\"\"\n    StateTest filler that only generates a state test fixture.\n    \"\"\"\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = [FixtureFormats.STATE_TEST]\n
    "},{"location":"library/ethereum_test_tools/","title":"Ethereum Test Tools Package","text":"

    Module containing tools for generating cross-client Ethereum execution layer tests.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account","title":"Account","text":"

    Bases: CamelModel

    State associated with an address.

    Source code in src/ethereum_test_base_types/composite_types.py
    class Account(CamelModel):\n    \"\"\"\n    State associated with an address.\n    \"\"\"\n\n    nonce: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0)\n    \"\"\"\n    The scalar value equal to a) the number of transactions sent by\n    an Externally Owned Account, b) the amount of contracts created by a\n    contract.\n    \"\"\"\n    balance: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0)\n    \"\"\"\n    The amount of Wei (10<sup>-18</sup> Eth) the account has.\n    \"\"\"\n    code: Bytes = Bytes(b\"\")\n    \"\"\"\n    Bytecode contained by the account.\n    \"\"\"\n    storage: Storage = Field(default_factory=Storage)\n    \"\"\"\n    Storage within a contract.\n    \"\"\"\n\n    NONEXISTENT: ClassVar[None] = None\n    \"\"\"\n    Sentinel object used to specify when an account should not exist in the\n    state.\n    \"\"\"\n\n    @dataclass(kw_only=True)\n    class NonceMismatch(Exception):\n        \"\"\"\n        Test expected a certain nonce value for an account but a different\n        value was found.\n        \"\"\"\n\n        address: Address\n        want: int | None\n        got: int | None\n\n        def __init__(self, address: Address, want: int | None, got: int | None, *args):\n            super().__init__(args)\n            self.address = address\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"unexpected nonce for account {self.address}{label_str}: \"\n                + f\"want {self.want}, got {self.got}\"\n            )\n\n    @dataclass(kw_only=True)\n    class BalanceMismatch(Exception):\n        \"\"\"\n        Test expected a certain balance for an account but a different\n        value was found.\n        \"\"\"\n\n        address: Address\n        want: int | None\n        got: int | None\n\n        def __init__(self, address: Address, want: int | None, got: int | None, *args):\n            super().__init__(args)\n            self.address = address\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"unexpected balance for account {self.address}{label_str}: \"\n                + f\"want {self.want}, got {self.got}\"\n            )\n\n    @dataclass(kw_only=True)\n    class CodeMismatch(Exception):\n        \"\"\"\n        Test expected a certain bytecode for an account but a different\n        one was found.\n        \"\"\"\n\n        address: Address\n        want: bytes | None\n        got: bytes | None\n\n        def __init__(self, address: Address, want: bytes | None, got: bytes | None, *args):\n            super().__init__(args)\n            self.address = address\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"unexpected code for account {self.address}{label_str}: \"\n                + f\"want {self.want}, got {self.got}\"\n            )\n\n    def check_alloc(self: \"Account\", address: Address, account: \"Account\"):\n        \"\"\"\n        Checks the returned alloc against an expected account in post state.\n        Raises exception on failure.\n        \"\"\"\n        if \"nonce\" in self.model_fields_set:\n            if self.nonce != account.nonce:\n                raise Account.NonceMismatch(\n                    address=address,\n                    want=self.nonce,\n                    got=account.nonce,\n                )\n\n        if \"balance\" in self.model_fields_set:\n            if self.balance != account.balance:\n                raise Account.BalanceMismatch(\n                    address=address,\n                    want=self.balance,\n                    got=account.balance,\n                )\n\n        if \"code\" in self.model_fields_set:\n            if self.code != account.code:\n                raise Account.CodeMismatch(\n                    address=address,\n                    want=self.code,\n                    got=account.code,\n                )\n\n        if \"storage\" in self.model_fields_set:\n            self.storage.must_be_equal(address=address, other=account.storage)\n\n    def __bool__(self: \"Account\") -> bool:\n        \"\"\"\n        Returns True on a non-empty account.\n        \"\"\"\n        return any((self.nonce, self.balance, self.code, self.storage))\n\n    @classmethod\n    def with_code(cls: Type, code: BytesConvertible) -> \"Account\":\n        \"\"\"\n        Create account with provided `code` and nonce of `1`.\n        \"\"\"\n        return Account(nonce=HexNumber(1), code=Bytes(code))\n\n    @classmethod\n    def merge(\n        cls: Type, account_1: \"Dict | Account | None\", account_2: \"Dict | Account | None\"\n    ) -> \"Account\":\n        \"\"\"\n        Create a merged account from two sources.\n        \"\"\"\n\n        def to_kwargs_dict(account: \"Dict | Account | None\") -> Dict:\n            if account is None:\n                return {}\n            if isinstance(account, dict):\n                return account\n            elif isinstance(account, cls):\n                return account.model_dump(exclude_unset=True)\n            raise TypeError(f\"Unexpected type for account merge: {type(account)}\")\n\n        kwargs = to_kwargs_dict(account_1)\n        kwargs.update(to_kwargs_dict(account_2))\n\n        return cls(**kwargs)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.nonce","title":"nonce: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0) class-attribute instance-attribute","text":"

    The scalar value equal to a) the number of transactions sent by an Externally Owned Account, b) the amount of contracts created by a contract.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.balance","title":"balance: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0) class-attribute instance-attribute","text":"

    The amount of Wei (10-18 Eth) the account has.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.code","title":"code: Bytes = Bytes(b'') class-attribute instance-attribute","text":"

    Bytecode contained by the account.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.storage","title":"storage: Storage = Field(default_factory=Storage) class-attribute instance-attribute","text":"

    Storage within a contract.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.NONEXISTENT","title":"NONEXISTENT: None = None class-attribute","text":"

    Sentinel object used to specify when an account should not exist in the state.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.NonceMismatch","title":"NonceMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain nonce value for an account but a different value was found.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass NonceMismatch(Exception):\n    \"\"\"\n    Test expected a certain nonce value for an account but a different\n    value was found.\n    \"\"\"\n\n    address: Address\n    want: int | None\n    got: int | None\n\n    def __init__(self, address: Address, want: int | None, got: int | None, *args):\n        super().__init__(args)\n        self.address = address\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"unexpected nonce for account {self.address}{label_str}: \"\n            + f\"want {self.want}, got {self.got}\"\n        )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.NonceMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"unexpected nonce for account {self.address}{label_str}: \"\n        + f\"want {self.want}, got {self.got}\"\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.BalanceMismatch","title":"BalanceMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain balance for an account but a different value was found.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass BalanceMismatch(Exception):\n    \"\"\"\n    Test expected a certain balance for an account but a different\n    value was found.\n    \"\"\"\n\n    address: Address\n    want: int | None\n    got: int | None\n\n    def __init__(self, address: Address, want: int | None, got: int | None, *args):\n        super().__init__(args)\n        self.address = address\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"unexpected balance for account {self.address}{label_str}: \"\n            + f\"want {self.want}, got {self.got}\"\n        )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.BalanceMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"unexpected balance for account {self.address}{label_str}: \"\n        + f\"want {self.want}, got {self.got}\"\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.CodeMismatch","title":"CodeMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain bytecode for an account but a different one was found.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass CodeMismatch(Exception):\n    \"\"\"\n    Test expected a certain bytecode for an account but a different\n    one was found.\n    \"\"\"\n\n    address: Address\n    want: bytes | None\n    got: bytes | None\n\n    def __init__(self, address: Address, want: bytes | None, got: bytes | None, *args):\n        super().__init__(args)\n        self.address = address\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"unexpected code for account {self.address}{label_str}: \"\n            + f\"want {self.want}, got {self.got}\"\n        )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.CodeMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"unexpected code for account {self.address}{label_str}: \"\n        + f\"want {self.want}, got {self.got}\"\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.check_alloc","title":"check_alloc(address, account)","text":"

    Checks the returned alloc against an expected account in post state. Raises exception on failure.

    Source code in src/ethereum_test_base_types/composite_types.py
    def check_alloc(self: \"Account\", address: Address, account: \"Account\"):\n    \"\"\"\n    Checks the returned alloc against an expected account in post state.\n    Raises exception on failure.\n    \"\"\"\n    if \"nonce\" in self.model_fields_set:\n        if self.nonce != account.nonce:\n            raise Account.NonceMismatch(\n                address=address,\n                want=self.nonce,\n                got=account.nonce,\n            )\n\n    if \"balance\" in self.model_fields_set:\n        if self.balance != account.balance:\n            raise Account.BalanceMismatch(\n                address=address,\n                want=self.balance,\n                got=account.balance,\n            )\n\n    if \"code\" in self.model_fields_set:\n        if self.code != account.code:\n            raise Account.CodeMismatch(\n                address=address,\n                want=self.code,\n                got=account.code,\n            )\n\n    if \"storage\" in self.model_fields_set:\n        self.storage.must_be_equal(address=address, other=account.storage)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.__bool__","title":"__bool__()","text":"

    Returns True on a non-empty account.

    Source code in src/ethereum_test_base_types/composite_types.py
    def __bool__(self: \"Account\") -> bool:\n    \"\"\"\n    Returns True on a non-empty account.\n    \"\"\"\n    return any((self.nonce, self.balance, self.code, self.storage))\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.with_code","title":"with_code(code) classmethod","text":"

    Create account with provided code and nonce of 1.

    Source code in src/ethereum_test_base_types/composite_types.py
    @classmethod\ndef with_code(cls: Type, code: BytesConvertible) -> \"Account\":\n    \"\"\"\n    Create account with provided `code` and nonce of `1`.\n    \"\"\"\n    return Account(nonce=HexNumber(1), code=Bytes(code))\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Account.merge","title":"merge(account_1, account_2) classmethod","text":"

    Create a merged account from two sources.

    Source code in src/ethereum_test_base_types/composite_types.py
    @classmethod\ndef merge(\n    cls: Type, account_1: \"Dict | Account | None\", account_2: \"Dict | Account | None\"\n) -> \"Account\":\n    \"\"\"\n    Create a merged account from two sources.\n    \"\"\"\n\n    def to_kwargs_dict(account: \"Dict | Account | None\") -> Dict:\n        if account is None:\n            return {}\n        if isinstance(account, dict):\n            return account\n        elif isinstance(account, cls):\n            return account.model_dump(exclude_unset=True)\n        raise TypeError(f\"Unexpected type for account merge: {type(account)}\")\n\n    kwargs = to_kwargs_dict(account_1)\n    kwargs.update(to_kwargs_dict(account_2))\n\n    return cls(**kwargs)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Address","title":"Address","text":"

    Bases: FixedSizeBytes[20]

    Class that helps represent Ethereum addresses in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class Address(FixedSizeBytes[20]):  # type: ignore\n    \"\"\"\n    Class that helps represent Ethereum addresses in tests.\n    \"\"\"\n\n    label: str | None = None\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Bytes","title":"Bytes","text":"

    Bases: bytes, ToStringSchema

    Class that helps represent bytes of variable length in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class Bytes(bytes, ToStringSchema):\n    \"\"\"\n    Class that helps represent bytes of variable length in tests.\n    \"\"\"\n\n    def __new__(cls, input: BytesConvertible):\n        \"\"\"\n        Creates a new Bytes object.\n        \"\"\"\n        if type(input) is cls:\n            return input\n        return super(Bytes, cls).__new__(cls, to_bytes(input))\n\n    def __hash__(self) -> int:\n        \"\"\"\n        Returns the hash of the bytes.\n        \"\"\"\n        return super(Bytes, self).__hash__()\n\n    def __str__(self) -> str:\n        \"\"\"\n        Returns the hexadecimal representation of the bytes.\n        \"\"\"\n        return self.hex()\n\n    def hex(self, *args, **kwargs) -> str:\n        \"\"\"\n        Returns the hexadecimal representation of the bytes.\n        \"\"\"\n        return \"0x\" + super().hex(*args, **kwargs)\n\n    @classmethod\n    def or_none(cls, input: \"Bytes | BytesConvertible | None\") -> \"Bytes | None\":\n        \"\"\"\n        Converts the input to a Bytes while accepting None.\n        \"\"\"\n        if input is None:\n            return input\n        return cls(input)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Bytes.__new__","title":"__new__(input)","text":"

    Creates a new Bytes object.

    Source code in src/ethereum_test_base_types/base_types.py
    def __new__(cls, input: BytesConvertible):\n    \"\"\"\n    Creates a new Bytes object.\n    \"\"\"\n    if type(input) is cls:\n        return input\n    return super(Bytes, cls).__new__(cls, to_bytes(input))\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Bytes.__hash__","title":"__hash__()","text":"

    Returns the hash of the bytes.

    Source code in src/ethereum_test_base_types/base_types.py
    def __hash__(self) -> int:\n    \"\"\"\n    Returns the hash of the bytes.\n    \"\"\"\n    return super(Bytes, self).__hash__()\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Bytes.__str__","title":"__str__()","text":"

    Returns the hexadecimal representation of the bytes.

    Source code in src/ethereum_test_base_types/base_types.py
    def __str__(self) -> str:\n    \"\"\"\n    Returns the hexadecimal representation of the bytes.\n    \"\"\"\n    return self.hex()\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Bytes.hex","title":"hex(*args, **kwargs)","text":"

    Returns the hexadecimal representation of the bytes.

    Source code in src/ethereum_test_base_types/base_types.py
    def hex(self, *args, **kwargs) -> str:\n    \"\"\"\n    Returns the hexadecimal representation of the bytes.\n    \"\"\"\n    return \"0x\" + super().hex(*args, **kwargs)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Bytes.or_none","title":"or_none(input) classmethod","text":"

    Converts the input to a Bytes while accepting None.

    Source code in src/ethereum_test_base_types/base_types.py
    @classmethod\ndef or_none(cls, input: \"Bytes | BytesConvertible | None\") -> \"Bytes | None\":\n    \"\"\"\n    Converts the input to a Bytes while accepting None.\n    \"\"\"\n    if input is None:\n        return input\n    return cls(input)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Hash","title":"Hash","text":"

    Bases: FixedSizeBytes[32]

    Class that helps represent hashes in tests.

    Source code in src/ethereum_test_base_types/base_types.py
    class Hash(FixedSizeBytes[32]):  # type: ignore\n    \"\"\"\n    Class that helps represent hashes in tests.\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.ReferenceSpec","title":"ReferenceSpec","text":"

    Reference Specification Description Abstract Class.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    class ReferenceSpec:\n    \"\"\"\n    Reference Specification Description Abstract Class.\n    \"\"\"\n\n    @abstractmethod\n    def name(self) -> str:\n        \"\"\"\n        Returns the name of the spec.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def has_known_version(self) -> bool:\n        \"\"\"\n        Returns true if the reference spec object is hard-coded with a latest\n        known version.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def known_version(self) -> str:\n        \"\"\"\n        Returns the latest known version in the reference.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def api_url(self) -> str:\n        \"\"\"\n        Returns the URL required to poll the version from an API, if needed.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def latest_version(self) -> str:\n        \"\"\"\n        Returns a digest that points to the latest version of the spec.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def is_outdated(self) -> bool:\n        \"\"\"\n        Checks whether the reference specification has been updated since the\n        test was last updated.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def write_info(self, info: Dict[str, str]):\n        \"\"\"\n        Writes info about the reference specification used into the output\n        fixture.\n        \"\"\"\n        pass\n\n    @staticmethod\n    @abstractmethod\n    def parseable_from_module(module_dict: Dict[str, Any]) -> bool:\n        \"\"\"\n        Checks whether the module's dict contains required reference spec\n        information.\n        \"\"\"\n        pass\n\n    @staticmethod\n    @abstractmethod\n    def parse_from_module(module_dict: Dict[str, Any]) -> \"ReferenceSpec\":\n        \"\"\"\n        Parses the module's dict into a reference spec.\n        \"\"\"\n        pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.ReferenceSpec.name","title":"name() abstractmethod","text":"

    Returns the name of the spec.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef name(self) -> str:\n    \"\"\"\n    Returns the name of the spec.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.ReferenceSpec.has_known_version","title":"has_known_version() abstractmethod","text":"

    Returns true if the reference spec object is hard-coded with a latest known version.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef has_known_version(self) -> bool:\n    \"\"\"\n    Returns true if the reference spec object is hard-coded with a latest\n    known version.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.ReferenceSpec.known_version","title":"known_version() abstractmethod","text":"

    Returns the latest known version in the reference.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef known_version(self) -> str:\n    \"\"\"\n    Returns the latest known version in the reference.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.ReferenceSpec.api_url","title":"api_url() abstractmethod","text":"

    Returns the URL required to poll the version from an API, if needed.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef api_url(self) -> str:\n    \"\"\"\n    Returns the URL required to poll the version from an API, if needed.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.ReferenceSpec.latest_version","title":"latest_version() abstractmethod","text":"

    Returns a digest that points to the latest version of the spec.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef latest_version(self) -> str:\n    \"\"\"\n    Returns a digest that points to the latest version of the spec.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.ReferenceSpec.is_outdated","title":"is_outdated() abstractmethod","text":"

    Checks whether the reference specification has been updated since the test was last updated.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef is_outdated(self) -> bool:\n    \"\"\"\n    Checks whether the reference specification has been updated since the\n    test was last updated.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.ReferenceSpec.write_info","title":"write_info(info) abstractmethod","text":"

    Writes info about the reference specification used into the output fixture.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @abstractmethod\ndef write_info(self, info: Dict[str, str]):\n    \"\"\"\n    Writes info about the reference specification used into the output\n    fixture.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.ReferenceSpec.parseable_from_module","title":"parseable_from_module(module_dict) abstractmethod staticmethod","text":"

    Checks whether the module's dict contains required reference spec information.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @staticmethod\n@abstractmethod\ndef parseable_from_module(module_dict: Dict[str, Any]) -> bool:\n    \"\"\"\n    Checks whether the module's dict contains required reference spec\n    information.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.ReferenceSpec.parse_from_module","title":"parse_from_module(module_dict) abstractmethod staticmethod","text":"

    Parses the module's dict into a reference spec.

    Source code in src/ethereum_test_base_types/reference_spec/reference_spec.py
    @staticmethod\n@abstractmethod\ndef parse_from_module(module_dict: Dict[str, Any]) -> \"ReferenceSpec\":\n    \"\"\"\n    Parses the module's dict into a reference spec.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException","title":"BlockException","text":"

    Bases: ExceptionBase

    Exception raised when a block is invalid, but not due to a transaction.

    E.g. all transactions in the block are valid, and can be applied to the state, but the block header contains an invalid field.

    Source code in src/ethereum_test_exceptions/exceptions.py
    @unique\nclass BlockException(ExceptionBase):\n    \"\"\"\n    Exception raised when a block is invalid, but not due to a transaction.\n\n    E.g. all transactions in the block are valid, and can be applied to the state, but the\n    block header contains an invalid field.\n    \"\"\"\n\n    TOO_MANY_UNCLES = auto()\n    \"\"\"\n    Block declares too many uncles over the allowed limit.\n    \"\"\"\n    UNCLE_IN_CHAIN = auto()\n    \"\"\"\n    Block declares uncle header that is already imported into chain.\n    \"\"\"\n    UNCLE_IS_ANCESTOR = auto()\n    \"\"\"\n    Block declares uncle header that is directly a parent of this block.\n    \"\"\"\n    UNCLE_IS_BROTHER = auto()\n    \"\"\"\n    Block declares two similar uncle headers.\n    \"\"\"\n    UNCLE_PARENT_INCORRECT = auto()\n    \"\"\"\n    Block declares uncle header that is an outdated block to be an uncle.\n    \"\"\"\n    EXTRA_DATA_TOO_BIG = auto()\n    \"\"\"\n    Block header's extra data >32 bytes.\n    \"\"\"\n    EXTRA_DATA_INVALID_DAO = auto()\n    \"\"\"\n    Block header's extra data after dao fork must be a fixed pre defined hash.\n    \"\"\"\n    UNKNOWN_PARENT = auto()\n    \"\"\"\n    Block header's parent hash does not correspond to any of existing blocks on chain.\n    \"\"\"\n    UNCLE_UNKNOWN_PARENT = auto()\n    \"\"\"\n    Uncle header's parent hash does not correspond to any of existing blocks on chain.\n    \"\"\"\n    UNKNOWN_PARENT_ZERO = auto()\n    \"\"\"\n    Block header's parent hash is zero hash.\n    \"\"\"\n    GASLIMIT_TOO_BIG = auto()\n    \"\"\"\n    Block header's gas limit > 0x7fffffffffffffff.\n    \"\"\"\n    INVALID_BLOCK_NUMBER = auto()\n    \"\"\"\n    Block header's number != parent header's number + 1.\n    \"\"\"\n    INVALID_BLOCK_TIMESTAMP_OLDER_THAN_PARENT = auto()\n    \"\"\"\n    Block header's timestamp <= parent header's timestamp.\n    \"\"\"\n    INVALID_DIFFICULTY = auto()\n    \"\"\"\n    Block header's difficulty does not match the difficulty formula calculated from previous block.\n    \"\"\"\n    INVALID_LOG_BLOOM = auto()\n    \"\"\"\n    Block header's logs bloom hash does not match the actually computed log bloom.\n    \"\"\"\n    INVALID_STATE_ROOT = auto()\n    \"\"\"\n    Block header's state root hash does not match the actually computed hash of the state.\n    \"\"\"\n    INVALID_RECEIPTS_ROOT = auto()\n    \"\"\"\n    Block header's receipts root hash does not match the actually computed hash of receipts.\n    \"\"\"\n    INVALID_TRANSACTIONS_ROOT = auto()\n    \"\"\"\n    Block header's transactions root hash does not match the actually computed hash of tx tree.\n    \"\"\"\n    INVALID_UNCLES_HASH = auto()\n    \"\"\"\n    Block header's uncle hash does not match the actually computed hash of block's uncles.\n    \"\"\"\n    GAS_USED_OVERFLOW = auto()\n    \"\"\"\n    Block transactions consume more gas than block header allow.\n    \"\"\"\n    INVALID_GASLIMIT = auto()\n    \"\"\"\n    Block header's gas limit does not match the gas limit formula calculated from previous block.\n    \"\"\"\n    INVALID_BASEFEE_PER_GAS = auto()\n    \"\"\"\n    Block header's base_fee_per_gas field is calculated incorrect.\n    \"\"\"\n    INVALID_GAS_USED = auto()\n    \"\"\"\n    Block header's actual gas used does not match the provided header's value\n    \"\"\"\n    INVALID_WITHDRAWALS_ROOT = auto()\n    \"\"\"\n    Block header's withdrawals root does not match calculated withdrawals root.\n    \"\"\"\n    INCORRECT_BLOCK_FORMAT = auto()\n    \"\"\"\n    Block's format is incorrect, contains invalid fields, is missing fields, or contains fields of\n    a fork that is not active yet.\n    \"\"\"\n    BLOB_GAS_USED_ABOVE_LIMIT = auto()\n    \"\"\"\n    Block's blob gas used in header is above the limit.\n    \"\"\"\n    INCORRECT_BLOB_GAS_USED = auto()\n    \"\"\"\n    Block's blob gas used in header is incorrect.\n    \"\"\"\n    INCORRECT_EXCESS_BLOB_GAS = auto()\n    \"\"\"\n    Block's excess blob gas in header is incorrect.\n    \"\"\"\n    RLP_STRUCTURES_ENCODING = auto()\n    \"\"\"\n    Block's rlp encoding is valid but ethereum structures in it are invalid.\n    \"\"\"\n    RLP_WITHDRAWALS_NOT_READ = auto()\n    \"\"\"\n    Block's rlp encoding is missing withdrawals.\n    \"\"\"\n    RLP_INVALID_FIELD_OVERFLOW_64 = auto()\n    \"\"\"\n    One of block's fields rlp is overflow 2**64 value.\n    \"\"\"\n    RLP_INVALID_ADDRESS = auto()\n    \"\"\"\n    Block withdrawals address is rlp of invalid address != 20 bytes.\n    \"\"\"\n    INVALID_REQUESTS = auto()\n    \"\"\"\n    Block's requests are invalid.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LEGACY = auto()\n    \"\"\"\n    Legacy block import is impossible in this chain configuration.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LEGACY_WRONG_PARENT = auto()\n    \"\"\"\n    Legacy block import is impossible, trying to import on top of a block that is not legacy.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LONDON_WRONG_PARENT = auto()\n    \"\"\"\n    Trying to import london (basefee) block on top of block that is not 1559.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_PARIS_WRONG_POW = auto()\n    \"\"\"\n    Trying to import paris(merge) block with PoW enabled.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_PARIS_WRONG_POS = auto()\n    \"\"\"\n    Trying to import paris(merge) block with PoS enabled before TTD is reached.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_LONDON_OVER_PARIS = auto()\n    \"\"\"\n    Trying to import london looking block over paris network (POS).\n    \"\"\"\n    IMPORT_IMPOSSIBLE_PARIS_OVER_SHANGHAI = auto()\n    \"\"\"\n    Trying to import paris block on top of shanghai block.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_SHANGHAI = auto()\n    \"\"\"\n    Shanghai block import is impossible in this chain configuration.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_UNCLES_OVER_PARIS = auto()\n    \"\"\"\n    Trying to import a block after paris fork that has not empty uncles hash.\n    \"\"\"\n    IMPORT_IMPOSSIBLE_DIFFICULTY_OVER_PARIS = auto()\n    \"\"\"\n    Trying to import a block after paris fork that has difficulty != 0.\n    \"\"\"\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.TOO_MANY_UNCLES","title":"TOO_MANY_UNCLES = auto() class-attribute instance-attribute","text":"

    Block declares too many uncles over the allowed limit.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.UNCLE_IN_CHAIN","title":"UNCLE_IN_CHAIN = auto() class-attribute instance-attribute","text":"

    Block declares uncle header that is already imported into chain.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.UNCLE_IS_ANCESTOR","title":"UNCLE_IS_ANCESTOR = auto() class-attribute instance-attribute","text":"

    Block declares uncle header that is directly a parent of this block.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.UNCLE_IS_BROTHER","title":"UNCLE_IS_BROTHER = auto() class-attribute instance-attribute","text":"

    Block declares two similar uncle headers.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.UNCLE_PARENT_INCORRECT","title":"UNCLE_PARENT_INCORRECT = auto() class-attribute instance-attribute","text":"

    Block declares uncle header that is an outdated block to be an uncle.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.EXTRA_DATA_TOO_BIG","title":"EXTRA_DATA_TOO_BIG = auto() class-attribute instance-attribute","text":"

    Block header's extra data >32 bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.EXTRA_DATA_INVALID_DAO","title":"EXTRA_DATA_INVALID_DAO = auto() class-attribute instance-attribute","text":"

    Block header's extra data after dao fork must be a fixed pre defined hash.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.UNKNOWN_PARENT","title":"UNKNOWN_PARENT = auto() class-attribute instance-attribute","text":"

    Block header's parent hash does not correspond to any of existing blocks on chain.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.UNCLE_UNKNOWN_PARENT","title":"UNCLE_UNKNOWN_PARENT = auto() class-attribute instance-attribute","text":"

    Uncle header's parent hash does not correspond to any of existing blocks on chain.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.UNKNOWN_PARENT_ZERO","title":"UNKNOWN_PARENT_ZERO = auto() class-attribute instance-attribute","text":"

    Block header's parent hash is zero hash.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.GASLIMIT_TOO_BIG","title":"GASLIMIT_TOO_BIG = auto() class-attribute instance-attribute","text":"

    Block header's gas limit > 0x7fffffffffffffff.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_BLOCK_NUMBER","title":"INVALID_BLOCK_NUMBER = auto() class-attribute instance-attribute","text":"

    Block header's number != parent header's number + 1.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_BLOCK_TIMESTAMP_OLDER_THAN_PARENT","title":"INVALID_BLOCK_TIMESTAMP_OLDER_THAN_PARENT = auto() class-attribute instance-attribute","text":"

    Block header's timestamp <= parent header's timestamp.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_DIFFICULTY","title":"INVALID_DIFFICULTY = auto() class-attribute instance-attribute","text":"

    Block header's difficulty does not match the difficulty formula calculated from previous block.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_LOG_BLOOM","title":"INVALID_LOG_BLOOM = auto() class-attribute instance-attribute","text":"

    Block header's logs bloom hash does not match the actually computed log bloom.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_STATE_ROOT","title":"INVALID_STATE_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's state root hash does not match the actually computed hash of the state.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_RECEIPTS_ROOT","title":"INVALID_RECEIPTS_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's receipts root hash does not match the actually computed hash of receipts.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_TRANSACTIONS_ROOT","title":"INVALID_TRANSACTIONS_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's transactions root hash does not match the actually computed hash of tx tree.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_UNCLES_HASH","title":"INVALID_UNCLES_HASH = auto() class-attribute instance-attribute","text":"

    Block header's uncle hash does not match the actually computed hash of block's uncles.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.GAS_USED_OVERFLOW","title":"GAS_USED_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Block transactions consume more gas than block header allow.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_GASLIMIT","title":"INVALID_GASLIMIT = auto() class-attribute instance-attribute","text":"

    Block header's gas limit does not match the gas limit formula calculated from previous block.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_BASEFEE_PER_GAS","title":"INVALID_BASEFEE_PER_GAS = auto() class-attribute instance-attribute","text":"

    Block header's base_fee_per_gas field is calculated incorrect.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_GAS_USED","title":"INVALID_GAS_USED = auto() class-attribute instance-attribute","text":"

    Block header's actual gas used does not match the provided header's value

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_WITHDRAWALS_ROOT","title":"INVALID_WITHDRAWALS_ROOT = auto() class-attribute instance-attribute","text":"

    Block header's withdrawals root does not match calculated withdrawals root.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INCORRECT_BLOCK_FORMAT","title":"INCORRECT_BLOCK_FORMAT = auto() class-attribute instance-attribute","text":"

    Block's format is incorrect, contains invalid fields, is missing fields, or contains fields of a fork that is not active yet.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.BLOB_GAS_USED_ABOVE_LIMIT","title":"BLOB_GAS_USED_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    Block's blob gas used in header is above the limit.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INCORRECT_BLOB_GAS_USED","title":"INCORRECT_BLOB_GAS_USED = auto() class-attribute instance-attribute","text":"

    Block's blob gas used in header is incorrect.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INCORRECT_EXCESS_BLOB_GAS","title":"INCORRECT_EXCESS_BLOB_GAS = auto() class-attribute instance-attribute","text":"

    Block's excess blob gas in header is incorrect.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.RLP_STRUCTURES_ENCODING","title":"RLP_STRUCTURES_ENCODING = auto() class-attribute instance-attribute","text":"

    Block's rlp encoding is valid but ethereum structures in it are invalid.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.RLP_WITHDRAWALS_NOT_READ","title":"RLP_WITHDRAWALS_NOT_READ = auto() class-attribute instance-attribute","text":"

    Block's rlp encoding is missing withdrawals.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.RLP_INVALID_FIELD_OVERFLOW_64","title":"RLP_INVALID_FIELD_OVERFLOW_64 = auto() class-attribute instance-attribute","text":"

    One of block's fields rlp is overflow 2**64 value.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.RLP_INVALID_ADDRESS","title":"RLP_INVALID_ADDRESS = auto() class-attribute instance-attribute","text":"

    Block withdrawals address is rlp of invalid address != 20 bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.INVALID_REQUESTS","title":"INVALID_REQUESTS = auto() class-attribute instance-attribute","text":"

    Block's requests are invalid.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.IMPORT_IMPOSSIBLE_LEGACY","title":"IMPORT_IMPOSSIBLE_LEGACY = auto() class-attribute instance-attribute","text":"

    Legacy block import is impossible in this chain configuration.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.IMPORT_IMPOSSIBLE_LEGACY_WRONG_PARENT","title":"IMPORT_IMPOSSIBLE_LEGACY_WRONG_PARENT = auto() class-attribute instance-attribute","text":"

    Legacy block import is impossible, trying to import on top of a block that is not legacy.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.IMPORT_IMPOSSIBLE_LONDON_WRONG_PARENT","title":"IMPORT_IMPOSSIBLE_LONDON_WRONG_PARENT = auto() class-attribute instance-attribute","text":"

    Trying to import london (basefee) block on top of block that is not 1559.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.IMPORT_IMPOSSIBLE_PARIS_WRONG_POW","title":"IMPORT_IMPOSSIBLE_PARIS_WRONG_POW = auto() class-attribute instance-attribute","text":"

    Trying to import paris(merge) block with PoW enabled.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.IMPORT_IMPOSSIBLE_PARIS_WRONG_POS","title":"IMPORT_IMPOSSIBLE_PARIS_WRONG_POS = auto() class-attribute instance-attribute","text":"

    Trying to import paris(merge) block with PoS enabled before TTD is reached.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.IMPORT_IMPOSSIBLE_LONDON_OVER_PARIS","title":"IMPORT_IMPOSSIBLE_LONDON_OVER_PARIS = auto() class-attribute instance-attribute","text":"

    Trying to import london looking block over paris network (POS).

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.IMPORT_IMPOSSIBLE_PARIS_OVER_SHANGHAI","title":"IMPORT_IMPOSSIBLE_PARIS_OVER_SHANGHAI = auto() class-attribute instance-attribute","text":"

    Trying to import paris block on top of shanghai block.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.IMPORT_IMPOSSIBLE_SHANGHAI","title":"IMPORT_IMPOSSIBLE_SHANGHAI = auto() class-attribute instance-attribute","text":"

    Shanghai block import is impossible in this chain configuration.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.IMPORT_IMPOSSIBLE_UNCLES_OVER_PARIS","title":"IMPORT_IMPOSSIBLE_UNCLES_OVER_PARIS = auto() class-attribute instance-attribute","text":"

    Trying to import a block after paris fork that has not empty uncles hash.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockException.IMPORT_IMPOSSIBLE_DIFFICULTY_OVER_PARIS","title":"IMPORT_IMPOSSIBLE_DIFFICULTY_OVER_PARIS = auto() class-attribute instance-attribute","text":"

    Trying to import a block after paris fork that has difficulty != 0.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EngineAPIError","title":"EngineAPIError","text":"

    Bases: IntEnum

    List of Engine API errors

    Source code in src/ethereum_test_exceptions/engine_api.py
    class EngineAPIError(IntEnum):\n    \"\"\"\n    List of Engine API errors\n    \"\"\"\n\n    ParseError = -32700\n    InvalidRequest = -32600\n    MethodNotFound = -32601\n    InvalidParams = -32602\n    InternalError = -32603\n    ServerError = -32000\n    UnknownPayload = -38001\n    InvalidForkchoiceState = -38002\n    InvalidPayloadAttributes = -38003\n    TooLargeRequest = -38004\n    UnsupportedFork = -38005\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException","title":"EOFException","text":"

    Bases: ExceptionBase

    Exception raised when an EOF container is invalid.

    Source code in src/ethereum_test_exceptions/exceptions.py
    @unique\nclass EOFException(ExceptionBase):\n    \"\"\"\n    Exception raised when an EOF container is invalid.\n    \"\"\"\n\n    DEFAULT_EXCEPTION = auto()\n    \"\"\"\n    Expect some exception, not yet known.\n    \"\"\"\n\n    UNDEFINED_EXCEPTION = auto()\n    \"\"\"\n    Indicates that exception string is not mapped to an exception enum.\n    \"\"\"\n\n    UNDEFINED_INSTRUCTION = auto()\n    \"\"\"\n    EOF container has undefined instruction in it's body code.\n    \"\"\"\n\n    UNKNOWN_VERSION = auto()\n    \"\"\"\n    EOF container has an unknown version.\n    \"\"\"\n    INCOMPLETE_MAGIC = auto()\n    \"\"\"\n    EOF container has not enough bytes to read magic.\n    \"\"\"\n    INVALID_MAGIC = auto()\n    \"\"\"\n    EOF container has not allowed magic version byte.\n    \"\"\"\n    INVALID_VERSION = auto()\n    \"\"\"\n    EOF container version bytes mismatch.\n    \"\"\"\n    INVALID_NON_RETURNING_FLAG = auto()\n    \"\"\"\n    EOF container's section has non-returning flag set incorrectly.\n    \"\"\"\n    INVALID_RJUMP_DESTINATION = auto()\n    \"\"\"\n    Code has RJUMP instruction with invalid parameters.\n    \"\"\"\n    MISSING_TYPE_HEADER = auto()\n    \"\"\"\n    EOF container missing types section.\n    \"\"\"\n    INVALID_TYPE_SECTION_SIZE = auto()\n    \"\"\"\n    EOF container types section has wrong size.\n    \"\"\"\n    INVALID_TYPE_BODY = auto()\n    \"\"\"\n    EOF container types body section bytes are wrong.\n    \"\"\"\n    MISSING_CODE_HEADER = auto()\n    \"\"\"\n    EOF container missing code section.\n    \"\"\"\n    INVALID_CODE_SECTION = auto()\n    \"\"\"\n    EOF container code section bytes are incorrect.\n    \"\"\"\n    INCOMPLETE_CODE_HEADER = auto()\n    \"\"\"\n    EOF container code header missing bytes.\n    \"\"\"\n    INCOMPLETE_DATA_HEADER = auto()\n    \"\"\"\n    EOF container data header missing bytes.\n    \"\"\"\n    ZERO_SECTION_SIZE = auto()\n    \"\"\"\n    EOF container data header construction is wrong.\n    \"\"\"\n    MISSING_DATA_SECTION = auto()\n    \"\"\"\n    EOF container missing data section\n    \"\"\"\n    INCOMPLETE_CONTAINER = auto()\n    \"\"\"\n    EOF container bytes are incomplete.\n    \"\"\"\n    INVALID_SECTION_BODIES_SIZE = auto()\n    \"\"\"\n    Sections bodies does not match sections headers.\n    \"\"\"\n    TRAILING_BYTES = auto()\n    \"\"\"\n    EOF container has bytes beyond data section.\n    \"\"\"\n    MISSING_TERMINATOR = auto()\n    \"\"\"\n    EOF container missing terminator bytes between header and body.\n    \"\"\"\n    MISSING_HEADERS_TERMINATOR = auto()\n    \"\"\"\n    Some type of another exception about missing headers terminator.\n    \"\"\"\n    INVALID_FIRST_SECTION_TYPE = auto()\n    \"\"\"\n    EOF container header does not have types section first.\n    \"\"\"\n    INCOMPLETE_SECTION_NUMBER = auto()\n    \"\"\"\n    EOF container header has section that is missing declaration bytes.\n    \"\"\"\n    INCOMPLETE_SECTION_SIZE = auto()\n    \"\"\"\n    EOF container header has section that is defined incorrectly.\n    \"\"\"\n    TOO_MANY_CODE_SECTIONS = auto()\n    \"\"\"\n    EOF container header has too many code sections.\n    \"\"\"\n    MISSING_STOP_OPCODE = auto()\n    \"\"\"\n    EOF container's code missing STOP bytecode at it's end.\n    \"\"\"\n    INPUTS_OUTPUTS_NUM_ABOVE_LIMIT = auto()\n    \"\"\"\n    EOF container code section inputs/outputs number is above the limit\n    \"\"\"\n    UNREACHABLE_INSTRUCTIONS = auto()\n    \"\"\"\n    EOF container's code have instructions that are unreachable.\n    \"\"\"\n    UNREACHABLE_CODE_SECTIONS = auto()\n    \"\"\"\n    EOF container's body have code sections that are unreachable.\n    \"\"\"\n    STACK_UNDERFLOW = auto()\n    \"\"\"\n    EOF container's code produces an stack underflow.\n    \"\"\"\n    STACK_HEIGHT_MISMATCH = auto()\n    \"\"\"\n    EOF container section stack height mismatch.\n    \"\"\"\n    MAX_STACK_HEIGHT_ABOVE_LIMIT = auto()\n    \"\"\"\n    EOF container's specified max stack height is above the limit.\n    \"\"\"\n    STACK_HIGHER_THAN_OUTPUTS = auto()\n    \"\"\"\n    EOF container section stack height is higher than the outputs.\n    when returning\n    \"\"\"\n    JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS = auto()\n    \"\"\"\n    EOF container section JUMPF's to a destination section with incompatible outputs.\n    \"\"\"\n    INVALID_MAX_STACK_HEIGHT = auto()\n    \"\"\"\n    EOF container section's specified max stack height does not match the actual stack height.\n    \"\"\"\n    INVALID_DATALOADN_INDEX = auto()\n    \"\"\"\n    A DATALOADN instruction has out-of-bounds index for the data section.\n    \"\"\"\n    TRUNCATED_INSTRUCTION = auto()\n    \"\"\"\n    EOF container's code section has truncated instruction.\n    \"\"\"\n    TOPLEVEL_CONTAINER_TRUNCATED = auto()\n    \"\"\"\n    Top-level EOF container has data section truncated\n    \"\"\"\n    ORPHAN_SUBCONTAINER = auto()\n    \"\"\"\n    EOF container has an unreferenced subcontainer.\n    '\"\"\"\n    CONTAINER_SIZE_ABOVE_LIMIT = auto()\n    \"\"\"\n    EOF container is above size limit\n    \"\"\"\n    INVALID_CONTAINER_SECTION_INDEX = auto()\n    \"\"\"\n    Instruction references container section that does not exist.\n    \"\"\"\n    INCOMPATIBLE_CONTAINER_KIND = auto()\n    \"\"\"\n    Incompatible instruction found in a container of a specific kind.\n    \"\"\"\n    TOO_MANY_CONTAINERS = auto()\n    \"\"\"\n    EOF container header has too many sub-containers.\n    \"\"\"\n    INVALID_CODE_SECTION_INDEX = auto()\n    \"\"\"\n    CALLF Operation referes to a non-existent code section\n    \"\"\"\n    UNEXPECTED_HEADER_KIND = auto()\n    \"\"\"\n    Header parsing encounterd a section kind it wasn't expecting\n    \"\"\"\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.DEFAULT_EXCEPTION","title":"DEFAULT_EXCEPTION = auto() class-attribute instance-attribute","text":"

    Expect some exception, not yet known.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.UNDEFINED_EXCEPTION","title":"UNDEFINED_EXCEPTION = auto() class-attribute instance-attribute","text":"

    Indicates that exception string is not mapped to an exception enum.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.UNDEFINED_INSTRUCTION","title":"UNDEFINED_INSTRUCTION = auto() class-attribute instance-attribute","text":"

    EOF container has undefined instruction in it's body code.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.UNKNOWN_VERSION","title":"UNKNOWN_VERSION = auto() class-attribute instance-attribute","text":"

    EOF container has an unknown version.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INCOMPLETE_MAGIC","title":"INCOMPLETE_MAGIC = auto() class-attribute instance-attribute","text":"

    EOF container has not enough bytes to read magic.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_MAGIC","title":"INVALID_MAGIC = auto() class-attribute instance-attribute","text":"

    EOF container has not allowed magic version byte.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_VERSION","title":"INVALID_VERSION = auto() class-attribute instance-attribute","text":"

    EOF container version bytes mismatch.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_NON_RETURNING_FLAG","title":"INVALID_NON_RETURNING_FLAG = auto() class-attribute instance-attribute","text":"

    EOF container's section has non-returning flag set incorrectly.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_RJUMP_DESTINATION","title":"INVALID_RJUMP_DESTINATION = auto() class-attribute instance-attribute","text":"

    Code has RJUMP instruction with invalid parameters.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.MISSING_TYPE_HEADER","title":"MISSING_TYPE_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container missing types section.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_TYPE_SECTION_SIZE","title":"INVALID_TYPE_SECTION_SIZE = auto() class-attribute instance-attribute","text":"

    EOF container types section has wrong size.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_TYPE_BODY","title":"INVALID_TYPE_BODY = auto() class-attribute instance-attribute","text":"

    EOF container types body section bytes are wrong.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.MISSING_CODE_HEADER","title":"MISSING_CODE_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container missing code section.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_CODE_SECTION","title":"INVALID_CODE_SECTION = auto() class-attribute instance-attribute","text":"

    EOF container code section bytes are incorrect.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INCOMPLETE_CODE_HEADER","title":"INCOMPLETE_CODE_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container code header missing bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INCOMPLETE_DATA_HEADER","title":"INCOMPLETE_DATA_HEADER = auto() class-attribute instance-attribute","text":"

    EOF container data header missing bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.ZERO_SECTION_SIZE","title":"ZERO_SECTION_SIZE = auto() class-attribute instance-attribute","text":"

    EOF container data header construction is wrong.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.MISSING_DATA_SECTION","title":"MISSING_DATA_SECTION = auto() class-attribute instance-attribute","text":"

    EOF container missing data section

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INCOMPLETE_CONTAINER","title":"INCOMPLETE_CONTAINER = auto() class-attribute instance-attribute","text":"

    EOF container bytes are incomplete.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_SECTION_BODIES_SIZE","title":"INVALID_SECTION_BODIES_SIZE = auto() class-attribute instance-attribute","text":"

    Sections bodies does not match sections headers.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.TRAILING_BYTES","title":"TRAILING_BYTES = auto() class-attribute instance-attribute","text":"

    EOF container has bytes beyond data section.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.MISSING_TERMINATOR","title":"MISSING_TERMINATOR = auto() class-attribute instance-attribute","text":"

    EOF container missing terminator bytes between header and body.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.MISSING_HEADERS_TERMINATOR","title":"MISSING_HEADERS_TERMINATOR = auto() class-attribute instance-attribute","text":"

    Some type of another exception about missing headers terminator.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_FIRST_SECTION_TYPE","title":"INVALID_FIRST_SECTION_TYPE = auto() class-attribute instance-attribute","text":"

    EOF container header does not have types section first.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INCOMPLETE_SECTION_NUMBER","title":"INCOMPLETE_SECTION_NUMBER = auto() class-attribute instance-attribute","text":"

    EOF container header has section that is missing declaration bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INCOMPLETE_SECTION_SIZE","title":"INCOMPLETE_SECTION_SIZE = auto() class-attribute instance-attribute","text":"

    EOF container header has section that is defined incorrectly.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.TOO_MANY_CODE_SECTIONS","title":"TOO_MANY_CODE_SECTIONS = auto() class-attribute instance-attribute","text":"

    EOF container header has too many code sections.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.MISSING_STOP_OPCODE","title":"MISSING_STOP_OPCODE = auto() class-attribute instance-attribute","text":"

    EOF container's code missing STOP bytecode at it's end.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INPUTS_OUTPUTS_NUM_ABOVE_LIMIT","title":"INPUTS_OUTPUTS_NUM_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    EOF container code section inputs/outputs number is above the limit

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.UNREACHABLE_INSTRUCTIONS","title":"UNREACHABLE_INSTRUCTIONS = auto() class-attribute instance-attribute","text":"

    EOF container's code have instructions that are unreachable.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.UNREACHABLE_CODE_SECTIONS","title":"UNREACHABLE_CODE_SECTIONS = auto() class-attribute instance-attribute","text":"

    EOF container's body have code sections that are unreachable.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.STACK_UNDERFLOW","title":"STACK_UNDERFLOW = auto() class-attribute instance-attribute","text":"

    EOF container's code produces an stack underflow.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.STACK_HEIGHT_MISMATCH","title":"STACK_HEIGHT_MISMATCH = auto() class-attribute instance-attribute","text":"

    EOF container section stack height mismatch.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT","title":"MAX_STACK_HEIGHT_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    EOF container's specified max stack height is above the limit.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.STACK_HIGHER_THAN_OUTPUTS","title":"STACK_HIGHER_THAN_OUTPUTS = auto() class-attribute instance-attribute","text":"

    EOF container section stack height is higher than the outputs. when returning

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS","title":"JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS = auto() class-attribute instance-attribute","text":"

    EOF container section JUMPF's to a destination section with incompatible outputs.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_MAX_STACK_HEIGHT","title":"INVALID_MAX_STACK_HEIGHT = auto() class-attribute instance-attribute","text":"

    EOF container section's specified max stack height does not match the actual stack height.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_DATALOADN_INDEX","title":"INVALID_DATALOADN_INDEX = auto() class-attribute instance-attribute","text":"

    A DATALOADN instruction has out-of-bounds index for the data section.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.TRUNCATED_INSTRUCTION","title":"TRUNCATED_INSTRUCTION = auto() class-attribute instance-attribute","text":"

    EOF container's code section has truncated instruction.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.TOPLEVEL_CONTAINER_TRUNCATED","title":"TOPLEVEL_CONTAINER_TRUNCATED = auto() class-attribute instance-attribute","text":"

    Top-level EOF container has data section truncated

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.ORPHAN_SUBCONTAINER","title":"ORPHAN_SUBCONTAINER = auto() class-attribute instance-attribute","text":"

    EOF container has an unreferenced subcontainer. '

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.CONTAINER_SIZE_ABOVE_LIMIT","title":"CONTAINER_SIZE_ABOVE_LIMIT = auto() class-attribute instance-attribute","text":"

    EOF container is above size limit

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_CONTAINER_SECTION_INDEX","title":"INVALID_CONTAINER_SECTION_INDEX = auto() class-attribute instance-attribute","text":"

    Instruction references container section that does not exist.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INCOMPATIBLE_CONTAINER_KIND","title":"INCOMPATIBLE_CONTAINER_KIND = auto() class-attribute instance-attribute","text":"

    Incompatible instruction found in a container of a specific kind.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.TOO_MANY_CONTAINERS","title":"TOO_MANY_CONTAINERS = auto() class-attribute instance-attribute","text":"

    EOF container header has too many sub-containers.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.INVALID_CODE_SECTION_INDEX","title":"INVALID_CODE_SECTION_INDEX = auto() class-attribute instance-attribute","text":"

    CALLF Operation referes to a non-existent code section

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFException.UNEXPECTED_HEADER_KIND","title":"UNEXPECTED_HEADER_KIND = auto() class-attribute instance-attribute","text":"

    Header parsing encounterd a section kind it wasn't expecting

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException","title":"TransactionException","text":"

    Bases: ExceptionBase

    Exception raised when a transaction is invalid, and thus cannot be executed.

    If a transaction with any of these exceptions is included in a block, the block is invalid.

    Source code in src/ethereum_test_exceptions/exceptions.py
    @unique\nclass TransactionException(ExceptionBase):\n    \"\"\"\n    Exception raised when a transaction is invalid, and thus cannot be executed.\n\n    If a transaction with any of these exceptions is included in a block, the block is invalid.\n    \"\"\"\n\n    TYPE_NOT_SUPPORTED = auto()\n    \"\"\"\n    Transaction type is not supported on this chain configuration.\n    \"\"\"\n    SENDER_NOT_EOA = auto()\n    \"\"\"\n    Transaction is coming from address that is not exist anymore.\n    \"\"\"\n    ADDRESS_TOO_SHORT = auto()\n    \"\"\"\n    Transaction `to` is not allowed to be less than 20 bytes.\n    \"\"\"\n    ADDRESS_TOO_LONG = auto()\n    \"\"\"\n    Transaction `to` is not allowed to be more than 20 bytes.\n    \"\"\"\n    NONCE_MISMATCH_TOO_HIGH = auto()\n    \"\"\"\n    Transaction nonce > sender.nonce.\n    \"\"\"\n    NONCE_MISMATCH_TOO_LOW = auto()\n    \"\"\"\n    Transaction nonce < sender.nonce.\n    \"\"\"\n    NONCE_TOO_BIG = auto()\n    \"\"\"\n    Transaction `nonce` is not allowed to be max_uint64 - 1 (this is probably TransactionTest).\n    \"\"\"\n    NONCE_IS_MAX = auto()\n    \"\"\"\n    Transaction `nonce` is not allowed to be max_uint64 - 1 (this is StateTests).\n    \"\"\"\n    NONCE_OVERFLOW = auto()\n    \"\"\"\n    Transaction `nonce` is not allowed to be more than uint64.\n    \"\"\"\n    GASLIMIT_OVERFLOW = auto()\n    \"\"\"\n    Transaction gaslimit exceeds 2^64-1 maximum value.\n    \"\"\"\n    VALUE_OVERFLOW = auto()\n    \"\"\"\n    Transaction value exceeds 2^256-1 maximum value.\n    \"\"\"\n    GASPRICE_OVERFLOW = auto()\n    \"\"\"\n    Transaction gasPrice exceeds 2^256-1 maximum value.\n    \"\"\"\n    GASLIMIT_PRICE_PRODUCT_OVERFLOW = auto()\n    \"\"\"\n    Transaction gasPrice * gasLimit exceeds 2^256-1 maximum value.\n    \"\"\"\n    INVALID_SIGNATURE_VRS = auto()\n    \"\"\"\n    Invalid transaction v, r, s values.\n    \"\"\"\n    RLP_INVALID_SIGNATURE_R = auto()\n    \"\"\"\n    Error reading transaction signature R value.\n    \"\"\"\n    RLP_INVALID_SIGNATURE_S = auto()\n    \"\"\"\n    Error reading transaction signature S value.\n    \"\"\"\n    RLP_LEADING_ZEROS_GASLIMIT = auto()\n    \"\"\"\n    Error reading transaction gaslimit field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_GASPRICE = auto()\n    \"\"\"\n    Error reading transaction gasprice field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_VALUE = auto()\n    \"\"\"\n    Error reading transaction value field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_NONCE = auto()\n    \"\"\"\n    Error reading transaction nonce field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_R = auto()\n    \"\"\"\n    Error reading transaction signature R field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_S = auto()\n    \"\"\"\n    Error reading transaction signature S field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_V = auto()\n    \"\"\"\n    Error reading transaction signature V field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_BASEFEE = auto()\n    \"\"\"\n    Error reading transaction basefee field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_PRIORITY_FEE = auto()\n    \"\"\"\n    Error reading transaction priority fee field RLP.\n    \"\"\"\n    RLP_LEADING_ZEROS_DATA_SIZE = auto()\n    \"\"\"\n    Error reading transaction data field RLP, (rlp field length has leading zeros).\n    \"\"\"\n    RLP_LEADING_ZEROS_NONCE_SIZE = auto()\n    \"\"\"\n    Error reading transaction nonce field RLP, (rlp field length has leading zeros).\n    \"\"\"\n    RLP_TOO_FEW_ELEMENTS = auto()\n    \"\"\"\n    Error reading transaction RLP, structure has too few elements than expected.\n    \"\"\"\n    RLP_TOO_MANY_ELEMENTS = auto()\n    \"\"\"\n    Error reading transaction RLP, structure has too many elements than expected.\n    \"\"\"\n    RLP_ERROR_EOF = auto()\n    \"\"\"\n    Error reading transaction RLP, rlp stream unexpectedly finished.\n    \"\"\"\n    RLP_ERROR_SIZE = auto()\n    \"\"\"\n    Error reading transaction RLP, rlp size is invalid.\n    \"\"\"\n    RLP_ERROR_SIZE_LEADING_ZEROS = auto()\n    \"\"\"\n    Error reading transaction RLP, field size has leading zeros.\n    \"\"\"\n    INVALID_CHAINID = auto()\n    \"\"\"\n    Transaction chain id encoding is incorrect.\n    \"\"\"\n    RLP_INVALID_DATA = auto()\n    \"\"\"\n    Transaction data field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_GASLIMIT = auto()\n    \"\"\"\n    Transaction gaslimit field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_NONCE = auto()\n    \"\"\"\n    Transaction nonce field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_TO = auto()\n    \"\"\"\n    Transaction to field is invalid rlp.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_LONG = auto()\n    \"\"\"\n    Transaction access list address is > 20 bytes.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_SHORT = auto()\n    \"\"\"\n    Transaction access list address is < 20 bytes.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_STORAGE_TOO_LONG = auto()\n    \"\"\"\n    Transaction access list storage hash > 32 bytes.\n    \"\"\"\n    RLP_INVALID_ACCESS_LIST_STORAGE_TOO_SHORT = auto()\n    \"\"\"\n    Transaction access list storage hash < 32 bytes.\n    \"\"\"\n    RLP_INVALID_HEADER = auto()\n    \"\"\"\n    Transaction failed to read from RLP as rlp header is invalid.\n    \"\"\"\n    RLP_INVALID_VALUE = auto()\n    \"\"\"\n    Transaction value field is invalid rlp/structure.\n    \"\"\"\n    EC_RECOVERY_FAIL = auto()\n    \"\"\"\n    Transaction has correct signature, but ec recovery failed.\n    \"\"\"\n    INSUFFICIENT_ACCOUNT_FUNDS = auto()\n    \"\"\"\n    Transaction's sender does not have enough funds to pay for the transaction.\n    \"\"\"\n    INSUFFICIENT_MAX_FEE_PER_GAS = auto()\n    \"\"\"\n    Transaction's max-fee-per-gas is lower than the block base-fee.\n    \"\"\"\n    PRIORITY_OVERFLOW = auto()\n    \"\"\"\n    Transaction's max-priority-fee-per-gas is exceeds 2^256-1 maximum value.\n    \"\"\"\n    PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS = auto()\n    \"\"\"\n    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas.\n    \"\"\"\n    PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS_2 = auto()\n    \"\"\"\n    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas (TransactionTests).\n    \"\"\"\n    INSUFFICIENT_MAX_FEE_PER_BLOB_GAS = auto()\n    \"\"\"\n    Transaction's max-fee-per-blob-gas is lower than the block's blob-gas price.\n    \"\"\"\n    INTRINSIC_GAS_TOO_LOW = auto()\n    \"\"\"\n    Transaction's gas limit is too low.\n    \"\"\"\n    INITCODE_SIZE_EXCEEDED = auto()\n    \"\"\"\n    Transaction's initcode for a contract-creating transaction is too large.\n    \"\"\"\n    TYPE_3_TX_PRE_FORK = auto()\n    \"\"\"\n    Transaction type 3 included before activation fork.\n    \"\"\"\n    TYPE_3_TX_ZERO_BLOBS_PRE_FORK = auto()\n    \"\"\"\n    Transaction type 3, with zero blobs, included before activation fork.\n    \"\"\"\n    TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH = auto()\n    \"\"\"\n    Transaction contains a blob versioned hash with an invalid version.\n    \"\"\"\n    TYPE_3_TX_WITH_FULL_BLOBS = auto()\n    \"\"\"\n    Transaction contains full blobs (network-version of the transaction).\n    \"\"\"\n    TYPE_3_TX_BLOB_COUNT_EXCEEDED = auto()\n    \"\"\"\n    Transaction contains too many blob versioned hashes.\n    \"\"\"\n    TYPE_3_TX_CONTRACT_CREATION = auto()\n    \"\"\"\n    Transaction is a type 3 transaction and has an empty `to`.\n    \"\"\"\n    TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED = auto()\n    \"\"\"\n    Transaction causes block to go over blob gas limit.\n    \"\"\"\n    GAS_ALLOWANCE_EXCEEDED = auto()\n    \"\"\"\n    Transaction causes block to go over blob gas limit.\n    \"\"\"\n    TYPE_3_TX_ZERO_BLOBS = auto()\n    \"\"\"\n    Transaction is type 3, but has no blobs.\n    \"\"\"\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.TYPE_NOT_SUPPORTED","title":"TYPE_NOT_SUPPORTED = auto() class-attribute instance-attribute","text":"

    Transaction type is not supported on this chain configuration.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.SENDER_NOT_EOA","title":"SENDER_NOT_EOA = auto() class-attribute instance-attribute","text":"

    Transaction is coming from address that is not exist anymore.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.ADDRESS_TOO_SHORT","title":"ADDRESS_TOO_SHORT = auto() class-attribute instance-attribute","text":"

    Transaction to is not allowed to be less than 20 bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.ADDRESS_TOO_LONG","title":"ADDRESS_TOO_LONG = auto() class-attribute instance-attribute","text":"

    Transaction to is not allowed to be more than 20 bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.NONCE_MISMATCH_TOO_HIGH","title":"NONCE_MISMATCH_TOO_HIGH = auto() class-attribute instance-attribute","text":"

    Transaction nonce > sender.nonce.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.NONCE_MISMATCH_TOO_LOW","title":"NONCE_MISMATCH_TOO_LOW = auto() class-attribute instance-attribute","text":"

    Transaction nonce < sender.nonce.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.NONCE_TOO_BIG","title":"NONCE_TOO_BIG = auto() class-attribute instance-attribute","text":"

    Transaction nonce is not allowed to be max_uint64 - 1 (this is probably TransactionTest).

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.NONCE_IS_MAX","title":"NONCE_IS_MAX = auto() class-attribute instance-attribute","text":"

    Transaction nonce is not allowed to be max_uint64 - 1 (this is StateTests).

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.NONCE_OVERFLOW","title":"NONCE_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction nonce is not allowed to be more than uint64.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.GASLIMIT_OVERFLOW","title":"GASLIMIT_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction gaslimit exceeds 2^64-1 maximum value.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.VALUE_OVERFLOW","title":"VALUE_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction value exceeds 2^256-1 maximum value.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.GASPRICE_OVERFLOW","title":"GASPRICE_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction gasPrice exceeds 2^256-1 maximum value.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.GASLIMIT_PRICE_PRODUCT_OVERFLOW","title":"GASLIMIT_PRICE_PRODUCT_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction gasPrice * gasLimit exceeds 2^256-1 maximum value.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.INVALID_SIGNATURE_VRS","title":"INVALID_SIGNATURE_VRS = auto() class-attribute instance-attribute","text":"

    Invalid transaction v, r, s values.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_SIGNATURE_R","title":"RLP_INVALID_SIGNATURE_R = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature R value.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_SIGNATURE_S","title":"RLP_INVALID_SIGNATURE_S = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature S value.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_GASLIMIT","title":"RLP_LEADING_ZEROS_GASLIMIT = auto() class-attribute instance-attribute","text":"

    Error reading transaction gaslimit field RLP.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_GASPRICE","title":"RLP_LEADING_ZEROS_GASPRICE = auto() class-attribute instance-attribute","text":"

    Error reading transaction gasprice field RLP.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_VALUE","title":"RLP_LEADING_ZEROS_VALUE = auto() class-attribute instance-attribute","text":"

    Error reading transaction value field RLP.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_NONCE","title":"RLP_LEADING_ZEROS_NONCE = auto() class-attribute instance-attribute","text":"

    Error reading transaction nonce field RLP.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_R","title":"RLP_LEADING_ZEROS_R = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature R field RLP.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_S","title":"RLP_LEADING_ZEROS_S = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature S field RLP.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_V","title":"RLP_LEADING_ZEROS_V = auto() class-attribute instance-attribute","text":"

    Error reading transaction signature V field RLP.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_BASEFEE","title":"RLP_LEADING_ZEROS_BASEFEE = auto() class-attribute instance-attribute","text":"

    Error reading transaction basefee field RLP.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_PRIORITY_FEE","title":"RLP_LEADING_ZEROS_PRIORITY_FEE = auto() class-attribute instance-attribute","text":"

    Error reading transaction priority fee field RLP.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_DATA_SIZE","title":"RLP_LEADING_ZEROS_DATA_SIZE = auto() class-attribute instance-attribute","text":"

    Error reading transaction data field RLP, (rlp field length has leading zeros).

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_LEADING_ZEROS_NONCE_SIZE","title":"RLP_LEADING_ZEROS_NONCE_SIZE = auto() class-attribute instance-attribute","text":"

    Error reading transaction nonce field RLP, (rlp field length has leading zeros).

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_TOO_FEW_ELEMENTS","title":"RLP_TOO_FEW_ELEMENTS = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, structure has too few elements than expected.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_TOO_MANY_ELEMENTS","title":"RLP_TOO_MANY_ELEMENTS = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, structure has too many elements than expected.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_ERROR_EOF","title":"RLP_ERROR_EOF = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, rlp stream unexpectedly finished.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_ERROR_SIZE","title":"RLP_ERROR_SIZE = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, rlp size is invalid.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_ERROR_SIZE_LEADING_ZEROS","title":"RLP_ERROR_SIZE_LEADING_ZEROS = auto() class-attribute instance-attribute","text":"

    Error reading transaction RLP, field size has leading zeros.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.INVALID_CHAINID","title":"INVALID_CHAINID = auto() class-attribute instance-attribute","text":"

    Transaction chain id encoding is incorrect.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_DATA","title":"RLP_INVALID_DATA = auto() class-attribute instance-attribute","text":"

    Transaction data field is invalid rlp.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_GASLIMIT","title":"RLP_INVALID_GASLIMIT = auto() class-attribute instance-attribute","text":"

    Transaction gaslimit field is invalid rlp.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_NONCE","title":"RLP_INVALID_NONCE = auto() class-attribute instance-attribute","text":"

    Transaction nonce field is invalid rlp.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_TO","title":"RLP_INVALID_TO = auto() class-attribute instance-attribute","text":"

    Transaction to field is invalid rlp.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_LONG","title":"RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_LONG = auto() class-attribute instance-attribute","text":"

    Transaction access list address is > 20 bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_SHORT","title":"RLP_INVALID_ACCESS_LIST_ADDRESS_TOO_SHORT = auto() class-attribute instance-attribute","text":"

    Transaction access list address is < 20 bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_ACCESS_LIST_STORAGE_TOO_LONG","title":"RLP_INVALID_ACCESS_LIST_STORAGE_TOO_LONG = auto() class-attribute instance-attribute","text":"

    Transaction access list storage hash > 32 bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_ACCESS_LIST_STORAGE_TOO_SHORT","title":"RLP_INVALID_ACCESS_LIST_STORAGE_TOO_SHORT = auto() class-attribute instance-attribute","text":"

    Transaction access list storage hash < 32 bytes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_HEADER","title":"RLP_INVALID_HEADER = auto() class-attribute instance-attribute","text":"

    Transaction failed to read from RLP as rlp header is invalid.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.RLP_INVALID_VALUE","title":"RLP_INVALID_VALUE = auto() class-attribute instance-attribute","text":"

    Transaction value field is invalid rlp/structure.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.EC_RECOVERY_FAIL","title":"EC_RECOVERY_FAIL = auto() class-attribute instance-attribute","text":"

    Transaction has correct signature, but ec recovery failed.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.INSUFFICIENT_ACCOUNT_FUNDS","title":"INSUFFICIENT_ACCOUNT_FUNDS = auto() class-attribute instance-attribute","text":"

    Transaction's sender does not have enough funds to pay for the transaction.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS","title":"INSUFFICIENT_MAX_FEE_PER_GAS = auto() class-attribute instance-attribute","text":"

    Transaction's max-fee-per-gas is lower than the block base-fee.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.PRIORITY_OVERFLOW","title":"PRIORITY_OVERFLOW = auto() class-attribute instance-attribute","text":"

    Transaction's max-priority-fee-per-gas is exceeds 2^256-1 maximum value.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS","title":"PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS = auto() class-attribute instance-attribute","text":"

    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS_2","title":"PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS_2 = auto() class-attribute instance-attribute","text":"

    Transaction's max-priority-fee-per-gas is greater than the max-fee-per-gas (TransactionTests).

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS","title":"INSUFFICIENT_MAX_FEE_PER_BLOB_GAS = auto() class-attribute instance-attribute","text":"

    Transaction's max-fee-per-blob-gas is lower than the block's blob-gas price.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.INTRINSIC_GAS_TOO_LOW","title":"INTRINSIC_GAS_TOO_LOW = auto() class-attribute instance-attribute","text":"

    Transaction's gas limit is too low.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.INITCODE_SIZE_EXCEEDED","title":"INITCODE_SIZE_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction's initcode for a contract-creating transaction is too large.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.TYPE_3_TX_PRE_FORK","title":"TYPE_3_TX_PRE_FORK = auto() class-attribute instance-attribute","text":"

    Transaction type 3 included before activation fork.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.TYPE_3_TX_ZERO_BLOBS_PRE_FORK","title":"TYPE_3_TX_ZERO_BLOBS_PRE_FORK = auto() class-attribute instance-attribute","text":"

    Transaction type 3, with zero blobs, included before activation fork.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH","title":"TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH = auto() class-attribute instance-attribute","text":"

    Transaction contains a blob versioned hash with an invalid version.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.TYPE_3_TX_WITH_FULL_BLOBS","title":"TYPE_3_TX_WITH_FULL_BLOBS = auto() class-attribute instance-attribute","text":"

    Transaction contains full blobs (network-version of the transaction).

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED","title":"TYPE_3_TX_BLOB_COUNT_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction contains too many blob versioned hashes.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.TYPE_3_TX_CONTRACT_CREATION","title":"TYPE_3_TX_CONTRACT_CREATION = auto() class-attribute instance-attribute","text":"

    Transaction is a type 3 transaction and has an empty to.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED","title":"TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction causes block to go over blob gas limit.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.GAS_ALLOWANCE_EXCEEDED","title":"GAS_ALLOWANCE_EXCEEDED = auto() class-attribute instance-attribute","text":"

    Transaction causes block to go over blob gas limit.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.TYPE_3_TX_ZERO_BLOBS","title":"TYPE_3_TX_ZERO_BLOBS = auto() class-attribute instance-attribute","text":"

    Transaction is type 3, but has no blobs.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BaseFixture","title":"BaseFixture","text":"

    Bases: CamelModel

    Represents a base Ethereum test fixture of any type.

    Source code in src/ethereum_test_fixtures/base.py
    class BaseFixture(CamelModel):\n    \"\"\"Represents a base Ethereum test fixture of any type.\"\"\"\n\n    info: Dict[str, str] = Field(default_factory=dict, alias=\"_info\")\n    format: ClassVar[FixtureFormats] = FixtureFormats.UNSET_TEST_FORMAT\n\n    @cached_property\n    def json_dict(self) -> Dict[str, Any]:\n        \"\"\"\n        Returns the JSON representation of the fixture.\n        \"\"\"\n        return self.model_dump(mode=\"json\", by_alias=True, exclude_none=True, exclude={\"info\"})\n\n    @cached_property\n    def hash(self) -> str:\n        \"\"\"\n        Returns the hash of the fixture.\n        \"\"\"\n        json_str = json.dumps(self.json_dict, sort_keys=True, separators=(\",\", \":\"))\n        h = hashlib.sha256(json_str.encode(\"utf-8\")).hexdigest()\n        return f\"0x{h}\"\n\n    def json_dict_with_info(self, hash_only: bool = False) -> Dict[str, Any]:\n        \"\"\"\n        Returns the JSON representation of the fixture with the info field.\n        \"\"\"\n        dict_with_info = self.json_dict.copy()\n        dict_with_info[\"_info\"] = {\"hash\": self.hash}\n        if not hash_only:\n            dict_with_info[\"_info\"].update(self.info)\n        return dict_with_info\n\n    def fill_info(\n        self,\n        t8n_version: str,\n        fixture_description: str,\n        fixture_source_url: str,\n        ref_spec: ReferenceSpec | None,\n    ):\n        \"\"\"\n        Fill the info field for this fixture\n        \"\"\"\n        if \"comment\" not in self.info:\n            self.info[\"comment\"] = \"`execution-spec-tests` generated test\"\n        self.info[\"filling-transition-tool\"] = t8n_version\n        self.info[\"description\"] = fixture_description\n        self.info[\"url\"] = fixture_source_url\n        if ref_spec is not None:\n            ref_spec.write_info(self.info)\n\n    def get_fork(self) -> str | None:\n        \"\"\"\n        Returns the fork of the fixture as a string.\n        \"\"\"\n        raise NotImplementedError\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BaseFixture.json_dict","title":"json_dict: Dict[str, Any] cached property","text":"

    Returns the JSON representation of the fixture.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BaseFixture.hash","title":"hash: str cached property","text":"

    Returns the hash of the fixture.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BaseFixture.json_dict_with_info","title":"json_dict_with_info(hash_only=False)","text":"

    Returns the JSON representation of the fixture with the info field.

    Source code in src/ethereum_test_fixtures/base.py
    def json_dict_with_info(self, hash_only: bool = False) -> Dict[str, Any]:\n    \"\"\"\n    Returns the JSON representation of the fixture with the info field.\n    \"\"\"\n    dict_with_info = self.json_dict.copy()\n    dict_with_info[\"_info\"] = {\"hash\": self.hash}\n    if not hash_only:\n        dict_with_info[\"_info\"].update(self.info)\n    return dict_with_info\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BaseFixture.fill_info","title":"fill_info(t8n_version, fixture_description, fixture_source_url, ref_spec)","text":"

    Fill the info field for this fixture

    Source code in src/ethereum_test_fixtures/base.py
    def fill_info(\n    self,\n    t8n_version: str,\n    fixture_description: str,\n    fixture_source_url: str,\n    ref_spec: ReferenceSpec | None,\n):\n    \"\"\"\n    Fill the info field for this fixture\n    \"\"\"\n    if \"comment\" not in self.info:\n        self.info[\"comment\"] = \"`execution-spec-tests` generated test\"\n    self.info[\"filling-transition-tool\"] = t8n_version\n    self.info[\"description\"] = fixture_description\n    self.info[\"url\"] = fixture_source_url\n    if ref_spec is not None:\n        ref_spec.write_info(self.info)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BaseFixture.get_fork","title":"get_fork()","text":"

    Returns the fork of the fixture as a string.

    Source code in src/ethereum_test_fixtures/base.py
    def get_fork(self) -> str | None:\n    \"\"\"\n    Returns the fork of the fixture as a string.\n    \"\"\"\n    raise NotImplementedError\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.FixtureCollector","title":"FixtureCollector dataclass","text":"

    Collects all fixtures generated by the test cases.

    Source code in src/ethereum_test_fixtures/collector.py
    @dataclass(kw_only=True)\nclass FixtureCollector:\n    \"\"\"\n    Collects all fixtures generated by the test cases.\n    \"\"\"\n\n    output_dir: Path\n    flat_output: bool\n    single_fixture_per_file: bool\n    filler_path: Path\n    base_dump_dir: Optional[Path] = None\n\n    # Internal state\n    all_fixtures: Dict[Path, Fixtures] = field(default_factory=dict)\n    json_path_to_test_item: Dict[Path, TestInfo] = field(default_factory=dict)\n\n    def get_fixture_basename(self, info: TestInfo) -> Path:\n        \"\"\"\n        Returns the basename of the fixture file for a given test case.\n        \"\"\"\n        if self.flat_output:\n            if self.single_fixture_per_file:\n                return Path(strip_test_prefix(info.get_single_test_name()))\n            return Path(strip_test_prefix(info.original_name))\n        else:\n            relative_fixture_output_dir = Path(info.path).parent / strip_test_prefix(\n                Path(info.path).stem\n            )\n            module_relative_output_dir = get_module_relative_output_dir(\n                relative_fixture_output_dir, self.filler_path\n            )\n\n            if self.single_fixture_per_file:\n                return module_relative_output_dir / strip_test_prefix(info.get_single_test_name())\n            return module_relative_output_dir / strip_test_prefix(info.original_name)\n\n    def add_fixture(self, info: TestInfo, fixture: BaseFixture) -> Path:\n        \"\"\"\n        Adds a fixture to the list of fixtures of a given test case.\n        \"\"\"\n        fixture_basename = self.get_fixture_basename(info)\n\n        fixture_path = (\n            self.output_dir\n            / fixture.format.output_base_dir_name\n            / fixture_basename.with_suffix(fixture.format.output_file_extension)\n        )\n        if fixture_path not in self.all_fixtures.keys():  # relevant when we group by test function\n            self.all_fixtures[fixture_path] = Fixtures(root={})\n            self.json_path_to_test_item[fixture_path] = info\n\n        self.all_fixtures[fixture_path][info.id] = fixture\n\n        return fixture_path\n\n    def dump_fixtures(self) -> None:\n        \"\"\"\n        Dumps all collected fixtures to their respective files.\n        \"\"\"\n        if self.output_dir.name == \"stdout\":\n            combined_fixtures = {\n                k: to_json(v) for fixture in self.all_fixtures.values() for k, v in fixture.items()\n            }\n            json.dump(combined_fixtures, sys.stdout, indent=4)\n            return\n        os.makedirs(self.output_dir, exist_ok=True)\n        for fixture_path, fixtures in self.all_fixtures.items():\n            os.makedirs(fixture_path.parent, exist_ok=True)\n            if len({fixture.format for fixture in fixtures.values()}) != 1:\n                raise TypeError(\"All fixtures in a single file must have the same format.\")\n            fixtures.collect_into_file(fixture_path)\n\n    def verify_fixture_files(self, evm_fixture_verification: FixtureVerifier) -> None:\n        \"\"\"\n        Runs `evm [state|block]test` on each fixture.\n        \"\"\"\n        for fixture_path, name_fixture_dict in self.all_fixtures.items():\n            for fixture_name, fixture in name_fixture_dict.items():\n                if FixtureFormats.is_verifiable(fixture.format):\n                    info = self.json_path_to_test_item[fixture_path]\n                    verify_fixtures_dump_dir = self._get_verify_fixtures_dump_dir(info)\n                    evm_fixture_verification.verify_fixture(\n                        fixture.format,\n                        fixture_path,\n                        fixture_name=None,\n                        debug_output_path=verify_fixtures_dump_dir,\n                    )\n\n    def _get_verify_fixtures_dump_dir(\n        self,\n        info: TestInfo,\n    ):\n        \"\"\"\n        The directory to dump the current test function's fixture.json and fixture\n        verification debug output.\n        \"\"\"\n        if not self.base_dump_dir:\n            return None\n        if self.single_fixture_per_file:\n            return info.get_dump_dir_path(\n                self.base_dump_dir, self.filler_path, level=\"test_parameter\"\n            )\n        else:\n            return info.get_dump_dir_path(\n                self.base_dump_dir, self.filler_path, level=\"test_function\"\n            )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.FixtureCollector.get_fixture_basename","title":"get_fixture_basename(info)","text":"

    Returns the basename of the fixture file for a given test case.

    Source code in src/ethereum_test_fixtures/collector.py
    def get_fixture_basename(self, info: TestInfo) -> Path:\n    \"\"\"\n    Returns the basename of the fixture file for a given test case.\n    \"\"\"\n    if self.flat_output:\n        if self.single_fixture_per_file:\n            return Path(strip_test_prefix(info.get_single_test_name()))\n        return Path(strip_test_prefix(info.original_name))\n    else:\n        relative_fixture_output_dir = Path(info.path).parent / strip_test_prefix(\n            Path(info.path).stem\n        )\n        module_relative_output_dir = get_module_relative_output_dir(\n            relative_fixture_output_dir, self.filler_path\n        )\n\n        if self.single_fixture_per_file:\n            return module_relative_output_dir / strip_test_prefix(info.get_single_test_name())\n        return module_relative_output_dir / strip_test_prefix(info.original_name)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.FixtureCollector.add_fixture","title":"add_fixture(info, fixture)","text":"

    Adds a fixture to the list of fixtures of a given test case.

    Source code in src/ethereum_test_fixtures/collector.py
    def add_fixture(self, info: TestInfo, fixture: BaseFixture) -> Path:\n    \"\"\"\n    Adds a fixture to the list of fixtures of a given test case.\n    \"\"\"\n    fixture_basename = self.get_fixture_basename(info)\n\n    fixture_path = (\n        self.output_dir\n        / fixture.format.output_base_dir_name\n        / fixture_basename.with_suffix(fixture.format.output_file_extension)\n    )\n    if fixture_path not in self.all_fixtures.keys():  # relevant when we group by test function\n        self.all_fixtures[fixture_path] = Fixtures(root={})\n        self.json_path_to_test_item[fixture_path] = info\n\n    self.all_fixtures[fixture_path][info.id] = fixture\n\n    return fixture_path\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.FixtureCollector.dump_fixtures","title":"dump_fixtures()","text":"

    Dumps all collected fixtures to their respective files.

    Source code in src/ethereum_test_fixtures/collector.py
    def dump_fixtures(self) -> None:\n    \"\"\"\n    Dumps all collected fixtures to their respective files.\n    \"\"\"\n    if self.output_dir.name == \"stdout\":\n        combined_fixtures = {\n            k: to_json(v) for fixture in self.all_fixtures.values() for k, v in fixture.items()\n        }\n        json.dump(combined_fixtures, sys.stdout, indent=4)\n        return\n    os.makedirs(self.output_dir, exist_ok=True)\n    for fixture_path, fixtures in self.all_fixtures.items():\n        os.makedirs(fixture_path.parent, exist_ok=True)\n        if len({fixture.format for fixture in fixtures.values()}) != 1:\n            raise TypeError(\"All fixtures in a single file must have the same format.\")\n        fixtures.collect_into_file(fixture_path)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.FixtureCollector.verify_fixture_files","title":"verify_fixture_files(evm_fixture_verification)","text":"

    Runs evm [state|block]test on each fixture.

    Source code in src/ethereum_test_fixtures/collector.py
    def verify_fixture_files(self, evm_fixture_verification: FixtureVerifier) -> None:\n    \"\"\"\n    Runs `evm [state|block]test` on each fixture.\n    \"\"\"\n    for fixture_path, name_fixture_dict in self.all_fixtures.items():\n        for fixture_name, fixture in name_fixture_dict.items():\n            if FixtureFormats.is_verifiable(fixture.format):\n                info = self.json_path_to_test_item[fixture_path]\n                verify_fixtures_dump_dir = self._get_verify_fixtures_dump_dir(info)\n                evm_fixture_verification.verify_fixture(\n                    fixture.format,\n                    fixture_path,\n                    fixture_name=None,\n                    debug_output_path=verify_fixtures_dump_dir,\n                )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TestInfo","title":"TestInfo dataclass","text":"

    Contains test information from the current node.

    Source code in src/ethereum_test_fixtures/collector.py
    @dataclass(kw_only=True)\nclass TestInfo:\n    \"\"\"\n    Contains test information from the current node.\n    \"\"\"\n\n    name: str  # pytest: Item.name\n    id: str  # pytest: Item.nodeid\n    original_name: str  # pytest: Item.originalname\n    path: Path  # pytest: Item.path\n\n    def get_name_and_parameters(self) -> Tuple[str, str]:\n        \"\"\"\n        Converts a test name to a tuple containing the test name and test parameters.\n\n        Example:\n        test_push0_key_sstore[fork_Shanghai] -> test_push0_key_sstore, fork_Shanghai\n        \"\"\"\n        test_name, parameters = self.name.split(\"[\")\n        return test_name, re.sub(r\"[\\[\\-]\", \"_\", parameters).replace(\"]\", \"\")\n\n    def get_single_test_name(self) -> str:\n        \"\"\"\n        Converts a test name to a single test name.\n        \"\"\"\n        test_name, test_parameters = self.get_name_and_parameters()\n        return f\"{test_name}__{test_parameters}\"\n\n    def get_dump_dir_path(\n        self,\n        base_dump_dir: Optional[Path],\n        filler_path: Path,\n        level: Literal[\"test_module\", \"test_function\", \"test_parameter\"] = \"test_parameter\",\n    ) -> Optional[Path]:\n        \"\"\"\n        The path to dump the debug output as defined by the level to dump at.\n        \"\"\"\n        if not base_dump_dir:\n            return None\n        test_module_relative_dir = get_module_relative_output_dir(self.path, filler_path)\n        if level == \"test_module\":\n            return Path(base_dump_dir) / Path(str(test_module_relative_dir).replace(os.sep, \"__\"))\n        test_name, test_parameter_string = self.get_name_and_parameters()\n        flat_path = f\"{str(test_module_relative_dir).replace(os.sep, '__')}__{test_name}\"\n        if level == \"test_function\":\n            return Path(base_dump_dir) / flat_path\n        elif level == \"test_parameter\":\n            return Path(base_dump_dir) / flat_path / test_parameter_string\n        raise Exception(\"Unexpected level.\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TestInfo.get_name_and_parameters","title":"get_name_and_parameters()","text":"

    Converts a test name to a tuple containing the test name and test parameters.

    Example: test_push0_key_sstore[fork_Shanghai] -> test_push0_key_sstore, fork_Shanghai

    Source code in src/ethereum_test_fixtures/collector.py
    def get_name_and_parameters(self) -> Tuple[str, str]:\n    \"\"\"\n    Converts a test name to a tuple containing the test name and test parameters.\n\n    Example:\n    test_push0_key_sstore[fork_Shanghai] -> test_push0_key_sstore, fork_Shanghai\n    \"\"\"\n    test_name, parameters = self.name.split(\"[\")\n    return test_name, re.sub(r\"[\\[\\-]\", \"_\", parameters).replace(\"]\", \"\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TestInfo.get_single_test_name","title":"get_single_test_name()","text":"

    Converts a test name to a single test name.

    Source code in src/ethereum_test_fixtures/collector.py
    def get_single_test_name(self) -> str:\n    \"\"\"\n    Converts a test name to a single test name.\n    \"\"\"\n    test_name, test_parameters = self.get_name_and_parameters()\n    return f\"{test_name}__{test_parameters}\"\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TestInfo.get_dump_dir_path","title":"get_dump_dir_path(base_dump_dir, filler_path, level='test_parameter')","text":"

    The path to dump the debug output as defined by the level to dump at.

    Source code in src/ethereum_test_fixtures/collector.py
    def get_dump_dir_path(\n    self,\n    base_dump_dir: Optional[Path],\n    filler_path: Path,\n    level: Literal[\"test_module\", \"test_function\", \"test_parameter\"] = \"test_parameter\",\n) -> Optional[Path]:\n    \"\"\"\n    The path to dump the debug output as defined by the level to dump at.\n    \"\"\"\n    if not base_dump_dir:\n        return None\n    test_module_relative_dir = get_module_relative_output_dir(self.path, filler_path)\n    if level == \"test_module\":\n        return Path(base_dump_dir) / Path(str(test_module_relative_dir).replace(os.sep, \"__\"))\n    test_name, test_parameter_string = self.get_name_and_parameters()\n    flat_path = f\"{str(test_module_relative_dir).replace(os.sep, '__')}__{test_name}\"\n    if level == \"test_function\":\n        return Path(base_dump_dir) / flat_path\n    elif level == \"test_parameter\":\n        return Path(base_dump_dir) / flat_path / test_parameter_string\n    raise Exception(\"Unexpected level.\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BaseTest","title":"BaseTest","text":"

    Bases: BaseModel

    Represents a base Ethereum test which must return a single test fixture.

    Source code in src/ethereum_test_specs/base.py
    class BaseTest(BaseModel):\n    \"\"\"\n    Represents a base Ethereum test which must return a single test fixture.\n    \"\"\"\n\n    tag: str = \"\"\n\n    # Transition tool specific fields\n    t8n_dump_dir: Path | None = Field(None, exclude=True)\n    _t8n_call_counter: Iterator[int] = count(0)\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = []\n\n    @abstractmethod\n    def generate(\n        self,\n        *,\n        t8n: TransitionTool,\n        fork: Fork,\n        fixture_format: FixtureFormats,\n        eips: Optional[List[int]] = None,\n    ) -> BaseFixture:\n        \"\"\"\n        Generate the list of test fixtures.\n        \"\"\"\n        pass\n\n    @classmethod\n    def pytest_parameter_name(cls) -> str:\n        \"\"\"\n        Must return the name of the parameter used in pytest to select this\n        spec type as filler for the test.\n\n        By default, it returns the underscore separated name of the class.\n        \"\"\"\n        return reduce(lambda x, y: x + (\"_\" if y.isupper() else \"\") + y, cls.__name__).lower()\n\n    def get_next_transition_tool_output_path(self) -> str:\n        \"\"\"\n        Returns the path to the next transition tool output file.\n        \"\"\"\n        if not self.t8n_dump_dir:\n            return \"\"\n        return path.join(\n            self.t8n_dump_dir,\n            str(next(self._t8n_call_counter)),\n        )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BaseTest.generate","title":"generate(*, t8n, fork, fixture_format, eips=None) abstractmethod","text":"

    Generate the list of test fixtures.

    Source code in src/ethereum_test_specs/base.py
    @abstractmethod\ndef generate(\n    self,\n    *,\n    t8n: TransitionTool,\n    fork: Fork,\n    fixture_format: FixtureFormats,\n    eips: Optional[List[int]] = None,\n) -> BaseFixture:\n    \"\"\"\n    Generate the list of test fixtures.\n    \"\"\"\n    pass\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BaseTest.pytest_parameter_name","title":"pytest_parameter_name() classmethod","text":"

    Must return the name of the parameter used in pytest to select this spec type as filler for the test.

    By default, it returns the underscore separated name of the class.

    Source code in src/ethereum_test_specs/base.py
    @classmethod\ndef pytest_parameter_name(cls) -> str:\n    \"\"\"\n    Must return the name of the parameter used in pytest to select this\n    spec type as filler for the test.\n\n    By default, it returns the underscore separated name of the class.\n    \"\"\"\n    return reduce(lambda x, y: x + (\"_\" if y.isupper() else \"\") + y, cls.__name__).lower()\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BaseTest.get_next_transition_tool_output_path","title":"get_next_transition_tool_output_path()","text":"

    Returns the path to the next transition tool output file.

    Source code in src/ethereum_test_specs/base.py
    def get_next_transition_tool_output_path(self) -> str:\n    \"\"\"\n    Returns the path to the next transition tool output file.\n    \"\"\"\n    if not self.t8n_dump_dir:\n        return \"\"\n    return path.join(\n        self.t8n_dump_dir,\n        str(next(self._t8n_call_counter)),\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockchainTest","title":"BlockchainTest","text":"

    Bases: BaseTest

    Filler type that tests multiple blocks (valid or invalid) in a chain.

    Source code in src/ethereum_test_specs/blockchain.py
    class BlockchainTest(BaseTest):\n    \"\"\"\n    Filler type that tests multiple blocks (valid or invalid) in a chain.\n    \"\"\"\n\n    pre: Alloc\n    post: Alloc\n    blocks: List[Block]\n    genesis_environment: Environment = Field(default_factory=Environment)\n    verify_sync: bool = False\n    chain_id: int = 1\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = [\n        FixtureFormats.BLOCKCHAIN_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST_ENGINE,\n    ]\n\n    def make_genesis(\n        self,\n        fork: Fork,\n    ) -> Tuple[Alloc, FixtureBlock]:\n        \"\"\"\n        Create a genesis block from the blockchain test definition.\n        \"\"\"\n        env = self.genesis_environment.set_fork_requirements(fork)\n        assert (\n            env.withdrawals is None or len(env.withdrawals) == 0\n        ), \"withdrawals must be empty at genesis\"\n        assert env.parent_beacon_block_root is None or env.parent_beacon_block_root == Hash(\n            0\n        ), \"parent_beacon_block_root must be empty at genesis\"\n\n        pre_alloc = Alloc.merge(\n            Alloc.model_validate(fork.pre_allocation_blockchain()),\n            self.pre,\n        )\n        if empty_accounts := pre_alloc.empty_accounts():\n            raise Exception(f\"Empty accounts in pre state: {empty_accounts}\")\n        state_root = pre_alloc.state_root()\n        genesis = FixtureHeader(\n            parent_hash=0,\n            ommers_hash=EmptyOmmersRoot,\n            fee_recipient=0,\n            state_root=state_root,\n            transactions_trie=EmptyTrieRoot,\n            receipts_root=EmptyTrieRoot,\n            logs_bloom=0,\n            difficulty=0x20000 if env.difficulty is None else env.difficulty,\n            number=0,\n            gas_limit=env.gas_limit,\n            gas_used=0,\n            timestamp=0,\n            extra_data=b\"\\x00\",\n            prev_randao=0,\n            nonce=0,\n            base_fee_per_gas=env.base_fee_per_gas,\n            blob_gas_used=env.blob_gas_used,\n            excess_blob_gas=env.excess_blob_gas,\n            withdrawals_root=Withdrawal.list_root(env.withdrawals)\n            if env.withdrawals is not None\n            else None,\n            parent_beacon_block_root=env.parent_beacon_block_root,\n            requests_root=Requests(root=[]).trie_root\n            if fork.header_requests_required(0, 0)\n            else None,\n        )\n\n        return (\n            pre_alloc,\n            FixtureBlockBase(\n                header=genesis,\n                withdrawals=None if env.withdrawals is None else [],\n                deposit_requests=[] if fork.header_requests_required(0, 0) else None,\n                withdrawal_requests=[] if fork.header_requests_required(0, 0) else None,\n                consolidation_requests=[] if fork.header_requests_required(0, 0) else None,\n            ).with_rlp(\n                txs=[], requests=Requests() if fork.header_requests_required(0, 0) else None\n            ),\n        )\n\n    def generate_block_data(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        block: Block,\n        previous_env: Environment,\n        previous_alloc: Alloc,\n        eips: Optional[List[int]] = None,\n    ) -> Tuple[FixtureHeader, List[Transaction], Requests | None, Alloc, Environment]:\n        \"\"\"\n        Generate common block data for both make_fixture and make_hive_fixture.\n        \"\"\"\n        if block.rlp and block.exception is not None:\n            raise Exception(\n                \"test correctness: post-state cannot be verified if the \"\n                + \"block's rlp is supplied and the block is not supposed \"\n                + \"to produce an exception\"\n            )\n\n        env = block.set_environment(previous_env)\n        env = env.set_fork_requirements(fork)\n\n        txs = [tx.with_signature_and_sender() for tx in block.txs]\n\n        if failing_tx_count := len([tx for tx in txs if tx.error]) > 0:\n            if failing_tx_count > 1:\n                raise Exception(\n                    \"test correctness: only one transaction can produce an exception in a block\"\n                )\n            if not txs[-1].error:\n                raise Exception(\n                    \"test correctness: the transaction that produces an exception \"\n                    + \"must be the last transaction in the block\"\n                )\n\n        transition_tool_output = t8n.evaluate(\n            alloc=previous_alloc,\n            txs=txs,\n            env=env,\n            fork=fork,\n            chain_id=self.chain_id,\n            reward=fork.get_reward(env.number, env.timestamp),\n            eips=eips,\n            debug_output_path=self.get_next_transition_tool_output_path(),\n        )\n\n        try:\n            rejected_txs = verify_transactions(txs, transition_tool_output.result)\n            verify_result(transition_tool_output.result, env)\n        except Exception as e:\n            print_traces(t8n.get_traces())\n            pprint(transition_tool_output.result)\n            pprint(previous_alloc)\n            pprint(transition_tool_output.alloc)\n            raise e\n\n        if len(rejected_txs) > 0 and block.exception is None:\n            print_traces(t8n.get_traces())\n            raise Exception(\n                \"one or more transactions in `BlockchainTest` are \"\n                + \"intrinsically invalid, but the block was not expected \"\n                + \"to be invalid. Please verify whether the transaction \"\n                + \"was indeed expected to fail and add the proper \"\n                + \"`block.exception`\"\n            )\n\n        # One special case of the invalid transactions is the blob gas used, since this value\n        # is not included in the transition tool result, but it is included in the block header,\n        # and some clients check it before executing the block by simply counting the type-3 txs,\n        # we need to set the correct value by default.\n        blob_gas_used: int | None = None\n        if (blob_gas_per_blob := fork.blob_gas_per_blob(env.number, env.timestamp)) > 0:\n            blob_gas_used = blob_gas_per_blob * count_blobs(txs)\n\n        header = FixtureHeader(\n            **(\n                transition_tool_output.result.model_dump(\n                    exclude_none=True, exclude={\"blob_gas_used\", \"transactions_trie\"}\n                )\n                | env.model_dump(exclude_none=True, exclude={\"blob_gas_used\"})\n            ),\n            blob_gas_used=blob_gas_used,\n            transactions_trie=Transaction.list_root(txs),\n            extra_data=block.extra_data if block.extra_data is not None else b\"\",\n            fork=fork,\n        )\n\n        if block.header_verify is not None:\n            # Verify the header after transition tool processing.\n            block.header_verify.verify(header)\n\n        if block.rlp_modifier is not None:\n            # Modify any parameter specified in the `rlp_modifier` after\n            # transition tool processing.\n            header = block.rlp_modifier.apply(header)\n\n        requests = None\n        if fork.header_requests_required(header.number, header.timestamp):\n            requests_list: List[DepositRequest | WithdrawalRequest | ConsolidationRequest] = []\n            if transition_tool_output.result.deposit_requests is not None:\n                requests_list += transition_tool_output.result.deposit_requests\n            if transition_tool_output.result.withdrawal_requests is not None:\n                requests_list += transition_tool_output.result.withdrawal_requests\n            if transition_tool_output.result.consolidation_requests is not None:\n                requests_list += transition_tool_output.result.consolidation_requests\n            requests = Requests(root=requests_list)\n\n        if requests is not None and requests.trie_root != header.requests_root:\n            raise Exception(\n                f\"Requests root in header does not match the requests root in the transition tool \"\n                \"output: \"\n                f\"{header.requests_root} != {requests.trie_root}\"\n            )\n\n        if block.requests is not None:\n            requests = Requests(root=block.requests)\n            header.requests_root = requests.trie_root\n\n        return (\n            header,\n            txs,\n            requests,\n            transition_tool_output.alloc,\n            env,\n        )\n\n    def network_info(self, fork: Fork, eips: Optional[List[int]] = None):\n        \"\"\"\n        Returns fixture network information for the fork & EIP/s.\n        \"\"\"\n        return (\n            \"+\".join([fork.blockchain_test_network_name()] + [str(eip) for eip in eips])\n            if eips\n            else fork.blockchain_test_network_name()\n        )\n\n    def verify_post_state(self, t8n, alloc: Alloc):\n        \"\"\"\n        Verifies the post alloc after all block/s or payload/s are generated.\n        \"\"\"\n        try:\n            self.post.verify_post_alloc(alloc)\n        except Exception as e:\n            print_traces(t8n.get_traces())\n            raise e\n\n    def make_fixture(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        eips: Optional[List[int]] = None,\n    ) -> Fixture:\n        \"\"\"\n        Create a fixture from the blockchain test definition.\n        \"\"\"\n        fixture_blocks: List[FixtureBlock | InvalidFixtureBlock] = []\n\n        pre, genesis = self.make_genesis(fork)\n\n        alloc = pre\n        env = environment_from_parent_header(genesis.header)\n        head = genesis.header.block_hash\n\n        for block in self.blocks:\n            if block.rlp is None:\n                # This is the most common case, the RLP needs to be constructed\n                # based on the transactions to be included in the block.\n                # Set the environment according to the block to execute.\n                header, txs, requests, new_alloc, new_env = self.generate_block_data(\n                    t8n=t8n,\n                    fork=fork,\n                    block=block,\n                    previous_env=env,\n                    previous_alloc=alloc,\n                    eips=eips,\n                )\n                fixture_block = FixtureBlockBase(\n                    header=header,\n                    txs=[FixtureTransaction.from_transaction(tx) for tx in txs],\n                    ommers=[],\n                    withdrawals=[FixtureWithdrawal.from_withdrawal(w) for w in new_env.withdrawals]\n                    if new_env.withdrawals is not None\n                    else None,\n                    deposit_requests=[\n                        FixtureDepositRequest.from_deposit_request(d)\n                        for d in requests.deposit_requests()\n                    ]\n                    if requests is not None\n                    else None,\n                    withdrawal_requests=[\n                        FixtureWithdrawalRequest.from_withdrawal_request(w)\n                        for w in requests.withdrawal_requests()\n                    ]\n                    if requests is not None\n                    else None,\n                    consolidation_requests=[\n                        FixtureConsolidationRequest.from_consolidation_request(c)\n                        for c in requests.consolidation_requests()\n                    ]\n                    if requests is not None\n                    else None,\n                ).with_rlp(txs=txs, requests=requests)\n                if block.exception is None:\n                    fixture_blocks.append(fixture_block)\n                    # Update env, alloc and last block hash for the next block.\n                    alloc = new_alloc\n                    env = apply_new_parent(new_env, header)\n                    head = header.block_hash\n                else:\n                    fixture_blocks.append(\n                        InvalidFixtureBlock(\n                            rlp=fixture_block.rlp,\n                            expect_exception=block.exception,\n                            rlp_decoded=(\n                                None\n                                if BlockException.RLP_STRUCTURES_ENCODING in block.exception\n                                else fixture_block.without_rlp()\n                            ),\n                        ),\n                    )\n            else:\n                assert block.exception is not None, (\n                    \"test correctness: if the block's rlp is hard-coded, \"\n                    + \"the block is expected to produce an exception\"\n                )\n                fixture_blocks.append(\n                    InvalidFixtureBlock(\n                        rlp=block.rlp,\n                        expect_exception=block.exception,\n                    ),\n                )\n\n        self.verify_post_state(t8n, alloc)\n        return Fixture(\n            fork=self.network_info(fork, eips),\n            genesis=genesis.header,\n            genesis_rlp=genesis.rlp,\n            blocks=fixture_blocks,\n            last_block_hash=head,\n            pre=pre,\n            post_state=alloc,\n        )\n\n    def make_hive_fixture(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        eips: Optional[List[int]] = None,\n    ) -> EngineFixture:\n        \"\"\"\n        Create a hive fixture from the blocktest definition.\n        \"\"\"\n        fixture_payloads: List[FixtureEngineNewPayload] = []\n\n        pre, genesis = self.make_genesis(fork)\n        alloc = pre\n        env = environment_from_parent_header(genesis.header)\n        head_hash = genesis.header.block_hash\n\n        for block in self.blocks:\n            header, txs, requests, new_alloc, new_env = self.generate_block_data(\n                t8n=t8n, fork=fork, block=block, previous_env=env, previous_alloc=alloc, eips=eips\n            )\n            if block.rlp is None:\n                fixture_payloads.append(\n                    FixtureEngineNewPayload.from_fixture_header(\n                        fork=fork,\n                        header=header,\n                        transactions=txs,\n                        withdrawals=new_env.withdrawals,\n                        requests=requests,\n                        validation_error=block.exception,\n                        error_code=block.engine_api_error_code,\n                    )\n                )\n                if block.exception is None:\n                    alloc = new_alloc\n                    env = apply_new_parent(env, header)\n                    head_hash = header.block_hash\n        fcu_version = fork.engine_forkchoice_updated_version(header.number, header.timestamp)\n        assert (\n            fcu_version is not None\n        ), \"A hive fixture was requested but no forkchoice update is defined. The framework should\"\n        \" never try to execute this test case.\"\n\n        self.verify_post_state(t8n, alloc)\n\n        sync_payload: Optional[FixtureEngineNewPayload] = None\n        if self.verify_sync:\n            # Test is marked for syncing verification.\n            assert (\n                genesis.header.block_hash != head_hash\n            ), \"Invalid payload tests negative test via sync is not supported yet.\"\n\n            # Most clients require the header to start the sync process, so we create an empty\n            # block on top of the last block of the test to send it as new payload and trigger the\n            # sync process.\n            sync_header, _, requests, _, _ = self.generate_block_data(\n                t8n=t8n,\n                fork=fork,\n                block=Block(),\n                previous_env=env,\n                previous_alloc=alloc,\n                eips=eips,\n            )\n            sync_payload = FixtureEngineNewPayload.from_fixture_header(\n                fork=fork,\n                header=sync_header,\n                transactions=[],\n                withdrawals=[],\n                requests=requests,\n                validation_error=None,\n                error_code=None,\n            )\n\n        return EngineFixture(\n            fork=self.network_info(fork, eips),\n            genesis=genesis.header,\n            payloads=fixture_payloads,\n            fcu_version=fcu_version,\n            pre=pre,\n            post_state=alloc,\n            sync_payload=sync_payload,\n            last_block_hash=head_hash,\n        )\n\n    def generate(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        fixture_format: FixtureFormats,\n        eips: Optional[List[int]] = None,\n    ) -> BaseFixture:\n        \"\"\"\n        Generate the BlockchainTest fixture.\n        \"\"\"\n        t8n.reset_traces()\n        if fixture_format == FixtureFormats.BLOCKCHAIN_TEST_ENGINE:\n            return self.make_hive_fixture(t8n, fork, eips)\n        elif fixture_format == FixtureFormats.BLOCKCHAIN_TEST:\n            return self.make_fixture(t8n, fork, eips)\n\n        raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockchainTest.make_genesis","title":"make_genesis(fork)","text":"

    Create a genesis block from the blockchain test definition.

    Source code in src/ethereum_test_specs/blockchain.py
    def make_genesis(\n    self,\n    fork: Fork,\n) -> Tuple[Alloc, FixtureBlock]:\n    \"\"\"\n    Create a genesis block from the blockchain test definition.\n    \"\"\"\n    env = self.genesis_environment.set_fork_requirements(fork)\n    assert (\n        env.withdrawals is None or len(env.withdrawals) == 0\n    ), \"withdrawals must be empty at genesis\"\n    assert env.parent_beacon_block_root is None or env.parent_beacon_block_root == Hash(\n        0\n    ), \"parent_beacon_block_root must be empty at genesis\"\n\n    pre_alloc = Alloc.merge(\n        Alloc.model_validate(fork.pre_allocation_blockchain()),\n        self.pre,\n    )\n    if empty_accounts := pre_alloc.empty_accounts():\n        raise Exception(f\"Empty accounts in pre state: {empty_accounts}\")\n    state_root = pre_alloc.state_root()\n    genesis = FixtureHeader(\n        parent_hash=0,\n        ommers_hash=EmptyOmmersRoot,\n        fee_recipient=0,\n        state_root=state_root,\n        transactions_trie=EmptyTrieRoot,\n        receipts_root=EmptyTrieRoot,\n        logs_bloom=0,\n        difficulty=0x20000 if env.difficulty is None else env.difficulty,\n        number=0,\n        gas_limit=env.gas_limit,\n        gas_used=0,\n        timestamp=0,\n        extra_data=b\"\\x00\",\n        prev_randao=0,\n        nonce=0,\n        base_fee_per_gas=env.base_fee_per_gas,\n        blob_gas_used=env.blob_gas_used,\n        excess_blob_gas=env.excess_blob_gas,\n        withdrawals_root=Withdrawal.list_root(env.withdrawals)\n        if env.withdrawals is not None\n        else None,\n        parent_beacon_block_root=env.parent_beacon_block_root,\n        requests_root=Requests(root=[]).trie_root\n        if fork.header_requests_required(0, 0)\n        else None,\n    )\n\n    return (\n        pre_alloc,\n        FixtureBlockBase(\n            header=genesis,\n            withdrawals=None if env.withdrawals is None else [],\n            deposit_requests=[] if fork.header_requests_required(0, 0) else None,\n            withdrawal_requests=[] if fork.header_requests_required(0, 0) else None,\n            consolidation_requests=[] if fork.header_requests_required(0, 0) else None,\n        ).with_rlp(\n            txs=[], requests=Requests() if fork.header_requests_required(0, 0) else None\n        ),\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockchainTest.generate_block_data","title":"generate_block_data(t8n, fork, block, previous_env, previous_alloc, eips=None)","text":"

    Generate common block data for both make_fixture and make_hive_fixture.

    Source code in src/ethereum_test_specs/blockchain.py
    def generate_block_data(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    block: Block,\n    previous_env: Environment,\n    previous_alloc: Alloc,\n    eips: Optional[List[int]] = None,\n) -> Tuple[FixtureHeader, List[Transaction], Requests | None, Alloc, Environment]:\n    \"\"\"\n    Generate common block data for both make_fixture and make_hive_fixture.\n    \"\"\"\n    if block.rlp and block.exception is not None:\n        raise Exception(\n            \"test correctness: post-state cannot be verified if the \"\n            + \"block's rlp is supplied and the block is not supposed \"\n            + \"to produce an exception\"\n        )\n\n    env = block.set_environment(previous_env)\n    env = env.set_fork_requirements(fork)\n\n    txs = [tx.with_signature_and_sender() for tx in block.txs]\n\n    if failing_tx_count := len([tx for tx in txs if tx.error]) > 0:\n        if failing_tx_count > 1:\n            raise Exception(\n                \"test correctness: only one transaction can produce an exception in a block\"\n            )\n        if not txs[-1].error:\n            raise Exception(\n                \"test correctness: the transaction that produces an exception \"\n                + \"must be the last transaction in the block\"\n            )\n\n    transition_tool_output = t8n.evaluate(\n        alloc=previous_alloc,\n        txs=txs,\n        env=env,\n        fork=fork,\n        chain_id=self.chain_id,\n        reward=fork.get_reward(env.number, env.timestamp),\n        eips=eips,\n        debug_output_path=self.get_next_transition_tool_output_path(),\n    )\n\n    try:\n        rejected_txs = verify_transactions(txs, transition_tool_output.result)\n        verify_result(transition_tool_output.result, env)\n    except Exception as e:\n        print_traces(t8n.get_traces())\n        pprint(transition_tool_output.result)\n        pprint(previous_alloc)\n        pprint(transition_tool_output.alloc)\n        raise e\n\n    if len(rejected_txs) > 0 and block.exception is None:\n        print_traces(t8n.get_traces())\n        raise Exception(\n            \"one or more transactions in `BlockchainTest` are \"\n            + \"intrinsically invalid, but the block was not expected \"\n            + \"to be invalid. Please verify whether the transaction \"\n            + \"was indeed expected to fail and add the proper \"\n            + \"`block.exception`\"\n        )\n\n    # One special case of the invalid transactions is the blob gas used, since this value\n    # is not included in the transition tool result, but it is included in the block header,\n    # and some clients check it before executing the block by simply counting the type-3 txs,\n    # we need to set the correct value by default.\n    blob_gas_used: int | None = None\n    if (blob_gas_per_blob := fork.blob_gas_per_blob(env.number, env.timestamp)) > 0:\n        blob_gas_used = blob_gas_per_blob * count_blobs(txs)\n\n    header = FixtureHeader(\n        **(\n            transition_tool_output.result.model_dump(\n                exclude_none=True, exclude={\"blob_gas_used\", \"transactions_trie\"}\n            )\n            | env.model_dump(exclude_none=True, exclude={\"blob_gas_used\"})\n        ),\n        blob_gas_used=blob_gas_used,\n        transactions_trie=Transaction.list_root(txs),\n        extra_data=block.extra_data if block.extra_data is not None else b\"\",\n        fork=fork,\n    )\n\n    if block.header_verify is not None:\n        # Verify the header after transition tool processing.\n        block.header_verify.verify(header)\n\n    if block.rlp_modifier is not None:\n        # Modify any parameter specified in the `rlp_modifier` after\n        # transition tool processing.\n        header = block.rlp_modifier.apply(header)\n\n    requests = None\n    if fork.header_requests_required(header.number, header.timestamp):\n        requests_list: List[DepositRequest | WithdrawalRequest | ConsolidationRequest] = []\n        if transition_tool_output.result.deposit_requests is not None:\n            requests_list += transition_tool_output.result.deposit_requests\n        if transition_tool_output.result.withdrawal_requests is not None:\n            requests_list += transition_tool_output.result.withdrawal_requests\n        if transition_tool_output.result.consolidation_requests is not None:\n            requests_list += transition_tool_output.result.consolidation_requests\n        requests = Requests(root=requests_list)\n\n    if requests is not None and requests.trie_root != header.requests_root:\n        raise Exception(\n            f\"Requests root in header does not match the requests root in the transition tool \"\n            \"output: \"\n            f\"{header.requests_root} != {requests.trie_root}\"\n        )\n\n    if block.requests is not None:\n        requests = Requests(root=block.requests)\n        header.requests_root = requests.trie_root\n\n    return (\n        header,\n        txs,\n        requests,\n        transition_tool_output.alloc,\n        env,\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockchainTest.network_info","title":"network_info(fork, eips=None)","text":"

    Returns fixture network information for the fork & EIP/s.

    Source code in src/ethereum_test_specs/blockchain.py
    def network_info(self, fork: Fork, eips: Optional[List[int]] = None):\n    \"\"\"\n    Returns fixture network information for the fork & EIP/s.\n    \"\"\"\n    return (\n        \"+\".join([fork.blockchain_test_network_name()] + [str(eip) for eip in eips])\n        if eips\n        else fork.blockchain_test_network_name()\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockchainTest.verify_post_state","title":"verify_post_state(t8n, alloc)","text":"

    Verifies the post alloc after all block/s or payload/s are generated.

    Source code in src/ethereum_test_specs/blockchain.py
    def verify_post_state(self, t8n, alloc: Alloc):\n    \"\"\"\n    Verifies the post alloc after all block/s or payload/s are generated.\n    \"\"\"\n    try:\n        self.post.verify_post_alloc(alloc)\n    except Exception as e:\n        print_traces(t8n.get_traces())\n        raise e\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockchainTest.make_fixture","title":"make_fixture(t8n, fork, eips=None)","text":"

    Create a fixture from the blockchain test definition.

    Source code in src/ethereum_test_specs/blockchain.py
    def make_fixture(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    eips: Optional[List[int]] = None,\n) -> Fixture:\n    \"\"\"\n    Create a fixture from the blockchain test definition.\n    \"\"\"\n    fixture_blocks: List[FixtureBlock | InvalidFixtureBlock] = []\n\n    pre, genesis = self.make_genesis(fork)\n\n    alloc = pre\n    env = environment_from_parent_header(genesis.header)\n    head = genesis.header.block_hash\n\n    for block in self.blocks:\n        if block.rlp is None:\n            # This is the most common case, the RLP needs to be constructed\n            # based on the transactions to be included in the block.\n            # Set the environment according to the block to execute.\n            header, txs, requests, new_alloc, new_env = self.generate_block_data(\n                t8n=t8n,\n                fork=fork,\n                block=block,\n                previous_env=env,\n                previous_alloc=alloc,\n                eips=eips,\n            )\n            fixture_block = FixtureBlockBase(\n                header=header,\n                txs=[FixtureTransaction.from_transaction(tx) for tx in txs],\n                ommers=[],\n                withdrawals=[FixtureWithdrawal.from_withdrawal(w) for w in new_env.withdrawals]\n                if new_env.withdrawals is not None\n                else None,\n                deposit_requests=[\n                    FixtureDepositRequest.from_deposit_request(d)\n                    for d in requests.deposit_requests()\n                ]\n                if requests is not None\n                else None,\n                withdrawal_requests=[\n                    FixtureWithdrawalRequest.from_withdrawal_request(w)\n                    for w in requests.withdrawal_requests()\n                ]\n                if requests is not None\n                else None,\n                consolidation_requests=[\n                    FixtureConsolidationRequest.from_consolidation_request(c)\n                    for c in requests.consolidation_requests()\n                ]\n                if requests is not None\n                else None,\n            ).with_rlp(txs=txs, requests=requests)\n            if block.exception is None:\n                fixture_blocks.append(fixture_block)\n                # Update env, alloc and last block hash for the next block.\n                alloc = new_alloc\n                env = apply_new_parent(new_env, header)\n                head = header.block_hash\n            else:\n                fixture_blocks.append(\n                    InvalidFixtureBlock(\n                        rlp=fixture_block.rlp,\n                        expect_exception=block.exception,\n                        rlp_decoded=(\n                            None\n                            if BlockException.RLP_STRUCTURES_ENCODING in block.exception\n                            else fixture_block.without_rlp()\n                        ),\n                    ),\n                )\n        else:\n            assert block.exception is not None, (\n                \"test correctness: if the block's rlp is hard-coded, \"\n                + \"the block is expected to produce an exception\"\n            )\n            fixture_blocks.append(\n                InvalidFixtureBlock(\n                    rlp=block.rlp,\n                    expect_exception=block.exception,\n                ),\n            )\n\n    self.verify_post_state(t8n, alloc)\n    return Fixture(\n        fork=self.network_info(fork, eips),\n        genesis=genesis.header,\n        genesis_rlp=genesis.rlp,\n        blocks=fixture_blocks,\n        last_block_hash=head,\n        pre=pre,\n        post_state=alloc,\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockchainTest.make_hive_fixture","title":"make_hive_fixture(t8n, fork, eips=None)","text":"

    Create a hive fixture from the blocktest definition.

    Source code in src/ethereum_test_specs/blockchain.py
    def make_hive_fixture(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    eips: Optional[List[int]] = None,\n) -> EngineFixture:\n    \"\"\"\n    Create a hive fixture from the blocktest definition.\n    \"\"\"\n    fixture_payloads: List[FixtureEngineNewPayload] = []\n\n    pre, genesis = self.make_genesis(fork)\n    alloc = pre\n    env = environment_from_parent_header(genesis.header)\n    head_hash = genesis.header.block_hash\n\n    for block in self.blocks:\n        header, txs, requests, new_alloc, new_env = self.generate_block_data(\n            t8n=t8n, fork=fork, block=block, previous_env=env, previous_alloc=alloc, eips=eips\n        )\n        if block.rlp is None:\n            fixture_payloads.append(\n                FixtureEngineNewPayload.from_fixture_header(\n                    fork=fork,\n                    header=header,\n                    transactions=txs,\n                    withdrawals=new_env.withdrawals,\n                    requests=requests,\n                    validation_error=block.exception,\n                    error_code=block.engine_api_error_code,\n                )\n            )\n            if block.exception is None:\n                alloc = new_alloc\n                env = apply_new_parent(env, header)\n                head_hash = header.block_hash\n    fcu_version = fork.engine_forkchoice_updated_version(header.number, header.timestamp)\n    assert (\n        fcu_version is not None\n    ), \"A hive fixture was requested but no forkchoice update is defined. The framework should\"\n    \" never try to execute this test case.\"\n\n    self.verify_post_state(t8n, alloc)\n\n    sync_payload: Optional[FixtureEngineNewPayload] = None\n    if self.verify_sync:\n        # Test is marked for syncing verification.\n        assert (\n            genesis.header.block_hash != head_hash\n        ), \"Invalid payload tests negative test via sync is not supported yet.\"\n\n        # Most clients require the header to start the sync process, so we create an empty\n        # block on top of the last block of the test to send it as new payload and trigger the\n        # sync process.\n        sync_header, _, requests, _, _ = self.generate_block_data(\n            t8n=t8n,\n            fork=fork,\n            block=Block(),\n            previous_env=env,\n            previous_alloc=alloc,\n            eips=eips,\n        )\n        sync_payload = FixtureEngineNewPayload.from_fixture_header(\n            fork=fork,\n            header=sync_header,\n            transactions=[],\n            withdrawals=[],\n            requests=requests,\n            validation_error=None,\n            error_code=None,\n        )\n\n    return EngineFixture(\n        fork=self.network_info(fork, eips),\n        genesis=genesis.header,\n        payloads=fixture_payloads,\n        fcu_version=fcu_version,\n        pre=pre,\n        post_state=alloc,\n        sync_payload=sync_payload,\n        last_block_hash=head_hash,\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.BlockchainTest.generate","title":"generate(t8n, fork, fixture_format, eips=None)","text":"

    Generate the BlockchainTest fixture.

    Source code in src/ethereum_test_specs/blockchain.py
    def generate(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    fixture_format: FixtureFormats,\n    eips: Optional[List[int]] = None,\n) -> BaseFixture:\n    \"\"\"\n    Generate the BlockchainTest fixture.\n    \"\"\"\n    t8n.reset_traces()\n    if fixture_format == FixtureFormats.BLOCKCHAIN_TEST_ENGINE:\n        return self.make_hive_fixture(t8n, fork, eips)\n    elif fixture_format == FixtureFormats.BLOCKCHAIN_TEST:\n        return self.make_fixture(t8n, fork, eips)\n\n    raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFStateTest","title":"EOFStateTest","text":"

    Bases: EOFTest

    Filler type that tests EOF containers and also generates a state/blockchain test.

    Source code in src/ethereum_test_specs/eof.py
    class EOFStateTest(EOFTest):\n    \"\"\"\n    Filler type that tests EOF containers and also generates a state/blockchain test.\n    \"\"\"\n\n    deploy_tx: bool = False\n    tx_gas_limit: int = 10_000_000\n    tx_data: Bytes = Bytes(b\"\")\n    tx_sender_funding_amount: int = 1_000_000_000_000_000_000_000\n    env: Environment = Field(default_factory=Environment)\n    container_post: Account = Field(default_factory=Account)\n    pre: Alloc | None = None\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = [\n        FixtureFormats.EOF_TEST,\n        FixtureFormats.STATE_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST_ENGINE,\n    ]\n\n    @model_validator(mode=\"before\")\n    @classmethod\n    def check_container_type(cls, data: Any) -> Any:\n        \"\"\"\n        Check if the container exception matches the expected exception.\n        \"\"\"\n        if isinstance(data, dict):\n            container = data.get(\"data\")\n            deploy_tx = data.get(\"deploy_tx\")\n            container_kind = data.get(\"container_kind\")\n            if deploy_tx is None:\n                if (\n                    container is not None\n                    and isinstance(container, Container)\n                    and \"kind\" in container.model_fields_set\n                    and container.kind == ContainerKind.INITCODE\n                ) or (container_kind is not None and container_kind == ContainerKind.INITCODE):\n                    data[\"deploy_tx\"] = True\n        return data\n\n    @classmethod\n    def pytest_parameter_name(cls) -> str:\n        \"\"\"\n        Workaround for pytest parameter name.\n        \"\"\"\n        return \"eof_state_test\"\n\n    def generate_state_test(self) -> StateTest:\n        \"\"\"\n        Generate the StateTest filler.\n        \"\"\"\n        assert self.pre is not None, \"pre must be set to generate a StateTest.\"\n        tx = Transaction(\n            sender=self.pre.fund_eoa(amount=self.tx_sender_funding_amount),\n            gas_limit=self.tx_gas_limit,\n        )\n        post = Alloc()\n        if self.expect_exception is not None:  # Invalid EOF\n            tx.to = None  # Make EIP-7698 create transaction\n            tx.data = Bytes(self.data + self.tx_data)  # by concatenating container and tx data.\n            post[tx.created_contract] = None  # Expect failure.\n        elif self.deploy_tx:\n            tx.to = None  # Make EIP-7698 create transaction\n            tx.data = Bytes(self.data + self.tx_data)  # by concatenating container and tx data.\n            post[tx.created_contract] = self.container_post  # Successful.\n        else:\n            tx.to = self.pre.deploy_contract(code=self.data)\n            tx.data = self.tx_data\n            post[tx.to] = self.container_post\n        return StateTest(\n            pre=self.pre,\n            tx=tx,\n            env=self.env,\n            post=post,\n            t8n_dump_dir=self.t8n_dump_dir,\n        )\n\n    def generate(\n        self,\n        *,\n        t8n: TransitionTool,\n        fork: Fork,\n        eips: Optional[List[int]] = None,\n        fixture_format: FixtureFormats,\n        **_,\n    ) -> BaseFixture:\n        \"\"\"\n        Generate the BlockchainTest fixture.\n        \"\"\"\n        if fixture_format == FixtureFormats.EOF_TEST:\n            return self.make_eof_test_fixture(fork=fork, eips=eips)\n        elif fixture_format in (\n            FixtureFormats.STATE_TEST,\n            FixtureFormats.BLOCKCHAIN_TEST,\n            FixtureFormats.BLOCKCHAIN_TEST_ENGINE,\n        ):\n            return self.generate_state_test().generate(\n                t8n=t8n, fork=fork, fixture_format=fixture_format, eips=eips\n            )\n\n        raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFStateTest.check_container_type","title":"check_container_type(data) classmethod","text":"

    Check if the container exception matches the expected exception.

    Source code in src/ethereum_test_specs/eof.py
    @model_validator(mode=\"before\")\n@classmethod\ndef check_container_type(cls, data: Any) -> Any:\n    \"\"\"\n    Check if the container exception matches the expected exception.\n    \"\"\"\n    if isinstance(data, dict):\n        container = data.get(\"data\")\n        deploy_tx = data.get(\"deploy_tx\")\n        container_kind = data.get(\"container_kind\")\n        if deploy_tx is None:\n            if (\n                container is not None\n                and isinstance(container, Container)\n                and \"kind\" in container.model_fields_set\n                and container.kind == ContainerKind.INITCODE\n            ) or (container_kind is not None and container_kind == ContainerKind.INITCODE):\n                data[\"deploy_tx\"] = True\n    return data\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFStateTest.pytest_parameter_name","title":"pytest_parameter_name() classmethod","text":"

    Workaround for pytest parameter name.

    Source code in src/ethereum_test_specs/eof.py
    @classmethod\ndef pytest_parameter_name(cls) -> str:\n    \"\"\"\n    Workaround for pytest parameter name.\n    \"\"\"\n    return \"eof_state_test\"\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFStateTest.generate_state_test","title":"generate_state_test()","text":"

    Generate the StateTest filler.

    Source code in src/ethereum_test_specs/eof.py
    def generate_state_test(self) -> StateTest:\n    \"\"\"\n    Generate the StateTest filler.\n    \"\"\"\n    assert self.pre is not None, \"pre must be set to generate a StateTest.\"\n    tx = Transaction(\n        sender=self.pre.fund_eoa(amount=self.tx_sender_funding_amount),\n        gas_limit=self.tx_gas_limit,\n    )\n    post = Alloc()\n    if self.expect_exception is not None:  # Invalid EOF\n        tx.to = None  # Make EIP-7698 create transaction\n        tx.data = Bytes(self.data + self.tx_data)  # by concatenating container and tx data.\n        post[tx.created_contract] = None  # Expect failure.\n    elif self.deploy_tx:\n        tx.to = None  # Make EIP-7698 create transaction\n        tx.data = Bytes(self.data + self.tx_data)  # by concatenating container and tx data.\n        post[tx.created_contract] = self.container_post  # Successful.\n    else:\n        tx.to = self.pre.deploy_contract(code=self.data)\n        tx.data = self.tx_data\n        post[tx.to] = self.container_post\n    return StateTest(\n        pre=self.pre,\n        tx=tx,\n        env=self.env,\n        post=post,\n        t8n_dump_dir=self.t8n_dump_dir,\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFStateTest.generate","title":"generate(*, t8n, fork, eips=None, fixture_format, **_)","text":"

    Generate the BlockchainTest fixture.

    Source code in src/ethereum_test_specs/eof.py
    def generate(\n    self,\n    *,\n    t8n: TransitionTool,\n    fork: Fork,\n    eips: Optional[List[int]] = None,\n    fixture_format: FixtureFormats,\n    **_,\n) -> BaseFixture:\n    \"\"\"\n    Generate the BlockchainTest fixture.\n    \"\"\"\n    if fixture_format == FixtureFormats.EOF_TEST:\n        return self.make_eof_test_fixture(fork=fork, eips=eips)\n    elif fixture_format in (\n        FixtureFormats.STATE_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST_ENGINE,\n    ):\n        return self.generate_state_test().generate(\n            t8n=t8n, fork=fork, fixture_format=fixture_format, eips=eips\n        )\n\n    raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFTest","title":"EOFTest","text":"

    Bases: BaseTest

    Filler type that tests EOF containers.

    Source code in src/ethereum_test_specs/eof.py
    class EOFTest(BaseTest):\n    \"\"\"\n    Filler type that tests EOF containers.\n    \"\"\"\n\n    data: Bytes\n    expect_exception: EOFExceptionInstanceOrList | None = None\n    container_kind: ContainerKind | None = None\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = [\n        FixtureFormats.EOF_TEST,\n    ]\n\n    @model_validator(mode=\"before\")\n    @classmethod\n    def check_container_exception(cls, data: Any) -> Any:\n        \"\"\"\n        Check if the container exception matches the expected exception.\n        \"\"\"\n        if isinstance(data, dict):\n            container = data.get(\"data\")\n            expect_exception = data.get(\"expect_exception\")\n            container_kind = data.get(\"container_kind\")\n            if container is not None and isinstance(container, Container):\n                if (\n                    \"validity_error\" in container.model_fields_set\n                    and container.validity_error is not None\n                ):\n                    if expect_exception is not None:\n                        assert container.validity_error == expect_exception, (\n                            f\"Container validity error {container.validity_error} \"\n                            f\"does not match expected exception {expect_exception}.\"\n                        )\n                    if expect_exception is None:\n                        data[\"expect_exception\"] = container.validity_error\n                if \"kind\" in container.model_fields_set:\n                    if container_kind is not None:\n                        assert container.kind == container_kind, (\n                            f\"Container kind type {str(container.kind)} \"\n                            f\"does not match test {container_kind}.\"\n                        )\n                    if container.kind != ContainerKind.RUNTIME:\n                        data[\"container_kind\"] = container.kind\n        return data\n\n    @classmethod\n    def pytest_parameter_name(cls) -> str:\n        \"\"\"\n        Workaround for pytest parameter name.\n        \"\"\"\n        return \"eof_test\"\n\n    def make_eof_test_fixture(\n        self,\n        *,\n        fork: Fork,\n        eips: Optional[List[int]],\n    ) -> Fixture:\n        \"\"\"\n        Generate the EOF test fixture.\n        \"\"\"\n        vectors = [\n            Vector(\n                code=self.data,\n                container_kind=self.container_kind,\n                results={\n                    fork.blockchain_test_network_name(): Result(\n                        exception=self.expect_exception,\n                        valid=self.expect_exception is None,\n                    ),\n                },\n            )\n        ]\n        fixture = Fixture(vectors=dict(enumerate(vectors)))\n        try:\n            eof_parse = EOFParse()\n        except FileNotFoundError as e:\n            warnings.warn(f\"{e} Skipping EOF fixture verification. Fixtures may be invalid!\")\n            return fixture\n\n        for _, vector in fixture.vectors.items():\n            expected_result = vector.results.get(fork.blockchain_test_network_name())\n            if expected_result is None:\n                raise Exception(f\"EOF Fixture missing vector result for fork: {fork}\")\n            args = []\n            if vector.container_kind == ContainerKind.INITCODE:\n                args.append(\"--initcode\")\n            result = eof_parse.run(*args, input=str(vector.code))\n            self.verify_result(result, expected_result, vector.code)\n\n        return fixture\n\n    def verify_result(self, result: CompletedProcess, expected_result: Result, code: Bytes):\n        \"\"\"\n        Checks that the reported exception string matches the expected error.\n        \"\"\"\n        parser = EvmoneExceptionMapper()\n        actual_message = result.stdout.strip()\n        actual_exception = parser.message_to_exception(actual_message)\n\n        if expected_result.exception is None:\n            if \"OK\" in actual_message:\n                return\n            else:\n                raise UnexpectedEOFException(\n                    code=code, got=f\"{actual_exception} ({actual_message})\"\n                )\n        else:\n            expected_string = to_pipe_str(expected_result.exception)\n            print(expected_string)\n            print(actual_exception)\n            if \"OK\" in actual_message:\n                raise ExpectedEOFException(\n                    code=code,\n                    expected=f\"{expected_string}\",\n                )\n            elif actual_exception in expected_result.exception:\n                return\n            else:\n                raise EOFExceptionMismatch(\n                    code=code,\n                    expected=f\"{expected_string}\",\n                    got=f\"{actual_exception} ({actual_message})\",\n                )\n\n    def generate(\n        self,\n        *,\n        t8n: TransitionTool,\n        fork: Fork,\n        eips: Optional[List[int]] = None,\n        fixture_format: FixtureFormats,\n        **_,\n    ) -> BaseFixture:\n        \"\"\"\n        Generate the BlockchainTest fixture.\n        \"\"\"\n        if fixture_format == FixtureFormats.EOF_TEST:\n            return self.make_eof_test_fixture(fork=fork, eips=eips)\n\n        raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFTest.check_container_exception","title":"check_container_exception(data) classmethod","text":"

    Check if the container exception matches the expected exception.

    Source code in src/ethereum_test_specs/eof.py
    @model_validator(mode=\"before\")\n@classmethod\ndef check_container_exception(cls, data: Any) -> Any:\n    \"\"\"\n    Check if the container exception matches the expected exception.\n    \"\"\"\n    if isinstance(data, dict):\n        container = data.get(\"data\")\n        expect_exception = data.get(\"expect_exception\")\n        container_kind = data.get(\"container_kind\")\n        if container is not None and isinstance(container, Container):\n            if (\n                \"validity_error\" in container.model_fields_set\n                and container.validity_error is not None\n            ):\n                if expect_exception is not None:\n                    assert container.validity_error == expect_exception, (\n                        f\"Container validity error {container.validity_error} \"\n                        f\"does not match expected exception {expect_exception}.\"\n                    )\n                if expect_exception is None:\n                    data[\"expect_exception\"] = container.validity_error\n            if \"kind\" in container.model_fields_set:\n                if container_kind is not None:\n                    assert container.kind == container_kind, (\n                        f\"Container kind type {str(container.kind)} \"\n                        f\"does not match test {container_kind}.\"\n                    )\n                if container.kind != ContainerKind.RUNTIME:\n                    data[\"container_kind\"] = container.kind\n    return data\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFTest.pytest_parameter_name","title":"pytest_parameter_name() classmethod","text":"

    Workaround for pytest parameter name.

    Source code in src/ethereum_test_specs/eof.py
    @classmethod\ndef pytest_parameter_name(cls) -> str:\n    \"\"\"\n    Workaround for pytest parameter name.\n    \"\"\"\n    return \"eof_test\"\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFTest.make_eof_test_fixture","title":"make_eof_test_fixture(*, fork, eips)","text":"

    Generate the EOF test fixture.

    Source code in src/ethereum_test_specs/eof.py
    def make_eof_test_fixture(\n    self,\n    *,\n    fork: Fork,\n    eips: Optional[List[int]],\n) -> Fixture:\n    \"\"\"\n    Generate the EOF test fixture.\n    \"\"\"\n    vectors = [\n        Vector(\n            code=self.data,\n            container_kind=self.container_kind,\n            results={\n                fork.blockchain_test_network_name(): Result(\n                    exception=self.expect_exception,\n                    valid=self.expect_exception is None,\n                ),\n            },\n        )\n    ]\n    fixture = Fixture(vectors=dict(enumerate(vectors)))\n    try:\n        eof_parse = EOFParse()\n    except FileNotFoundError as e:\n        warnings.warn(f\"{e} Skipping EOF fixture verification. Fixtures may be invalid!\")\n        return fixture\n\n    for _, vector in fixture.vectors.items():\n        expected_result = vector.results.get(fork.blockchain_test_network_name())\n        if expected_result is None:\n            raise Exception(f\"EOF Fixture missing vector result for fork: {fork}\")\n        args = []\n        if vector.container_kind == ContainerKind.INITCODE:\n            args.append(\"--initcode\")\n        result = eof_parse.run(*args, input=str(vector.code))\n        self.verify_result(result, expected_result, vector.code)\n\n    return fixture\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFTest.verify_result","title":"verify_result(result, expected_result, code)","text":"

    Checks that the reported exception string matches the expected error.

    Source code in src/ethereum_test_specs/eof.py
    def verify_result(self, result: CompletedProcess, expected_result: Result, code: Bytes):\n    \"\"\"\n    Checks that the reported exception string matches the expected error.\n    \"\"\"\n    parser = EvmoneExceptionMapper()\n    actual_message = result.stdout.strip()\n    actual_exception = parser.message_to_exception(actual_message)\n\n    if expected_result.exception is None:\n        if \"OK\" in actual_message:\n            return\n        else:\n            raise UnexpectedEOFException(\n                code=code, got=f\"{actual_exception} ({actual_message})\"\n            )\n    else:\n        expected_string = to_pipe_str(expected_result.exception)\n        print(expected_string)\n        print(actual_exception)\n        if \"OK\" in actual_message:\n            raise ExpectedEOFException(\n                code=code,\n                expected=f\"{expected_string}\",\n            )\n        elif actual_exception in expected_result.exception:\n            return\n        else:\n            raise EOFExceptionMismatch(\n                code=code,\n                expected=f\"{expected_string}\",\n                got=f\"{actual_exception} ({actual_message})\",\n            )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.EOFTest.generate","title":"generate(*, t8n, fork, eips=None, fixture_format, **_)","text":"

    Generate the BlockchainTest fixture.

    Source code in src/ethereum_test_specs/eof.py
    def generate(\n    self,\n    *,\n    t8n: TransitionTool,\n    fork: Fork,\n    eips: Optional[List[int]] = None,\n    fixture_format: FixtureFormats,\n    **_,\n) -> BaseFixture:\n    \"\"\"\n    Generate the BlockchainTest fixture.\n    \"\"\"\n    if fixture_format == FixtureFormats.EOF_TEST:\n        return self.make_eof_test_fixture(fork=fork, eips=eips)\n\n    raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.StateTest","title":"StateTest","text":"

    Bases: BaseTest

    Filler type that tests transactions over the period of a single block.

    Source code in src/ethereum_test_specs/state.py
    class StateTest(BaseTest):\n    \"\"\"\n    Filler type that tests transactions over the period of a single block.\n    \"\"\"\n\n    env: Environment\n    pre: Alloc\n    post: Alloc\n    tx: Transaction\n    engine_api_error_code: Optional[EngineAPIError] = None\n    blockchain_test_header_verify: Optional[Header] = None\n    blockchain_test_rlp_modifier: Optional[Header] = None\n    chain_id: int = 1\n\n    supported_fixture_formats: ClassVar[List[FixtureFormats]] = [\n        FixtureFormats.BLOCKCHAIN_TEST,\n        FixtureFormats.BLOCKCHAIN_TEST_ENGINE,\n        FixtureFormats.STATE_TEST,\n    ]\n\n    def _generate_blockchain_genesis_environment(self) -> Environment:\n        \"\"\"\n        Generate the genesis environment for the BlockchainTest formatted test.\n        \"\"\"\n        assert (\n            self.env.number >= 1\n        ), \"genesis block number cannot be negative, set state test env.number to 1\"\n\n        # Modify values to the proper values for the genesis block\n        # TODO: All of this can be moved to a new method in `Fork`\n        updated_values: Dict[str, Any] = {\n            \"withdrawals\": None,\n            \"parent_beacon_block_root\": None,\n            \"number\": self.env.number - 1,\n        }\n        if self.env.excess_blob_gas:\n            # The excess blob gas environment value means the value of the context (block header)\n            # where the transaction is executed. In a blockchain test, we need to indirectly\n            # set the excess blob gas by setting the excess blob gas of the genesis block\n            # to the expected value plus the TARGET_BLOB_GAS_PER_BLOCK, which is the value\n            # that will be subtracted from the excess blob gas when the first block is mined.\n            updated_values[\"excess_blob_gas\"] = (\n                self.env.excess_blob_gas + TARGET_BLOB_GAS_PER_BLOCK\n            )\n\n        return self.env.copy(**updated_values)\n\n    def _generate_blockchain_blocks(self) -> List[Block]:\n        \"\"\"\n        Generate the single block that represents this state test in a BlockchainTest format.\n        \"\"\"\n        return [\n            Block(\n                number=self.env.number,\n                timestamp=self.env.timestamp,\n                fee_recipient=self.env.fee_recipient,\n                difficulty=self.env.difficulty,\n                gas_limit=self.env.gas_limit,\n                extra_data=self.env.extra_data,\n                withdrawals=self.env.withdrawals,\n                parent_beacon_block_root=self.env.parent_beacon_block_root,\n                txs=[self.tx],\n                ommers=[],\n                exception=self.tx.error,\n                header_verify=self.blockchain_test_header_verify,\n                rlp_modifier=self.blockchain_test_rlp_modifier,\n            )\n        ]\n\n    def generate_blockchain_test(self) -> BlockchainTest:\n        \"\"\"\n        Generate a BlockchainTest fixture from this StateTest fixture.\n        \"\"\"\n        return BlockchainTest(\n            genesis_environment=self._generate_blockchain_genesis_environment(),\n            pre=self.pre,\n            post=self.post,\n            blocks=self._generate_blockchain_blocks(),\n            t8n_dump_dir=self.t8n_dump_dir,\n        )\n\n    def make_state_test_fixture(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        eips: Optional[List[int]] = None,\n    ) -> Fixture:\n        \"\"\"\n        Create a fixture from the state test definition.\n        \"\"\"\n        # We can't generate a state test fixture that names a transition fork,\n        # so we get the fork at the block number and timestamp of the state test\n        fork = fork.fork_at(self.env.number, self.env.timestamp)\n\n        env = self.env.set_fork_requirements(fork)\n        tx = self.tx.with_signature_and_sender(keep_secret_key=True)\n        pre_alloc = Alloc.merge(\n            Alloc.model_validate(fork.pre_allocation()),\n            self.pre,\n        )\n        if empty_accounts := pre_alloc.empty_accounts():\n            raise Exception(f\"Empty accounts in pre state: {empty_accounts}\")\n\n        transition_tool_output = t8n.evaluate(\n            alloc=pre_alloc,\n            txs=[tx],\n            env=env,\n            fork=fork,\n            chain_id=self.chain_id,\n            reward=0,  # Reward on state tests is always zero\n            eips=eips,\n            debug_output_path=self.get_next_transition_tool_output_path(),\n        )\n\n        try:\n            self.post.verify_post_alloc(transition_tool_output.alloc)\n        except Exception as e:\n            print_traces(t8n.get_traces())\n            raise e\n\n        return Fixture(\n            env=FixtureEnvironment(**env.model_dump(exclude_none=True)),\n            pre=pre_alloc,\n            post={\n                fork.blockchain_test_network_name(): [\n                    FixtureForkPost(\n                        state_root=transition_tool_output.result.state_root,\n                        logs_hash=transition_tool_output.result.logs_hash,\n                        tx_bytes=tx.rlp,\n                        expect_exception=tx.error,\n                    )\n                ]\n            },\n            transaction=FixtureTransaction.from_transaction(tx),\n        )\n\n    def generate(\n        self,\n        t8n: TransitionTool,\n        fork: Fork,\n        fixture_format: FixtureFormats,\n        eips: Optional[List[int]] = None,\n    ) -> BaseFixture:\n        \"\"\"\n        Generate the BlockchainTest fixture.\n        \"\"\"\n        if fixture_format in BlockchainTest.supported_fixture_formats:\n            return self.generate_blockchain_test().generate(\n                t8n=t8n, fork=fork, fixture_format=fixture_format, eips=eips\n            )\n        elif fixture_format == FixtureFormats.STATE_TEST:\n            return self.make_state_test_fixture(t8n, fork, eips)\n\n        raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.StateTest.generate_blockchain_test","title":"generate_blockchain_test()","text":"

    Generate a BlockchainTest fixture from this StateTest fixture.

    Source code in src/ethereum_test_specs/state.py
    def generate_blockchain_test(self) -> BlockchainTest:\n    \"\"\"\n    Generate a BlockchainTest fixture from this StateTest fixture.\n    \"\"\"\n    return BlockchainTest(\n        genesis_environment=self._generate_blockchain_genesis_environment(),\n        pre=self.pre,\n        post=self.post,\n        blocks=self._generate_blockchain_blocks(),\n        t8n_dump_dir=self.t8n_dump_dir,\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.StateTest.make_state_test_fixture","title":"make_state_test_fixture(t8n, fork, eips=None)","text":"

    Create a fixture from the state test definition.

    Source code in src/ethereum_test_specs/state.py
    def make_state_test_fixture(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    eips: Optional[List[int]] = None,\n) -> Fixture:\n    \"\"\"\n    Create a fixture from the state test definition.\n    \"\"\"\n    # We can't generate a state test fixture that names a transition fork,\n    # so we get the fork at the block number and timestamp of the state test\n    fork = fork.fork_at(self.env.number, self.env.timestamp)\n\n    env = self.env.set_fork_requirements(fork)\n    tx = self.tx.with_signature_and_sender(keep_secret_key=True)\n    pre_alloc = Alloc.merge(\n        Alloc.model_validate(fork.pre_allocation()),\n        self.pre,\n    )\n    if empty_accounts := pre_alloc.empty_accounts():\n        raise Exception(f\"Empty accounts in pre state: {empty_accounts}\")\n\n    transition_tool_output = t8n.evaluate(\n        alloc=pre_alloc,\n        txs=[tx],\n        env=env,\n        fork=fork,\n        chain_id=self.chain_id,\n        reward=0,  # Reward on state tests is always zero\n        eips=eips,\n        debug_output_path=self.get_next_transition_tool_output_path(),\n    )\n\n    try:\n        self.post.verify_post_alloc(transition_tool_output.alloc)\n    except Exception as e:\n        print_traces(t8n.get_traces())\n        raise e\n\n    return Fixture(\n        env=FixtureEnvironment(**env.model_dump(exclude_none=True)),\n        pre=pre_alloc,\n        post={\n            fork.blockchain_test_network_name(): [\n                FixtureForkPost(\n                    state_root=transition_tool_output.result.state_root,\n                    logs_hash=transition_tool_output.result.logs_hash,\n                    tx_bytes=tx.rlp,\n                    expect_exception=tx.error,\n                )\n            ]\n        },\n        transaction=FixtureTransaction.from_transaction(tx),\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.StateTest.generate","title":"generate(t8n, fork, fixture_format, eips=None)","text":"

    Generate the BlockchainTest fixture.

    Source code in src/ethereum_test_specs/state.py
    def generate(\n    self,\n    t8n: TransitionTool,\n    fork: Fork,\n    fixture_format: FixtureFormats,\n    eips: Optional[List[int]] = None,\n) -> BaseFixture:\n    \"\"\"\n    Generate the BlockchainTest fixture.\n    \"\"\"\n    if fixture_format in BlockchainTest.supported_fixture_formats:\n        return self.generate_blockchain_test().generate(\n            t8n=t8n, fork=fork, fixture_format=fixture_format, eips=eips\n        )\n    elif fixture_format == FixtureFormats.STATE_TEST:\n        return self.make_state_test_fixture(t8n, fork, eips)\n\n    raise Exception(f\"Unknown fixture format: {fixture_format}\")\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block","title":"Block","text":"

    Bases: Header

    Block type used to describe block properties in test specs

    Source code in src/ethereum_test_specs/blockchain.py
    class Block(Header):\n    \"\"\"\n    Block type used to describe block properties in test specs\n    \"\"\"\n\n    rlp: Bytes | None = None\n    \"\"\"\n    If set, blockchain test will skip generating the block and will pass this value directly to\n    the Fixture.\n\n    Only meant to be used to simulate blocks with bad formats, and therefore\n    requires the block to produce an exception.\n    \"\"\"\n    header_verify: Header | None = None\n    \"\"\"\n    If set, the block header will be verified against the specified values.\n    \"\"\"\n    rlp_modifier: Header | None = None\n    \"\"\"\n    An RLP modifying header which values would be used to override the ones\n    returned by the  `evm_transition_tool`.\n    \"\"\"\n    exception: List[\n        TransactionException | BlockException\n    ] | TransactionException | BlockException | None = None\n    \"\"\"\n    If set, the block is expected to be rejected by the client.\n    \"\"\"\n    engine_api_error_code: EngineAPIError | None = None\n    \"\"\"\n    If set, the block is expected to produce an error response from the Engine API.\n    \"\"\"\n    txs: List[Transaction] = Field(default_factory=list)\n    \"\"\"\n    List of transactions included in the block.\n    \"\"\"\n    ommers: List[Header] | None = None\n    \"\"\"\n    List of ommer headers included in the block.\n    \"\"\"\n    withdrawals: List[Withdrawal] | None = None\n    \"\"\"\n    List of withdrawals to perform for this block.\n    \"\"\"\n    requests: List[DepositRequest | WithdrawalRequest | ConsolidationRequest] | None = None\n    \"\"\"\n    Custom list of requests to embed in this block.\n    \"\"\"\n\n    def set_environment(self, env: Environment) -> Environment:\n        \"\"\"\n        Creates a copy of the environment with the characteristics of this\n        specific block.\n        \"\"\"\n        new_env_values: Dict[str, Any] = {}\n\n        \"\"\"\n        Values that need to be set in the environment and are `None` for\n        this block need to be set to their defaults.\n        \"\"\"\n        new_env_values[\"difficulty\"] = self.difficulty\n        new_env_values[\"fee_recipient\"] = (\n            self.fee_recipient if self.fee_recipient is not None else Environment().fee_recipient\n        )\n        new_env_values[\"gas_limit\"] = (\n            self.gas_limit or env.parent_gas_limit or Environment().gas_limit\n        )\n        if not isinstance(self.base_fee_per_gas, Removable):\n            new_env_values[\"base_fee_per_gas\"] = self.base_fee_per_gas\n        new_env_values[\"withdrawals\"] = self.withdrawals\n        if not isinstance(self.excess_blob_gas, Removable):\n            new_env_values[\"excess_blob_gas\"] = self.excess_blob_gas\n        if not isinstance(self.blob_gas_used, Removable):\n            new_env_values[\"blob_gas_used\"] = self.blob_gas_used\n        if not isinstance(self.parent_beacon_block_root, Removable):\n            new_env_values[\"parent_beacon_block_root\"] = self.parent_beacon_block_root\n        \"\"\"\n        These values are required, but they depend on the previous environment,\n        so they can be calculated here.\n        \"\"\"\n        if self.number is not None:\n            new_env_values[\"number\"] = self.number\n        else:\n            # calculate the next block number for the environment\n            if len(env.block_hashes) == 0:\n                new_env_values[\"number\"] = 0\n            else:\n                new_env_values[\"number\"] = max([Number(n) for n in env.block_hashes.keys()]) + 1\n\n        if self.timestamp is not None:\n            new_env_values[\"timestamp\"] = self.timestamp\n        else:\n            assert env.parent_timestamp is not None\n            new_env_values[\"timestamp\"] = int(Number(env.parent_timestamp) + 12)\n\n        return env.copy(**new_env_values)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block.rlp","title":"rlp: Bytes | None = None class-attribute instance-attribute","text":"

    If set, blockchain test will skip generating the block and will pass this value directly to the Fixture.

    Only meant to be used to simulate blocks with bad formats, and therefore requires the block to produce an exception.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block.header_verify","title":"header_verify: Header | None = None class-attribute instance-attribute","text":"

    If set, the block header will be verified against the specified values.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block.rlp_modifier","title":"rlp_modifier: Header | None = None class-attribute instance-attribute","text":"

    An RLP modifying header which values would be used to override the ones returned by the evm_transition_tool.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block.exception","title":"exception: List[TransactionException | BlockException] | TransactionException | BlockException | None = None class-attribute instance-attribute","text":"

    If set, the block is expected to be rejected by the client.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block.engine_api_error_code","title":"engine_api_error_code: EngineAPIError | None = None class-attribute instance-attribute","text":"

    If set, the block is expected to produce an error response from the Engine API.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block.txs","title":"txs: List[Transaction] = Field(default_factory=list) class-attribute instance-attribute","text":"

    List of transactions included in the block.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block.ommers","title":"ommers: List[Header] | None = None class-attribute instance-attribute","text":"

    List of ommer headers included in the block.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block.withdrawals","title":"withdrawals: List[Withdrawal] | None = None class-attribute instance-attribute","text":"

    List of withdrawals to perform for this block.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block.requests","title":"requests: List[DepositRequest | WithdrawalRequest | ConsolidationRequest] | None = None class-attribute instance-attribute","text":"

    Custom list of requests to embed in this block.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Block.set_environment","title":"set_environment(env)","text":"

    Creates a copy of the environment with the characteristics of this specific block.

    Source code in src/ethereum_test_specs/blockchain.py
    def set_environment(self, env: Environment) -> Environment:\n    \"\"\"\n    Creates a copy of the environment with the characteristics of this\n    specific block.\n    \"\"\"\n    new_env_values: Dict[str, Any] = {}\n\n    \"\"\"\n    Values that need to be set in the environment and are `None` for\n    this block need to be set to their defaults.\n    \"\"\"\n    new_env_values[\"difficulty\"] = self.difficulty\n    new_env_values[\"fee_recipient\"] = (\n        self.fee_recipient if self.fee_recipient is not None else Environment().fee_recipient\n    )\n    new_env_values[\"gas_limit\"] = (\n        self.gas_limit or env.parent_gas_limit or Environment().gas_limit\n    )\n    if not isinstance(self.base_fee_per_gas, Removable):\n        new_env_values[\"base_fee_per_gas\"] = self.base_fee_per_gas\n    new_env_values[\"withdrawals\"] = self.withdrawals\n    if not isinstance(self.excess_blob_gas, Removable):\n        new_env_values[\"excess_blob_gas\"] = self.excess_blob_gas\n    if not isinstance(self.blob_gas_used, Removable):\n        new_env_values[\"blob_gas_used\"] = self.blob_gas_used\n    if not isinstance(self.parent_beacon_block_root, Removable):\n        new_env_values[\"parent_beacon_block_root\"] = self.parent_beacon_block_root\n    \"\"\"\n    These values are required, but they depend on the previous environment,\n    so they can be calculated here.\n    \"\"\"\n    if self.number is not None:\n        new_env_values[\"number\"] = self.number\n    else:\n        # calculate the next block number for the environment\n        if len(env.block_hashes) == 0:\n            new_env_values[\"number\"] = 0\n        else:\n            new_env_values[\"number\"] = max([Number(n) for n in env.block_hashes.keys()]) + 1\n\n    if self.timestamp is not None:\n        new_env_values[\"timestamp\"] = self.timestamp\n    else:\n        assert env.parent_timestamp is not None\n        new_env_values[\"timestamp\"] = int(Number(env.parent_timestamp) + 12)\n\n    return env.copy(**new_env_values)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Header","title":"Header","text":"

    Bases: CamelModel

    Header type used to describe block header properties in test specs.

    Source code in src/ethereum_test_specs/blockchain.py
    class Header(CamelModel):\n    \"\"\"\n    Header type used to describe block header properties in test specs.\n    \"\"\"\n\n    parent_hash: Hash | None = None\n    ommers_hash: Hash | None = None\n    fee_recipient: Address | None = None\n    state_root: Hash | None = None\n    transactions_trie: Hash | None = None\n    receipts_root: Hash | None = None\n    logs_bloom: Bloom | None = None\n    difficulty: HexNumber | None = None\n    number: HexNumber | None = None\n    gas_limit: HexNumber | None = None\n    gas_used: HexNumber | None = None\n    timestamp: HexNumber | None = None\n    extra_data: Bytes | None = None\n    prev_randao: Hash | None = None\n    nonce: HeaderNonce | None = None\n    base_fee_per_gas: Removable | HexNumber | None = None\n    withdrawals_root: Removable | Hash | None = None\n    blob_gas_used: Removable | HexNumber | None = None\n    excess_blob_gas: Removable | HexNumber | None = None\n    parent_beacon_block_root: Removable | Hash | None = None\n    requests_root: Removable | Hash | None = None\n\n    REMOVE_FIELD: ClassVar[Removable] = Removable()\n    \"\"\"\n    Sentinel object used to specify that a header field should be removed.\n    \"\"\"\n    EMPTY_FIELD: ClassVar[Removable] = Removable()\n    \"\"\"\n    Sentinel object used to specify that a header field must be empty during verification.\n\n    This can be used in a test to explicitly skip a field in a block's RLP encoding.\n    included in the (json) output when the model is serialized. For example:\n    ```\n    header_modifier = Header(\n        excess_blob_gas=Header.REMOVE_FIELD,\n    )\n    block = Block(\n        timestamp=TIMESTAMP,\n        rlp_modifier=header_modifier,\n        exception=BlockException.INCORRECT_BLOCK_FORMAT,\n        engine_api_error_code=EngineAPIError.InvalidParams,\n    )\n    ```\n    \"\"\"\n\n    model_config = ConfigDict(\n        arbitrary_types_allowed=True,\n        # explicitly set Removable items to None so they are not included in the serialization\n        # (in combination with exclude_None=True in model.dump()).\n        json_encoders={\n            Removable: lambda x: None,\n        },\n    )\n\n    @field_validator(\"withdrawals_root\", mode=\"before\")\n    @classmethod\n    def validate_withdrawals_root(cls, value):\n        \"\"\"\n        Helper validator to convert a list of withdrawals into the withdrawals root hash.\n        \"\"\"\n        if isinstance(value, list):\n            return Withdrawal.list_root(value)\n        return value\n\n    @field_validator(\"requests_root\", mode=\"before\")\n    @classmethod\n    def validate_requests_root(cls, value):\n        \"\"\"\n        Helper validator to convert a list of requests into the requests root hash.\n        \"\"\"\n        if isinstance(value, list):\n            return Requests(root=value).trie_root\n        return value\n\n    def apply(self, target: FixtureHeader) -> FixtureHeader:\n        \"\"\"\n        Produces a fixture header copy with the set values from the modifier.\n        \"\"\"\n        return target.copy(\n            **{\n                k: (v if v is not Header.REMOVE_FIELD else None)\n                for k, v in self.model_dump(exclude_none=True).items()\n            }\n        )\n\n    def verify(self, target: FixtureHeader):\n        \"\"\"\n        Verifies that the header fields from self are as expected.\n        \"\"\"\n        for field_name in self.model_fields:\n            baseline_value = getattr(self, field_name)\n            if baseline_value is not None:\n                assert baseline_value is not Header.REMOVE_FIELD, \"invalid header\"\n                value = getattr(target, field_name)\n                if baseline_value is Header.EMPTY_FIELD:\n                    assert (\n                        value is None\n                    ), f\"invalid header field {field_name}, got {value}, want None\"\n                    continue\n                assert value == baseline_value, (\n                    f\"invalid header field ({field_name}) value, \"\n                    + f\"got {value}, want {baseline_value}\"\n                )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Header.REMOVE_FIELD","title":"REMOVE_FIELD: Removable = Removable() class-attribute","text":"

    Sentinel object used to specify that a header field should be removed.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Header.EMPTY_FIELD","title":"EMPTY_FIELD: Removable = Removable() class-attribute","text":"

    Sentinel object used to specify that a header field must be empty during verification.

    This can be used in a test to explicitly skip a field in a block's RLP encoding. included in the (json) output when the model is serialized. For example:

    header_modifier = Header(\n    excess_blob_gas=Header.REMOVE_FIELD,\n)\nblock = Block(\n    timestamp=TIMESTAMP,\n    rlp_modifier=header_modifier,\n    exception=BlockException.INCORRECT_BLOCK_FORMAT,\n    engine_api_error_code=EngineAPIError.InvalidParams,\n)\n

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Header.validate_withdrawals_root","title":"validate_withdrawals_root(value) classmethod","text":"

    Helper validator to convert a list of withdrawals into the withdrawals root hash.

    Source code in src/ethereum_test_specs/blockchain.py
    @field_validator(\"withdrawals_root\", mode=\"before\")\n@classmethod\ndef validate_withdrawals_root(cls, value):\n    \"\"\"\n    Helper validator to convert a list of withdrawals into the withdrawals root hash.\n    \"\"\"\n    if isinstance(value, list):\n        return Withdrawal.list_root(value)\n    return value\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Header.validate_requests_root","title":"validate_requests_root(value) classmethod","text":"

    Helper validator to convert a list of requests into the requests root hash.

    Source code in src/ethereum_test_specs/blockchain.py
    @field_validator(\"requests_root\", mode=\"before\")\n@classmethod\ndef validate_requests_root(cls, value):\n    \"\"\"\n    Helper validator to convert a list of requests into the requests root hash.\n    \"\"\"\n    if isinstance(value, list):\n        return Requests(root=value).trie_root\n    return value\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Header.apply","title":"apply(target)","text":"

    Produces a fixture header copy with the set values from the modifier.

    Source code in src/ethereum_test_specs/blockchain.py
    def apply(self, target: FixtureHeader) -> FixtureHeader:\n    \"\"\"\n    Produces a fixture header copy with the set values from the modifier.\n    \"\"\"\n    return target.copy(\n        **{\n            k: (v if v is not Header.REMOVE_FIELD else None)\n            for k, v in self.model_dump(exclude_none=True).items()\n        }\n    )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Header.verify","title":"verify(target)","text":"

    Verifies that the header fields from self are as expected.

    Source code in src/ethereum_test_specs/blockchain.py
    def verify(self, target: FixtureHeader):\n    \"\"\"\n    Verifies that the header fields from self are as expected.\n    \"\"\"\n    for field_name in self.model_fields:\n        baseline_value = getattr(self, field_name)\n        if baseline_value is not None:\n            assert baseline_value is not Header.REMOVE_FIELD, \"invalid header\"\n            value = getattr(target, field_name)\n            if baseline_value is Header.EMPTY_FIELD:\n                assert (\n                    value is None\n                ), f\"invalid header field {field_name}, got {value}, want None\"\n                continue\n            assert value == baseline_value, (\n                f\"invalid header field ({field_name}) value, \"\n                + f\"got {value}, want {baseline_value}\"\n            )\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.CalldataCase","title":"CalldataCase","text":"

    Bases: Case

    Small helper class to represent a single case whose condition depends on the value of the contract's calldata in a Switch case statement.

    By default the calldata is read from position zero, but this can be overridden using position.

    The condition is generated automatically based on the value (and optionally position) and may not be set directly.

    Source code in src/ethereum_test_tools/code/generators.py
    class CalldataCase(Case):\n    \"\"\"\n    Small helper class to represent a single case whose condition depends\n    on the value of the contract's calldata in a Switch case statement.\n\n    By default the calldata is read from position zero, but this can be\n    overridden using `position`.\n\n    The `condition` is generated automatically based on the `value` (and\n    optionally `position`) and may not be set directly.\n    \"\"\"\n\n    def __init__(self, value: int | str | Bytecode, position: int = 0, **kwargs):\n        \"\"\"\n        Generate the condition base on `value` and `position`.\n        \"\"\"\n        condition = Op.EQ(Op.CALLDATALOAD(position), value)\n        super().__init__(condition=condition, **kwargs)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.CalldataCase.__init__","title":"__init__(value, position=0, **kwargs)","text":"

    Generate the condition base on value and position.

    Source code in src/ethereum_test_tools/code/generators.py
    def __init__(self, value: int | str | Bytecode, position: int = 0, **kwargs):\n    \"\"\"\n    Generate the condition base on `value` and `position`.\n    \"\"\"\n    condition = Op.EQ(Op.CALLDATALOAD(position), value)\n    super().__init__(condition=condition, **kwargs)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Case","title":"Case dataclass","text":"

    Small helper class to represent a single, generic case in a Switch cases list.

    Source code in src/ethereum_test_tools/code/generators.py
    @dataclass(kw_only=True)\nclass Case:\n    \"\"\"\n    Small helper class to represent a single, generic case in a `Switch` cases\n    list.\n    \"\"\"\n\n    condition: Bytecode | Op\n    action: Bytecode | Op\n    terminating: bool | None = None\n\n    @property\n    def is_terminating(self) -> bool:\n        \"\"\"\n        Returns whether the case is terminating.\n        \"\"\"\n        return self.terminating if self.terminating is not None else self.action.terminating\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Case.is_terminating","title":"is_terminating: bool property","text":"

    Returns whether the case is terminating.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.CodeGasMeasure","title":"CodeGasMeasure","text":"

    Bases: Bytecode

    Helper class used to generate bytecode that measures gas usage of a bytecode, taking into account and subtracting any extra overhead gas costs required to execute. By default, the result gas calculation is saved to storage key 0.

    Source code in src/ethereum_test_tools/code/generators.py
    class CodeGasMeasure(Bytecode):\n    \"\"\"\n    Helper class used to generate bytecode that measures gas usage of a\n    bytecode, taking into account and subtracting any extra overhead gas costs\n    required to execute.\n    By default, the result gas calculation is saved to storage key 0.\n    \"\"\"\n\n    code: Bytecode\n    \"\"\"\n    Bytecode to be executed to measure the gas usage.\n    \"\"\"\n    overhead_cost: int\n    \"\"\"\n    Extra gas cost to be subtracted from extra operations.\n    \"\"\"\n    extra_stack_items: int\n    \"\"\"\n    Extra stack items that remain at the end of the execution.\n    To be considered when subtracting the value of the previous GAS operation,\n    and to be popped at the end of the execution.\n    \"\"\"\n    sstore_key: int\n    \"\"\"\n    Storage key to save the gas used.\n    \"\"\"\n\n    def __new__(\n        cls,\n        *,\n        code: Bytecode,\n        overhead_cost: int = 0,\n        extra_stack_items: int = 0,\n        sstore_key: int = 0,\n        stop: bool = True,\n    ):\n        \"\"\"\n        Assemble the bytecode that measures gas usage.\n        \"\"\"\n        res = Op.GAS + code + Op.GAS\n        # We need to swap and pop for each extra stack item that remained from\n        # the execution of the code\n        res += (Op.SWAP1 + Op.POP) * extra_stack_items\n        res += (\n            Op.SWAP1\n            + Op.SUB\n            + Op.PUSH1(overhead_cost + 2)\n            + Op.SWAP1\n            + Op.SUB\n            + Op.PUSH1(sstore_key)\n            + Op.SSTORE\n        )\n        if stop:\n            res += Op.STOP\n\n        instance = super().__new__(cls, res)\n        instance.code = code\n        instance.overhead_cost = overhead_cost\n        instance.extra_stack_items = extra_stack_items\n        instance.sstore_key = sstore_key\n        return instance\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.CodeGasMeasure.code","title":"code: Bytecode instance-attribute","text":"

    Bytecode to be executed to measure the gas usage.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.CodeGasMeasure.overhead_cost","title":"overhead_cost: int instance-attribute","text":"

    Extra gas cost to be subtracted from extra operations.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.CodeGasMeasure.extra_stack_items","title":"extra_stack_items: int instance-attribute","text":"

    Extra stack items that remain at the end of the execution. To be considered when subtracting the value of the previous GAS operation, and to be popped at the end of the execution.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.CodeGasMeasure.sstore_key","title":"sstore_key: int instance-attribute","text":"

    Storage key to save the gas used.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.CodeGasMeasure.__new__","title":"__new__(*, code, overhead_cost=0, extra_stack_items=0, sstore_key=0, stop=True)","text":"

    Assemble the bytecode that measures gas usage.

    Source code in src/ethereum_test_tools/code/generators.py
    def __new__(\n    cls,\n    *,\n    code: Bytecode,\n    overhead_cost: int = 0,\n    extra_stack_items: int = 0,\n    sstore_key: int = 0,\n    stop: bool = True,\n):\n    \"\"\"\n    Assemble the bytecode that measures gas usage.\n    \"\"\"\n    res = Op.GAS + code + Op.GAS\n    # We need to swap and pop for each extra stack item that remained from\n    # the execution of the code\n    res += (Op.SWAP1 + Op.POP) * extra_stack_items\n    res += (\n        Op.SWAP1\n        + Op.SUB\n        + Op.PUSH1(overhead_cost + 2)\n        + Op.SWAP1\n        + Op.SUB\n        + Op.PUSH1(sstore_key)\n        + Op.SSTORE\n    )\n    if stop:\n        res += Op.STOP\n\n    instance = super().__new__(cls, res)\n    instance.code = code\n    instance.overhead_cost = overhead_cost\n    instance.extra_stack_items = extra_stack_items\n    instance.sstore_key = sstore_key\n    return instance\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Conditional","title":"Conditional","text":"

    Bases: Bytecode

    Helper class used to generate conditional bytecode.

    Source code in src/ethereum_test_tools/code/generators.py
    class Conditional(Bytecode):\n    \"\"\"\n    Helper class used to generate conditional bytecode.\n    \"\"\"\n\n    def __new__(\n        cls,\n        *,\n        condition: Bytecode | Op,\n        if_true: Bytecode | Op = Bytecode(),\n        if_false: Bytecode | Op = Bytecode(),\n        evm_code_type: EVMCodeType = EVMCodeType.LEGACY,\n    ):\n        \"\"\"\n        Assemble the conditional bytecode by generating the necessary jump and\n        jumpdest opcodes surrounding the condition and the two possible execution\n        paths.\n\n        In the future, PC usage should be replaced by using RJUMP and RJUMPI\n        \"\"\"\n        if evm_code_type == EVMCodeType.LEGACY:\n            # First we append a jumpdest to the start of the true branch\n            if_true = Op.JUMPDEST + if_true\n\n            # Then we append the unconditional jump to the end of the false branch, used to skip\n            # the true branch\n            if_false += Op.JUMP(Op.ADD(Op.PC, len(if_true) + 3))\n\n            # Then we need to do the conditional jump by skipping the false branch\n            condition = Op.JUMPI(Op.ADD(Op.PC, len(if_false) + 3), condition)\n\n        elif evm_code_type == EVMCodeType.EOF_V1:\n            if_false += Op.RJUMP[len(if_true)]\n            condition = Op.RJUMPI[len(if_false)](condition)\n\n        # Finally we append the true and false branches, and the condition, plus the jumpdest at\n        # the very end\n        bytecode = condition + if_false + if_true + Op.JUMPDEST\n\n        return super().__new__(cls, bytecode)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Conditional.__new__","title":"__new__(*, condition, if_true=Bytecode(), if_false=Bytecode(), evm_code_type=EVMCodeType.LEGACY)","text":"

    Assemble the conditional bytecode by generating the necessary jump and jumpdest opcodes surrounding the condition and the two possible execution paths.

    In the future, PC usage should be replaced by using RJUMP and RJUMPI

    Source code in src/ethereum_test_tools/code/generators.py
    def __new__(\n    cls,\n    *,\n    condition: Bytecode | Op,\n    if_true: Bytecode | Op = Bytecode(),\n    if_false: Bytecode | Op = Bytecode(),\n    evm_code_type: EVMCodeType = EVMCodeType.LEGACY,\n):\n    \"\"\"\n    Assemble the conditional bytecode by generating the necessary jump and\n    jumpdest opcodes surrounding the condition and the two possible execution\n    paths.\n\n    In the future, PC usage should be replaced by using RJUMP and RJUMPI\n    \"\"\"\n    if evm_code_type == EVMCodeType.LEGACY:\n        # First we append a jumpdest to the start of the true branch\n        if_true = Op.JUMPDEST + if_true\n\n        # Then we append the unconditional jump to the end of the false branch, used to skip\n        # the true branch\n        if_false += Op.JUMP(Op.ADD(Op.PC, len(if_true) + 3))\n\n        # Then we need to do the conditional jump by skipping the false branch\n        condition = Op.JUMPI(Op.ADD(Op.PC, len(if_false) + 3), condition)\n\n    elif evm_code_type == EVMCodeType.EOF_V1:\n        if_false += Op.RJUMP[len(if_true)]\n        condition = Op.RJUMPI[len(if_false)](condition)\n\n    # Finally we append the true and false branches, and the condition, plus the jumpdest at\n    # the very end\n    bytecode = condition + if_false + if_true + Op.JUMPDEST\n\n    return super().__new__(cls, bytecode)\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Initcode","title":"Initcode","text":"

    Bases: Bytecode

    Helper class used to generate initcode for the specified deployment code.

    The execution gas cost of the initcode is calculated, and also the deployment gas costs for the deployed code.

    The initcode can be padded to a certain length if necessary, which does not affect the deployed code.

    Other costs such as the CREATE2 hashing costs or the initcode_word_cost of EIP-3860 are not taken into account by any of these calculated costs.

    Source code in src/ethereum_test_tools/code/generators.py
    class Initcode(Bytecode):\n    \"\"\"\n    Helper class used to generate initcode for the specified deployment code.\n\n    The execution gas cost of the initcode is calculated, and also the\n    deployment gas costs for the deployed code.\n\n    The initcode can be padded to a certain length if necessary, which\n    does not affect the deployed code.\n\n    Other costs such as the CREATE2 hashing costs or the initcode_word_cost\n    of EIP-3860 are *not* taken into account by any of these calculated\n    costs.\n    \"\"\"\n\n    deploy_code: SupportsBytes\n    \"\"\"\n    Bytecode to be deployed by the initcode.\n    \"\"\"\n    execution_gas: int\n    \"\"\"\n    Gas cost of executing the initcode, without considering deployment gas\n    costs.\n    \"\"\"\n    deployment_gas: int\n    \"\"\"\n    Gas cost of deploying the cost, subtracted after initcode execution,\n    \"\"\"\n\n    def __new__(\n        cls,\n        *,\n        deploy_code: SupportsBytes = Bytecode(),\n        initcode_length: int | None = None,\n        initcode_prefix: Bytecode = Bytecode(),\n        initcode_prefix_execution_gas: int = 0,\n        padding_byte: int = 0x00,\n        name: str = \"\",\n    ):\n        \"\"\"\n        Generate legacy initcode that inits a contract with the specified code.\n        The initcode can be padded to a specified length for testing purposes.\n        \"\"\"\n        initcode = initcode_prefix\n        code_length = len(bytes(deploy_code))\n        execution_gas = initcode_prefix_execution_gas\n\n        # PUSH2: length=<bytecode length>\n        initcode += Op.PUSH2(code_length)\n        execution_gas = 3\n\n        # PUSH1: offset=0\n        initcode += Op.PUSH1(0)\n        execution_gas += 3\n\n        # DUP2\n        initcode += Op.DUP2\n        execution_gas += 3\n\n        # PUSH1: initcode_length=11 + len(initcode_prefix_bytes) (constant)\n        no_prefix_length = 0x0B\n        assert no_prefix_length + len(initcode_prefix) <= 0xFF, \"initcode prefix too long\"\n        initcode += Op.PUSH1(no_prefix_length + len(initcode_prefix))\n        execution_gas += 3\n\n        # DUP3\n        initcode += Op.DUP3\n        execution_gas += 3\n\n        # CODECOPY: destinationOffset=0, offset=0, length\n        initcode += Op.CODECOPY\n        execution_gas += (\n            3\n            + (3 * ceiling_division(code_length, 32))\n            + (3 * code_length)\n            + ((code_length * code_length) // 512)\n        )\n\n        # RETURN: offset=0, length\n        initcode += Op.RETURN\n        execution_gas += 0\n\n        initcode_plus_deploy_code = bytes(initcode) + bytes(deploy_code)\n        padding_bytes = bytes()\n\n        if initcode_length is not None:\n            assert initcode_length >= len(\n                initcode_plus_deploy_code\n            ), \"specified invalid length for initcode\"\n\n            padding_bytes = bytes(\n                [padding_byte] * (initcode_length - len(initcode_plus_deploy_code))\n            )\n\n        initcode_bytes = initcode_plus_deploy_code + padding_bytes\n        instance = super().__new__(\n            cls,\n            initcode_bytes,\n            popped_stack_items=initcode.popped_stack_items,\n            pushed_stack_items=initcode.pushed_stack_items,\n            max_stack_height=initcode.max_stack_height,\n            min_stack_height=initcode.min_stack_height,\n        )\n        instance._name_ = name\n        instance.deploy_code = deploy_code\n        instance.execution_gas = execution_gas\n        instance.deployment_gas = GAS_PER_DEPLOYED_CODE_BYTE * len(bytes(instance.deploy_code))\n\n        return instance\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Initcode.deploy_code","title":"deploy_code: SupportsBytes instance-attribute","text":"

    Bytecode to be deployed by the initcode.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Initcode.execution_gas","title":"execution_gas: int instance-attribute","text":"

    Gas cost of executing the initcode, without considering deployment gas costs.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Initcode.deployment_gas","title":"deployment_gas: int instance-attribute","text":"

    Gas cost of deploying the cost, subtracted after initcode execution,

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Initcode.__new__","title":"__new__(*, deploy_code=Bytecode(), initcode_length=None, initcode_prefix=Bytecode(), initcode_prefix_execution_gas=0, padding_byte=0, name='')","text":"

    Generate legacy initcode that inits a contract with the specified code. The initcode can be padded to a specified length for testing purposes.

    Source code in src/ethereum_test_tools/code/generators.py
    def __new__(\n    cls,\n    *,\n    deploy_code: SupportsBytes = Bytecode(),\n    initcode_length: int | None = None,\n    initcode_prefix: Bytecode = Bytecode(),\n    initcode_prefix_execution_gas: int = 0,\n    padding_byte: int = 0x00,\n    name: str = \"\",\n):\n    \"\"\"\n    Generate legacy initcode that inits a contract with the specified code.\n    The initcode can be padded to a specified length for testing purposes.\n    \"\"\"\n    initcode = initcode_prefix\n    code_length = len(bytes(deploy_code))\n    execution_gas = initcode_prefix_execution_gas\n\n    # PUSH2: length=<bytecode length>\n    initcode += Op.PUSH2(code_length)\n    execution_gas = 3\n\n    # PUSH1: offset=0\n    initcode += Op.PUSH1(0)\n    execution_gas += 3\n\n    # DUP2\n    initcode += Op.DUP2\n    execution_gas += 3\n\n    # PUSH1: initcode_length=11 + len(initcode_prefix_bytes) (constant)\n    no_prefix_length = 0x0B\n    assert no_prefix_length + len(initcode_prefix) <= 0xFF, \"initcode prefix too long\"\n    initcode += Op.PUSH1(no_prefix_length + len(initcode_prefix))\n    execution_gas += 3\n\n    # DUP3\n    initcode += Op.DUP3\n    execution_gas += 3\n\n    # CODECOPY: destinationOffset=0, offset=0, length\n    initcode += Op.CODECOPY\n    execution_gas += (\n        3\n        + (3 * ceiling_division(code_length, 32))\n        + (3 * code_length)\n        + ((code_length * code_length) // 512)\n    )\n\n    # RETURN: offset=0, length\n    initcode += Op.RETURN\n    execution_gas += 0\n\n    initcode_plus_deploy_code = bytes(initcode) + bytes(deploy_code)\n    padding_bytes = bytes()\n\n    if initcode_length is not None:\n        assert initcode_length >= len(\n            initcode_plus_deploy_code\n        ), \"specified invalid length for initcode\"\n\n        padding_bytes = bytes(\n            [padding_byte] * (initcode_length - len(initcode_plus_deploy_code))\n        )\n\n    initcode_bytes = initcode_plus_deploy_code + padding_bytes\n    instance = super().__new__(\n        cls,\n        initcode_bytes,\n        popped_stack_items=initcode.popped_stack_items,\n        pushed_stack_items=initcode.pushed_stack_items,\n        max_stack_height=initcode.max_stack_height,\n        min_stack_height=initcode.min_stack_height,\n    )\n    instance._name_ = name\n    instance.deploy_code = deploy_code\n    instance.execution_gas = execution_gas\n    instance.deployment_gas = GAS_PER_DEPLOYED_CODE_BYTE * len(bytes(instance.deploy_code))\n\n    return instance\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Switch","title":"Switch","text":"

    Bases: Bytecode

    Helper class used to generate switch-case expressions in EVM bytecode.

    Switch-case behavior
    • If no condition is met in the list of BytecodeCases conditions, the default_action bytecode is executed.
    • If multiple conditions are met, the action from the first valid condition is the only one executed.
    • There is no fall through; it is not possible to execute multiple actions.
    Source code in src/ethereum_test_tools/code/generators.py
    class Switch(Bytecode):\n    \"\"\"\n    Helper class used to generate switch-case expressions in EVM bytecode.\n\n    Switch-case behavior:\n        - If no condition is met in the list of BytecodeCases conditions,\n            the `default_action` bytecode is executed.\n        - If multiple conditions are met, the action from the first valid\n            condition is the only one executed.\n        - There is no fall through; it is not possible to execute multiple\n            actions.\n    \"\"\"\n\n    default_action: Bytecode | Op | None\n    \"\"\"\n    The default bytecode to execute; if no condition is met, this bytecode is\n    executed.\n    \"\"\"\n\n    cases: List[Case]\n    \"\"\"\n    A list of Cases: The first element with a condition that\n    evaluates to a non-zero value is the one that is executed.\n    \"\"\"\n\n    evm_code_type: EVMCodeType\n    \"\"\"\n    The EVM code type to use for the switch-case bytecode.\n    \"\"\"\n\n    def __new__(\n        cls,\n        *,\n        default_action: Bytecode | Op | None = None,\n        cases: List[Case],\n        evm_code_type: EVMCodeType = EVMCodeType.LEGACY,\n    ):\n        \"\"\"\n        Assemble the bytecode by looping over the list of cases and adding\n        the necessary [R]JUMPI and JUMPDEST opcodes in order to replicate\n        switch-case behavior.\n        \"\"\"\n        # The length required to jump over subsequent actions to the final JUMPDEST at the end\n        # of the switch-case block:\n        # - add 6 per case for the length of the JUMPDEST and JUMP(ADD(PC, action_jump_length))\n        #   bytecode\n        # - add 3 to the total to account for this action's JUMP; the PC within the call\n        #   requires a \"correction\" of 3.\n\n        bytecode = Bytecode()\n\n        # All conditions get pre-pended to this bytecode; if none are met, we reach the default\n        if evm_code_type == EVMCodeType.LEGACY:\n            action_jump_length = sum(len(case.action) + 6 for case in cases) + 3\n            bytecode = default_action + Op.JUMP(Op.ADD(Op.PC, action_jump_length))\n            # The length required to jump over the default action and its JUMP bytecode\n            condition_jump_length = len(bytecode) + 3\n        elif evm_code_type == EVMCodeType.EOF_V1:\n            action_jump_length = sum(\n                len(case.action) + (len(Op.RJUMP[0]) if not case.is_terminating else 0)\n                for case in cases\n                # On not terminating cases, we need to add 3 bytes for the RJUMP\n            )\n            bytecode = default_action + Op.RJUMP[action_jump_length]\n            # The length required to jump over the default action and its JUMP bytecode\n            condition_jump_length = len(bytecode)\n\n        # Reversed: first case in the list has priority; it will become the outer-most onion layer.\n        # We build up layers around the default_action, after 1 iteration of the loop, a simplified\n        # representation of the bytecode is:\n        #\n        #  JUMPI(case[n-1].condition)\n        #  + default_action + JUMP()\n        #  + JUMPDEST + case[n-1].action + JUMP()\n        #\n        # and after n=len(cases) iterations:\n        #\n        #  JUMPI(case[0].condition)\n        #  + JUMPI(case[1].condition)\n        #    ...\n        #  + JUMPI(case[n-1].condition)\n        #  + default_action + JUMP()\n        #  + JUMPDEST + case[n-1].action + JUMP()\n        #  + ...\n        #  + JUMPDEST + case[1].action + JUMP()\n        #  + JUMPDEST + case[0].action + JUMP()\n        #\n        for case in reversed(cases):\n            action = case.action\n            if evm_code_type == EVMCodeType.LEGACY:\n                action_jump_length -= len(action) + 6\n                action = Op.JUMPDEST + action + Op.JUMP(Op.ADD(Op.PC, action_jump_length))\n                condition = Op.JUMPI(Op.ADD(Op.PC, condition_jump_length), case.condition)\n            elif evm_code_type == EVMCodeType.EOF_V1:\n                action_jump_length -= len(action) + (\n                    len(Op.RJUMP[0]) if not case.is_terminating else 0\n                )\n                if not case.is_terminating:\n                    action += Op.RJUMP[action_jump_length]\n                condition = Op.RJUMPI[condition_jump_length](case.condition)\n            # wrap the current case around the onion as its next layer\n            bytecode = condition + bytecode + action\n            condition_jump_length += len(condition) + len(action)\n\n        bytecode += Op.JUMPDEST\n\n        instance = super().__new__(cls, bytecode)\n        instance.default_action = default_action\n        instance.cases = cases\n        return instance\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Switch.default_action","title":"default_action: Bytecode | Op | None instance-attribute","text":"

    The default bytecode to execute; if no condition is met, this bytecode is executed.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Switch.cases","title":"cases: List[Case] instance-attribute","text":"

    A list of Cases: The first element with a condition that evaluates to a non-zero value is the one that is executed.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Switch.evm_code_type","title":"evm_code_type: EVMCodeType instance-attribute","text":"

    The EVM code type to use for the switch-case bytecode.

    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Switch.__new__","title":"__new__(*, default_action=None, cases, evm_code_type=EVMCodeType.LEGACY)","text":"

    Assemble the bytecode by looping over the list of cases and adding the necessary [R]JUMPI and JUMPDEST opcodes in order to replicate switch-case behavior.

    Source code in src/ethereum_test_tools/code/generators.py
    def __new__(\n    cls,\n    *,\n    default_action: Bytecode | Op | None = None,\n    cases: List[Case],\n    evm_code_type: EVMCodeType = EVMCodeType.LEGACY,\n):\n    \"\"\"\n    Assemble the bytecode by looping over the list of cases and adding\n    the necessary [R]JUMPI and JUMPDEST opcodes in order to replicate\n    switch-case behavior.\n    \"\"\"\n    # The length required to jump over subsequent actions to the final JUMPDEST at the end\n    # of the switch-case block:\n    # - add 6 per case for the length of the JUMPDEST and JUMP(ADD(PC, action_jump_length))\n    #   bytecode\n    # - add 3 to the total to account for this action's JUMP; the PC within the call\n    #   requires a \"correction\" of 3.\n\n    bytecode = Bytecode()\n\n    # All conditions get pre-pended to this bytecode; if none are met, we reach the default\n    if evm_code_type == EVMCodeType.LEGACY:\n        action_jump_length = sum(len(case.action) + 6 for case in cases) + 3\n        bytecode = default_action + Op.JUMP(Op.ADD(Op.PC, action_jump_length))\n        # The length required to jump over the default action and its JUMP bytecode\n        condition_jump_length = len(bytecode) + 3\n    elif evm_code_type == EVMCodeType.EOF_V1:\n        action_jump_length = sum(\n            len(case.action) + (len(Op.RJUMP[0]) if not case.is_terminating else 0)\n            for case in cases\n            # On not terminating cases, we need to add 3 bytes for the RJUMP\n        )\n        bytecode = default_action + Op.RJUMP[action_jump_length]\n        # The length required to jump over the default action and its JUMP bytecode\n        condition_jump_length = len(bytecode)\n\n    # Reversed: first case in the list has priority; it will become the outer-most onion layer.\n    # We build up layers around the default_action, after 1 iteration of the loop, a simplified\n    # representation of the bytecode is:\n    #\n    #  JUMPI(case[n-1].condition)\n    #  + default_action + JUMP()\n    #  + JUMPDEST + case[n-1].action + JUMP()\n    #\n    # and after n=len(cases) iterations:\n    #\n    #  JUMPI(case[0].condition)\n    #  + JUMPI(case[1].condition)\n    #    ...\n    #  + JUMPI(case[n-1].condition)\n    #  + default_action + JUMP()\n    #  + JUMPDEST + case[n-1].action + JUMP()\n    #  + ...\n    #  + JUMPDEST + case[1].action + JUMP()\n    #  + JUMPDEST + case[0].action + JUMP()\n    #\n    for case in reversed(cases):\n        action = case.action\n        if evm_code_type == EVMCodeType.LEGACY:\n            action_jump_length -= len(action) + 6\n            action = Op.JUMPDEST + action + Op.JUMP(Op.ADD(Op.PC, action_jump_length))\n            condition = Op.JUMPI(Op.ADD(Op.PC, condition_jump_length), case.condition)\n        elif evm_code_type == EVMCodeType.EOF_V1:\n            action_jump_length -= len(action) + (\n                len(Op.RJUMP[0]) if not case.is_terminating else 0\n            )\n            if not case.is_terminating:\n                action += Op.RJUMP[action_jump_length]\n            condition = Op.RJUMPI[condition_jump_length](case.condition)\n        # wrap the current case around the onion as its next layer\n        bytecode = condition + bytecode + action\n        condition_jump_length += len(condition) + len(action)\n\n    bytecode += Op.JUMPDEST\n\n    instance = super().__new__(cls, bytecode)\n    instance.default_action = default_action\n    instance.cases = cases\n    return instance\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Yul","title":"Yul","text":"

    Bases: Bytecode

    Yul compiler. Compiles Yul source code into bytecode.

    Source code in src/ethereum_test_tools/code/yul.py
    class Yul(Bytecode):\n    \"\"\"\n    Yul compiler.\n    Compiles Yul source code into bytecode.\n    \"\"\"\n\n    source: str\n    evm_version: str | None\n\n    def __new__(\n        cls,\n        source: str,\n        fork: Optional[Fork] = None,\n        binary: Optional[Path | str] = None,\n    ):\n        \"\"\"\n        Compile Yul source code into bytecode.\n        \"\"\"\n        solc = Solc(binary)\n        evm_version = fork.solc_name() if fork else None\n\n        solc_args = (\"--evm-version\", evm_version) if evm_version else ()\n\n        result = solc.run(*solc_args, *DEFAULT_SOLC_ARGS, input=source)\n\n        if result.returncode:\n            stderr_lines = result.stderr.splitlines()\n            stderr_message = \"\\n\".join(line.strip() for line in stderr_lines)\n            raise Exception(f\"failed to compile yul source:\\n{stderr_message[7:]}\")\n\n        lines = result.stdout.splitlines()\n\n        hex_str = lines[lines.index(\"Binary representation:\") + 1]\n\n        bytecode = bytes.fromhex(hex_str)\n        instance = super().__new__(\n            cls,\n            bytecode,\n            popped_stack_items=0,\n            pushed_stack_items=0,\n        )\n        instance.source = source\n        instance.evm_version = evm_version\n        return instance\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Yul.__new__","title":"__new__(source, fork=None, binary=None)","text":"

    Compile Yul source code into bytecode.

    Source code in src/ethereum_test_tools/code/yul.py
    def __new__(\n    cls,\n    source: str,\n    fork: Optional[Fork] = None,\n    binary: Optional[Path | str] = None,\n):\n    \"\"\"\n    Compile Yul source code into bytecode.\n    \"\"\"\n    solc = Solc(binary)\n    evm_version = fork.solc_name() if fork else None\n\n    solc_args = (\"--evm-version\", evm_version) if evm_version else ()\n\n    result = solc.run(*solc_args, *DEFAULT_SOLC_ARGS, input=source)\n\n    if result.returncode:\n        stderr_lines = result.stderr.splitlines()\n        stderr_message = \"\\n\".join(line.strip() for line in stderr_lines)\n        raise Exception(f\"failed to compile yul source:\\n{stderr_message[7:]}\")\n\n    lines = result.stdout.splitlines()\n\n    hex_str = lines[lines.index(\"Binary representation:\") + 1]\n\n    bytecode = bytes.fromhex(hex_str)\n    instance = super().__new__(\n        cls,\n        bytecode,\n        popped_stack_items=0,\n        pushed_stack_items=0,\n    )\n    instance.source = source\n    instance.evm_version = evm_version\n    return instance\n
    "},{"location":"library/ethereum_test_tools/#ethereum_test_tools.extend_with_defaults","title":"extend_with_defaults(defaults, cases, **parametrize_kwargs)","text":"

    Extends test cases with default parameter values.

    This utility function extends test case parameters by adding default values from the defaults dictionary to each case in the cases list. If a case already specifies a value for a parameter, its default is ignored.

    This function is particularly useful in scenarios where you want to define a common set of default values but allow individual test cases to override them as needed.

    The function returns a dictionary that can be directly unpacked and passed to the @pytest.mark.parametrize decorator.

    Parameters:

    Name Type Description Default defaults Dict[str, Any]

    A dictionary of default parameter names and their values. These values will be added to each case unless the case already defines a value for each parameter.

    required cases List[ParameterSet]

    A list of pytest.param objects representing different test cases. Its first argument must be a dictionary defining parameter names and values.

    required parametrize_kwargs Any

    Additional keyword arguments to be passed to @pytest.mark.parametrize. These arguments are not modified by this function and are passed through unchanged.

    {}

    Returns:

    Type Description Dict[str, Any]

    Dict[str, Any]: A dictionary with the following structure: argnames: A list of parameter names. argvalues: A list of test cases with modified parameter values. parametrize_kwargs: Additional keyword arguments passed through unchanged.

    Example
    @pytest.mark.parametrize(**extend_with_defaults(\n    defaults=dict(\n        min_value=0,  # default minimum value is 0\n        max_value=100,  # default maximum value is 100\n        average=50,  # default average value is 50\n    ),\n    cases=[\n        pytest.param(\n            dict(),  # use default values\n            id='default_case',\n        ),\n        pytest.param(\n            dict(min_value=10),  # override with min_value=10\n            id='min_value_10',\n        ),\n        pytest.param(\n            dict(max_value=200),  # override with max_value=200\n            id='max_value_200',\n        ),\n        pytest.param(\n            dict(min_value=-10, max_value=50),  # override both min_value\n            # and max_value\n            id='min_-10_max_50',\n        ),\n        pytest.param(\n            dict(min_value=20, max_value=80, average=50),  # all defaults\n            # are overridden\n            id=\"min_20_max_80_avg_50\",\n        ),\n        pytest.param(\n            dict(min_value=100, max_value=0),  # invalid range\n            id='invalid_range',\n            marks=pytest.mark.xfail(reason='invalid range'),\n        )\n    ],\n))\ndef test_range(min_value, max_value, average):\n    assert min_value <= max_value\n    assert min_value <= average <= max_value\n

    The above test will execute with the following sets of parameters:

    \"default_case\": {\"min_value\": 0, \"max_value\": 100, \"average\": 50}\n\"min_value_10\": {\"min_value\": 10, \"max_value\": 100, \"average\": 50}\n\"max_value_200\": {\"min_value\": 0, \"max_value\": 200, \"average\": 50}\n\"min_-10_max_50\": {\"min_value\": -10, \"max_value\": 50, \"average\": 50}\n\"min_20_max_80_avg_50\": {\"min_value\": 20, \"max_value\": 80, \"average\": 50}\n\"invalid_range\": {\"min_value\": 100, \"max_value\": 0, \"average\": 50}  # expected to fail\n
    Notes
    • Each case in cases must contain exactly one value, which is a dictionary of parameter values.
    • The function performs an in-place update of the cases list, so the original cases list is modified.
    Source code in src/ethereum_test_tools/utility/pytest.py
    def extend_with_defaults(\n    defaults: Dict[str, Any], cases: List[ParameterSet], **parametrize_kwargs: Any\n) -> Dict[str, Any]:\n    \"\"\"\n    Extends test cases with default parameter values.\n\n    This utility function extends test case parameters by adding default values\n    from the `defaults` dictionary to each case in the `cases` list. If a case\n    already specifies a value for a parameter, its default is ignored.\n\n    This function is particularly useful in scenarios where you want to define\n    a common set of default values but allow individual test cases to override\n    them as needed.\n\n    The function returns a dictionary that can be directly unpacked and passed\n    to the `@pytest.mark.parametrize` decorator.\n\n    Args:\n        defaults (Dict[str, Any]): A dictionary of default parameter names and\n            their values. These values will be added to each case unless the case\n            already defines a value for each parameter.\n        cases (List[ParameterSet]): A list of `pytest.param` objects representing\n            different test cases. Its first argument must be a dictionary defining\n            parameter names and values.\n        parametrize_kwargs (Any): Additional keyword arguments to be passed to\n            `@pytest.mark.parametrize`. These arguments are not modified by this\n            function and are passed through unchanged.\n\n    Returns:\n        Dict[str, Any]: A dictionary with the following structure:\n            `argnames`: A list of parameter names.\n            `argvalues`: A list of test cases with modified parameter values.\n            `parametrize_kwargs`: Additional keyword arguments passed through unchanged.\n\n\n    Example:\n        ```python\n        @pytest.mark.parametrize(**extend_with_defaults(\n            defaults=dict(\n                min_value=0,  # default minimum value is 0\n                max_value=100,  # default maximum value is 100\n                average=50,  # default average value is 50\n            ),\n            cases=[\n                pytest.param(\n                    dict(),  # use default values\n                    id='default_case',\n                ),\n                pytest.param(\n                    dict(min_value=10),  # override with min_value=10\n                    id='min_value_10',\n                ),\n                pytest.param(\n                    dict(max_value=200),  # override with max_value=200\n                    id='max_value_200',\n                ),\n                pytest.param(\n                    dict(min_value=-10, max_value=50),  # override both min_value\n                    # and max_value\n                    id='min_-10_max_50',\n                ),\n                pytest.param(\n                    dict(min_value=20, max_value=80, average=50),  # all defaults\n                    # are overridden\n                    id=\"min_20_max_80_avg_50\",\n                ),\n                pytest.param(\n                    dict(min_value=100, max_value=0),  # invalid range\n                    id='invalid_range',\n                    marks=pytest.mark.xfail(reason='invalid range'),\n                )\n            ],\n        ))\n        def test_range(min_value, max_value, average):\n            assert min_value <= max_value\n            assert min_value <= average <= max_value\n        ```\n\n    The above test will execute with the following sets of parameters:\n\n    ```python\n    \"default_case\": {\"min_value\": 0, \"max_value\": 100, \"average\": 50}\n    \"min_value_10\": {\"min_value\": 10, \"max_value\": 100, \"average\": 50}\n    \"max_value_200\": {\"min_value\": 0, \"max_value\": 200, \"average\": 50}\n    \"min_-10_max_50\": {\"min_value\": -10, \"max_value\": 50, \"average\": 50}\n    \"min_20_max_80_avg_50\": {\"min_value\": 20, \"max_value\": 80, \"average\": 50}\n    \"invalid_range\": {\"min_value\": 100, \"max_value\": 0, \"average\": 50}  # expected to fail\n    ```\n\n    Notes:\n        - Each case in `cases` must contain exactly one value, which is a dictionary\n          of parameter values.\n        - The function performs an in-place update of the `cases` list, so the\n          original `cases` list is modified.\n    \"\"\"\n    for i, case in enumerate(cases):\n        if not (len(case.values) == 1 and isinstance(case.values[0], dict)):\n            raise ValueError(\n                \"each case must contain exactly one value; a dict of parameter values\"\n            )\n        if set(case.values[0].keys()) - set(defaults.keys()):\n            raise UnknownParameterInCasesError()\n        # Overwrite values in defaults if the parameter is present in the test case values\n        merged_params = {**defaults, **case.values[0]}  # type: ignore\n        cases[i] = pytest.param(*merged_params.values(), id=case.id, marks=case.marks)\n\n    return {\"argnames\": list(defaults), \"argvalues\": cases, **parametrize_kwargs}\n
    "},{"location":"library/ethereum_test_types/","title":"Ethereum Test Types package","text":"

    Common definitions and types.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.TestParameterGroup","title":"TestParameterGroup dataclass","text":"

    Base class for grouping test parameters in a dataclass. Provides a generic repr method to generate clean test ids, including only non-default optional fields.

    Source code in src/ethereum_test_types/helpers.py
    @dataclass(kw_only=True, frozen=True, repr=False)\nclass TestParameterGroup:\n    \"\"\"\n    Base class for grouping test parameters in a dataclass. Provides a generic\n    __repr__ method to generate clean test ids, including only non-default\n    optional fields.\n    \"\"\"\n\n    __test__ = False  # explicitly prevent pytest collecting this class\n\n    def __repr__(self):\n        \"\"\"\n        Generates a repr string, intended to be used as a test id, based on the class\n        name and the values of the non-default optional fields.\n        \"\"\"\n        class_name = self.__class__.__name__\n        field_strings = []\n\n        for field in fields(self):\n            value = getattr(self, field.name)\n            # Include the field only if it is not optional or not set to its default value\n            if field.default is MISSING or field.default != value:\n                field_strings.append(f\"{field.name}_{value}\")\n\n        return f\"{class_name}_{'-'.join(field_strings)}\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.TestParameterGroup.__repr__","title":"__repr__()","text":"

    Generates a repr string, intended to be used as a test id, based on the class name and the values of the non-default optional fields.

    Source code in src/ethereum_test_types/helpers.py
    def __repr__(self):\n    \"\"\"\n    Generates a repr string, intended to be used as a test id, based on the class\n    name and the values of the non-default optional fields.\n    \"\"\"\n    class_name = self.__class__.__name__\n    field_strings = []\n\n    for field in fields(self):\n        value = getattr(self, field.name)\n        # Include the field only if it is not optional or not set to its default value\n        if field.default is MISSING or field.default != value:\n            field_strings.append(f\"{field.name}_{value}\")\n\n    return f\"{class_name}_{'-'.join(field_strings)}\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.add_kzg_version","title":"add_kzg_version(b_hashes, kzg_version)","text":"

    Adds the Kzg Version to each blob hash.

    Source code in src/ethereum_test_types/helpers.py
    def add_kzg_version(\n    b_hashes: List[bytes | SupportsBytes | int | str], kzg_version: int\n) -> List[bytes]:\n    \"\"\"\n    Adds the Kzg Version to each blob hash.\n    \"\"\"\n    kzg_version_hex = bytes([kzg_version])\n    kzg_versioned_hashes = []\n\n    for hash in b_hashes:\n        hash = bytes(Hash(hash))\n        if isinstance(hash, int) or isinstance(hash, str):\n            kzg_versioned_hashes.append(kzg_version_hex + hash[1:])\n        elif isinstance(hash, bytes) or isinstance(hash, SupportsBytes):\n            if isinstance(hash, SupportsBytes):\n                hash = bytes(hash)\n            kzg_versioned_hashes.append(kzg_version_hex + hash[1:])\n        else:\n            raise TypeError(\"Blob hash must be either an integer, string or bytes\")\n    return kzg_versioned_hashes\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.ceiling_division","title":"ceiling_division(a, b)","text":"

    Calculates the ceil without using floating point. Used by many of the EVM's formulas

    Source code in src/ethereum_test_types/helpers.py
    def ceiling_division(a: int, b: int) -> int:\n    \"\"\"\n    Calculates the ceil without using floating point.\n    Used by many of the EVM's formulas\n    \"\"\"\n    return -(a // -b)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.compute_create2_address","title":"compute_create2_address(address, salt, initcode)","text":"

    Compute address of the resulting contract created using the CREATE2 opcode.

    Source code in src/ethereum_test_types/helpers.py
    def compute_create2_address(\n    address: FixedSizeBytesConvertible, salt: FixedSizeBytesConvertible, initcode: BytesConvertible\n) -> Address:\n    \"\"\"\n    Compute address of the resulting contract created using the `CREATE2`\n    opcode.\n    \"\"\"\n    hash = keccak256(b\"\\xff\" + Address(address) + Hash(salt) + keccak256(Bytes(initcode)))\n    return Address(hash[-20:])\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.compute_create_address","title":"compute_create_address(*, address, nonce=None, salt=0, initcode=b'', opcode=Op.CREATE)","text":"

    Compute address of the resulting contract created using a transaction or the CREATE opcode.

    Source code in src/ethereum_test_types/helpers.py
    def compute_create_address(\n    *,\n    address: FixedSizeBytesConvertible | EOA,\n    nonce: int | None = None,\n    salt: int = 0,\n    initcode: BytesConvertible = b\"\",\n    opcode: Op = Op.CREATE,\n) -> Address:\n    \"\"\"\n    Compute address of the resulting contract created using a transaction\n    or the `CREATE` opcode.\n    \"\"\"\n    if opcode == Op.CREATE:\n        if isinstance(address, EOA):\n            if nonce is None:\n                nonce = address.nonce\n        else:\n            address = Address(address)\n        if nonce is None:\n            nonce = 0\n        nonce_bytes = bytes() if nonce == 0 else nonce.to_bytes(length=1, byteorder=\"big\")\n        hash = keccak256(encode([address, nonce_bytes]))\n        return Address(hash[-20:])\n    if opcode == Op.CREATE2:\n        return compute_create2_address(address, salt, initcode)\n    raise ValueError(\"Unsupported opcode\")\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.compute_eofcreate_address","title":"compute_eofcreate_address(address, salt, init_container)","text":"

    Compute address of the resulting contract created using the EOFCREATE opcode.

    Source code in src/ethereum_test_types/helpers.py
    def compute_eofcreate_address(\n    address: FixedSizeBytesConvertible,\n    salt: FixedSizeBytesConvertible,\n    init_container: BytesConvertible,\n) -> Address:\n    \"\"\"\n    Compute address of the resulting contract created using the `EOFCREATE` opcode.\n    \"\"\"\n    hash = keccak256(b\"\\xff\" + Address(address) + Hash(salt) + keccak256(Bytes(init_container)))\n    return Address(hash[-20:])\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.copy_opcode_cost","title":"copy_opcode_cost(length)","text":"

    Calculates the cost of the COPY opcodes, assuming memory expansion from empty memory, based on the costs specified in the yellow paper: https://ethereum.github.io/yellowpaper/paper.pdf

    Source code in src/ethereum_test_types/helpers.py
    def copy_opcode_cost(length: int) -> int:\n    \"\"\"\n    Calculates the cost of the COPY opcodes, assuming memory expansion from\n    empty memory, based on the costs specified in the yellow paper:\n    https://ethereum.github.io/yellowpaper/paper.pdf\n    \"\"\"\n    return 3 + (ceiling_division(length, 32) * 3) + cost_memory_bytes(length, 0)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.cost_memory_bytes","title":"cost_memory_bytes(new_bytes, previous_bytes)","text":"

    Calculates the cost of memory expansion, based on the costs specified in the yellow paper: https://ethereum.github.io/yellowpaper/paper.pdf

    Source code in src/ethereum_test_types/helpers.py
    def cost_memory_bytes(new_bytes: int, previous_bytes: int) -> int:\n    \"\"\"\n    Calculates the cost of memory expansion, based on the costs specified in\n    the yellow paper: https://ethereum.github.io/yellowpaper/paper.pdf\n    \"\"\"\n    if new_bytes <= previous_bytes:\n        return 0\n    new_words = ceiling_division(new_bytes, 32)\n    previous_words = ceiling_division(previous_bytes, 32)\n\n    def c(w: int) -> int:\n        g_memory = 3\n        return (g_memory * w) + ((w * w) // 512)\n\n    return c(new_words) - c(previous_words)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.eip_2028_transaction_data_cost","title":"eip_2028_transaction_data_cost(data)","text":"

    Calculates the cost of a given data as part of a transaction, based on the costs specified in EIP-2028: https://eips.ethereum.org/EIPS/eip-2028

    Source code in src/ethereum_test_types/helpers.py
    def eip_2028_transaction_data_cost(data: BytesConvertible) -> int:\n    \"\"\"\n    Calculates the cost of a given data as part of a transaction, based on the\n    costs specified in EIP-2028: https://eips.ethereum.org/EIPS/eip-2028\n    \"\"\"\n    cost = 0\n    for b in Bytes(data):\n        if b == 0:\n            cost += 4\n        else:\n            cost += 16\n    return cost\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.EOA","title":"EOA","text":"

    Bases: Address

    An Externally Owned Account (EOA) is an account controlled by a private key.

    The EOA is defined by its address and (optionally) by its corresponding private key.

    Source code in src/ethereum_test_types/types.py
    class EOA(Address):\n    \"\"\"\n    An Externally Owned Account (EOA) is an account controlled by a private key.\n\n    The EOA is defined by its address and (optionally) by its corresponding private key.\n    \"\"\"\n\n    key: Hash | None\n    nonce: Number\n\n    def __new__(\n        cls,\n        address: \"FixedSizeBytesConvertible | Address | EOA | None\" = None,\n        *,\n        key: FixedSizeBytesConvertible | None = None,\n        nonce: NumberConvertible = 0,\n    ):\n        \"\"\"\n        Init the EOA.\n        \"\"\"\n        if address is None:\n            if key is None:\n                raise ValueError(\"impossible to initialize EOA without address\")\n            private_key = PrivateKey(Hash(key))\n            public_key = private_key.public_key\n            address = Address(keccak256(public_key.format(compressed=False)[1:])[32 - 20 :])\n        elif isinstance(address, EOA):\n            return address\n        instance = super(EOA, cls).__new__(cls, address)\n        instance.key = Hash(key) if key is not None else None\n        instance.nonce = Number(nonce)\n        return instance\n\n    def get_nonce(self) -> Number:\n        \"\"\"\n        Returns the current nonce of the EOA and increments it by one.\n        \"\"\"\n        nonce = self.nonce\n        self.nonce = Number(nonce + 1)\n        return nonce\n\n    def copy(self) -> \"EOA\":\n        \"\"\"\n        Returns a copy of the EOA.\n        \"\"\"\n        return EOA(Address(self), key=self.key, nonce=self.nonce)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.EOA.__new__","title":"__new__(address=None, *, key=None, nonce=0)","text":"

    Init the EOA.

    Source code in src/ethereum_test_types/types.py
    def __new__(\n    cls,\n    address: \"FixedSizeBytesConvertible | Address | EOA | None\" = None,\n    *,\n    key: FixedSizeBytesConvertible | None = None,\n    nonce: NumberConvertible = 0,\n):\n    \"\"\"\n    Init the EOA.\n    \"\"\"\n    if address is None:\n        if key is None:\n            raise ValueError(\"impossible to initialize EOA without address\")\n        private_key = PrivateKey(Hash(key))\n        public_key = private_key.public_key\n        address = Address(keccak256(public_key.format(compressed=False)[1:])[32 - 20 :])\n    elif isinstance(address, EOA):\n        return address\n    instance = super(EOA, cls).__new__(cls, address)\n    instance.key = Hash(key) if key is not None else None\n    instance.nonce = Number(nonce)\n    return instance\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.EOA.get_nonce","title":"get_nonce()","text":"

    Returns the current nonce of the EOA and increments it by one.

    Source code in src/ethereum_test_types/types.py
    def get_nonce(self) -> Number:\n    \"\"\"\n    Returns the current nonce of the EOA and increments it by one.\n    \"\"\"\n    nonce = self.nonce\n    self.nonce = Number(nonce + 1)\n    return nonce\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.EOA.copy","title":"copy()","text":"

    Returns a copy of the EOA.

    Source code in src/ethereum_test_types/types.py
    def copy(self) -> \"EOA\":\n    \"\"\"\n    Returns a copy of the EOA.\n    \"\"\"\n    return EOA(Address(self), key=self.key, nonce=self.nonce)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.AccessList","title":"AccessList","text":"

    Bases: CamelModel

    Access List for transactions.

    Source code in src/ethereum_test_types/types.py
    class AccessList(CamelModel):\n    \"\"\"\n    Access List for transactions.\n    \"\"\"\n\n    address: Address\n    storage_keys: List[Hash]\n\n    def to_list(self) -> List[Address | List[Hash]]:\n        \"\"\"\n        Returns the access list as a list of serializable elements.\n        \"\"\"\n        return [self.address, self.storage_keys]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.AccessList.to_list","title":"to_list()","text":"

    Returns the access list as a list of serializable elements.

    Source code in src/ethereum_test_types/types.py
    def to_list(self) -> List[Address | List[Hash]]:\n    \"\"\"\n    Returns the access list as a list of serializable elements.\n    \"\"\"\n    return [self.address, self.storage_keys]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account","title":"Account","text":"

    Bases: CamelModel

    State associated with an address.

    Source code in src/ethereum_test_base_types/composite_types.py
    class Account(CamelModel):\n    \"\"\"\n    State associated with an address.\n    \"\"\"\n\n    nonce: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0)\n    \"\"\"\n    The scalar value equal to a) the number of transactions sent by\n    an Externally Owned Account, b) the amount of contracts created by a\n    contract.\n    \"\"\"\n    balance: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0)\n    \"\"\"\n    The amount of Wei (10<sup>-18</sup> Eth) the account has.\n    \"\"\"\n    code: Bytes = Bytes(b\"\")\n    \"\"\"\n    Bytecode contained by the account.\n    \"\"\"\n    storage: Storage = Field(default_factory=Storage)\n    \"\"\"\n    Storage within a contract.\n    \"\"\"\n\n    NONEXISTENT: ClassVar[None] = None\n    \"\"\"\n    Sentinel object used to specify when an account should not exist in the\n    state.\n    \"\"\"\n\n    @dataclass(kw_only=True)\n    class NonceMismatch(Exception):\n        \"\"\"\n        Test expected a certain nonce value for an account but a different\n        value was found.\n        \"\"\"\n\n        address: Address\n        want: int | None\n        got: int | None\n\n        def __init__(self, address: Address, want: int | None, got: int | None, *args):\n            super().__init__(args)\n            self.address = address\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"unexpected nonce for account {self.address}{label_str}: \"\n                + f\"want {self.want}, got {self.got}\"\n            )\n\n    @dataclass(kw_only=True)\n    class BalanceMismatch(Exception):\n        \"\"\"\n        Test expected a certain balance for an account but a different\n        value was found.\n        \"\"\"\n\n        address: Address\n        want: int | None\n        got: int | None\n\n        def __init__(self, address: Address, want: int | None, got: int | None, *args):\n            super().__init__(args)\n            self.address = address\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"unexpected balance for account {self.address}{label_str}: \"\n                + f\"want {self.want}, got {self.got}\"\n            )\n\n    @dataclass(kw_only=True)\n    class CodeMismatch(Exception):\n        \"\"\"\n        Test expected a certain bytecode for an account but a different\n        one was found.\n        \"\"\"\n\n        address: Address\n        want: bytes | None\n        got: bytes | None\n\n        def __init__(self, address: Address, want: bytes | None, got: bytes | None, *args):\n            super().__init__(args)\n            self.address = address\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"unexpected code for account {self.address}{label_str}: \"\n                + f\"want {self.want}, got {self.got}\"\n            )\n\n    def check_alloc(self: \"Account\", address: Address, account: \"Account\"):\n        \"\"\"\n        Checks the returned alloc against an expected account in post state.\n        Raises exception on failure.\n        \"\"\"\n        if \"nonce\" in self.model_fields_set:\n            if self.nonce != account.nonce:\n                raise Account.NonceMismatch(\n                    address=address,\n                    want=self.nonce,\n                    got=account.nonce,\n                )\n\n        if \"balance\" in self.model_fields_set:\n            if self.balance != account.balance:\n                raise Account.BalanceMismatch(\n                    address=address,\n                    want=self.balance,\n                    got=account.balance,\n                )\n\n        if \"code\" in self.model_fields_set:\n            if self.code != account.code:\n                raise Account.CodeMismatch(\n                    address=address,\n                    want=self.code,\n                    got=account.code,\n                )\n\n        if \"storage\" in self.model_fields_set:\n            self.storage.must_be_equal(address=address, other=account.storage)\n\n    def __bool__(self: \"Account\") -> bool:\n        \"\"\"\n        Returns True on a non-empty account.\n        \"\"\"\n        return any((self.nonce, self.balance, self.code, self.storage))\n\n    @classmethod\n    def with_code(cls: Type, code: BytesConvertible) -> \"Account\":\n        \"\"\"\n        Create account with provided `code` and nonce of `1`.\n        \"\"\"\n        return Account(nonce=HexNumber(1), code=Bytes(code))\n\n    @classmethod\n    def merge(\n        cls: Type, account_1: \"Dict | Account | None\", account_2: \"Dict | Account | None\"\n    ) -> \"Account\":\n        \"\"\"\n        Create a merged account from two sources.\n        \"\"\"\n\n        def to_kwargs_dict(account: \"Dict | Account | None\") -> Dict:\n            if account is None:\n                return {}\n            if isinstance(account, dict):\n                return account\n            elif isinstance(account, cls):\n                return account.model_dump(exclude_unset=True)\n            raise TypeError(f\"Unexpected type for account merge: {type(account)}\")\n\n        kwargs = to_kwargs_dict(account_1)\n        kwargs.update(to_kwargs_dict(account_2))\n\n        return cls(**kwargs)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.nonce","title":"nonce: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0) class-attribute instance-attribute","text":"

    The scalar value equal to a) the number of transactions sent by an Externally Owned Account, b) the amount of contracts created by a contract.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.balance","title":"balance: ZeroPaddedHexNumber = ZeroPaddedHexNumber(0) class-attribute instance-attribute","text":"

    The amount of Wei (10-18 Eth) the account has.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.code","title":"code: Bytes = Bytes(b'') class-attribute instance-attribute","text":"

    Bytecode contained by the account.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.storage","title":"storage: Storage = Field(default_factory=Storage) class-attribute instance-attribute","text":"

    Storage within a contract.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.NONEXISTENT","title":"NONEXISTENT: None = None class-attribute","text":"

    Sentinel object used to specify when an account should not exist in the state.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.NonceMismatch","title":"NonceMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain nonce value for an account but a different value was found.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass NonceMismatch(Exception):\n    \"\"\"\n    Test expected a certain nonce value for an account but a different\n    value was found.\n    \"\"\"\n\n    address: Address\n    want: int | None\n    got: int | None\n\n    def __init__(self, address: Address, want: int | None, got: int | None, *args):\n        super().__init__(args)\n        self.address = address\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"unexpected nonce for account {self.address}{label_str}: \"\n            + f\"want {self.want}, got {self.got}\"\n        )\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.NonceMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"unexpected nonce for account {self.address}{label_str}: \"\n        + f\"want {self.want}, got {self.got}\"\n    )\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.BalanceMismatch","title":"BalanceMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain balance for an account but a different value was found.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass BalanceMismatch(Exception):\n    \"\"\"\n    Test expected a certain balance for an account but a different\n    value was found.\n    \"\"\"\n\n    address: Address\n    want: int | None\n    got: int | None\n\n    def __init__(self, address: Address, want: int | None, got: int | None, *args):\n        super().__init__(args)\n        self.address = address\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"unexpected balance for account {self.address}{label_str}: \"\n            + f\"want {self.want}, got {self.got}\"\n        )\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.BalanceMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"unexpected balance for account {self.address}{label_str}: \"\n        + f\"want {self.want}, got {self.got}\"\n    )\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.CodeMismatch","title":"CodeMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain bytecode for an account but a different one was found.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass CodeMismatch(Exception):\n    \"\"\"\n    Test expected a certain bytecode for an account but a different\n    one was found.\n    \"\"\"\n\n    address: Address\n    want: bytes | None\n    got: bytes | None\n\n    def __init__(self, address: Address, want: bytes | None, got: bytes | None, *args):\n        super().__init__(args)\n        self.address = address\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"unexpected code for account {self.address}{label_str}: \"\n            + f\"want {self.want}, got {self.got}\"\n        )\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.CodeMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"unexpected code for account {self.address}{label_str}: \"\n        + f\"want {self.want}, got {self.got}\"\n    )\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.check_alloc","title":"check_alloc(address, account)","text":"

    Checks the returned alloc against an expected account in post state. Raises exception on failure.

    Source code in src/ethereum_test_base_types/composite_types.py
    def check_alloc(self: \"Account\", address: Address, account: \"Account\"):\n    \"\"\"\n    Checks the returned alloc against an expected account in post state.\n    Raises exception on failure.\n    \"\"\"\n    if \"nonce\" in self.model_fields_set:\n        if self.nonce != account.nonce:\n            raise Account.NonceMismatch(\n                address=address,\n                want=self.nonce,\n                got=account.nonce,\n            )\n\n    if \"balance\" in self.model_fields_set:\n        if self.balance != account.balance:\n            raise Account.BalanceMismatch(\n                address=address,\n                want=self.balance,\n                got=account.balance,\n            )\n\n    if \"code\" in self.model_fields_set:\n        if self.code != account.code:\n            raise Account.CodeMismatch(\n                address=address,\n                want=self.code,\n                got=account.code,\n            )\n\n    if \"storage\" in self.model_fields_set:\n        self.storage.must_be_equal(address=address, other=account.storage)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.__bool__","title":"__bool__()","text":"

    Returns True on a non-empty account.

    Source code in src/ethereum_test_base_types/composite_types.py
    def __bool__(self: \"Account\") -> bool:\n    \"\"\"\n    Returns True on a non-empty account.\n    \"\"\"\n    return any((self.nonce, self.balance, self.code, self.storage))\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.with_code","title":"with_code(code) classmethod","text":"

    Create account with provided code and nonce of 1.

    Source code in src/ethereum_test_base_types/composite_types.py
    @classmethod\ndef with_code(cls: Type, code: BytesConvertible) -> \"Account\":\n    \"\"\"\n    Create account with provided `code` and nonce of `1`.\n    \"\"\"\n    return Account(nonce=HexNumber(1), code=Bytes(code))\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Account.merge","title":"merge(account_1, account_2) classmethod","text":"

    Create a merged account from two sources.

    Source code in src/ethereum_test_base_types/composite_types.py
    @classmethod\ndef merge(\n    cls: Type, account_1: \"Dict | Account | None\", account_2: \"Dict | Account | None\"\n) -> \"Account\":\n    \"\"\"\n    Create a merged account from two sources.\n    \"\"\"\n\n    def to_kwargs_dict(account: \"Dict | Account | None\") -> Dict:\n        if account is None:\n            return {}\n        if isinstance(account, dict):\n            return account\n        elif isinstance(account, cls):\n            return account.model_dump(exclude_unset=True)\n        raise TypeError(f\"Unexpected type for account merge: {type(account)}\")\n\n    kwargs = to_kwargs_dict(account_1)\n    kwargs.update(to_kwargs_dict(account_2))\n\n    return cls(**kwargs)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc","title":"Alloc","text":"

    Bases: Alloc

    Allocation of accounts in the state, pre and post test execution.

    Source code in src/ethereum_test_types/types.py
    class Alloc(BaseAlloc):\n    \"\"\"\n    Allocation of accounts in the state, pre and post test execution.\n    \"\"\"\n\n    @dataclass(kw_only=True)\n    class UnexpectedAccount(Exception):\n        \"\"\"\n        Unexpected account found in the allocation.\n        \"\"\"\n\n        address: Address\n        account: Account | None\n\n        def __init__(self, address: Address, account: Account | None, *args):\n            super().__init__(args)\n            self.address = address\n            self.account = account\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            return f\"unexpected account in allocation {self.address}: {self.account}\"\n\n    @dataclass(kw_only=True)\n    class MissingAccount(Exception):\n        \"\"\"\n        Expected account not found in the allocation.\n        \"\"\"\n\n        address: Address\n\n        def __init__(self, address: Address, *args):\n            super().__init__(args)\n            self.address = address\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            return f\"Account missing from allocation {self.address}\"\n\n    @classmethod\n    def merge(cls, alloc_1: \"Alloc\", alloc_2: \"Alloc\") -> \"Alloc\":\n        \"\"\"\n        Returns the merged allocation of two sources.\n        \"\"\"\n        merged = alloc_1.model_dump()\n\n        for address, other_account in alloc_2.root.items():\n            merged_account = Account.merge(merged.get(address, None), other_account)\n            if merged_account:\n                merged[address] = merged_account\n            elif address in merged:\n                merged.pop(address, None)\n\n        return Alloc(merged)\n\n    def __iter__(self):\n        \"\"\"\n        Returns an iterator over the allocation.\n        \"\"\"\n        return iter(self.root)\n\n    def __getitem__(self, address: Address | FixedSizeBytesConvertible) -> Account | None:\n        \"\"\"\n        Returns the account associated with an address.\n        \"\"\"\n        if not isinstance(address, Address):\n            address = Address(address)\n        return self.root[address]\n\n    def __setitem__(self, address: Address | FixedSizeBytesConvertible, account: Account | None):\n        \"\"\"\n        Sets the account associated with an address.\n        \"\"\"\n        if not isinstance(address, Address):\n            address = Address(address)\n        self.root[address] = account\n\n    def __delitem__(self, address: Address | FixedSizeBytesConvertible):\n        \"\"\"\n        Deletes the account associated with an address.\n        \"\"\"\n        if not isinstance(address, Address):\n            address = Address(address)\n        self.root.pop(address, None)\n\n    def __eq__(self, other) -> bool:\n        \"\"\"\n        Returns True if both allocations are equal.\n        \"\"\"\n        if not isinstance(other, Alloc):\n            return False\n        return self.root == other.root\n\n    def __contains__(self, address: Address | FixedSizeBytesConvertible) -> bool:\n        \"\"\"\n        Checks if an account is in the allocation.\n        \"\"\"\n        if not isinstance(address, Address):\n            address = Address(address)\n        return address in self.root\n\n    def empty_accounts(self) -> List[Address]:\n        \"\"\"\n        Returns a list of addresses of empty accounts.\n        \"\"\"\n        return [address for address, account in self.root.items() if not account]\n\n    def state_root(self) -> bytes:\n        \"\"\"\n        Returns the state root of the allocation.\n        \"\"\"\n        state = State()\n        for address, account in self.root.items():\n            if account is None:\n                continue\n            set_account(\n                state=state,\n                address=FrontierAddress(address),\n                account=FrontierAccount(\n                    nonce=Uint(account.nonce) if account.nonce is not None else Uint(0),\n                    balance=(U256(account.balance) if account.balance is not None else U256(0)),\n                    code=account.code if account.code is not None else b\"\",\n                ),\n            )\n            if account.storage is not None:\n                for key, value in account.storage.root.items():\n                    set_storage(\n                        state=state,\n                        address=FrontierAddress(address),\n                        key=Hash(key),\n                        value=U256(value),\n                    )\n        return state_root(state)\n\n    def verify_post_alloc(self, got_alloc: \"Alloc\"):\n        \"\"\"\n        Verify that the allocation matches the expected post in the test.\n        Raises exception on unexpected values.\n        \"\"\"\n        assert isinstance(got_alloc, Alloc), f\"got_alloc is not an Alloc: {got_alloc}\"\n        for address, account in self.root.items():\n            if account is None:\n                # Account must not exist\n                if address in got_alloc.root and got_alloc.root[address] is not None:\n                    raise Alloc.UnexpectedAccount(address, got_alloc.root[address])\n            else:\n                if address in got_alloc.root:\n                    got_account = got_alloc.root[address]\n                    assert isinstance(got_account, Account)\n                    assert isinstance(account, Account)\n                    account.check_alloc(address, got_account)\n                else:\n                    raise Alloc.MissingAccount(address)\n\n    def deploy_contract(\n        self,\n        code: BytesConvertible,\n        *,\n        storage: Storage | StorageRootType = {},\n        balance: NumberConvertible = 0,\n        nonce: NumberConvertible = 1,\n        address: Address | None = None,\n        evm_code_type: EVMCodeType | None = None,\n        label: str | None = None,\n    ) -> Address:\n        \"\"\"\n        Deploy a contract to the allocation.\n        \"\"\"\n        raise NotImplementedError(\"deploy_contract is not implemented in the base class\")\n\n    def fund_eoa(\n        self,\n        amount: NumberConvertible = 10**21,\n        label: str | None = None,\n        storage: Storage | None = None,\n    ) -> EOA:\n        \"\"\"\n        Add a previously unused EOA to the pre-alloc with the balance specified by `amount`.\n        \"\"\"\n        raise NotImplementedError(\"fund_eoa is not implemented in the base class\")\n\n    def fund_address(self, address: Address, amount: NumberConvertible):\n        \"\"\"\n        Fund an address with a given amount.\n\n        If the address is already present in the pre-alloc the amount will be\n        added to its existing balance.\n        \"\"\"\n        raise NotImplementedError(\"fund_address is not implemented in the base class\")\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.UnexpectedAccount","title":"UnexpectedAccount dataclass","text":"

    Bases: Exception

    Unexpected account found in the allocation.

    Source code in src/ethereum_test_types/types.py
    @dataclass(kw_only=True)\nclass UnexpectedAccount(Exception):\n    \"\"\"\n    Unexpected account found in the allocation.\n    \"\"\"\n\n    address: Address\n    account: Account | None\n\n    def __init__(self, address: Address, account: Account | None, *args):\n        super().__init__(args)\n        self.address = address\n        self.account = account\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        return f\"unexpected account in allocation {self.address}: {self.account}\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.UnexpectedAccount.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_types/types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    return f\"unexpected account in allocation {self.address}: {self.account}\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.MissingAccount","title":"MissingAccount dataclass","text":"

    Bases: Exception

    Expected account not found in the allocation.

    Source code in src/ethereum_test_types/types.py
    @dataclass(kw_only=True)\nclass MissingAccount(Exception):\n    \"\"\"\n    Expected account not found in the allocation.\n    \"\"\"\n\n    address: Address\n\n    def __init__(self, address: Address, *args):\n        super().__init__(args)\n        self.address = address\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        return f\"Account missing from allocation {self.address}\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.MissingAccount.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_types/types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    return f\"Account missing from allocation {self.address}\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.merge","title":"merge(alloc_1, alloc_2) classmethod","text":"

    Returns the merged allocation of two sources.

    Source code in src/ethereum_test_types/types.py
    @classmethod\ndef merge(cls, alloc_1: \"Alloc\", alloc_2: \"Alloc\") -> \"Alloc\":\n    \"\"\"\n    Returns the merged allocation of two sources.\n    \"\"\"\n    merged = alloc_1.model_dump()\n\n    for address, other_account in alloc_2.root.items():\n        merged_account = Account.merge(merged.get(address, None), other_account)\n        if merged_account:\n            merged[address] = merged_account\n        elif address in merged:\n            merged.pop(address, None)\n\n    return Alloc(merged)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.__iter__","title":"__iter__()","text":"

    Returns an iterator over the allocation.

    Source code in src/ethereum_test_types/types.py
    def __iter__(self):\n    \"\"\"\n    Returns an iterator over the allocation.\n    \"\"\"\n    return iter(self.root)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.__getitem__","title":"__getitem__(address)","text":"

    Returns the account associated with an address.

    Source code in src/ethereum_test_types/types.py
    def __getitem__(self, address: Address | FixedSizeBytesConvertible) -> Account | None:\n    \"\"\"\n    Returns the account associated with an address.\n    \"\"\"\n    if not isinstance(address, Address):\n        address = Address(address)\n    return self.root[address]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.__setitem__","title":"__setitem__(address, account)","text":"

    Sets the account associated with an address.

    Source code in src/ethereum_test_types/types.py
    def __setitem__(self, address: Address | FixedSizeBytesConvertible, account: Account | None):\n    \"\"\"\n    Sets the account associated with an address.\n    \"\"\"\n    if not isinstance(address, Address):\n        address = Address(address)\n    self.root[address] = account\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.__delitem__","title":"__delitem__(address)","text":"

    Deletes the account associated with an address.

    Source code in src/ethereum_test_types/types.py
    def __delitem__(self, address: Address | FixedSizeBytesConvertible):\n    \"\"\"\n    Deletes the account associated with an address.\n    \"\"\"\n    if not isinstance(address, Address):\n        address = Address(address)\n    self.root.pop(address, None)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.__eq__","title":"__eq__(other)","text":"

    Returns True if both allocations are equal.

    Source code in src/ethereum_test_types/types.py
    def __eq__(self, other) -> bool:\n    \"\"\"\n    Returns True if both allocations are equal.\n    \"\"\"\n    if not isinstance(other, Alloc):\n        return False\n    return self.root == other.root\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.__contains__","title":"__contains__(address)","text":"

    Checks if an account is in the allocation.

    Source code in src/ethereum_test_types/types.py
    def __contains__(self, address: Address | FixedSizeBytesConvertible) -> bool:\n    \"\"\"\n    Checks if an account is in the allocation.\n    \"\"\"\n    if not isinstance(address, Address):\n        address = Address(address)\n    return address in self.root\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.empty_accounts","title":"empty_accounts()","text":"

    Returns a list of addresses of empty accounts.

    Source code in src/ethereum_test_types/types.py
    def empty_accounts(self) -> List[Address]:\n    \"\"\"\n    Returns a list of addresses of empty accounts.\n    \"\"\"\n    return [address for address, account in self.root.items() if not account]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.state_root","title":"state_root()","text":"

    Returns the state root of the allocation.

    Source code in src/ethereum_test_types/types.py
    def state_root(self) -> bytes:\n    \"\"\"\n    Returns the state root of the allocation.\n    \"\"\"\n    state = State()\n    for address, account in self.root.items():\n        if account is None:\n            continue\n        set_account(\n            state=state,\n            address=FrontierAddress(address),\n            account=FrontierAccount(\n                nonce=Uint(account.nonce) if account.nonce is not None else Uint(0),\n                balance=(U256(account.balance) if account.balance is not None else U256(0)),\n                code=account.code if account.code is not None else b\"\",\n            ),\n        )\n        if account.storage is not None:\n            for key, value in account.storage.root.items():\n                set_storage(\n                    state=state,\n                    address=FrontierAddress(address),\n                    key=Hash(key),\n                    value=U256(value),\n                )\n    return state_root(state)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.verify_post_alloc","title":"verify_post_alloc(got_alloc)","text":"

    Verify that the allocation matches the expected post in the test. Raises exception on unexpected values.

    Source code in src/ethereum_test_types/types.py
    def verify_post_alloc(self, got_alloc: \"Alloc\"):\n    \"\"\"\n    Verify that the allocation matches the expected post in the test.\n    Raises exception on unexpected values.\n    \"\"\"\n    assert isinstance(got_alloc, Alloc), f\"got_alloc is not an Alloc: {got_alloc}\"\n    for address, account in self.root.items():\n        if account is None:\n            # Account must not exist\n            if address in got_alloc.root and got_alloc.root[address] is not None:\n                raise Alloc.UnexpectedAccount(address, got_alloc.root[address])\n        else:\n            if address in got_alloc.root:\n                got_account = got_alloc.root[address]\n                assert isinstance(got_account, Account)\n                assert isinstance(account, Account)\n                account.check_alloc(address, got_account)\n            else:\n                raise Alloc.MissingAccount(address)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.deploy_contract","title":"deploy_contract(code, *, storage={}, balance=0, nonce=1, address=None, evm_code_type=None, label=None)","text":"

    Deploy a contract to the allocation.

    Source code in src/ethereum_test_types/types.py
    def deploy_contract(\n    self,\n    code: BytesConvertible,\n    *,\n    storage: Storage | StorageRootType = {},\n    balance: NumberConvertible = 0,\n    nonce: NumberConvertible = 1,\n    address: Address | None = None,\n    evm_code_type: EVMCodeType | None = None,\n    label: str | None = None,\n) -> Address:\n    \"\"\"\n    Deploy a contract to the allocation.\n    \"\"\"\n    raise NotImplementedError(\"deploy_contract is not implemented in the base class\")\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.fund_eoa","title":"fund_eoa(amount=10 ** 21, label=None, storage=None)","text":"

    Add a previously unused EOA to the pre-alloc with the balance specified by amount.

    Source code in src/ethereum_test_types/types.py
    def fund_eoa(\n    self,\n    amount: NumberConvertible = 10**21,\n    label: str | None = None,\n    storage: Storage | None = None,\n) -> EOA:\n    \"\"\"\n    Add a previously unused EOA to the pre-alloc with the balance specified by `amount`.\n    \"\"\"\n    raise NotImplementedError(\"fund_eoa is not implemented in the base class\")\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Alloc.fund_address","title":"fund_address(address, amount)","text":"

    Fund an address with a given amount.

    If the address is already present in the pre-alloc the amount will be added to its existing balance.

    Source code in src/ethereum_test_types/types.py
    def fund_address(self, address: Address, amount: NumberConvertible):\n    \"\"\"\n    Fund an address with a given amount.\n\n    If the address is already present in the pre-alloc the amount will be\n    added to its existing balance.\n    \"\"\"\n    raise NotImplementedError(\"fund_address is not implemented in the base class\")\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.AuthorizationTuple","title":"AuthorizationTuple","text":"

    Bases: AuthorizationTupleGeneric[HexNumber]

    Authorization tuple for transactions.

    Source code in src/ethereum_test_types/types.py
    class AuthorizationTuple(AuthorizationTupleGeneric[HexNumber]):\n    \"\"\"\n    Authorization tuple for transactions.\n    \"\"\"\n\n    signer: EOA | None = None\n    secret_key: Hash | None = None\n\n    def model_post_init(self, __context: Any) -> None:\n        \"\"\"\n        Automatically signs the authorization tuple if a secret key or sender are provided.\n        \"\"\"\n        super().model_post_init(__context)\n\n        if self.secret_key is not None:\n            self.sign(self.secret_key)\n        elif self.signer is not None:\n            assert self.signer.key is not None, \"signer must have a key\"\n            self.sign(self.signer.key)\n\n    def sign(self, private_key: Hash) -> None:\n        \"\"\"\n        Signs the authorization tuple with a private key.\n        \"\"\"\n        signature = self.signature(private_key)\n\n        self.v = HexNumber(signature[0])\n        self.r = HexNumber(signature[1])\n        self.s = HexNumber(signature[2])\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.AuthorizationTuple.model_post_init","title":"model_post_init(__context)","text":"

    Automatically signs the authorization tuple if a secret key or sender are provided.

    Source code in src/ethereum_test_types/types.py
    def model_post_init(self, __context: Any) -> None:\n    \"\"\"\n    Automatically signs the authorization tuple if a secret key or sender are provided.\n    \"\"\"\n    super().model_post_init(__context)\n\n    if self.secret_key is not None:\n        self.sign(self.secret_key)\n    elif self.signer is not None:\n        assert self.signer.key is not None, \"signer must have a key\"\n        self.sign(self.signer.key)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.AuthorizationTuple.sign","title":"sign(private_key)","text":"

    Signs the authorization tuple with a private key.

    Source code in src/ethereum_test_types/types.py
    def sign(self, private_key: Hash) -> None:\n    \"\"\"\n    Signs the authorization tuple with a private key.\n    \"\"\"\n    signature = self.signature(private_key)\n\n    self.v = HexNumber(signature[0])\n    self.r = HexNumber(signature[1])\n    self.s = HexNumber(signature[2])\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.CamelModel","title":"CamelModel","text":"

    Bases: CopyValidateModel

    A base model that converts field names to camel case when serializing.

    For example, the field name current_timestamp in a Python model will be represented as currentTimestamp when it is serialized to json.

    Source code in src/ethereum_test_base_types/pydantic.py
    class CamelModel(CopyValidateModel):\n    \"\"\"\n    A base model that converts field names to camel case when serializing.\n\n    For example, the field name `current_timestamp` in a Python model will be represented\n    as `currentTimestamp` when it is serialized to json.\n    \"\"\"\n\n    model_config = ConfigDict(\n        alias_generator=to_camel,\n        populate_by_name=True,\n        validate_default=True,\n    )\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.ConsolidationRequest","title":"ConsolidationRequest","text":"

    Bases: ConsolidationRequestGeneric[HexNumber]

    Consolidation Request type

    Source code in src/ethereum_test_types/types.py
    class ConsolidationRequest(ConsolidationRequestGeneric[HexNumber]):\n    \"\"\"\n    Consolidation Request type\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.DepositRequest","title":"DepositRequest","text":"

    Bases: DepositRequestGeneric[HexNumber]

    Deposit Request type

    Source code in src/ethereum_test_types/types.py
    class DepositRequest(DepositRequestGeneric[HexNumber]):\n    \"\"\"\n    Deposit Request type\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Environment","title":"Environment","text":"

    Bases: EnvironmentGeneric[Number]

    Structure used to keep track of the context in which a block must be executed.

    Source code in src/ethereum_test_types/types.py
    class Environment(EnvironmentGeneric[Number]):\n    \"\"\"\n    Structure used to keep track of the context in which a block\n    must be executed.\n    \"\"\"\n\n    blob_gas_used: Number | None = Field(None, alias=\"currentBlobGasUsed\")\n    parent_ommers_hash: Hash = Field(Hash(0), alias=\"parentUncleHash\")\n    parent_blob_gas_used: Number | None = Field(None)\n    parent_excess_blob_gas: Number | None = Field(None)\n    parent_beacon_block_root: Hash | None = Field(None)\n\n    block_hashes: Dict[Number, Hash] = Field(default_factory=dict)\n    ommers: List[Hash] = Field(default_factory=list)\n    withdrawals: List[Withdrawal] | None = Field(None)\n    extra_data: Bytes = Field(Bytes(b\"\\x00\"), exclude=True)\n\n    @computed_field  # type: ignore[misc]\n    @cached_property\n    def parent_hash(self) -> Hash | None:\n        \"\"\"\n        Obtains the latest hash according to the highest block number in\n        `block_hashes`.\n        \"\"\"\n        if len(self.block_hashes) == 0:\n            return None\n\n        last_index = max(self.block_hashes.keys())\n        return Hash(self.block_hashes[last_index])\n\n    def set_fork_requirements(self, fork: Fork) -> \"Environment\":\n        \"\"\"\n        Fills the required fields in an environment depending on the fork.\n        \"\"\"\n        number = self.number\n        timestamp = self.timestamp\n\n        updated_values: Dict[str, Any] = {}\n\n        if fork.header_prev_randao_required(number, timestamp) and self.prev_randao is None:\n            updated_values[\"prev_randao\"] = 0\n\n        if fork.header_withdrawals_required(number, timestamp) and self.withdrawals is None:\n            updated_values[\"withdrawals\"] = []\n\n        if (\n            fork.header_base_fee_required(number, timestamp)\n            and self.base_fee_per_gas is None\n            and self.parent_base_fee_per_gas is None\n        ):\n            updated_values[\"base_fee_per_gas\"] = DEFAULT_BASE_FEE\n\n        if fork.header_zero_difficulty_required(number, timestamp):\n            updated_values[\"difficulty\"] = 0\n        elif self.difficulty is None and self.parent_difficulty is None:\n            updated_values[\"difficulty\"] = 0x20000\n\n        if (\n            fork.header_excess_blob_gas_required(number, timestamp)\n            and self.excess_blob_gas is None\n            and self.parent_excess_blob_gas is None\n        ):\n            updated_values[\"excess_blob_gas\"] = 0\n\n        if (\n            fork.header_blob_gas_used_required(number, timestamp)\n            and self.blob_gas_used is None\n            and self.parent_blob_gas_used is None\n        ):\n            updated_values[\"blob_gas_used\"] = 0\n\n        if (\n            fork.header_beacon_root_required(number, timestamp)\n            and self.parent_beacon_block_root is None\n        ):\n            updated_values[\"parent_beacon_block_root\"] = 0\n\n        return self.copy(**updated_values)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Environment.parent_hash","title":"parent_hash: Hash | None cached property","text":"

    Obtains the latest hash according to the highest block number in block_hashes.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Environment.set_fork_requirements","title":"set_fork_requirements(fork)","text":"

    Fills the required fields in an environment depending on the fork.

    Source code in src/ethereum_test_types/types.py
    def set_fork_requirements(self, fork: Fork) -> \"Environment\":\n    \"\"\"\n    Fills the required fields in an environment depending on the fork.\n    \"\"\"\n    number = self.number\n    timestamp = self.timestamp\n\n    updated_values: Dict[str, Any] = {}\n\n    if fork.header_prev_randao_required(number, timestamp) and self.prev_randao is None:\n        updated_values[\"prev_randao\"] = 0\n\n    if fork.header_withdrawals_required(number, timestamp) and self.withdrawals is None:\n        updated_values[\"withdrawals\"] = []\n\n    if (\n        fork.header_base_fee_required(number, timestamp)\n        and self.base_fee_per_gas is None\n        and self.parent_base_fee_per_gas is None\n    ):\n        updated_values[\"base_fee_per_gas\"] = DEFAULT_BASE_FEE\n\n    if fork.header_zero_difficulty_required(number, timestamp):\n        updated_values[\"difficulty\"] = 0\n    elif self.difficulty is None and self.parent_difficulty is None:\n        updated_values[\"difficulty\"] = 0x20000\n\n    if (\n        fork.header_excess_blob_gas_required(number, timestamp)\n        and self.excess_blob_gas is None\n        and self.parent_excess_blob_gas is None\n    ):\n        updated_values[\"excess_blob_gas\"] = 0\n\n    if (\n        fork.header_blob_gas_used_required(number, timestamp)\n        and self.blob_gas_used is None\n        and self.parent_blob_gas_used is None\n    ):\n        updated_values[\"blob_gas_used\"] = 0\n\n    if (\n        fork.header_beacon_root_required(number, timestamp)\n        and self.parent_beacon_block_root is None\n    ):\n        updated_values[\"parent_beacon_block_root\"] = 0\n\n    return self.copy(**updated_values)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Removable","title":"Removable","text":"

    Sentinel class to detect if a parameter should be removed. (None normally means \"do not modify\")

    Source code in src/ethereum_test_types/types.py
    class Removable:\n    \"\"\"\n    Sentinel class to detect if a parameter should be removed.\n    (`None` normally means \"do not modify\")\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Requests","title":"Requests","text":"

    Bases: RootModel[List[DepositRequest | WithdrawalRequest | ConsolidationRequest]]

    Requests for the transition tool.

    Source code in src/ethereum_test_types/types.py
    class Requests(RootModel[List[DepositRequest | WithdrawalRequest | ConsolidationRequest]]):\n    \"\"\"\n    Requests for the transition tool.\n    \"\"\"\n\n    root: List[DepositRequest | WithdrawalRequest | ConsolidationRequest] = Field(\n        default_factory=list\n    )\n\n    def to_serializable_list(self) -> List[Any]:\n        \"\"\"\n        Returns the requests as a list of serializable elements.\n        \"\"\"\n        return [r.type_byte() + eth_rlp.encode(r.to_serializable_list()) for r in self.root]\n\n    @cached_property\n    def trie_root(self) -> Hash:\n        \"\"\"\n        Returns the root hash of the requests.\n        \"\"\"\n        t = HexaryTrie(db={})\n        for i, r in enumerate(self.root):\n            t.set(\n                eth_rlp.encode(Uint(i)),\n                r.type_byte() + eth_rlp.encode(r.to_serializable_list()),\n            )\n        return Hash(t.root_hash)\n\n    def deposit_requests(self) -> List[DepositRequest]:\n        \"\"\"\n        Returns the list of deposit requests.\n        \"\"\"\n        return [d for d in self.root if isinstance(d, DepositRequest)]\n\n    def withdrawal_requests(self) -> List[WithdrawalRequest]:\n        \"\"\"\n        Returns the list of withdrawal requests.\n        \"\"\"\n        return [w for w in self.root if isinstance(w, WithdrawalRequest)]\n\n    def consolidation_requests(self) -> List[ConsolidationRequest]:\n        \"\"\"\n        Returns the list of consolidation requests.\n        \"\"\"\n        return [c for c in self.root if isinstance(c, ConsolidationRequest)]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Requests.to_serializable_list","title":"to_serializable_list()","text":"

    Returns the requests as a list of serializable elements.

    Source code in src/ethereum_test_types/types.py
    def to_serializable_list(self) -> List[Any]:\n    \"\"\"\n    Returns the requests as a list of serializable elements.\n    \"\"\"\n    return [r.type_byte() + eth_rlp.encode(r.to_serializable_list()) for r in self.root]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Requests.trie_root","title":"trie_root: Hash cached property","text":"

    Returns the root hash of the requests.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Requests.deposit_requests","title":"deposit_requests()","text":"

    Returns the list of deposit requests.

    Source code in src/ethereum_test_types/types.py
    def deposit_requests(self) -> List[DepositRequest]:\n    \"\"\"\n    Returns the list of deposit requests.\n    \"\"\"\n    return [d for d in self.root if isinstance(d, DepositRequest)]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Requests.withdrawal_requests","title":"withdrawal_requests()","text":"

    Returns the list of withdrawal requests.

    Source code in src/ethereum_test_types/types.py
    def withdrawal_requests(self) -> List[WithdrawalRequest]:\n    \"\"\"\n    Returns the list of withdrawal requests.\n    \"\"\"\n    return [w for w in self.root if isinstance(w, WithdrawalRequest)]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Requests.consolidation_requests","title":"consolidation_requests()","text":"

    Returns the list of consolidation requests.

    Source code in src/ethereum_test_types/types.py
    def consolidation_requests(self) -> List[ConsolidationRequest]:\n    \"\"\"\n    Returns the list of consolidation requests.\n    \"\"\"\n    return [c for c in self.root if isinstance(c, ConsolidationRequest)]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage","title":"Storage","text":"

    Bases: RootModel[Dict[StorageKeyValueType, StorageKeyValueType]]

    Definition of a storage in pre or post state of a test

    Source code in src/ethereum_test_base_types/composite_types.py
    class Storage(RootModel[Dict[StorageKeyValueType, StorageKeyValueType]]):\n    \"\"\"\n    Definition of a storage in pre or post state of a test\n    \"\"\"\n\n    root: Dict[StorageKeyValueType, StorageKeyValueType] = Field(default_factory=dict)\n\n    _current_slot: int = PrivateAttr(0)\n\n    StorageDictType: ClassVar[TypeAlias] = Dict[\n        str | int | bytes | SupportsBytes, str | int | bytes | SupportsBytes\n    ]\n    \"\"\"\n    Dictionary type to be used when defining an input to initialize a storage.\n    \"\"\"\n\n    @dataclass(kw_only=True)\n    class InvalidType(Exception):\n        \"\"\"\n        Invalid type used when describing test's expected storage key or value.\n        \"\"\"\n\n        key_or_value: Any\n\n        def __init__(self, key_or_value: Any, *args):\n            super().__init__(args)\n            self.key_or_value = key_or_value\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            return f\"invalid type for key/value: {self.key_or_value}\"\n\n    @dataclass(kw_only=True)\n    class InvalidValue(Exception):\n        \"\"\"\n        Invalid value used when describing test's expected storage key or\n        value.\n        \"\"\"\n\n        key_or_value: Any\n\n        def __init__(self, key_or_value: Any, *args):\n            super().__init__(args)\n            self.key_or_value = key_or_value\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            return f\"invalid value for key/value: {self.key_or_value}\"\n\n    @dataclass(kw_only=True)\n    class MissingKey(Exception):\n        \"\"\"\n        Test expected to find a storage key set but key was missing.\n        \"\"\"\n\n        key: int\n\n        def __init__(self, key: int, *args):\n            super().__init__(args)\n            self.key = key\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            return \"key {0} not found in storage\".format(Hash(self.key))\n\n    @dataclass(kw_only=True)\n    class KeyValueMismatch(Exception):\n        \"\"\"\n        Test expected a certain value in a storage key but value found\n        was different.\n        \"\"\"\n\n        address: Address\n        key: int\n        want: int\n        got: int\n\n        def __init__(self, address: Address, key: int, want: int, got: int, *args):\n            super().__init__(args)\n            self.address = address\n            self.key = key\n            self.want = want\n            self.got = got\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            label_str = \"\"\n            if self.address.label is not None:\n                label_str = f\" ({self.address.label})\"\n            return (\n                f\"incorrect value in address {self.address}{label_str} for \"\n                + f\"key {Hash(self.key)}:\"\n                + f\" want {HexNumber(self.want)} (dec:{int(self.want)}),\"\n                + f\" got {HexNumber(self.got)} (dec:{int(self.got)})\"\n            )\n\n    def __contains__(self, key: StorageKeyValueTypeConvertible | StorageKeyValueType) -> bool:\n        \"\"\"Checks for an item in the storage\"\"\"\n        return StorageKeyValueTypeAdapter.validate_python(key) in self.root\n\n    def __getitem__(\n        self, key: StorageKeyValueTypeConvertible | StorageKeyValueType\n    ) -> StorageKeyValueType:\n        \"\"\"Returns an item from the storage\"\"\"\n        return self.root[StorageKeyValueTypeAdapter.validate_python(key)]\n\n    def __setitem__(\n        self,\n        key: StorageKeyValueTypeConvertible | StorageKeyValueType,\n        value: StorageKeyValueTypeConvertible | StorageKeyValueType,\n    ):  # noqa: SC200\n        \"\"\"Sets an item in the storage\"\"\"\n        self.root[\n            StorageKeyValueTypeAdapter.validate_python(key)\n        ] = StorageKeyValueTypeAdapter.validate_python(value)\n\n    def __delitem__(self, key: StorageKeyValueTypeConvertible | StorageKeyValueType):\n        \"\"\"Deletes an item from the storage\"\"\"\n        del self.root[StorageKeyValueTypeAdapter.validate_python(key)]\n\n    def __iter__(self):\n        \"\"\"Returns an iterator over the storage\"\"\"\n        return iter(self.root)\n\n    def __eq__(self, other) -> bool:\n        \"\"\"\n        Returns True if both storages are equal.\n        \"\"\"\n        if not isinstance(other, Storage):\n            return False\n        return self.root == other.root\n\n    def __ne__(self, other) -> bool:\n        \"\"\"\n        Returns True if both storages are not equal.\n        \"\"\"\n        if not isinstance(other, Storage):\n            return False\n        return self.root != other.root\n\n    def __bool__(self) -> bool:\n        \"\"\"Returns True if the storage is not empty\"\"\"\n        return any(v for v in self.root.values())\n\n    def __add__(self, other: \"Storage\") -> \"Storage\":\n        \"\"\"\n        Returns a new storage that is the sum of two storages.\n        \"\"\"\n        return Storage({**self.root, **other.root})\n\n    def keys(self) -> set[StorageKeyValueType]:\n        \"\"\"Returns the keys of the storage\"\"\"\n        return set(self.root.keys())\n\n    def set_next_slot(self, slot: int) -> \"Storage\":\n        \"\"\"\n        Sets the next slot to be used by `store_next`.\n        \"\"\"\n        self._current_slot = slot\n        return self\n\n    def store_next(\n        self, value: StorageKeyValueTypeConvertible | StorageKeyValueType | bool\n    ) -> StorageKeyValueType:\n        \"\"\"\n        Stores a value in the storage and returns the key where the value is stored.\n\n        Increments the key counter so the next time this function is called,\n        the next key is used.\n        \"\"\"\n        slot = StorageKeyValueTypeAdapter.validate_python(self._current_slot)\n        self._current_slot += 1\n        self[slot] = StorageKeyValueTypeAdapter.validate_python(value)\n        return slot\n\n    def peek_slot(self) -> int:\n        \"\"\"\n        Peeks the next slot that will be used by `store_next`.\n        \"\"\"\n        return self._current_slot\n\n    def contains(self, other: \"Storage\") -> bool:\n        \"\"\"\n        Returns True if self contains all keys with equal value as\n        contained by second storage.\n        Used for comparison with test expected post state and alloc returned\n        by the transition tool.\n        \"\"\"\n        for key in other.keys():\n            if key not in self:\n                return False\n            if self[key] != other[key]:\n                return False\n        return True\n\n    def must_contain(self, address: Address, other: \"Storage\"):\n        \"\"\"\n        Succeeds only if self contains all keys with equal value as\n        contained by second storage.\n        Used for comparison with test expected post state and alloc returned\n        by the transition tool.\n        Raises detailed exception when a difference is found.\n        \"\"\"\n        for key in other.keys():\n            if key not in self:\n                # storage[key]==0 is equal to missing storage\n                if other[key] != 0:\n                    raise Storage.MissingKey(key=key)\n            elif self[key] != other[key]:\n                raise Storage.KeyValueMismatch(\n                    address=address, key=key, want=self[key], got=other[key]\n                )\n\n    def must_be_equal(self, address: Address, other: \"Storage | None\"):\n        \"\"\"\n        Succeeds only if \"self\" is equal to \"other\" storage.\n        \"\"\"\n        # Test keys contained in both storage objects\n        if other is None:\n            other = Storage({})\n        for key in self.keys() & other.keys():\n            if self[key] != other[key]:\n                raise Storage.KeyValueMismatch(\n                    address=address, key=key, want=self[key], got=other[key]\n                )\n\n        # Test keys contained in either one of the storage objects\n        for key in self.keys() ^ other.keys():\n            if key in self:\n                if self[key] != 0:\n                    raise Storage.KeyValueMismatch(address=address, key=key, want=self[key], got=0)\n\n            elif other[key] != 0:\n                raise Storage.KeyValueMismatch(address=address, key=key, want=0, got=other[key])\n\n    def canary(self) -> \"Storage\":\n        \"\"\"\n        Returns a canary storage filled with non-zero values where the current storage expects\n        zero values, to guarantee that the test overwrites the storage.\n        \"\"\"\n        return Storage({key: HashInt(0xBA5E) for key in self.keys() if self[key] == 0})\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.StorageDictType","title":"StorageDictType: TypeAlias = Dict[str | int | bytes | SupportsBytes, str | int | bytes | SupportsBytes] class-attribute","text":"

    Dictionary type to be used when defining an input to initialize a storage.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.InvalidType","title":"InvalidType dataclass","text":"

    Bases: Exception

    Invalid type used when describing test's expected storage key or value.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass InvalidType(Exception):\n    \"\"\"\n    Invalid type used when describing test's expected storage key or value.\n    \"\"\"\n\n    key_or_value: Any\n\n    def __init__(self, key_or_value: Any, *args):\n        super().__init__(args)\n        self.key_or_value = key_or_value\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        return f\"invalid type for key/value: {self.key_or_value}\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.InvalidType.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    return f\"invalid type for key/value: {self.key_or_value}\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.InvalidValue","title":"InvalidValue dataclass","text":"

    Bases: Exception

    Invalid value used when describing test's expected storage key or value.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass InvalidValue(Exception):\n    \"\"\"\n    Invalid value used when describing test's expected storage key or\n    value.\n    \"\"\"\n\n    key_or_value: Any\n\n    def __init__(self, key_or_value: Any, *args):\n        super().__init__(args)\n        self.key_or_value = key_or_value\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        return f\"invalid value for key/value: {self.key_or_value}\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.InvalidValue.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    return f\"invalid value for key/value: {self.key_or_value}\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.MissingKey","title":"MissingKey dataclass","text":"

    Bases: Exception

    Test expected to find a storage key set but key was missing.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass MissingKey(Exception):\n    \"\"\"\n    Test expected to find a storage key set but key was missing.\n    \"\"\"\n\n    key: int\n\n    def __init__(self, key: int, *args):\n        super().__init__(args)\n        self.key = key\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        return \"key {0} not found in storage\".format(Hash(self.key))\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.MissingKey.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    return \"key {0} not found in storage\".format(Hash(self.key))\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.KeyValueMismatch","title":"KeyValueMismatch dataclass","text":"

    Bases: Exception

    Test expected a certain value in a storage key but value found was different.

    Source code in src/ethereum_test_base_types/composite_types.py
    @dataclass(kw_only=True)\nclass KeyValueMismatch(Exception):\n    \"\"\"\n    Test expected a certain value in a storage key but value found\n    was different.\n    \"\"\"\n\n    address: Address\n    key: int\n    want: int\n    got: int\n\n    def __init__(self, address: Address, key: int, want: int, got: int, *args):\n        super().__init__(args)\n        self.address = address\n        self.key = key\n        self.want = want\n        self.got = got\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        label_str = \"\"\n        if self.address.label is not None:\n            label_str = f\" ({self.address.label})\"\n        return (\n            f\"incorrect value in address {self.address}{label_str} for \"\n            + f\"key {Hash(self.key)}:\"\n            + f\" want {HexNumber(self.want)} (dec:{int(self.want)}),\"\n            + f\" got {HexNumber(self.got)} (dec:{int(self.got)})\"\n        )\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.KeyValueMismatch.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_base_types/composite_types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    label_str = \"\"\n    if self.address.label is not None:\n        label_str = f\" ({self.address.label})\"\n    return (\n        f\"incorrect value in address {self.address}{label_str} for \"\n        + f\"key {Hash(self.key)}:\"\n        + f\" want {HexNumber(self.want)} (dec:{int(self.want)}),\"\n        + f\" got {HexNumber(self.got)} (dec:{int(self.got)})\"\n    )\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.__contains__","title":"__contains__(key)","text":"

    Checks for an item in the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def __contains__(self, key: StorageKeyValueTypeConvertible | StorageKeyValueType) -> bool:\n    \"\"\"Checks for an item in the storage\"\"\"\n    return StorageKeyValueTypeAdapter.validate_python(key) in self.root\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.__getitem__","title":"__getitem__(key)","text":"

    Returns an item from the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def __getitem__(\n    self, key: StorageKeyValueTypeConvertible | StorageKeyValueType\n) -> StorageKeyValueType:\n    \"\"\"Returns an item from the storage\"\"\"\n    return self.root[StorageKeyValueTypeAdapter.validate_python(key)]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.__setitem__","title":"__setitem__(key, value)","text":"

    Sets an item in the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def __setitem__(\n    self,\n    key: StorageKeyValueTypeConvertible | StorageKeyValueType,\n    value: StorageKeyValueTypeConvertible | StorageKeyValueType,\n):  # noqa: SC200\n    \"\"\"Sets an item in the storage\"\"\"\n    self.root[\n        StorageKeyValueTypeAdapter.validate_python(key)\n    ] = StorageKeyValueTypeAdapter.validate_python(value)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.__delitem__","title":"__delitem__(key)","text":"

    Deletes an item from the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def __delitem__(self, key: StorageKeyValueTypeConvertible | StorageKeyValueType):\n    \"\"\"Deletes an item from the storage\"\"\"\n    del self.root[StorageKeyValueTypeAdapter.validate_python(key)]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.__iter__","title":"__iter__()","text":"

    Returns an iterator over the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def __iter__(self):\n    \"\"\"Returns an iterator over the storage\"\"\"\n    return iter(self.root)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.__eq__","title":"__eq__(other)","text":"

    Returns True if both storages are equal.

    Source code in src/ethereum_test_base_types/composite_types.py
    def __eq__(self, other) -> bool:\n    \"\"\"\n    Returns True if both storages are equal.\n    \"\"\"\n    if not isinstance(other, Storage):\n        return False\n    return self.root == other.root\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.__ne__","title":"__ne__(other)","text":"

    Returns True if both storages are not equal.

    Source code in src/ethereum_test_base_types/composite_types.py
    def __ne__(self, other) -> bool:\n    \"\"\"\n    Returns True if both storages are not equal.\n    \"\"\"\n    if not isinstance(other, Storage):\n        return False\n    return self.root != other.root\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.__bool__","title":"__bool__()","text":"

    Returns True if the storage is not empty

    Source code in src/ethereum_test_base_types/composite_types.py
    def __bool__(self) -> bool:\n    \"\"\"Returns True if the storage is not empty\"\"\"\n    return any(v for v in self.root.values())\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.__add__","title":"__add__(other)","text":"

    Returns a new storage that is the sum of two storages.

    Source code in src/ethereum_test_base_types/composite_types.py
    def __add__(self, other: \"Storage\") -> \"Storage\":\n    \"\"\"\n    Returns a new storage that is the sum of two storages.\n    \"\"\"\n    return Storage({**self.root, **other.root})\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.keys","title":"keys()","text":"

    Returns the keys of the storage

    Source code in src/ethereum_test_base_types/composite_types.py
    def keys(self) -> set[StorageKeyValueType]:\n    \"\"\"Returns the keys of the storage\"\"\"\n    return set(self.root.keys())\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.set_next_slot","title":"set_next_slot(slot)","text":"

    Sets the next slot to be used by store_next.

    Source code in src/ethereum_test_base_types/composite_types.py
    def set_next_slot(self, slot: int) -> \"Storage\":\n    \"\"\"\n    Sets the next slot to be used by `store_next`.\n    \"\"\"\n    self._current_slot = slot\n    return self\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.store_next","title":"store_next(value)","text":"

    Stores a value in the storage and returns the key where the value is stored.

    Increments the key counter so the next time this function is called, the next key is used.

    Source code in src/ethereum_test_base_types/composite_types.py
    def store_next(\n    self, value: StorageKeyValueTypeConvertible | StorageKeyValueType | bool\n) -> StorageKeyValueType:\n    \"\"\"\n    Stores a value in the storage and returns the key where the value is stored.\n\n    Increments the key counter so the next time this function is called,\n    the next key is used.\n    \"\"\"\n    slot = StorageKeyValueTypeAdapter.validate_python(self._current_slot)\n    self._current_slot += 1\n    self[slot] = StorageKeyValueTypeAdapter.validate_python(value)\n    return slot\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.peek_slot","title":"peek_slot()","text":"

    Peeks the next slot that will be used by store_next.

    Source code in src/ethereum_test_base_types/composite_types.py
    def peek_slot(self) -> int:\n    \"\"\"\n    Peeks the next slot that will be used by `store_next`.\n    \"\"\"\n    return self._current_slot\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.contains","title":"contains(other)","text":"

    Returns True if self contains all keys with equal value as contained by second storage. Used for comparison with test expected post state and alloc returned by the transition tool.

    Source code in src/ethereum_test_base_types/composite_types.py
    def contains(self, other: \"Storage\") -> bool:\n    \"\"\"\n    Returns True if self contains all keys with equal value as\n    contained by second storage.\n    Used for comparison with test expected post state and alloc returned\n    by the transition tool.\n    \"\"\"\n    for key in other.keys():\n        if key not in self:\n            return False\n        if self[key] != other[key]:\n            return False\n    return True\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.must_contain","title":"must_contain(address, other)","text":"

    Succeeds only if self contains all keys with equal value as contained by second storage. Used for comparison with test expected post state and alloc returned by the transition tool. Raises detailed exception when a difference is found.

    Source code in src/ethereum_test_base_types/composite_types.py
    def must_contain(self, address: Address, other: \"Storage\"):\n    \"\"\"\n    Succeeds only if self contains all keys with equal value as\n    contained by second storage.\n    Used for comparison with test expected post state and alloc returned\n    by the transition tool.\n    Raises detailed exception when a difference is found.\n    \"\"\"\n    for key in other.keys():\n        if key not in self:\n            # storage[key]==0 is equal to missing storage\n            if other[key] != 0:\n                raise Storage.MissingKey(key=key)\n        elif self[key] != other[key]:\n            raise Storage.KeyValueMismatch(\n                address=address, key=key, want=self[key], got=other[key]\n            )\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.must_be_equal","title":"must_be_equal(address, other)","text":"

    Succeeds only if \"self\" is equal to \"other\" storage.

    Source code in src/ethereum_test_base_types/composite_types.py
    def must_be_equal(self, address: Address, other: \"Storage | None\"):\n    \"\"\"\n    Succeeds only if \"self\" is equal to \"other\" storage.\n    \"\"\"\n    # Test keys contained in both storage objects\n    if other is None:\n        other = Storage({})\n    for key in self.keys() & other.keys():\n        if self[key] != other[key]:\n            raise Storage.KeyValueMismatch(\n                address=address, key=key, want=self[key], got=other[key]\n            )\n\n    # Test keys contained in either one of the storage objects\n    for key in self.keys() ^ other.keys():\n        if key in self:\n            if self[key] != 0:\n                raise Storage.KeyValueMismatch(address=address, key=key, want=self[key], got=0)\n\n        elif other[key] != 0:\n            raise Storage.KeyValueMismatch(address=address, key=key, want=0, got=other[key])\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Storage.canary","title":"canary()","text":"

    Returns a canary storage filled with non-zero values where the current storage expects zero values, to guarantee that the test overwrites the storage.

    Source code in src/ethereum_test_base_types/composite_types.py
    def canary(self) -> \"Storage\":\n    \"\"\"\n    Returns a canary storage filled with non-zero values where the current storage expects\n    zero values, to guarantee that the test overwrites the storage.\n    \"\"\"\n    return Storage({key: HashInt(0xBA5E) for key in self.keys() if self[key] == 0})\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction","title":"Transaction","text":"

    Bases: TransactionGeneric[HexNumber], TransactionTransitionToolConverter

    Generic object that can represent all Ethereum transaction types.

    Source code in src/ethereum_test_types/types.py
    class Transaction(TransactionGeneric[HexNumber], TransactionTransitionToolConverter):\n    \"\"\"\n    Generic object that can represent all Ethereum transaction types.\n    \"\"\"\n\n    gas_limit: HexNumber = Field(HexNumber(21_000), serialization_alias=\"gas\")\n    to: Address | None = Field(Address(0xAA))\n    data: Bytes = Field(Bytes(b\"\"), alias=\"input\")\n\n    authorization_list: List[AuthorizationTuple] | None = None\n\n    secret_key: Hash | None = None\n    error: List[TransactionException] | TransactionException | None = Field(None, exclude=True)\n\n    protected: bool = Field(True, exclude=True)\n    rlp_override: bytes | None = Field(None, exclude=True)\n\n    wrapped_blob_transaction: bool = Field(False, exclude=True)\n    blobs: Sequence[Bytes] | None = Field(None, exclude=True)\n    blob_kzg_commitments: Sequence[Bytes] | None = Field(None, exclude=True)\n    blob_kzg_proofs: Sequence[Bytes] | None = Field(None, exclude=True)\n\n    model_config = ConfigDict(validate_assignment=True)\n\n    class InvalidFeePayment(Exception):\n        \"\"\"\n        Transaction described more than one fee payment type.\n        \"\"\"\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            return \"only one type of fee payment field can be used in a single tx\"\n\n    class InvalidSignaturePrivateKey(Exception):\n        \"\"\"\n        Transaction describes both the signature and private key of\n        source account.\n        \"\"\"\n\n        def __str__(self):\n            \"\"\"Print exception string\"\"\"\n            return \"can't define both 'signature' and 'private_key'\"\n\n    def model_post_init(self, __context):\n        \"\"\"\n        Ensures the transaction has no conflicting properties.\n        \"\"\"\n        super().model_post_init(__context)\n\n        if self.gas_price is not None and (\n            self.max_fee_per_gas is not None\n            or self.max_priority_fee_per_gas is not None\n            or self.max_fee_per_blob_gas is not None\n        ):\n            raise Transaction.InvalidFeePayment()\n\n        if \"ty\" not in self.model_fields_set:\n            # Try to deduce transaction type from included fields\n            if self.authorization_list is not None:\n                self.ty = 4\n            elif self.max_fee_per_blob_gas is not None or self.blob_kzg_commitments is not None:\n                self.ty = 3\n            elif self.max_fee_per_gas is not None or self.max_priority_fee_per_gas is not None:\n                self.ty = 2\n            elif self.access_list is not None:\n                self.ty = 1\n            else:\n                self.ty = 0\n\n        if self.v is not None and self.secret_key is not None:\n            raise Transaction.InvalidSignaturePrivateKey()\n\n        if self.v is None and self.secret_key is None:\n            if self.sender is not None:\n                self.secret_key = self.sender.key\n            else:\n                self.secret_key = Hash(TestPrivateKey)\n                self.sender = EOA(address=TestAddress, key=self.secret_key, nonce=0)\n\n        # Set default values for fields that are required for certain tx types\n        if self.ty <= 1 and self.gas_price is None:\n            self.gas_price = 10\n        if self.ty >= 1 and self.access_list is None:\n            self.access_list = []\n        if self.ty < 1:\n            assert self.access_list is None, \"access_list must be None\"\n\n        if self.ty >= 2 and self.max_fee_per_gas is None:\n            self.max_fee_per_gas = 7\n        if self.ty >= 2 and self.max_priority_fee_per_gas is None:\n            self.max_priority_fee_per_gas = 0\n        if self.ty < 2:\n            assert self.max_fee_per_gas is None, \"max_fee_per_gas must be None\"\n            assert self.max_priority_fee_per_gas is None, \"max_priority_fee_per_gas must be None\"\n\n        if self.ty == 3 and self.max_fee_per_blob_gas is None:\n            self.max_fee_per_blob_gas = 1\n        if self.ty != 3:\n            assert self.blob_versioned_hashes is None, \"blob_versioned_hashes must be None\"\n            assert self.max_fee_per_blob_gas is None, \"max_fee_per_blob_gas must be None\"\n\n        if self.ty == 4 and self.authorization_list is None:\n            self.authorization_list = []\n        if self.ty != 4:\n            assert self.authorization_list is None, \"authorization_list must be None\"\n\n        if \"nonce\" not in self.model_fields_set and self.sender is not None:\n            self.nonce = HexNumber(self.sender.get_nonce())\n\n    def with_error(\n        self, error: List[TransactionException] | TransactionException\n    ) -> \"Transaction\":\n        \"\"\"\n        Create a copy of the transaction with an added error.\n        \"\"\"\n        return self.copy(error=error)\n\n    def with_nonce(self, nonce: int) -> \"Transaction\":\n        \"\"\"\n        Create a copy of the transaction with a modified nonce.\n        \"\"\"\n        return self.copy(nonce=nonce)\n\n    def with_signature_and_sender(self, *, keep_secret_key: bool = False) -> \"Transaction\":\n        \"\"\"\n        Returns a signed version of the transaction using the private key.\n        \"\"\"\n        updated_values: Dict[str, Any] = {}\n\n        if self.v is not None:\n            # Transaction already signed\n            if self.sender is not None:\n                return self\n\n            public_key = PublicKey.from_signature_and_message(\n                self.signature_bytes, keccak256(self.signing_bytes), hasher=None\n            )\n            updated_values[\"sender\"] = Address(\n                keccak256(public_key.format(compressed=False)[1:])[32 - 20 :]\n            )\n            return self.copy(**updated_values)\n\n        if self.secret_key is None:\n            raise ValueError(\"secret_key must be set to sign a transaction\")\n\n        # Get the signing bytes\n        signing_hash = keccak256(self.signing_bytes)\n\n        # Sign the bytes\n        signature_bytes = PrivateKey(secret=self.secret_key).sign_recoverable(\n            signing_hash, hasher=None\n        )\n        public_key = PublicKey.from_signature_and_message(\n            signature_bytes, signing_hash, hasher=None\n        )\n\n        sender = keccak256(public_key.format(compressed=False)[1:])[32 - 20 :]\n        updated_values[\"sender\"] = Address(sender)\n\n        v, r, s = (\n            signature_bytes[64],\n            int.from_bytes(signature_bytes[0:32], byteorder=\"big\"),\n            int.from_bytes(signature_bytes[32:64], byteorder=\"big\"),\n        )\n        if self.ty == 0:\n            if self.protected:\n                v += 35 + (self.chain_id * 2)\n            else:  # not protected\n                v += 27\n\n        updated_values[\"v\"] = HexNumber(v)\n        updated_values[\"r\"] = HexNumber(r)\n        updated_values[\"s\"] = HexNumber(s)\n\n        updated_values[\"secret_key\"] = None\n\n        updated_tx: \"Transaction\" = self.model_copy(update=updated_values)\n\n        # Remove the secret key if requested\n        if keep_secret_key:\n            updated_tx.secret_key = self.secret_key\n        return updated_tx\n\n    @cached_property\n    def signing_envelope(self) -> List[Any]:\n        \"\"\"\n        Returns the list of values included in the envelope used for signing.\n        \"\"\"\n        to = self.to if self.to else bytes()\n        if self.ty == 4:\n            # EIP-7702: https://eips.ethereum.org/EIPS/eip-7702\n            if self.max_priority_fee_per_gas is None:\n                raise ValueError(f\"max_priority_fee_per_gas must be set for type {self.ty} tx\")\n            if self.max_fee_per_gas is None:\n                raise ValueError(f\"max_fee_per_gas must be set for type {self.ty} tx\")\n            if self.access_list is None:\n                raise ValueError(f\"access_list must be set for type {self.ty} tx\")\n            if self.authorization_list is None:\n                raise ValueError(f\"authorization_tuples must be set for type {self.ty} tx\")\n            return [\n                Uint(self.chain_id),\n                Uint(self.nonce),\n                Uint(self.max_priority_fee_per_gas),\n                Uint(self.max_fee_per_gas),\n                Uint(self.gas_limit),\n                to,\n                Uint(self.value),\n                self.data,\n                [a.to_list() for a in self.access_list],\n                [a.to_list() for a in self.authorization_list],\n            ]\n        elif self.ty == 3:\n            # EIP-4844: https://eips.ethereum.org/EIPS/eip-4844\n            if self.max_priority_fee_per_gas is None:\n                raise ValueError(f\"max_priority_fee_per_gas must be set for type {self.ty} tx\")\n            if self.max_fee_per_gas is None:\n                raise ValueError(f\"max_fee_per_gas must be set for type {self.ty} tx\")\n            if self.max_fee_per_blob_gas is None:\n                raise ValueError(f\"max_fee_per_blob_gas must be set for type {self.ty} tx\")\n            if self.blob_versioned_hashes is None:\n                raise ValueError(f\"blob_versioned_hashes must be set for type {self.ty} tx\")\n            if self.access_list is None:\n                raise ValueError(f\"access_list must be set for type {self.ty} tx\")\n            return [\n                Uint(self.chain_id),\n                Uint(self.nonce),\n                Uint(self.max_priority_fee_per_gas),\n                Uint(self.max_fee_per_gas),\n                Uint(self.gas_limit),\n                to,\n                Uint(self.value),\n                self.data,\n                [a.to_list() for a in self.access_list],\n                Uint(self.max_fee_per_blob_gas),\n                list(self.blob_versioned_hashes),\n            ]\n        elif self.ty == 2:\n            # EIP-1559: https://eips.ethereum.org/EIPS/eip-1559\n            if self.max_priority_fee_per_gas is None:\n                raise ValueError(f\"max_priority_fee_per_gas must be set for type {self.ty} tx\")\n            if self.max_fee_per_gas is None:\n                raise ValueError(f\"max_fee_per_gas must be set for type {self.ty} tx\")\n            if self.access_list is None:\n                raise ValueError(f\"access_list must be set for type {self.ty} tx\")\n            return [\n                Uint(self.chain_id),\n                Uint(self.nonce),\n                Uint(self.max_priority_fee_per_gas),\n                Uint(self.max_fee_per_gas),\n                Uint(self.gas_limit),\n                to,\n                Uint(self.value),\n                self.data,\n                [a.to_list() for a in self.access_list],\n            ]\n        elif self.ty == 1:\n            # EIP-2930: https://eips.ethereum.org/EIPS/eip-2930\n            if self.gas_price is None:\n                raise ValueError(f\"gas_price must be set for type {self.ty} tx\")\n            if self.access_list is None:\n                raise ValueError(f\"access_list must be set for type {self.ty} tx\")\n\n            return [\n                Uint(self.chain_id),\n                Uint(self.nonce),\n                Uint(self.gas_price),\n                Uint(self.gas_limit),\n                to,\n                Uint(self.value),\n                self.data,\n                [a.to_list() for a in self.access_list],\n            ]\n        elif self.ty == 0:\n            if self.gas_price is None:\n                raise ValueError(f\"gas_price must be set for type {self.ty} tx\")\n\n            if self.protected:\n                # EIP-155: https://eips.ethereum.org/EIPS/eip-155\n                return [\n                    Uint(self.nonce),\n                    Uint(self.gas_price),\n                    Uint(self.gas_limit),\n                    to,\n                    Uint(self.value),\n                    self.data,\n                    Uint(self.chain_id),\n                    Uint(0),\n                    Uint(0),\n                ]\n            else:\n                return [\n                    Uint(self.nonce),\n                    Uint(self.gas_price),\n                    Uint(self.gas_limit),\n                    to,\n                    Uint(self.value),\n                    self.data,\n                ]\n        raise NotImplementedError(\"signing for transaction type {self.ty} not implemented\")\n\n    @cached_property\n    def payload_body(self) -> List[Any]:\n        \"\"\"\n        Returns the list of values included in the transaction body.\n        \"\"\"\n        if self.v is None or self.r is None or self.s is None:\n            raise ValueError(\"signature must be set before serializing any tx type\")\n\n        signing_envelope = self.signing_envelope\n\n        if self.ty == 0 and self.protected:\n            # Remove the chain_id and the two zeros from the signing envelope\n            signing_envelope = signing_envelope[:-3]\n        elif self.ty == 3 and self.wrapped_blob_transaction:\n            # EIP-4844: https://eips.ethereum.org/EIPS/eip-4844\n            if self.blobs is None:\n                raise ValueError(f\"blobs must be set for type {self.ty} tx\")\n            if self.blob_kzg_commitments is None:\n                raise ValueError(f\"blob_kzg_commitments must be set for type {self.ty} tx\")\n            if self.blob_kzg_proofs is None:\n                raise ValueError(f\"blob_kzg_proofs must be set for type {self.ty} tx\")\n            return [\n                signing_envelope + [Uint(self.v), Uint(self.r), Uint(self.s)],\n                list(self.blobs),\n                list(self.blob_kzg_commitments),\n                list(self.blob_kzg_proofs),\n            ]\n\n        return signing_envelope + [Uint(self.v), Uint(self.r), Uint(self.s)]\n\n    @cached_property\n    def rlp(self) -> bytes:\n        \"\"\"\n        Returns bytes of the serialized representation of the transaction,\n        which is almost always RLP encoding.\n        \"\"\"\n        if self.rlp_override is not None:\n            return self.rlp_override\n        if self.ty > 0:\n            return bytes([self.ty]) + eth_rlp.encode(self.payload_body)\n        else:\n            return eth_rlp.encode(self.payload_body)\n\n    @cached_property\n    def hash(self) -> Hash:\n        \"\"\"\n        Returns hash of the transaction.\n        \"\"\"\n        return Hash(keccak256(self.rlp))\n\n    @cached_property\n    def signing_bytes(self) -> bytes:\n        \"\"\"\n        Returns the serialized bytes of the transaction used for signing.\n        \"\"\"\n        return (\n            bytes([self.ty]) + eth_rlp.encode(self.signing_envelope)\n            if self.ty > 0\n            else eth_rlp.encode(self.signing_envelope)\n        )\n\n    @cached_property\n    def signature_bytes(self) -> bytes:\n        \"\"\"\n        Returns the serialized bytes of the transaction signature.\n        \"\"\"\n        assert self.v is not None and self.r is not None and self.s is not None\n        v = int(self.v)\n        if self.ty == 0:\n            if self.protected:\n                assert self.chain_id is not None\n                v -= 35 + (self.chain_id * 2)\n            else:\n                v -= 27\n        return (\n            self.r.to_bytes(32, byteorder=\"big\")\n            + self.s.to_bytes(32, byteorder=\"big\")\n            + bytes([v])\n        )\n\n    @cached_property\n    def serializable_list(self) -> Any:\n        \"\"\"\n        Returns the list of values included in the transaction as a serializable object.\n        \"\"\"\n        return self.rlp if self.ty > 0 else self.payload_body\n\n    @staticmethod\n    def list_root(input_txs: List[\"Transaction\"]) -> Hash:\n        \"\"\"\n        Returns the transactions root of a list of transactions.\n        \"\"\"\n        t = HexaryTrie(db={})\n        for i, tx in enumerate(input_txs):\n            t.set(eth_rlp.encode(Uint(i)), tx.rlp)\n        return Hash(t.root_hash)\n\n    @staticmethod\n    def list_blob_versioned_hashes(input_txs: List[\"Transaction\"]) -> List[Hash]:\n        \"\"\"\n        Gets a list of ordered blob versioned hashes from a list of transactions.\n        \"\"\"\n        return [\n            blob_versioned_hash\n            for tx in input_txs\n            if tx.blob_versioned_hashes is not None\n            for blob_versioned_hash in tx.blob_versioned_hashes\n        ]\n\n    @cached_property\n    def created_contract(self) -> Address:\n        \"\"\"\n        Returns the address of the contract created by the transaction.\n        \"\"\"\n        if self.to is not None:\n            raise ValueError(\"transaction is not a contract creation\")\n        nonce_bytes = (\n            bytes() if self.nonce == 0 else self.nonce.to_bytes(length=1, byteorder=\"big\")\n        )\n        if self.sender is None:\n            raise ValueError(\"sender address is None\")\n        hash = keccak256(eth_rlp.encode([self.sender, nonce_bytes]))\n        return Address(hash[-20:])\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.InvalidFeePayment","title":"InvalidFeePayment","text":"

    Bases: Exception

    Transaction described more than one fee payment type.

    Source code in src/ethereum_test_types/types.py
    class InvalidFeePayment(Exception):\n    \"\"\"\n    Transaction described more than one fee payment type.\n    \"\"\"\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        return \"only one type of fee payment field can be used in a single tx\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.InvalidFeePayment.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_types/types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    return \"only one type of fee payment field can be used in a single tx\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.InvalidSignaturePrivateKey","title":"InvalidSignaturePrivateKey","text":"

    Bases: Exception

    Transaction describes both the signature and private key of source account.

    Source code in src/ethereum_test_types/types.py
    class InvalidSignaturePrivateKey(Exception):\n    \"\"\"\n    Transaction describes both the signature and private key of\n    source account.\n    \"\"\"\n\n    def __str__(self):\n        \"\"\"Print exception string\"\"\"\n        return \"can't define both 'signature' and 'private_key'\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.InvalidSignaturePrivateKey.__str__","title":"__str__()","text":"

    Print exception string

    Source code in src/ethereum_test_types/types.py
    def __str__(self):\n    \"\"\"Print exception string\"\"\"\n    return \"can't define both 'signature' and 'private_key'\"\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.model_post_init","title":"model_post_init(__context)","text":"

    Ensures the transaction has no conflicting properties.

    Source code in src/ethereum_test_types/types.py
    def model_post_init(self, __context):\n    \"\"\"\n    Ensures the transaction has no conflicting properties.\n    \"\"\"\n    super().model_post_init(__context)\n\n    if self.gas_price is not None and (\n        self.max_fee_per_gas is not None\n        or self.max_priority_fee_per_gas is not None\n        or self.max_fee_per_blob_gas is not None\n    ):\n        raise Transaction.InvalidFeePayment()\n\n    if \"ty\" not in self.model_fields_set:\n        # Try to deduce transaction type from included fields\n        if self.authorization_list is not None:\n            self.ty = 4\n        elif self.max_fee_per_blob_gas is not None or self.blob_kzg_commitments is not None:\n            self.ty = 3\n        elif self.max_fee_per_gas is not None or self.max_priority_fee_per_gas is not None:\n            self.ty = 2\n        elif self.access_list is not None:\n            self.ty = 1\n        else:\n            self.ty = 0\n\n    if self.v is not None and self.secret_key is not None:\n        raise Transaction.InvalidSignaturePrivateKey()\n\n    if self.v is None and self.secret_key is None:\n        if self.sender is not None:\n            self.secret_key = self.sender.key\n        else:\n            self.secret_key = Hash(TestPrivateKey)\n            self.sender = EOA(address=TestAddress, key=self.secret_key, nonce=0)\n\n    # Set default values for fields that are required for certain tx types\n    if self.ty <= 1 and self.gas_price is None:\n        self.gas_price = 10\n    if self.ty >= 1 and self.access_list is None:\n        self.access_list = []\n    if self.ty < 1:\n        assert self.access_list is None, \"access_list must be None\"\n\n    if self.ty >= 2 and self.max_fee_per_gas is None:\n        self.max_fee_per_gas = 7\n    if self.ty >= 2 and self.max_priority_fee_per_gas is None:\n        self.max_priority_fee_per_gas = 0\n    if self.ty < 2:\n        assert self.max_fee_per_gas is None, \"max_fee_per_gas must be None\"\n        assert self.max_priority_fee_per_gas is None, \"max_priority_fee_per_gas must be None\"\n\n    if self.ty == 3 and self.max_fee_per_blob_gas is None:\n        self.max_fee_per_blob_gas = 1\n    if self.ty != 3:\n        assert self.blob_versioned_hashes is None, \"blob_versioned_hashes must be None\"\n        assert self.max_fee_per_blob_gas is None, \"max_fee_per_blob_gas must be None\"\n\n    if self.ty == 4 and self.authorization_list is None:\n        self.authorization_list = []\n    if self.ty != 4:\n        assert self.authorization_list is None, \"authorization_list must be None\"\n\n    if \"nonce\" not in self.model_fields_set and self.sender is not None:\n        self.nonce = HexNumber(self.sender.get_nonce())\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.with_error","title":"with_error(error)","text":"

    Create a copy of the transaction with an added error.

    Source code in src/ethereum_test_types/types.py
    def with_error(\n    self, error: List[TransactionException] | TransactionException\n) -> \"Transaction\":\n    \"\"\"\n    Create a copy of the transaction with an added error.\n    \"\"\"\n    return self.copy(error=error)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.with_nonce","title":"with_nonce(nonce)","text":"

    Create a copy of the transaction with a modified nonce.

    Source code in src/ethereum_test_types/types.py
    def with_nonce(self, nonce: int) -> \"Transaction\":\n    \"\"\"\n    Create a copy of the transaction with a modified nonce.\n    \"\"\"\n    return self.copy(nonce=nonce)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.with_signature_and_sender","title":"with_signature_and_sender(*, keep_secret_key=False)","text":"

    Returns a signed version of the transaction using the private key.

    Source code in src/ethereum_test_types/types.py
    def with_signature_and_sender(self, *, keep_secret_key: bool = False) -> \"Transaction\":\n    \"\"\"\n    Returns a signed version of the transaction using the private key.\n    \"\"\"\n    updated_values: Dict[str, Any] = {}\n\n    if self.v is not None:\n        # Transaction already signed\n        if self.sender is not None:\n            return self\n\n        public_key = PublicKey.from_signature_and_message(\n            self.signature_bytes, keccak256(self.signing_bytes), hasher=None\n        )\n        updated_values[\"sender\"] = Address(\n            keccak256(public_key.format(compressed=False)[1:])[32 - 20 :]\n        )\n        return self.copy(**updated_values)\n\n    if self.secret_key is None:\n        raise ValueError(\"secret_key must be set to sign a transaction\")\n\n    # Get the signing bytes\n    signing_hash = keccak256(self.signing_bytes)\n\n    # Sign the bytes\n    signature_bytes = PrivateKey(secret=self.secret_key).sign_recoverable(\n        signing_hash, hasher=None\n    )\n    public_key = PublicKey.from_signature_and_message(\n        signature_bytes, signing_hash, hasher=None\n    )\n\n    sender = keccak256(public_key.format(compressed=False)[1:])[32 - 20 :]\n    updated_values[\"sender\"] = Address(sender)\n\n    v, r, s = (\n        signature_bytes[64],\n        int.from_bytes(signature_bytes[0:32], byteorder=\"big\"),\n        int.from_bytes(signature_bytes[32:64], byteorder=\"big\"),\n    )\n    if self.ty == 0:\n        if self.protected:\n            v += 35 + (self.chain_id * 2)\n        else:  # not protected\n            v += 27\n\n    updated_values[\"v\"] = HexNumber(v)\n    updated_values[\"r\"] = HexNumber(r)\n    updated_values[\"s\"] = HexNumber(s)\n\n    updated_values[\"secret_key\"] = None\n\n    updated_tx: \"Transaction\" = self.model_copy(update=updated_values)\n\n    # Remove the secret key if requested\n    if keep_secret_key:\n        updated_tx.secret_key = self.secret_key\n    return updated_tx\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.signing_envelope","title":"signing_envelope: List[Any] cached property","text":"

    Returns the list of values included in the envelope used for signing.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.payload_body","title":"payload_body: List[Any] cached property","text":"

    Returns the list of values included in the transaction body.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.rlp","title":"rlp: bytes cached property","text":"

    Returns bytes of the serialized representation of the transaction, which is almost always RLP encoding.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.hash","title":"hash: Hash cached property","text":"

    Returns hash of the transaction.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.signing_bytes","title":"signing_bytes: bytes cached property","text":"

    Returns the serialized bytes of the transaction used for signing.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.signature_bytes","title":"signature_bytes: bytes cached property","text":"

    Returns the serialized bytes of the transaction signature.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.serializable_list","title":"serializable_list: Any cached property","text":"

    Returns the list of values included in the transaction as a serializable object.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.list_root","title":"list_root(input_txs) staticmethod","text":"

    Returns the transactions root of a list of transactions.

    Source code in src/ethereum_test_types/types.py
    @staticmethod\ndef list_root(input_txs: List[\"Transaction\"]) -> Hash:\n    \"\"\"\n    Returns the transactions root of a list of transactions.\n    \"\"\"\n    t = HexaryTrie(db={})\n    for i, tx in enumerate(input_txs):\n        t.set(eth_rlp.encode(Uint(i)), tx.rlp)\n    return Hash(t.root_hash)\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.list_blob_versioned_hashes","title":"list_blob_versioned_hashes(input_txs) staticmethod","text":"

    Gets a list of ordered blob versioned hashes from a list of transactions.

    Source code in src/ethereum_test_types/types.py
    @staticmethod\ndef list_blob_versioned_hashes(input_txs: List[\"Transaction\"]) -> List[Hash]:\n    \"\"\"\n    Gets a list of ordered blob versioned hashes from a list of transactions.\n    \"\"\"\n    return [\n        blob_versioned_hash\n        for tx in input_txs\n        if tx.blob_versioned_hashes is not None\n        for blob_versioned_hash in tx.blob_versioned_hashes\n    ]\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Transaction.created_contract","title":"created_contract: Address cached property","text":"

    Returns the address of the contract created by the transaction.

    "},{"location":"library/ethereum_test_types/#ethereum_test_types.Withdrawal","title":"Withdrawal","text":"

    Bases: WithdrawalGeneric[HexNumber]

    Withdrawal type

    Source code in src/ethereum_test_types/types.py
    class Withdrawal(WithdrawalGeneric[HexNumber]):\n    \"\"\"\n    Withdrawal type\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_types/#ethereum_test_types.WithdrawalRequest","title":"WithdrawalRequest","text":"

    Bases: WithdrawalRequestGeneric[HexNumber]

    Withdrawal Request type

    Source code in src/ethereum_test_types/types.py
    class WithdrawalRequest(WithdrawalRequestGeneric[HexNumber]):\n    \"\"\"\n    Withdrawal Request type\n    \"\"\"\n\n    pass\n
    "},{"location":"library/ethereum_test_vm/","title":"Ethereum Test VM package","text":"

    Ethereum Virtual Machine related definitions and utilities.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode","title":"Bytecode","text":"

    Base class to represent EVM bytecode.

    Stack calculations are automatically done after an addition operation between two bytecode objects. The stack height is not guaranteed to be correct, so the user must take this into consideration.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode--parameters","title":"Parameters","text":"
    • popped_stack_items: number of items the bytecode pops from the stack
    • pushed_stack_items: number of items the bytecode pushes to the stack
    • min_stack_height: minimum stack height required by the bytecode
    • max_stack_height: maximum stack height reached by the bytecode
    Source code in src/ethereum_test_vm/bytecode.py
    class Bytecode:\n    \"\"\"\n    Base class to represent EVM bytecode.\n\n    Stack calculations are automatically done after an addition operation between two bytecode\n    objects. The stack height is not guaranteed to be correct, so the user must take this into\n    consideration.\n\n    Parameters\n    ----------\n    - popped_stack_items: number of items the bytecode pops from the stack\n    - pushed_stack_items: number of items the bytecode pushes to the stack\n    - min_stack_height: minimum stack height required by the bytecode\n    - max_stack_height: maximum stack height reached by the bytecode\n    \"\"\"\n\n    _name_: str = \"\"\n    _bytes_: bytes\n\n    popped_stack_items: int\n    pushed_stack_items: int\n    max_stack_height: int\n    min_stack_height: int\n\n    terminating: bool\n\n    def __new__(\n        cls,\n        bytes_or_byte_code_base: \"bytes | Bytecode | None\" = None,\n        *,\n        popped_stack_items: int | None = None,\n        pushed_stack_items: int | None = None,\n        max_stack_height: int | None = None,\n        min_stack_height: int | None = None,\n        terminating: bool = False,\n        name: str = \"\",\n    ):\n        \"\"\"\n        Creates a new opcode instance.\n        \"\"\"\n        if bytes_or_byte_code_base is None:\n            instance = super().__new__(cls)\n            instance._bytes_ = b\"\"\n            instance.popped_stack_items = 0\n            instance.pushed_stack_items = 0\n            instance.min_stack_height = 0\n            instance.max_stack_height = 0\n            instance.terminating = False\n            instance._name_ = name\n            return instance\n\n        if type(bytes_or_byte_code_base) is Bytecode:\n            # Required because Enum class calls the base class with the instantiated object as\n            # parameter.\n            obj = super().__new__(cls)\n            obj._bytes_ = bytes_or_byte_code_base._bytes_\n            obj.popped_stack_items = bytes_or_byte_code_base.popped_stack_items\n            obj.pushed_stack_items = bytes_or_byte_code_base.pushed_stack_items\n            obj.min_stack_height = bytes_or_byte_code_base.min_stack_height\n            obj.max_stack_height = bytes_or_byte_code_base.max_stack_height\n            obj.terminating = bytes_or_byte_code_base.terminating\n            obj._name_ = bytes_or_byte_code_base._name_\n            return obj\n\n        if isinstance(bytes_or_byte_code_base, bytes):\n            obj = super().__new__(cls)\n            obj._bytes_ = bytes_or_byte_code_base\n            assert popped_stack_items is not None\n            assert pushed_stack_items is not None\n            obj.popped_stack_items = popped_stack_items\n            obj.pushed_stack_items = pushed_stack_items\n            if min_stack_height is None:\n                obj.min_stack_height = obj.popped_stack_items\n            else:\n                obj.min_stack_height = min_stack_height\n            if max_stack_height is None:\n                obj.max_stack_height = max(obj.popped_stack_items, obj.pushed_stack_items)\n            else:\n                obj.max_stack_height = max_stack_height\n            obj.terminating = terminating\n            obj._name_ = name\n            return obj\n\n        raise TypeError(\"Bytecode constructor '__new__' didn't return an instance!\")\n\n    def __bytes__(self) -> bytes:\n        \"\"\"\n        Return the opcode byte representation.\n        \"\"\"\n        return self._bytes_\n\n    def __len__(self) -> int:\n        \"\"\"\n        Return the length of the opcode byte representation.\n        \"\"\"\n        return len(self._bytes_)\n\n    def __str__(self) -> str:\n        \"\"\"\n        Return the name of the opcode, assigned at Enum creation.\n        \"\"\"\n        return self._name_\n\n    def __eq__(self, other):\n        \"\"\"\n        Allows comparison between Bytecode instances and bytes objects.\n\n        Raises:\n        - NotImplementedError: if the comparison is not between an Bytecode\n            or a bytes object.\n        \"\"\"\n        if isinstance(other, SupportsBytes):\n            return bytes(self) == bytes(other)\n        raise NotImplementedError(f\"Unsupported type for comparison f{type(other)}\")\n\n    def __hash__(self):\n        \"\"\"\n        Return the hash of the bytecode representation.\n        \"\"\"\n        return hash(\n            (\n                bytes(self),\n                self.popped_stack_items,\n                self.pushed_stack_items,\n                self.max_stack_height,\n                self.min_stack_height,\n            )\n        )\n\n    def __add__(self, other: \"Bytecode | int | None\") -> \"Bytecode\":\n        \"\"\"\n        Concatenate the bytecode representation with another bytecode object.\n        \"\"\"\n        if other is None or (isinstance(other, int) and other == 0):\n            # Edge case for sum() function\n            return self\n        assert isinstance(other, Bytecode), \"Can only concatenate Bytecode instances\"\n        # Figure out the stack height after executing the two opcodes.\n        a_pop, a_push = self.popped_stack_items, self.pushed_stack_items\n        a_min, a_max = self.min_stack_height, self.max_stack_height\n        b_pop, b_push = other.popped_stack_items, other.pushed_stack_items\n        b_min, b_max = other.min_stack_height, other.max_stack_height\n        a_out = a_min - a_pop + a_push\n\n        c_pop = max(0, a_pop + (b_pop - a_push))\n        c_push = max(0, a_push + b_push - b_pop)\n        c_min = a_min if a_out >= b_min else (b_min - a_out) + a_min\n        c_max = max(a_max + max(0, b_min - a_out), b_max + max(0, a_out - b_min))\n\n        return Bytecode(\n            bytes(self) + bytes(other),\n            popped_stack_items=c_pop,\n            pushed_stack_items=c_push,\n            min_stack_height=c_min,\n            max_stack_height=c_max,\n            terminating=other.terminating,\n        )\n\n    def __radd__(self, other: \"Bytecode | int | None\") -> \"Bytecode\":\n        \"\"\"\n        Concatenate the opcode byte representation with another bytes object.\n        \"\"\"\n        if other is None or (isinstance(other, int) and other == 0):\n            # Edge case for sum() function\n            return self\n        assert isinstance(other, Bytecode), \"Can only concatenate Bytecode instances\"\n        return other.__add__(self)\n\n    def __mul__(self, other: int) -> \"Bytecode\":\n        \"\"\"\n        Concatenate another bytes object with the opcode byte representation.\n        \"\"\"\n        if other < 0:\n            raise ValueError(\"Cannot multiply by a negative number\")\n        if other == 0:\n            return Bytecode()\n        output = self\n        for _ in range(other - 1):\n            output += self\n        return output\n\n    def hex(self) -> str:\n        \"\"\"\n        Return the hexadecimal representation of the opcode byte representation.\n        \"\"\"\n        return bytes(self).hex()\n\n    def keccak256(self) -> bytes:\n        \"\"\"\n        Return the keccak256 hash of the opcode byte representation.\n        \"\"\"\n        return keccak256(self._bytes_)\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.__new__","title":"__new__(bytes_or_byte_code_base=None, *, popped_stack_items=None, pushed_stack_items=None, max_stack_height=None, min_stack_height=None, terminating=False, name='')","text":"

    Creates a new opcode instance.

    Source code in src/ethereum_test_vm/bytecode.py
    def __new__(\n    cls,\n    bytes_or_byte_code_base: \"bytes | Bytecode | None\" = None,\n    *,\n    popped_stack_items: int | None = None,\n    pushed_stack_items: int | None = None,\n    max_stack_height: int | None = None,\n    min_stack_height: int | None = None,\n    terminating: bool = False,\n    name: str = \"\",\n):\n    \"\"\"\n    Creates a new opcode instance.\n    \"\"\"\n    if bytes_or_byte_code_base is None:\n        instance = super().__new__(cls)\n        instance._bytes_ = b\"\"\n        instance.popped_stack_items = 0\n        instance.pushed_stack_items = 0\n        instance.min_stack_height = 0\n        instance.max_stack_height = 0\n        instance.terminating = False\n        instance._name_ = name\n        return instance\n\n    if type(bytes_or_byte_code_base) is Bytecode:\n        # Required because Enum class calls the base class with the instantiated object as\n        # parameter.\n        obj = super().__new__(cls)\n        obj._bytes_ = bytes_or_byte_code_base._bytes_\n        obj.popped_stack_items = bytes_or_byte_code_base.popped_stack_items\n        obj.pushed_stack_items = bytes_or_byte_code_base.pushed_stack_items\n        obj.min_stack_height = bytes_or_byte_code_base.min_stack_height\n        obj.max_stack_height = bytes_or_byte_code_base.max_stack_height\n        obj.terminating = bytes_or_byte_code_base.terminating\n        obj._name_ = bytes_or_byte_code_base._name_\n        return obj\n\n    if isinstance(bytes_or_byte_code_base, bytes):\n        obj = super().__new__(cls)\n        obj._bytes_ = bytes_or_byte_code_base\n        assert popped_stack_items is not None\n        assert pushed_stack_items is not None\n        obj.popped_stack_items = popped_stack_items\n        obj.pushed_stack_items = pushed_stack_items\n        if min_stack_height is None:\n            obj.min_stack_height = obj.popped_stack_items\n        else:\n            obj.min_stack_height = min_stack_height\n        if max_stack_height is None:\n            obj.max_stack_height = max(obj.popped_stack_items, obj.pushed_stack_items)\n        else:\n            obj.max_stack_height = max_stack_height\n        obj.terminating = terminating\n        obj._name_ = name\n        return obj\n\n    raise TypeError(\"Bytecode constructor '__new__' didn't return an instance!\")\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.__bytes__","title":"__bytes__()","text":"

    Return the opcode byte representation.

    Source code in src/ethereum_test_vm/bytecode.py
    def __bytes__(self) -> bytes:\n    \"\"\"\n    Return the opcode byte representation.\n    \"\"\"\n    return self._bytes_\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.__len__","title":"__len__()","text":"

    Return the length of the opcode byte representation.

    Source code in src/ethereum_test_vm/bytecode.py
    def __len__(self) -> int:\n    \"\"\"\n    Return the length of the opcode byte representation.\n    \"\"\"\n    return len(self._bytes_)\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.__str__","title":"__str__()","text":"

    Return the name of the opcode, assigned at Enum creation.

    Source code in src/ethereum_test_vm/bytecode.py
    def __str__(self) -> str:\n    \"\"\"\n    Return the name of the opcode, assigned at Enum creation.\n    \"\"\"\n    return self._name_\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.__eq__","title":"__eq__(other)","text":"

    Allows comparison between Bytecode instances and bytes objects.

    • NotImplementedError: if the comparison is not between an Bytecode or a bytes object.
    Source code in src/ethereum_test_vm/bytecode.py
    def __eq__(self, other):\n    \"\"\"\n    Allows comparison between Bytecode instances and bytes objects.\n\n    Raises:\n    - NotImplementedError: if the comparison is not between an Bytecode\n        or a bytes object.\n    \"\"\"\n    if isinstance(other, SupportsBytes):\n        return bytes(self) == bytes(other)\n    raise NotImplementedError(f\"Unsupported type for comparison f{type(other)}\")\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.__hash__","title":"__hash__()","text":"

    Return the hash of the bytecode representation.

    Source code in src/ethereum_test_vm/bytecode.py
    def __hash__(self):\n    \"\"\"\n    Return the hash of the bytecode representation.\n    \"\"\"\n    return hash(\n        (\n            bytes(self),\n            self.popped_stack_items,\n            self.pushed_stack_items,\n            self.max_stack_height,\n            self.min_stack_height,\n        )\n    )\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.__add__","title":"__add__(other)","text":"

    Concatenate the bytecode representation with another bytecode object.

    Source code in src/ethereum_test_vm/bytecode.py
    def __add__(self, other: \"Bytecode | int | None\") -> \"Bytecode\":\n    \"\"\"\n    Concatenate the bytecode representation with another bytecode object.\n    \"\"\"\n    if other is None or (isinstance(other, int) and other == 0):\n        # Edge case for sum() function\n        return self\n    assert isinstance(other, Bytecode), \"Can only concatenate Bytecode instances\"\n    # Figure out the stack height after executing the two opcodes.\n    a_pop, a_push = self.popped_stack_items, self.pushed_stack_items\n    a_min, a_max = self.min_stack_height, self.max_stack_height\n    b_pop, b_push = other.popped_stack_items, other.pushed_stack_items\n    b_min, b_max = other.min_stack_height, other.max_stack_height\n    a_out = a_min - a_pop + a_push\n\n    c_pop = max(0, a_pop + (b_pop - a_push))\n    c_push = max(0, a_push + b_push - b_pop)\n    c_min = a_min if a_out >= b_min else (b_min - a_out) + a_min\n    c_max = max(a_max + max(0, b_min - a_out), b_max + max(0, a_out - b_min))\n\n    return Bytecode(\n        bytes(self) + bytes(other),\n        popped_stack_items=c_pop,\n        pushed_stack_items=c_push,\n        min_stack_height=c_min,\n        max_stack_height=c_max,\n        terminating=other.terminating,\n    )\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.__radd__","title":"__radd__(other)","text":"

    Concatenate the opcode byte representation with another bytes object.

    Source code in src/ethereum_test_vm/bytecode.py
    def __radd__(self, other: \"Bytecode | int | None\") -> \"Bytecode\":\n    \"\"\"\n    Concatenate the opcode byte representation with another bytes object.\n    \"\"\"\n    if other is None or (isinstance(other, int) and other == 0):\n        # Edge case for sum() function\n        return self\n    assert isinstance(other, Bytecode), \"Can only concatenate Bytecode instances\"\n    return other.__add__(self)\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.__mul__","title":"__mul__(other)","text":"

    Concatenate another bytes object with the opcode byte representation.

    Source code in src/ethereum_test_vm/bytecode.py
    def __mul__(self, other: int) -> \"Bytecode\":\n    \"\"\"\n    Concatenate another bytes object with the opcode byte representation.\n    \"\"\"\n    if other < 0:\n        raise ValueError(\"Cannot multiply by a negative number\")\n    if other == 0:\n        return Bytecode()\n    output = self\n    for _ in range(other - 1):\n        output += self\n    return output\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.hex","title":"hex()","text":"

    Return the hexadecimal representation of the opcode byte representation.

    Source code in src/ethereum_test_vm/bytecode.py
    def hex(self) -> str:\n    \"\"\"\n    Return the hexadecimal representation of the opcode byte representation.\n    \"\"\"\n    return bytes(self).hex()\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Bytecode.keccak256","title":"keccak256()","text":"

    Return the keccak256 hash of the opcode byte representation.

    Source code in src/ethereum_test_vm/bytecode.py
    def keccak256(self) -> bytes:\n    \"\"\"\n    Return the keccak256 hash of the opcode byte representation.\n    \"\"\"\n    return keccak256(self._bytes_)\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.EVMCodeType","title":"EVMCodeType","text":"

    Bases: str, Enum

    Enum representing the type of EVM code that is supported in a given fork.

    Source code in src/ethereum_test_vm/evm_types.py
    class EVMCodeType(str, Enum):\n    \"\"\"\n    Enum representing the type of EVM code that is supported in a given fork.\n    \"\"\"\n\n    LEGACY = \"legacy\"\n    EOF_V1 = \"eof_v1\"\n\n    def __str__(self) -> str:\n        \"\"\"\n        Return the name of the EVM code type.\n        \"\"\"\n        return self.name\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.EVMCodeType.__str__","title":"__str__()","text":"

    Return the name of the EVM code type.

    Source code in src/ethereum_test_vm/evm_types.py
    def __str__(self) -> str:\n    \"\"\"\n    Return the name of the EVM code type.\n    \"\"\"\n    return self.name\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.call_return_code","title":"call_return_code(opcode, success, *, revert=False)","text":"

    Returns the return code for a CALL operation.

    Source code in src/ethereum_test_vm/helpers.py
    def call_return_code(opcode: Op, success: bool, *, revert: bool = False) -> int:\n    \"\"\"\n    Returns the return code for a CALL operation.\n    \"\"\"\n    if opcode in [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL]:\n        return int(success)\n    elif opcode in [Op.EXTCALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL]:\n        if success:\n            return 0\n        if revert:\n            return 1\n        return 2\n    raise ValueError(f\"Not a call opcode: {opcode}\")\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macro","title":"Macro","text":"

    Bases: Bytecode

    Represents opcode macro replacement, basically holds bytes

    Source code in src/ethereum_test_vm/opcode.py
    class Macro(Bytecode):\n    \"\"\"\n    Represents opcode macro replacement, basically holds bytes\n    \"\"\"\n\n    lambda_operation: Callable[..., Bytecode] | None\n\n    def __new__(\n        cls,\n        macro_or_bytes: \"Bytecode | Macro\" = Bytecode(),\n        *,\n        lambda_operation: Callable[..., Bytecode] | None = None,\n    ):\n        \"\"\"\n        Creates a new opcode macro instance.\n        \"\"\"\n        if isinstance(macro_or_bytes, Macro):\n            # Required because Enum class calls the base class with the instantiated object as\n            # parameter.\n            return macro_or_bytes\n        else:\n            instance = super().__new__(cls, macro_or_bytes)\n            instance.lambda_operation = lambda_operation\n            return instance\n\n    def __call__(self, *args_t: OpcodeCallArg) -> Bytecode:\n        \"\"\"\n        Performs the macro operation if any.\n        Otherwise is a no-op.\n        \"\"\"\n        if self.lambda_operation is not None:\n            return self.lambda_operation(*args_t)\n\n        pre_opcode_bytecode = Bytecode()\n        for arg in args_t:\n            pre_opcode_bytecode += _stack_argument_to_bytecode(arg)\n        return pre_opcode_bytecode + self\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macro.__new__","title":"__new__(macro_or_bytes=Bytecode(), *, lambda_operation=None)","text":"

    Creates a new opcode macro instance.

    Source code in src/ethereum_test_vm/opcode.py
    def __new__(\n    cls,\n    macro_or_bytes: \"Bytecode | Macro\" = Bytecode(),\n    *,\n    lambda_operation: Callable[..., Bytecode] | None = None,\n):\n    \"\"\"\n    Creates a new opcode macro instance.\n    \"\"\"\n    if isinstance(macro_or_bytes, Macro):\n        # Required because Enum class calls the base class with the instantiated object as\n        # parameter.\n        return macro_or_bytes\n    else:\n        instance = super().__new__(cls, macro_or_bytes)\n        instance.lambda_operation = lambda_operation\n        return instance\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macro.__call__","title":"__call__(*args_t)","text":"

    Performs the macro operation if any. Otherwise is a no-op.

    Source code in src/ethereum_test_vm/opcode.py
    def __call__(self, *args_t: OpcodeCallArg) -> Bytecode:\n    \"\"\"\n    Performs the macro operation if any.\n    Otherwise is a no-op.\n    \"\"\"\n    if self.lambda_operation is not None:\n        return self.lambda_operation(*args_t)\n\n    pre_opcode_bytecode = Bytecode()\n    for arg in args_t:\n        pre_opcode_bytecode += _stack_argument_to_bytecode(arg)\n    return pre_opcode_bytecode + self\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros","title":"Macros","text":"

    Bases: Macro, Enum

    Enum containing all macros.

    Source code in src/ethereum_test_vm/opcode.py
    class Macros(Macro, Enum):\n    \"\"\"\n    Enum containing all macros.\n    \"\"\"\n\n    OOG = Macro(Opcodes.SHA3(0, 100000000000))\n    \"\"\"\n    OOG()\n    ----\n\n    Halt execution by consuming all available gas.\n\n    Inputs\n    ----\n    - None. Any input arguments are ignored.\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    `SHA3(0, 100000000000)` results in 19073514453125027 gas used and an OOG\n    exception.\n\n    Note:\n    If a value > `100000000000` is used as second argument, the resulting geth\n     trace reports gas `30` and an OOG exception.\n    `SHA3(0, SUB(0, 1))` causes a gas > u64 exception and an OOG exception.\n\n    Bytecode\n    ----\n    SHA3(0, 100000000000)\n    \"\"\"\n\n    MSTORE = Macro(lambda_operation=_mstore_operation)\n    \"\"\"\n    MSTORE(data, offset)\n    ----\n\n    Place data of arbitrary length into memory at a given offset.\n\n    Inputs\n    ----\n    - data: The data to store in memory. Can be an integer or bytes.\n    - offset: The offset in memory to store the data.\n\n    Outputs\n    ----\n    - None\n    \"\"\"\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.OOG","title":"OOG = Macro(Opcodes.SHA3(0, 100000000000)) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.OOG--oog","title":"OOG()","text":"

    Halt execution by consuming all available gas.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.OOG--inputs","title":"Inputs","text":"
    • None. Any input arguments are ignored.
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.OOG--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.OOG--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.OOG--gas","title":"Gas","text":"

    SHA3(0, 100000000000) results in 19073514453125027 gas used and an OOG exception.

    Note: If a value > 100000000000 is used as second argument, the resulting geth trace reports gas 30 and an OOG exception. SHA3(0, SUB(0, 1)) causes a gas > u64 exception and an OOG exception.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.OOG--bytecode","title":"Bytecode","text":"

    SHA3(0, 100000000000)

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.MSTORE","title":"MSTORE = Macro(lambda_operation=_mstore_operation) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.MSTORE--mstoredata-offset","title":"MSTORE(data, offset)","text":"

    Place data of arbitrary length into memory at a given offset.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.MSTORE--inputs","title":"Inputs","text":"
    • data: The data to store in memory. Can be an integer or bytes.
    • offset: The offset in memory to store the data.
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Macros.MSTORE--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcode","title":"Opcode","text":"

    Bases: Bytecode

    Represents a single Opcode instruction in the EVM, with extra metadata useful to parametrize tests.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcode--parameters","title":"Parameters","text":"
    • data_portion_length: number of bytes after the opcode in the bytecode that represent data
    • data_portion_formatter: function to format the data portion of the opcode, if any
    • stack_properties_modifier: function to modify the stack properties of the opcode after the data portion has been processed
    • kwargs: list of keyword arguments that can be passed to the opcode, in the order they are meant to be placed in the stack
    • kwargs_defaults: default values for the keyword arguments if any, otherwise 0
    • unchecked_stack: whether the bytecode should ignore stack checks when being called
    Source code in src/ethereum_test_vm/opcode.py
    class Opcode(Bytecode):\n    \"\"\"\n    Represents a single Opcode instruction in the EVM, with extra metadata useful to parametrize\n    tests.\n\n    Parameters\n    ----------\n    - data_portion_length: number of bytes after the opcode in the bytecode\n        that represent data\n    - data_portion_formatter: function to format the data portion of the opcode, if any\n    - stack_properties_modifier: function to modify the stack properties of the opcode after the\n        data portion has been processed\n    - kwargs: list of keyword arguments that can be passed to the opcode, in the order they are\n        meant to be placed in the stack\n    - kwargs_defaults: default values for the keyword arguments if any, otherwise 0\n    - unchecked_stack: whether the bytecode should ignore stack checks when being called\n    \"\"\"\n\n    data_portion_length: int\n    data_portion_formatter: Optional[Callable[[Any], bytes]]\n    stack_properties_modifier: Optional[Callable[[Any], tuple[int, int, int, int]]]\n    kwargs: List[str] | None\n    kwargs_defaults: KW_ARGS_DEFAULTS_TYPE\n    unchecked_stack: bool = False\n\n    def __new__(\n        cls,\n        opcode_or_byte: \"int | bytes | Opcode\",\n        *,\n        popped_stack_items: int = 0,\n        pushed_stack_items: int = 0,\n        max_stack_height: int | None = None,\n        min_stack_height: int | None = None,\n        data_portion_length: int = 0,\n        data_portion_formatter=None,\n        stack_properties_modifier=None,\n        unchecked_stack=False,\n        terminating: bool = False,\n        kwargs: List[str] | None = None,\n        kwargs_defaults: KW_ARGS_DEFAULTS_TYPE = {},\n    ):\n        \"\"\"\n        Creates a new opcode instance.\n        \"\"\"\n        if type(opcode_or_byte) is Opcode:\n            # Required because Enum class calls the base class with the instantiated object as\n            # parameter.\n            return opcode_or_byte\n        elif isinstance(opcode_or_byte, int) or isinstance(opcode_or_byte, bytes):\n\n            obj_bytes = (\n                bytes([opcode_or_byte]) if isinstance(opcode_or_byte, int) else opcode_or_byte\n            )\n            if min_stack_height is None:\n                min_stack_height = popped_stack_items\n            if max_stack_height is None:\n                max_stack_height = max(\n                    min_stack_height - popped_stack_items + pushed_stack_items, min_stack_height\n                )\n            obj = super().__new__(\n                cls,\n                obj_bytes,\n                popped_stack_items=popped_stack_items,\n                pushed_stack_items=pushed_stack_items,\n                max_stack_height=max_stack_height,\n                min_stack_height=min_stack_height,\n                terminating=terminating,\n            )\n            obj.data_portion_length = data_portion_length\n            obj.data_portion_formatter = data_portion_formatter\n            obj.stack_properties_modifier = stack_properties_modifier\n            obj.unchecked_stack = unchecked_stack\n            obj.kwargs = kwargs\n            obj.kwargs_defaults = kwargs_defaults\n            return obj\n        raise TypeError(\"Opcode constructor '__new__' didn't return an instance!\")\n\n    def __getitem__(self, *args: \"int | bytes | str | Iterable[int]\") -> \"Opcode\":\n        \"\"\"\n        Initialize a new instance of the opcode with the data portion set, and also clear\n        the data portion variables to avoid reusing them.\n        \"\"\"\n        if self.data_portion_formatter is None and self.data_portion_length == 0:\n            raise ValueError(\"Opcode does not have a data portion or has already been set\")\n        data_portion = bytes()\n\n        if self.data_portion_formatter is not None:\n            if len(args) == 1 and isinstance(args[0], Iterable) and not isinstance(args[0], bytes):\n                data_portion = self.data_portion_formatter(*args[0])\n            else:\n                data_portion = self.data_portion_formatter(*args)\n        elif self.data_portion_length > 0:\n            # For opcodes with a data portion, the first argument is the data and the rest of the\n            # arguments form the stack.\n            assert len(args) == 1, \"Opcode with data portion requires exactly one argument\"\n            data = args[0]\n            if isinstance(data, bytes) or isinstance(data, SupportsBytes) or isinstance(data, str):\n                if isinstance(data, str):\n                    if data.startswith(\"0x\"):\n                        data = data[2:]\n                    data = bytes.fromhex(data)\n                elif isinstance(data, SupportsBytes):\n                    data = bytes(data)\n                assert len(data) <= self.data_portion_length\n                data_portion = data.rjust(self.data_portion_length, b\"\\x00\")\n            elif isinstance(data, int):\n                signed = data < 0\n                data_portion = data.to_bytes(\n                    length=self.data_portion_length,\n                    byteorder=\"big\",\n                    signed=signed,\n                )\n            else:\n                raise TypeError(\"Opcode data portion must be either an int or bytes/hex string\")\n        popped_stack_items = self.popped_stack_items\n        pushed_stack_items = self.pushed_stack_items\n        min_stack_height = self.min_stack_height\n        max_stack_height = self.max_stack_height\n        assert (\n            popped_stack_items is not None\n            and pushed_stack_items is not None\n            and min_stack_height is not None\n        )\n        if self.stack_properties_modifier is not None:\n            (\n                popped_stack_items,\n                pushed_stack_items,\n                min_stack_height,\n                max_stack_height,\n            ) = self.stack_properties_modifier(data_portion)\n\n        new_opcode = Opcode(\n            bytes(self) + data_portion,\n            popped_stack_items=popped_stack_items,\n            pushed_stack_items=pushed_stack_items,\n            min_stack_height=min_stack_height,\n            max_stack_height=max_stack_height,\n            data_portion_length=0,\n            data_portion_formatter=None,\n            unchecked_stack=self.unchecked_stack,\n            terminating=self.terminating,\n            kwargs=self.kwargs,\n            kwargs_defaults=self.kwargs_defaults,\n        )\n        new_opcode._name_ = f\"{self._name_}_0x{data_portion.hex()}\"\n        return new_opcode\n\n    def __call__(\n        self,\n        *args_t: \"int | bytes | str | Opcode | Bytecode | Iterable[int]\",\n        unchecked: bool = False,\n        **kwargs: \"int | bytes | str | Opcode | Bytecode\",\n    ) -> Bytecode:\n        \"\"\"\n        Makes all opcode instances callable to return formatted bytecode, which constitutes a data\n        portion, that is located after the opcode byte, and pre-opcode bytecode, which is normally\n        used to set up the stack.\n\n        This useful to automatically format, e.g., call opcodes and their stack arguments as\n        `Opcodes.CALL(Opcodes.GAS, 0x1234, 0x0, 0x0, 0x0, 0x0, 0x0)`.\n\n        Data sign is automatically detected but for this reason the range of the input must be:\n        `[-2^(data_portion_bits-1), 2^(data_portion_bits)]` where: `data_portion_bits ==\n        data_portion_length * 8`\n\n        For the stack, the arguments are set up in the opposite order they are given, so the first\n        argument is the last item pushed to the stack.\n\n        The resulting stack arrangement does not take into account opcode stack element\n        consumption, so the stack height is not guaranteed to be correct and the user must take\n        this into consideration.\n\n        Integers can also be used as stack elements, in which case they are automatically converted\n        to PUSH operations, and negative numbers always use a PUSH32 operation.\n\n        Hex-strings will be automatically converted to bytes.\n        \"\"\"\n        args: List[\"int | bytes | str | Opcode | Bytecode | Iterable[int]\"] = list(args_t)\n\n        if self.has_data_portion():\n            if len(args) == 0:\n                raise ValueError(\"Opcode with data portion requires at least one argument\")\n            assert type(self) is Opcode\n            get_item_arg = args.pop()\n            assert not isinstance(get_item_arg, Bytecode)\n            return self[get_item_arg](*args)\n\n        if self.kwargs is not None and len(kwargs) > 0:\n            assert len(args) == 0, f\"Cannot mix positional and keyword arguments {args} {kwargs}\"\n            for kw in self.kwargs:\n                args.append(kwargs[kw] if kw in kwargs else self.kwargs_defaults.get(kw, 0))\n\n        # The rest of the arguments form the stack.\n        if len(args) != self.popped_stack_items and not (unchecked or self.unchecked_stack):\n            raise ValueError(\n                f\"Opcode {self._name_} requires {self.popped_stack_items} stack elements, but \"\n                f\"{len(args)} were provided. Use 'unchecked=True' parameter to ignore this check.\"\n            )\n\n        pre_opcode_bytecode = Bytecode()\n        while len(args) > 0:\n            pre_opcode_bytecode += _stack_argument_to_bytecode(args.pop())\n        return pre_opcode_bytecode + self\n\n    def __lt__(self, other: \"Opcode\") -> bool:\n        \"\"\"\n        Compares two opcodes by their integer value.\n        \"\"\"\n        return self.int() < other.int()\n\n    def __gt__(self, other: \"Opcode\") -> bool:\n        \"\"\"\n        Compares two opcodes by their integer value.\n        \"\"\"\n        return self.int() > other.int()\n\n    def int(self) -> int:\n        \"\"\"\n        Returns the integer representation of the opcode.\n        \"\"\"\n        return int.from_bytes(self, byteorder=\"big\")\n\n    def has_data_portion(self) -> bool:\n        \"\"\"\n        Returns whether the opcode has a data portion.\n        \"\"\"\n        return self.data_portion_length > 0 or self.data_portion_formatter is not None\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcode.__new__","title":"__new__(opcode_or_byte, *, popped_stack_items=0, pushed_stack_items=0, max_stack_height=None, min_stack_height=None, data_portion_length=0, data_portion_formatter=None, stack_properties_modifier=None, unchecked_stack=False, terminating=False, kwargs=None, kwargs_defaults={})","text":"

    Creates a new opcode instance.

    Source code in src/ethereum_test_vm/opcode.py
    def __new__(\n    cls,\n    opcode_or_byte: \"int | bytes | Opcode\",\n    *,\n    popped_stack_items: int = 0,\n    pushed_stack_items: int = 0,\n    max_stack_height: int | None = None,\n    min_stack_height: int | None = None,\n    data_portion_length: int = 0,\n    data_portion_formatter=None,\n    stack_properties_modifier=None,\n    unchecked_stack=False,\n    terminating: bool = False,\n    kwargs: List[str] | None = None,\n    kwargs_defaults: KW_ARGS_DEFAULTS_TYPE = {},\n):\n    \"\"\"\n    Creates a new opcode instance.\n    \"\"\"\n    if type(opcode_or_byte) is Opcode:\n        # Required because Enum class calls the base class with the instantiated object as\n        # parameter.\n        return opcode_or_byte\n    elif isinstance(opcode_or_byte, int) or isinstance(opcode_or_byte, bytes):\n\n        obj_bytes = (\n            bytes([opcode_or_byte]) if isinstance(opcode_or_byte, int) else opcode_or_byte\n        )\n        if min_stack_height is None:\n            min_stack_height = popped_stack_items\n        if max_stack_height is None:\n            max_stack_height = max(\n                min_stack_height - popped_stack_items + pushed_stack_items, min_stack_height\n            )\n        obj = super().__new__(\n            cls,\n            obj_bytes,\n            popped_stack_items=popped_stack_items,\n            pushed_stack_items=pushed_stack_items,\n            max_stack_height=max_stack_height,\n            min_stack_height=min_stack_height,\n            terminating=terminating,\n        )\n        obj.data_portion_length = data_portion_length\n        obj.data_portion_formatter = data_portion_formatter\n        obj.stack_properties_modifier = stack_properties_modifier\n        obj.unchecked_stack = unchecked_stack\n        obj.kwargs = kwargs\n        obj.kwargs_defaults = kwargs_defaults\n        return obj\n    raise TypeError(\"Opcode constructor '__new__' didn't return an instance!\")\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcode.__getitem__","title":"__getitem__(*args)","text":"

    Initialize a new instance of the opcode with the data portion set, and also clear the data portion variables to avoid reusing them.

    Source code in src/ethereum_test_vm/opcode.py
    def __getitem__(self, *args: \"int | bytes | str | Iterable[int]\") -> \"Opcode\":\n    \"\"\"\n    Initialize a new instance of the opcode with the data portion set, and also clear\n    the data portion variables to avoid reusing them.\n    \"\"\"\n    if self.data_portion_formatter is None and self.data_portion_length == 0:\n        raise ValueError(\"Opcode does not have a data portion or has already been set\")\n    data_portion = bytes()\n\n    if self.data_portion_formatter is not None:\n        if len(args) == 1 and isinstance(args[0], Iterable) and not isinstance(args[0], bytes):\n            data_portion = self.data_portion_formatter(*args[0])\n        else:\n            data_portion = self.data_portion_formatter(*args)\n    elif self.data_portion_length > 0:\n        # For opcodes with a data portion, the first argument is the data and the rest of the\n        # arguments form the stack.\n        assert len(args) == 1, \"Opcode with data portion requires exactly one argument\"\n        data = args[0]\n        if isinstance(data, bytes) or isinstance(data, SupportsBytes) or isinstance(data, str):\n            if isinstance(data, str):\n                if data.startswith(\"0x\"):\n                    data = data[2:]\n                data = bytes.fromhex(data)\n            elif isinstance(data, SupportsBytes):\n                data = bytes(data)\n            assert len(data) <= self.data_portion_length\n            data_portion = data.rjust(self.data_portion_length, b\"\\x00\")\n        elif isinstance(data, int):\n            signed = data < 0\n            data_portion = data.to_bytes(\n                length=self.data_portion_length,\n                byteorder=\"big\",\n                signed=signed,\n            )\n        else:\n            raise TypeError(\"Opcode data portion must be either an int or bytes/hex string\")\n    popped_stack_items = self.popped_stack_items\n    pushed_stack_items = self.pushed_stack_items\n    min_stack_height = self.min_stack_height\n    max_stack_height = self.max_stack_height\n    assert (\n        popped_stack_items is not None\n        and pushed_stack_items is not None\n        and min_stack_height is not None\n    )\n    if self.stack_properties_modifier is not None:\n        (\n            popped_stack_items,\n            pushed_stack_items,\n            min_stack_height,\n            max_stack_height,\n        ) = self.stack_properties_modifier(data_portion)\n\n    new_opcode = Opcode(\n        bytes(self) + data_portion,\n        popped_stack_items=popped_stack_items,\n        pushed_stack_items=pushed_stack_items,\n        min_stack_height=min_stack_height,\n        max_stack_height=max_stack_height,\n        data_portion_length=0,\n        data_portion_formatter=None,\n        unchecked_stack=self.unchecked_stack,\n        terminating=self.terminating,\n        kwargs=self.kwargs,\n        kwargs_defaults=self.kwargs_defaults,\n    )\n    new_opcode._name_ = f\"{self._name_}_0x{data_portion.hex()}\"\n    return new_opcode\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcode.__call__","title":"__call__(*args_t, unchecked=False, **kwargs)","text":"

    Makes all opcode instances callable to return formatted bytecode, which constitutes a data portion, that is located after the opcode byte, and pre-opcode bytecode, which is normally used to set up the stack.

    This useful to automatically format, e.g., call opcodes and their stack arguments as Opcodes.CALL(Opcodes.GAS, 0x1234, 0x0, 0x0, 0x0, 0x0, 0x0).

    Data sign is automatically detected but for this reason the range of the input must be: [-2^(data_portion_bits-1), 2^(data_portion_bits)] where: data_portion_bits == data_portion_length * 8

    For the stack, the arguments are set up in the opposite order they are given, so the first argument is the last item pushed to the stack.

    The resulting stack arrangement does not take into account opcode stack element consumption, so the stack height is not guaranteed to be correct and the user must take this into consideration.

    Integers can also be used as stack elements, in which case they are automatically converted to PUSH operations, and negative numbers always use a PUSH32 operation.

    Hex-strings will be automatically converted to bytes.

    Source code in src/ethereum_test_vm/opcode.py
    def __call__(\n    self,\n    *args_t: \"int | bytes | str | Opcode | Bytecode | Iterable[int]\",\n    unchecked: bool = False,\n    **kwargs: \"int | bytes | str | Opcode | Bytecode\",\n) -> Bytecode:\n    \"\"\"\n    Makes all opcode instances callable to return formatted bytecode, which constitutes a data\n    portion, that is located after the opcode byte, and pre-opcode bytecode, which is normally\n    used to set up the stack.\n\n    This useful to automatically format, e.g., call opcodes and their stack arguments as\n    `Opcodes.CALL(Opcodes.GAS, 0x1234, 0x0, 0x0, 0x0, 0x0, 0x0)`.\n\n    Data sign is automatically detected but for this reason the range of the input must be:\n    `[-2^(data_portion_bits-1), 2^(data_portion_bits)]` where: `data_portion_bits ==\n    data_portion_length * 8`\n\n    For the stack, the arguments are set up in the opposite order they are given, so the first\n    argument is the last item pushed to the stack.\n\n    The resulting stack arrangement does not take into account opcode stack element\n    consumption, so the stack height is not guaranteed to be correct and the user must take\n    this into consideration.\n\n    Integers can also be used as stack elements, in which case they are automatically converted\n    to PUSH operations, and negative numbers always use a PUSH32 operation.\n\n    Hex-strings will be automatically converted to bytes.\n    \"\"\"\n    args: List[\"int | bytes | str | Opcode | Bytecode | Iterable[int]\"] = list(args_t)\n\n    if self.has_data_portion():\n        if len(args) == 0:\n            raise ValueError(\"Opcode with data portion requires at least one argument\")\n        assert type(self) is Opcode\n        get_item_arg = args.pop()\n        assert not isinstance(get_item_arg, Bytecode)\n        return self[get_item_arg](*args)\n\n    if self.kwargs is not None and len(kwargs) > 0:\n        assert len(args) == 0, f\"Cannot mix positional and keyword arguments {args} {kwargs}\"\n        for kw in self.kwargs:\n            args.append(kwargs[kw] if kw in kwargs else self.kwargs_defaults.get(kw, 0))\n\n    # The rest of the arguments form the stack.\n    if len(args) != self.popped_stack_items and not (unchecked or self.unchecked_stack):\n        raise ValueError(\n            f\"Opcode {self._name_} requires {self.popped_stack_items} stack elements, but \"\n            f\"{len(args)} were provided. Use 'unchecked=True' parameter to ignore this check.\"\n        )\n\n    pre_opcode_bytecode = Bytecode()\n    while len(args) > 0:\n        pre_opcode_bytecode += _stack_argument_to_bytecode(args.pop())\n    return pre_opcode_bytecode + self\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcode.__lt__","title":"__lt__(other)","text":"

    Compares two opcodes by their integer value.

    Source code in src/ethereum_test_vm/opcode.py
    def __lt__(self, other: \"Opcode\") -> bool:\n    \"\"\"\n    Compares two opcodes by their integer value.\n    \"\"\"\n    return self.int() < other.int()\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcode.__gt__","title":"__gt__(other)","text":"

    Compares two opcodes by their integer value.

    Source code in src/ethereum_test_vm/opcode.py
    def __gt__(self, other: \"Opcode\") -> bool:\n    \"\"\"\n    Compares two opcodes by their integer value.\n    \"\"\"\n    return self.int() > other.int()\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcode.int","title":"int()","text":"

    Returns the integer representation of the opcode.

    Source code in src/ethereum_test_vm/opcode.py
    def int(self) -> int:\n    \"\"\"\n    Returns the integer representation of the opcode.\n    \"\"\"\n    return int.from_bytes(self, byteorder=\"big\")\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcode.has_data_portion","title":"has_data_portion()","text":"

    Returns whether the opcode has a data portion.

    Source code in src/ethereum_test_vm/opcode.py
    def has_data_portion(self) -> bool:\n    \"\"\"\n    Returns whether the opcode has a data portion.\n    \"\"\"\n    return self.data_portion_length > 0 or self.data_portion_formatter is not None\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes","title":"Opcodes","text":"

    Bases: Opcode, Enum

    Enum containing all known opcodes.

    Contains deprecated and not yet implemented opcodes.

    This enum is !! NOT !! meant to be iterated over by the tests. Instead, create a list with cherry-picked opcodes from this Enum within the test if iteration is needed.

    Do !! NOT !! remove or modify existing opcodes from this list.

    Source code in src/ethereum_test_vm/opcode.py
    class Opcodes(Opcode, Enum):\n    \"\"\"\n    Enum containing all known opcodes.\n\n    Contains deprecated and not yet implemented opcodes.\n\n    This enum is !! NOT !! meant to be iterated over by the tests. Instead, create a list with\n    cherry-picked opcodes from this Enum within the test if iteration is needed.\n\n    Do !! NOT !! remove or modify existing opcodes from this list.\n    \"\"\"\n\n    STOP = Opcode(0x00, terminating=True)\n    \"\"\"\n    STOP()\n    ----\n\n    Description\n    ----\n    Stop execution\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    0\n\n    Source: [evm.codes/#00](https://www.evm.codes/#00)\n    \"\"\"\n\n    ADD = Opcode(0x01, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    ADD(a, b) = c\n    ----\n\n    Description\n    ----\n    Addition operation\n\n    Inputs\n    ----\n    - a: first integer value to add\n    - b: second integer value to add\n\n    Outputs\n    ----\n    - c: integer result of the addition modulo 2**256\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#01](https://www.evm.codes/#01)\n    \"\"\"\n\n    MUL = Opcode(0x02, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    MUL(a, b) = c\n    ----\n\n    Description\n    ----\n    Multiplication operation\n\n    Inputs\n    ----\n    - a: first integer value to multiply\n    - b: second integer value to multiply\n\n    Outputs\n    ----\n    - c: integer result of the multiplication modulo 2**256\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    5\n\n    Source: [evm.codes/#02](https://www.evm.codes/#02)\n    \"\"\"\n\n    SUB = Opcode(0x03, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    SUB(a, b) = c\n    ----\n\n    Description\n    ----\n    Subtraction operation\n\n    Inputs\n    ----\n    - a: first integer value\n    - b: second integer value\n\n    Outputs\n    ----\n    - c: integer result of the subtraction modulo 2**256\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#03](https://www.evm.codes/#03)\n    \"\"\"\n\n    DIV = Opcode(0x04, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    DIV(a, b) = c\n    ----\n\n    Description\n    ----\n    Division operation\n\n    Inputs\n    ----\n    - a: numerator\n    - b: denominator (must be non-zero)\n\n    Outputs\n    ----\n    - c: integer result of the division\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    5\n\n    Source: [evm.codes/#04](https://www.evm.codes/#04)\n    \"\"\"\n\n    SDIV = Opcode(0x05, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    SDIV(a, b) = c\n    ----\n\n    Description\n    ----\n    Signed division operation\n\n    Inputs\n    ----\n    - a: signed numerator\n    - b: signed denominator\n\n    Outputs\n    ----\n    - c: signed integer result of the division. If the denominator is 0, the result will be 0\n    ----\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    5\n\n    Source: [evm.codes/#05](https://www.evm.codes/#05)\n    \"\"\"\n\n    MOD = Opcode(0x06, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    MOD(a, b) = c\n    ----\n\n    Description\n    ----\n    Modulo operation\n\n    Inputs\n    ----\n    - a: integer numerator\n    - b: integer denominator\n\n    Outputs\n    ----\n    - a % b: integer result of the integer modulo. If the denominator is 0, the result will be 0\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    5\n\n    Source: [evm.codes/#06](https://www.evm.codes/#06)\n    \"\"\"\n\n    SMOD = Opcode(0x07, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    SMOD(a, b) = c\n    ----\n\n    Description\n    ----\n    Signed modulo remainder operation\n\n    Inputs\n    ----\n    - a: integer numerator\n    - b: integer denominator\n\n    Outputs\n    ----\n    - a % b: integer result of the signed integer modulo. If the denominator is 0, the result will\n        be 0\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    5\n\n    Source: [evm.codes/#07](https://www.evm.codes/#07)\n    \"\"\"\n\n    ADDMOD = Opcode(0x08, popped_stack_items=3, pushed_stack_items=1)\n    \"\"\"\n    ADDMOD(a, b, c) = d\n    ----\n\n    Description\n    ----\n    Modular addition operation with overflow check\n\n    Inputs\n    ----\n    - a: first integer value\n    - b: second integer value\n    - c: integer denominator\n\n    Outputs\n    ----\n    - (a + b) % N: integer result of the addition followed by a modulo. If the denominator is 0,\n        the result will be 0\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    8\n\n    Source: [evm.codes/#08](https://www.evm.codes/#08)\n    \"\"\"\n\n    MULMOD = Opcode(0x09, popped_stack_items=3, pushed_stack_items=1)\n    \"\"\"\n    MULMOD(a, b, N) = d\n    ----\n\n    Description\n    ----\n    Modulo multiplication operation\n\n    Inputs\n    ----\n    - a: first integer value to multiply\n    - b: second integer value to multiply\n    - N: integer denominator\n\n    Outputs\n    ----\n    - (a * b) % N: integer result of the multiplication followed by a modulo. If the denominator\n        is 0, the result will be 0\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    8\n\n    Source: [evm.codes/#09](https://www.evm.codes/#09)\n    \"\"\"\n\n    EXP = Opcode(0x0A, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    EXP(a, exponent) = a ** exponent\n    ----\n\n    Description\n    ----\n    Exponential operation\n\n    Inputs\n    ----\n    - a: integer base\n    - exponent: integer exponent\n\n    Outputs\n    ----\n    - a ** exponent: integer result of the exponential operation modulo 2**256\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 10\n    - dynamic_gas = 50 * exponent_byte_size\n\n    Source: [evm.codes/#0A](https://www.evm.codes/#0A)\n    \"\"\"\n\n    SIGNEXTEND = Opcode(0x0B, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    SIGNEXTEND(b, x) = y\n    ----\n\n    Description\n    ----\n    Sign extension operation\n\n    Inputs\n    ----\n    - b: size in byte - 1 of the integer to sign extend\n    - x: integer value to sign extend\n\n    Outputs\n    ----\n    - y: integer result of the sign extend\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    5\n\n    Source: [evm.codes/#0B](https://www.evm.codes/#0B)\n    \"\"\"\n\n    LT = Opcode(0x10, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    LT(a, b) = a < b\n    ----\n\n    Description\n    ----\n    Less-than comparison\n\n    Inputs\n    ----\n    - a: left side integer value\n    - b: right side integer value\n\n    Outputs\n    ----\n    - a < b: 1 if the left side is smaller, 0 otherwise\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#10](https://www.evm.codes/#10)\n    \"\"\"\n\n    GT = Opcode(0x11, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    GT(a, b) = a > b\n    ----\n\n    Description\n    ----\n    Greater-than comparison\n\n    Inputs\n    ----\n    - a: left side integer\n    - b: right side integer\n\n    Outputs\n    ----\n    - a > b: 1 if the left side is bigger, 0 otherwise\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#11](https://www.evm.codes/#11)\n    \"\"\"\n\n    SLT = Opcode(0x12, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    SLT(a, b) = a < b\n    ----\n\n    Description\n    ----\n    Signed less-than comparison\n\n    Inputs\n    ----\n    - a: left side signed integer\n    - b: right side signed integer\n\n    Outputs\n    ----\n    - a < b: 1 if the left side is smaller, 0 otherwise\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#12](https://www.evm.codes/#12)\n    \"\"\"\n\n    SGT = Opcode(0x13, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    SGT(a, b) = a > b\n    ----\n\n    Description\n    ----\n    Signed greater-than comparison\n\n    Inputs\n    ----\n    - a: left side signed integer\n    - b: right side signed integer\n\n    Outputs\n    ----\n    - a > b: 1 if the left side is bigger, 0 otherwise\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#13](https://www.evm.codes/#13)\n    \"\"\"\n\n    EQ = Opcode(0x14, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    EQ(a, b) = a == b\n    ----\n\n    Description\n    ----\n    Equality comparison\n\n    Inputs\n    ----\n    - a: left side integer\n    - b: right side integer\n\n    Outputs\n    ----\n    - a == b: 1 if the left side is equal to the right side, 0 otherwise\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#14](https://www.evm.codes/#14)\n    \"\"\"\n\n    ISZERO = Opcode(0x15, popped_stack_items=1, pushed_stack_items=1)\n    \"\"\"\n    ISZERO(a) = a == 0\n    ----\n\n    Description\n    ----\n    Is-zero comparison\n\n    Inputs\n    ----\n    - a: integer\n\n    Outputs\n    ----\n    - a == 0: 1 if a is 0, 0 otherwise\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#15](https://www.evm.codes/#15)\n    \"\"\"\n\n    AND = Opcode(0x16, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    AND(a, b) = a & b\n    ----\n\n    Description\n    ----\n    Bitwise AND operation\n\n    Inputs\n    ----\n    - a: first binary value\n    - b: second binary value\n\n    Outputs\n    ----\n    - a & b: the bitwise AND result\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#16](https://www.evm.codes/#16)\n    \"\"\"\n\n    OR = Opcode(0x17, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    OR(a, b) = a | b\n    ----\n\n    Description\n    ----\n    Bitwise OR operation\n\n    Inputs\n    ----\n    - a: first binary value\n    - b: second binary value\n\n    Outputs\n    ----\n    - a | b: the bitwise OR result\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#17](https://www.evm.codes/#17)\n    \"\"\"\n\n    XOR = Opcode(0x18, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    XOR(a, b) = a ^ b\n    ----\n\n    Description\n    ----\n    Bitwise XOR operation\n\n    Inputs\n    ----\n    - a: first binary value\n    - b: second binary value\n\n    Outputs\n    ----\n    - a ^ b: the bitwise XOR result\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#18](https://www.evm.codes/#18)\n    \"\"\"\n\n    NOT = Opcode(0x19, popped_stack_items=1, pushed_stack_items=1)\n    \"\"\"\n    NOT(a) = ~a\n    ----\n\n    Description\n    ----\n    Bitwise NOT operation\n\n    Inputs\n    ----\n    - a: binary value\n\n    Outputs\n    ----\n    - ~a: the bitwise NOT result\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#19](https://www.evm.codes/#19)\n    \"\"\"\n\n    BYTE = Opcode(0x1A, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    BYTE(i, x) = y\n    ----\n\n    Description\n    ----\n    Extract a byte from the given position in the value\n\n    Inputs\n    ----\n    - i: byte offset starting from the most significant byte\n    - x: 32-byte value\n\n    Outputs\n    ----\n    - y: the indicated byte at the least significant position. If the byte offset is out of range,\n        the result is 0\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#1A](https://www.evm.codes/#1A)\n    \"\"\"\n\n    SHL = Opcode(0x1B, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    SHL(shift, value) = value << shift\n    ----\n\n    Description\n    ----\n    Shift left operation\n\n    Inputs\n    ----\n    - shift: number of bits to shift to the left\n    - value: 32 bytes to shift\n\n    Outputs\n    ----\n    - value << shift: the shifted value. If shift is bigger than 255, returns 0\n\n    Fork\n    ----\n    Constantinople\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#1B](https://www.evm.codes/#1B)\n    \"\"\"\n\n    SHR = Opcode(0x1C, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    SHR(shift, value) = value >> shift\n    ----\n\n    Description\n    ----\n    Logical shift right operation\n\n    Inputs\n    ----\n    - shift: number of bits to shift to the right.\n    - value: 32 bytes to shift\n\n    Outputs\n    ----\n    - value >> shift: the shifted value. If shift is bigger than 255, returns 0\n\n    Fork\n    ----\n    Constantinople\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#1C](https://www.evm.codes/#1C)\n    \"\"\"\n\n    SAR = Opcode(0x1D, popped_stack_items=2, pushed_stack_items=1)\n    \"\"\"\n    SAR(shift, value) = value >> shift\n    ----\n\n    Description\n    ----\n    Arithmetic shift right operation\n\n    Inputs\n    ----\n    - shift: number of bits to shift to the right\n    - value: integer to shift\n\n    Outputs\n    ----\n    - value >> shift: the shifted value\n\n    Fork\n    ----\n    Constantinople\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#1D](https://www.evm.codes/#1D)\n    \"\"\"\n\n    SHA3 = Opcode(0x20, popped_stack_items=2, pushed_stack_items=1, kwargs=[\"offset\", \"size\"])\n    \"\"\"\n    SHA3(offset, size) = hash\n    ----\n\n    Description\n    ----\n    Compute Keccak-256 hash\n\n    Inputs\n    ----\n    - offset: byte offset in the memory\n    - size: byte size to read in the memory\n\n    Outputs\n    ----\n    - hash: Keccak-256 hash of the given data in memory\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - minimum_word_size = (size + 31) / 32\n    - static_gas = 30\n    - dynamic_gas = 6 * minimum_word_size + memory_expansion_cost\n\n    Source: [evm.codes/#20](https://www.evm.codes/#20)\n    \"\"\"\n\n    ADDRESS = Opcode(0x30, pushed_stack_items=1)\n    \"\"\"\n    ADDRESS() = address\n    ----\n\n    Description\n    ----\n    Get address of currently executing account\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - address: the 20-byte address of the current account\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#30](https://www.evm.codes/#30)\n    \"\"\"\n\n    BALANCE = Opcode(0x31, popped_stack_items=1, pushed_stack_items=1, kwargs=[\"address\"])\n    \"\"\"\n    BALANCE(address) = balance\n    ----\n\n    Description\n    ----\n    Get the balance of the specified account\n\n    Inputs\n    ----\n    - address: 20-byte address of the account to check\n\n    Outputs\n    ----\n    - balance: balance of the given account in wei. Returns 0 if the account doesn't exist\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 0\n    - dynamic_gas = 100 if warm_address, 2600 if cold_address\n\n    Source: [evm.codes/#31](https://www.evm.codes/#31)\n    \"\"\"\n\n    ORIGIN = Opcode(0x32, pushed_stack_items=1)\n    \"\"\"\n    ORIGIN() = address\n    ----\n\n    Description\n    ----\n    Get execution origination address\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - address: the 20-byte address of the sender of the transaction. It can only be an account\n        without code\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#32](https://www.evm.codes/#32)\n    \"\"\"\n\n    CALLER = Opcode(0x33, pushed_stack_items=1)\n    \"\"\"\n    CALLER() = address\n    ----\n\n    Description\n    ----\n    Get caller address\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - address: the 20-byte address of the caller account. This is the account that did the last\n        call (except delegate call)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#33](https://www.evm.codes/#33)\n    \"\"\"\n\n    CALLVALUE = Opcode(0x34, pushed_stack_items=1)\n    \"\"\"\n    CALLVALUE() = value\n    ----\n\n    Description\n    ----\n    Get deposited value by the instruction/transaction responsible for this execution\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: the value of the current call in wei\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#34](https://www.evm.codes/#34)\n    \"\"\"\n\n    CALLDATALOAD = Opcode(0x35, popped_stack_items=1, pushed_stack_items=1, kwargs=[\"offset\"])\n    \"\"\"\n    CALLDATALOAD(offset) = data[offset]\n    ----\n\n    Description\n    ----\n    Get input data of current environment\n\n    Inputs\n    ----\n    - offset: byte offset in the calldata\n\n    Outputs\n    ----\n    - data[offset]: 32-byte value starting from the given offset of the calldata. All bytes after\n        the end of the calldata are set to 0\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#35](https://www.evm.codes/#35)\n    \"\"\"\n\n    CALLDATASIZE = Opcode(0x36, pushed_stack_items=1)\n    \"\"\"\n    CALLDATASIZE() = size\n    ----\n\n    Description\n    ----\n    Get size of input data in current environment\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - size: byte size of the calldata\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#36](https://www.evm.codes/#36)\n    \"\"\"\n\n    CALLDATACOPY = Opcode(0x37, popped_stack_items=3, kwargs=[\"dest_offset\", \"offset\", \"size\"])\n    \"\"\"\n    CALLDATACOPY(dest_offset, offset, size)\n    ----\n\n    Description\n    ----\n    Copy input data in current environment to memory\n\n    Inputs\n    ----\n    - dest_offset: byte offset in the memory where the result will be copied\n    - offset: byte offset in the calldata to copy\n    - size: byte size to copy\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - minimum_word_size = (size + 31) / 32\n    - static_gas = 3\n    - dynamic_gas = 3 * minimum_word_size + memory_expansion_cost\n\n    Source: [evm.codes/#37](https://www.evm.codes/#37)\n    \"\"\"\n\n    CODESIZE = Opcode(0x38, pushed_stack_items=1)\n    \"\"\"\n    CODESIZE() = size\n    ----\n\n    Description\n    ----\n    Get size of code running in current environment\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - size: byte size of the code\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#38](https://www.evm.codes/#38)\n    \"\"\"\n\n    CODECOPY = Opcode(0x39, popped_stack_items=3, kwargs=[\"dest_offset\", \"offset\", \"size\"])\n    \"\"\"\n    CODECOPY(dest_offset, offset, size)\n    ----\n\n    Description\n    ----\n    Copy code running in current environment to memory\n\n    Inputs\n    ----\n    - dest_offset: byte offset in the memory where the result will be copied.\n    - offset: byte offset in the code to copy.\n    - size: byte size to copy\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - minimum_word_size = (size + 31) / 32\n    - static_gas = 3\n    - dynamic_gas = 3 * minimum_word_size + memory_expansion_cost\n\n    Source: [evm.codes/#39](https://www.evm.codes/#39)\n    \"\"\"\n\n    GASPRICE = Opcode(0x3A, pushed_stack_items=1)\n    \"\"\"\n    GASPRICE() = price\n    ----\n\n    Description\n    ----\n    Get price of gas in current environment\n\n    Outputs\n    ----\n    - price: gas price in wei per gas\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#3A](https://www.evm.codes/#3A)\n    \"\"\"\n\n    EXTCODESIZE = Opcode(0x3B, popped_stack_items=1, pushed_stack_items=1, kwargs=[\"address\"])\n    \"\"\"\n    EXTCODESIZE(address) = size\n    ----\n\n    Description\n    ----\n    Get size of an account's code\n\n    Inputs\n    ----\n    - address: 20-byte address of the contract to query\n\n    Outputs\n    ----\n    - size: byte size of the code\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 0\n    - dynamic_gas = 100 if warm_address, 2600 if cold_address\n\n    Source: [evm.codes/#3B](https://www.evm.codes/#3B)\n    \"\"\"\n\n    EXTCODECOPY = Opcode(\n        0x3C, popped_stack_items=4, kwargs=[\"address\", \"dest_offset\", \"offset\", \"size\"]\n    )\n    \"\"\"\n    EXTCODECOPY(address, dest_offset, offset, size)\n    ----\n\n    Description\n    ----\n    Copy an account's code to memory\n\n    Inputs\n    ----\n    - address: 20-byte address of the contract to query\n    - dest_offset: byte offset in the memory where the result will be copied\n    - offset: byte offset in the code to copy\n    - size: byte size to copy\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - minimum_word_size = (size + 31) / 32\n    - static_gas = 0\n    - dynamic_gas = 3 * minimum_word_size + memory_expansion_cost + address_access_cost\n\n    Source: [evm.codes/#3C](https://www.evm.codes/#3C)\n    \"\"\"\n\n    RETURNDATASIZE = Opcode(0x3D, pushed_stack_items=1)\n    \"\"\"\n    RETURNDATASIZE() = size\n    ----\n\n    Description\n    ----\n    Get size of output data from the previous call from the current environment\n\n    Outputs\n    ----\n    - size: byte size of the return data from the last executed sub context\n\n    Fork\n    ----\n    Byzantium\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#3D](https://www.evm.codes/#3D)\n    \"\"\"\n\n    RETURNDATACOPY = Opcode(0x3E, popped_stack_items=3, kwargs=[\"dest_offset\", \"offset\", \"size\"])\n    \"\"\"\n    RETURNDATACOPY(dest_offset, offset, size)\n    ----\n\n    Description\n    ----\n    Copy output data from the previous call to memory\n\n    Inputs\n    ----\n    - dest_offset: byte offset in the memory where the result will be copied\n    - offset: byte offset in the return data from the last executed sub context to copy\n    - size: byte size to copy\n\n    Fork\n    ----\n    Byzantium\n\n    Gas\n    ----\n    - minimum_word_size = (size + 31) / 32\n    - static_gas = 3\n    - dynamic_gas = 3 * minimum_word_size + memory_expansion_cost\n\n    Source: [evm.codes/#3E](https://www.evm.codes/#3E)\n    \"\"\"\n\n    EXTCODEHASH = Opcode(0x3F, popped_stack_items=1, pushed_stack_items=1, kwargs=[\"address\"])\n    \"\"\"\n    EXTCODEHASH(address) = hash\n    ----\n\n    Description\n    ----\n    Get hash of an account's code\n\n    Inputs\n    ----\n    - address: 20-byte address of the account\n\n    Outputs\n    ----\n    - hash: hash of the chosen account's code, the empty hash (0xc5d24601...) if the account has no\n        code, or 0 if the account does not exist or has been destroyed\n\n    Fork\n    ----\n    Constantinople\n\n    Gas\n    ----\n    - static_gas = 0\n    - dynamic_gas = 100 if warm_address, 2600 if cold_address\n\n    Source: [evm.codes/#3F](https://www.evm.codes/#3F)\n    \"\"\"\n\n    BLOCKHASH = Opcode(0x40, popped_stack_items=1, pushed_stack_items=1, kwargs=[\"block_number\"])\n    \"\"\"\n    BLOCKHASH(block_number) = hash\n    ----\n\n    Description\n    ----\n    Get the hash of one of the 256 most recent complete blocks\n\n    Inputs\n    ----\n    - blockNumber: block number to get the hash from. Valid range is the last 256 blocks (not\n        including the current one). Current block number can be queried with NUMBER\n\n    Outputs\n    ----\n    - hash: hash of the chosen block, or 0 if the block number is not in the valid range\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    20\n\n    Source: [evm.codes/#40](https://www.evm.codes/#40)\n    \"\"\"\n\n    COINBASE = Opcode(0x41, pushed_stack_items=1)\n    \"\"\"\n    COINBASE() = address\n    ----\n\n    Description\n    ----\n    Get the block's beneficiary address\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - address: miner's 20-byte address\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#41](https://www.evm.codes/#41)\n    \"\"\"\n\n    TIMESTAMP = Opcode(0x42, pushed_stack_items=1)\n    \"\"\"\n    TIMESTAMP() = timestamp\n    ----\n\n    Description\n    ----\n    Get the block's timestamp\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - timestamp: unix timestamp of the current block\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#42](https://www.evm.codes/#42)\n    \"\"\"\n\n    NUMBER = Opcode(0x43, pushed_stack_items=1)\n    \"\"\"\n    NUMBER() = blockNumber\n    ----\n\n    Description\n    ----\n    Get the block's number\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - blockNumber: current block number\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#43](https://www.evm.codes/#43)\n    \"\"\"\n\n    PREVRANDAO = Opcode(0x44, pushed_stack_items=1)\n    \"\"\"\n    PREVRANDAO() = prevRandao\n    ----\n\n    Description\n    ----\n    Get the previous block's RANDAO mix\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - prevRandao: previous block's RANDAO mix\n\n    Fork\n    ----\n    Merge\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#44](https://www.evm.codes/#44)\n    \"\"\"\n\n    GASLIMIT = Opcode(0x45, pushed_stack_items=1)\n    \"\"\"\n    GASLIMIT() = gasLimit\n    ----\n\n    Description\n    ----\n    Get the block's gas limit\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - gasLimit: gas limit\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#45](https://www.evm.codes/#45)\n    \"\"\"\n\n    CHAINID = Opcode(0x46, pushed_stack_items=1)\n    \"\"\"\n    CHAINID() = chainId\n    ----\n\n    Description\n    ----\n    Get the chain ID\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - chainId: chain id of the network\n\n    Fork\n    ----\n    Istanbul\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#46](https://www.evm.codes/#46)\n    \"\"\"\n\n    SELFBALANCE = Opcode(0x47, pushed_stack_items=1)\n    \"\"\"\n    SELFBALANCE() = balance\n    ----\n\n    Description\n    ----\n    Get balance of currently executing account\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - balance: balance of the current account in wei\n\n    Fork\n    ----\n    Istanbul\n\n    Gas\n    ----\n    5\n\n    Source: [evm.codes/#47](https://www.evm.codes/#47)\n    \"\"\"\n\n    BASEFEE = Opcode(0x48, pushed_stack_items=1)\n    \"\"\"\n    BASEFEE() = baseFee\n    ----\n\n    Description\n    ----\n    Get the base fee\n\n    Outputs\n    ----\n    - baseFee: base fee in wei\n\n    Fork\n    ----\n    London\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#48](https://www.evm.codes/#48)\n    \"\"\"\n\n    BLOBHASH = Opcode(0x49, popped_stack_items=1, pushed_stack_items=1, kwargs=[\"index\"])\n    \"\"\"\n    BLOBHASH(index) = versionedHash\n    ----\n\n    Description\n    ----\n    Returns the versioned hash of a single blob contained in the type-3 transaction\n\n    Inputs\n    ----\n    - index: index of the blob\n\n    Outputs\n    ----\n    - versionedHash: versioned hash of the blob\n\n    Fork\n    ----\n    Cancun\n\n    Gas\n    ----\n    3\n\n    Source: [eips.ethereum.org/EIPS/eip-4844](https://eips.ethereum.org/EIPS/eip-4844)\n    \"\"\"\n\n    BLOBBASEFEE = Opcode(0x4A, popped_stack_items=0, pushed_stack_items=1)\n    \"\"\"\n    BLOBBASEFEE() = fee\n    ----\n\n    Description\n    ----\n    Returns the value of the blob base fee of the block it is executing in\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - baseFeePerBlobGas: base fee for the blob gas in wei\n\n    Fork\n    ----\n    Cancun\n\n    Gas\n    ----\n    2\n\n    Source: [eips.ethereum.org/EIPS/eip-7516](https://eips.ethereum.org/EIPS/eip-7516)\n    \"\"\"\n\n    POP = Opcode(0x50, popped_stack_items=1)\n    \"\"\"\n    POP()\n    ----\n\n    Description\n    ----\n    Remove item from stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#50](https://www.evm.codes/#50)\n    \"\"\"\n\n    MLOAD = Opcode(0x51, popped_stack_items=1, pushed_stack_items=1, kwargs=[\"offset\"])\n    \"\"\"\n    MLOAD(offset) = value\n    ----\n\n    Description\n    ----\n    Load word from memory\n\n    Inputs\n    ----\n    - offset: offset in the memory in bytes\n\n    Outputs\n    ----\n    - value: the 32 bytes in memory starting at that offset. If it goes beyond its current size\n        (see MSIZE), writes 0s\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 3\n    - dynamic_gas = memory_expansion_cost\n\n    Source: [evm.codes/#51](https://www.evm.codes/#51)\n    \"\"\"\n\n    MSTORE = Opcode(0x52, popped_stack_items=2, kwargs=[\"offset\", \"value\"])\n    \"\"\"\n    MSTORE(offset, value)\n    ----\n\n    Description\n    ----\n    Save word to memory\n\n    Inputs\n    ----\n    - offset: offset in the memory in bytes\n    - value: 32-byte value to write in the memory\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 3\n    - dynamic_gas = memory_expansion_cost\n\n    Source: [evm.codes/#52](https://www.evm.codes/#52)\n    \"\"\"\n\n    MSTORE8 = Opcode(0x53, popped_stack_items=2, kwargs=[\"offset\", \"value\"])\n    \"\"\"\n    MSTORE8(offset, value)\n    ----\n\n    Description\n    ----\n    Save byte to memory\n\n    Inputs\n    ----\n    - offset: offset in the memory in bytes\n    - value: 1-byte value to write in the memory (the least significant byte of the 32-byte stack\n        value)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 3\n    - dynamic_gas = memory_expansion_cost\n\n    Source: [evm.codes/#53](https://www.evm.codes/#53)\n    \"\"\"\n\n    SLOAD = Opcode(0x54, popped_stack_items=1, pushed_stack_items=1, kwargs=[\"key\"])\n    \"\"\"\n    SLOAD(key) = value\n    ----\n\n    Description\n    ----\n    Load word from storage\n\n    Inputs\n    ----\n    - key: 32-byte key in storage\n\n    Outputs\n    ----\n    - value: 32-byte value corresponding to that key. 0 if that key was never written before\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 0\n    - dynamic_gas = 100 if warm_address, 2600 if cold_address\n\n    Source: [evm.codes/#54](https://www.evm.codes/#54)\n    \"\"\"\n\n    SSTORE = Opcode(0x55, popped_stack_items=2, kwargs=[\"key\", \"value\"])\n    \"\"\"\n    SSTORE(key, value)\n    ----\n\n    Description\n    ----\n    Save word to storage\n\n    Inputs\n    ----\n    - key: 32-byte key in storage\n    - value: 32-byte value to store\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    ```\n    static_gas = 0\n\n    if value == current_value\n        if key is warm\n            base_dynamic_gas = 100\n        else\n            base_dynamic_gas = 100\n    else if current_value == original_value\n        if original_value == 0\n            base_dynamic_gas = 20000\n        else\n            base_dynamic_gas = 2900\n    else\n        base_dynamic_gas = 100\n\n    if key is cold:\n        base_dynamic_gas += 2100\n    ```\n\n    Source: [evm.codes/#55](https://www.evm.codes/#55)\n    \"\"\"\n\n    JUMP = Opcode(0x56, popped_stack_items=1, kwargs=[\"pc\"])\n    \"\"\"\n    JUMP(pc)\n    ----\n\n    Description\n    ----\n    Alter the program counter\n\n    Inputs\n    ----\n    - pc: byte offset in the deployed code where execution will continue from. Must be a\n        JUMPDEST instruction\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    8\n\n    Source: [evm.codes/#56](https://www.evm.codes/#56)\n    \"\"\"\n\n    JUMPI = Opcode(0x57, popped_stack_items=2, kwargs=[\"pc\", \"condition\"])\n    \"\"\"\n    JUMPI(pc, condition)\n    ----\n\n    Description\n    ----\n    Conditionally alter the program counter\n\n    Inputs\n    ----\n    - pc: byte offset in the deployed code where execution will continue from. Must be a\n        JUMPDEST instruction\n    - condition: the program counter will be altered with the new value only if this value is\n        different from 0. Otherwise, the program counter is simply incremented and the next\n        instruction will be executed\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    10\n\n    Source: [evm.codes/#57](https://www.evm.codes/#57)\n    \"\"\"\n\n    PC = Opcode(0x58, pushed_stack_items=1)\n    \"\"\"\n    PC() = counter\n    ----\n\n    Description\n    ----\n    Get the value of the program counter prior to the increment corresponding to this instruction\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - counter: PC of this instruction in the current program.\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#58](https://www.evm.codes/#58)\n    \"\"\"\n\n    MSIZE = Opcode(0x59, pushed_stack_items=1)\n    \"\"\"\n    MSIZE() = size\n    ----\n\n    Description\n    ----\n    Get the size of active memory in bytes\n\n    Outputs\n    ----\n    - size: current memory size in bytes (higher offset accessed until now + 1)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#59](https://www.evm.codes/#59)\n    \"\"\"\n\n    GAS = Opcode(0x5A, pushed_stack_items=1)\n    \"\"\"\n    GAS() = gas_remaining\n    ----\n\n    Description\n    ----\n    Get the amount of available gas, including the corresponding reduction for the cost of this\n    instruction\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - gas: remaining gas (after this instruction)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#5A](https://www.evm.codes/#5A)\n    \"\"\"\n\n    JUMPDEST = Opcode(0x5B)\n    \"\"\"\n    JUMPDEST()\n    ----\n\n    Description\n    ----\n    Mark a valid destination for jumps\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    1\n\n    Source: [evm.codes/#5B](https://www.evm.codes/#5B)\n    \"\"\"\n\n    NOOP = Opcode(0x5B)\n    \"\"\"\n    NOOP()\n    ----\n\n    Description\n    ----\n    Synonym for JUMPDEST. Performs no operation.\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    1\n\n    Source: [evm.codes/#5B](https://www.evm.codes/#5B)\n    \"\"\"\n\n    TLOAD = Opcode(0x5C, popped_stack_items=1, pushed_stack_items=1, kwargs=[\"key\"])\n    \"\"\"\n    TLOAD(key) = value\n    ----\n\n    Description\n    ----\n    Load word from transient storage\n\n    Inputs\n    ----\n    - key: 32-byte key in transient storage\n\n    Outputs\n    ----\n    - value: 32-byte value corresponding to that key. 0 if that key was never written\n\n    Fork\n    ----\n    Cancun\n\n    Gas\n    ----\n    100\n\n    Source: [eips.ethereum.org/EIPS/eip-1153](https://eips.ethereum.org/EIPS/eip-1153)\n    \"\"\"\n\n    TSTORE = Opcode(0x5D, popped_stack_items=2, kwargs=[\"key\", \"value\"])\n    \"\"\"\n    TSTORE(key, value)\n    ----\n\n    Description\n    ----\n    Save word to transient storage\n\n    Inputs\n    ----\n    - key: 32-byte key in transient storage\n    - value: 32-byte value to store\n\n    Fork\n    ----\n    Cancun\n\n    Gas\n    ----\n    100\n\n    Source: [eips.ethereum.org/EIPS/eip-1153](https://eips.ethereum.org/EIPS/eip-1153)\n    \"\"\"\n\n    MCOPY = Opcode(0x5E, popped_stack_items=3, kwargs=[\"dest_offset\", \"offset\", \"size\"])\n    \"\"\"\n    MCOPY(dest_offset, offset, size)\n    ----\n\n    Description\n    ----\n    Copies areas in memory\n\n    Inputs\n    ----\n    - dest_offset: byte offset in the memory where the result will be copied\n    - offset: byte offset in the calldata to copy\n    - size: byte size to copy\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Cancun\n\n    Gas\n    ----\n    - minimum_word_size = (size + 31) / 32\n    - static_gas = 3\n    - dynamic_gas = 3 * minimum_word_size + memory_expansion_cost\n\n    Source: [eips.ethereum.org/EIPS/eip-5656](https://eips.ethereum.org/EIPS/eip-5656)\n    \"\"\"\n\n    PUSH0 = Opcode(0x5F, pushed_stack_items=1)\n    \"\"\"\n    PUSH0() = value\n    ----\n\n    Description\n    ----\n    Place value 0 on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, equal to 0\n\n    Fork\n    ----\n    Shanghai\n\n    Gas\n    ----\n    2\n\n    Source: [evm.codes/#5F](https://www.evm.codes/#5F)\n    \"\"\"\n\n    PUSH1 = Opcode(0x60, pushed_stack_items=1, data_portion_length=1)\n    \"\"\"\n    PUSH1() = value\n    ----\n\n    Description\n    ----\n    Place 1 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#60](https://www.evm.codes/#60)\n    \"\"\"\n\n    PUSH2 = Opcode(0x61, pushed_stack_items=1, data_portion_length=2)\n    \"\"\"\n    PUSH2() = value\n    ----\n\n    Description\n    ----\n    Place 2 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#61](https://www.evm.codes/#61)\n    \"\"\"\n\n    PUSH3 = Opcode(0x62, pushed_stack_items=1, data_portion_length=3)\n    \"\"\"\n    PUSH3() = value\n    ----\n\n    Description\n    ----\n    Place 3 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#62](https://www.evm.codes/#62)\n    \"\"\"\n\n    PUSH4 = Opcode(0x63, pushed_stack_items=1, data_portion_length=4)\n    \"\"\"\n    PUSH4() = value\n    ----\n\n    Description\n    ----\n    Place 4 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#63](https://www.evm.codes/#63)\n    \"\"\"\n\n    PUSH5 = Opcode(0x64, pushed_stack_items=1, data_portion_length=5)\n    \"\"\"\n    PUSH5() = value\n    ----\n\n    Description\n    ----\n    Place 5 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#64](https://www.evm.codes/#64)\n    \"\"\"\n\n    PUSH6 = Opcode(0x65, pushed_stack_items=1, data_portion_length=6)\n    \"\"\"\n    PUSH6() = value\n    ----\n\n    Description\n    ----\n    Place 6 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#65](https://www.evm.codes/#65)\n    \"\"\"\n\n    PUSH7 = Opcode(0x66, pushed_stack_items=1, data_portion_length=7)\n    \"\"\"\n    PUSH7() = value\n    ----\n\n    Description\n    ----\n    Place 7 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#66](https://www.evm.codes/#66)\n    \"\"\"\n\n    PUSH8 = Opcode(0x67, pushed_stack_items=1, data_portion_length=8)\n    \"\"\"\n    PUSH8() = value\n    ----\n\n    Description\n    ----\n    Place 8 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#67](https://www.evm.codes/#67)\n    \"\"\"\n\n    PUSH9 = Opcode(0x68, pushed_stack_items=1, data_portion_length=9)\n    \"\"\"\n    PUSH9() = value\n    ----\n\n    Description\n    ----\n    Place 9 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#68](https://www.evm.codes/#68)\n    \"\"\"\n\n    PUSH10 = Opcode(0x69, pushed_stack_items=1, data_portion_length=10)\n    \"\"\"\n    PUSH10() = value\n    ----\n\n    Description\n    ----\n    Place 10 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#69](https://www.evm.codes/#69)\n    \"\"\"\n\n    PUSH11 = Opcode(0x6A, pushed_stack_items=1, data_portion_length=11)\n    \"\"\"\n    PUSH11() = value\n    ----\n\n    Description\n    ----\n    Place 11 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#6A](https://www.evm.codes/#6A)\n    \"\"\"\n\n    PUSH12 = Opcode(0x6B, pushed_stack_items=1, data_portion_length=12)\n    \"\"\"\n    PUSH12() = value\n    ----\n\n    Description\n    ----\n    Place 12 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#6B](https://www.evm.codes/#6B)\n    \"\"\"\n\n    PUSH13 = Opcode(0x6C, pushed_stack_items=1, data_portion_length=13)\n    \"\"\"\n    PUSH13() = value\n    ----\n\n    Description\n    ----\n    Place 13 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#6C](https://www.evm.codes/#6C)\n    \"\"\"\n\n    PUSH14 = Opcode(0x6D, pushed_stack_items=1, data_portion_length=14)\n    \"\"\"\n    PUSH14() = value\n    ----\n\n    Description\n    ----\n    Place 14 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#6D](https://www.evm.codes/#6D)\n    \"\"\"\n\n    PUSH15 = Opcode(0x6E, pushed_stack_items=1, data_portion_length=15)\n    \"\"\"\n    PUSH15() = value\n    ----\n\n    Description\n    ----\n    Place 15 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#6E](https://www.evm.codes/#6E)\n    \"\"\"\n\n    PUSH16 = Opcode(0x6F, pushed_stack_items=1, data_portion_length=16)\n    \"\"\"\n    PUSH16() = value\n    ----\n\n    Description\n    ----\n    Place 16 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#6F](https://www.evm.codes/#6F)\n    \"\"\"\n\n    PUSH17 = Opcode(0x70, pushed_stack_items=1, data_portion_length=17)\n    \"\"\"\n    PUSH17() = value\n    ----\n\n    Description\n    ----\n    Place 17 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#70](https://www.evm.codes/#70)\n    \"\"\"\n\n    PUSH18 = Opcode(0x71, pushed_stack_items=1, data_portion_length=18)\n    \"\"\"\n    PUSH18() = value\n    ----\n\n    Description\n    ----\n    Place 18 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#71](https://www.evm.codes/#71)\n    \"\"\"\n\n    PUSH19 = Opcode(0x72, pushed_stack_items=1, data_portion_length=19)\n    \"\"\"\n    PUSH19() = value\n    ----\n\n    Description\n    ----\n    Place 19 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#72](https://www.evm.codes/#72)\n    \"\"\"\n\n    PUSH20 = Opcode(0x73, pushed_stack_items=1, data_portion_length=20)\n    \"\"\"\n    PUSH20() = value\n    ----\n\n    Description\n    ----\n    Place 20 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#73](https://www.evm.codes/#73)\n    \"\"\"\n\n    PUSH21 = Opcode(0x74, pushed_stack_items=1, data_portion_length=21)\n    \"\"\"\n    PUSH21() = value\n    ----\n\n    Description\n    ----\n    Place 21 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#74](https://www.evm.codes/#74)\n    \"\"\"\n\n    PUSH22 = Opcode(0x75, pushed_stack_items=1, data_portion_length=22)\n    \"\"\"\n    PUSH22() = value\n    ----\n\n    Description\n    ----\n    Place 22 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#75](https://www.evm.codes/#75)\n    \"\"\"\n\n    PUSH23 = Opcode(0x76, pushed_stack_items=1, data_portion_length=23)\n    \"\"\"\n    PUSH23() = value\n    ----\n\n    Description\n    ----\n    Place 23 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#76](https://www.evm.codes/#76)\n    \"\"\"\n\n    PUSH24 = Opcode(0x77, pushed_stack_items=1, data_portion_length=24)\n    \"\"\"\n    PUSH24() = value\n    ----\n\n    Description\n    ----\n    Place 24 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#77](https://www.evm.codes/#77)\n    \"\"\"\n\n    PUSH25 = Opcode(0x78, pushed_stack_items=1, data_portion_length=25)\n    \"\"\"\n    PUSH25() = value\n    ----\n\n    Description\n    ----\n    Place 25 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#78](https://www.evm.codes/#78)\n    \"\"\"\n\n    PUSH26 = Opcode(0x79, pushed_stack_items=1, data_portion_length=26)\n    \"\"\"\n    PUSH26() = value\n    ----\n\n    Description\n    ----\n    Place 26 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#79](https://www.evm.codes/#79)\n    \"\"\"\n\n    PUSH27 = Opcode(0x7A, pushed_stack_items=1, data_portion_length=27)\n    \"\"\"\n    PUSH27() = value\n    ----\n\n    Description\n    ----\n    Place 27 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#7A](https://www.evm.codes/#7A)\n    \"\"\"\n\n    PUSH28 = Opcode(0x7B, pushed_stack_items=1, data_portion_length=28)\n    \"\"\"\n    PUSH28() = value\n    ----\n\n    Description\n    ----\n    Place 28 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#7B](https://www.evm.codes/#7B)\n    \"\"\"\n\n    PUSH29 = Opcode(0x7C, pushed_stack_items=1, data_portion_length=29)\n    \"\"\"\n    PUSH29() = value\n    ----\n\n    Description\n    ----\n    Place 29 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#7C](https://www.evm.codes/#7C)\n    \"\"\"\n\n    PUSH30 = Opcode(0x7D, pushed_stack_items=1, data_portion_length=30)\n    \"\"\"\n    PUSH30() = value\n    ----\n\n    Description\n    ----\n    Place 30 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#7D](https://www.evm.codes/#7D)\n    \"\"\"\n\n    PUSH31 = Opcode(0x7E, pushed_stack_items=1, data_portion_length=31)\n    \"\"\"\n    PUSH31() = value\n    ----\n\n    Description\n    ----\n    Place 31 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#7E](https://www.evm.codes/#7E)\n    \"\"\"\n\n    PUSH32 = Opcode(0x7F, pushed_stack_items=1, data_portion_length=32)\n    \"\"\"\n    PUSH32() = value\n    ----\n\n    Description\n    ----\n    Place 32 byte item on stack\n\n    Inputs\n    ----\n    - None\n\n    Outputs\n    ----\n    - value: pushed value, aligned to the right (put in the lowest significant bytes)\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#7F](https://www.evm.codes/#7F)\n    \"\"\"\n\n    DUP1 = Opcode(0x80, pushed_stack_items=1, min_stack_height=1)\n    \"\"\"\n    DUP1(value) = value, value\n    ----\n\n    Description\n    ----\n    Duplicate 1st stack item\n\n    Inputs\n    ----\n    - value: value to duplicate\n\n    Outputs\n    ----\n    - value: duplicated value\n    - value: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#80](https://www.evm.codes/#80)\n    \"\"\"\n\n    DUP2 = Opcode(0x81, pushed_stack_items=1, min_stack_height=2)\n    \"\"\"\n    DUP2(v1, v2) = v2, v1, v2\n    ----\n\n    Description\n    ----\n    Duplicate 2nd stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: value to duplicate\n\n    Outputs\n    ----\n    - v2: duplicated value\n    - v1: ignored value\n    - v2: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#81](https://www.evm.codes/#81)\n    \"\"\"\n\n    DUP3 = Opcode(0x82, pushed_stack_items=1, min_stack_height=3)\n    \"\"\"\n    DUP3(v1, v2, v3) = v3, v1, v2, v3\n    ----\n\n    Description\n    ----\n    Duplicate 3rd stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - v3: value to duplicate\n\n    Outputs\n    ----\n    - v3: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - v3: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#82](https://www.evm.codes/#82)\n    \"\"\"\n\n    DUP4 = Opcode(0x83, pushed_stack_items=1, min_stack_height=4)\n    \"\"\"\n    DUP4(v1, v2, v3, v4) = v4, v1, v2, v3, v4\n    ----\n\n    Description\n    ----\n    Duplicate 4th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - v3: ignored value\n    - v4: value to duplicate\n\n    Outputs\n    ----\n    - v4: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - v3: ignored value\n    - v4: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#83](https://www.evm.codes/#83)\n    \"\"\"\n\n    DUP5 = Opcode(0x84, pushed_stack_items=1, min_stack_height=5)\n    \"\"\"\n    DUP5(v1, v2, v3, v4, v5) = v5, v1, v2, v3, v4, v5\n    ----\n\n    Description\n    ----\n    Duplicate 5th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - v3: ignored value\n    - v4: ignored value\n    - v5: value to duplicate\n\n    Outputs\n    ----\n    - v5: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - v3: ignored value\n    - v4: ignored value\n    - v5: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#84](https://www.evm.codes/#84)\n    \"\"\"\n\n    DUP6 = Opcode(0x85, pushed_stack_items=1, min_stack_height=6)\n    \"\"\"\n    DUP6(v1, v2, ..., v5, v6) = v6, v1, v2, ..., v5, v6\n    ----\n\n    Description\n    ----\n    Duplicate 6th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v5: ignored value\n    - v6: value to duplicate\n\n    Outputs\n    ----\n    - v6: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v5: ignored value\n    - v6: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#85](https://www.evm.codes/#85)\n    \"\"\"\n\n    DUP7 = Opcode(0x86, pushed_stack_items=1, min_stack_height=7)\n    \"\"\"\n    DUP7(v1, v2, ..., v6, v7) = v7, v1, v2, ..., v6, v7\n    ----\n\n    Description\n    ----\n    Duplicate 7th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v6: ignored value\n    - v7: value to duplicate\n\n    Outputs\n    ----\n    - v7: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v6: ignored value\n    - v7: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#86](https://www.evm.codes/#86)\n    \"\"\"\n\n    DUP8 = Opcode(0x87, pushed_stack_items=1, min_stack_height=8)\n    \"\"\"\n    DUP8(v1, v2, ..., v7, v8) = v8, v1, v2, ..., v7, v8\n    ----\n\n    Description\n    ----\n    Duplicate 8th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v7: ignored value\n    - v8: value to duplicate\n\n    Outputs\n    ----\n    - v8: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v7: ignored value\n    - v8: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#87](https://www.evm.codes/#87)\n    \"\"\"\n\n    DUP9 = Opcode(0x88, pushed_stack_items=1, min_stack_height=9)\n    \"\"\"\n    DUP9(v1, v2, ..., v8, v9) = v9, v1, v2, ..., v8, v9\n    ----\n\n    Description\n    ----\n    Duplicate 9th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v8: ignored value\n    - v9: value to duplicate\n\n    Outputs\n    ----\n    - v9: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v8: ignored value\n    - v9: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#88](https://www.evm.codes/#88)\n    \"\"\"\n    DUP10 = Opcode(0x89, pushed_stack_items=1, min_stack_height=10)\n    \"\"\"\n    DUP10(v1, v2, ..., v9, v10) = v10, v1, v2, ..., v9, v10\n    ----\n\n    Description\n    ----\n    Duplicate 10th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v9: ignored value\n    - v10: value to duplicate\n\n    Outputs\n    ----\n    - v10: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v9: ignored value\n    - v10: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#89](https://www.evm.codes/#89)\n    \"\"\"\n\n    DUP11 = Opcode(0x8A, pushed_stack_items=1, min_stack_height=11)\n    \"\"\"\n    DUP11(v1, v2, ..., v10, v11) = v11, v1, v2, ..., v10, v11\n    ----\n\n    Description\n    ----\n    Duplicate 11th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v10: ignored value\n    - v11: value to duplicate\n\n    Outputs\n    ----\n    - v11: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v10: ignored value\n    - v11: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#8A](https://www.evm.codes/#8A)\n    \"\"\"\n\n    DUP12 = Opcode(0x8B, pushed_stack_items=1, min_stack_height=12)\n    \"\"\"\n    DUP12(v1, v2, ..., v11, v12) = v12, v1, v2, ..., v11, v12\n    ----\n\n    Description\n    ----\n    Duplicate 12th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v11: ignored value\n    - v12: value to duplicate\n\n    Outputs\n    ----\n    - v12: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v11: ignored value\n    - v12: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#8B](https://www.evm.codes/#8B)\n    \"\"\"\n\n    DUP13 = Opcode(0x8C, pushed_stack_items=1, min_stack_height=13)\n    \"\"\"\n    DUP13(v1, v2, ..., v12, v13) = v13, v1, v2, ..., v12, v13\n    ----\n\n    Description\n    ----\n    Duplicate 13th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v12: ignored value\n    - v13: value to duplicate\n\n    Outputs\n    ----\n    - v13: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v12: ignored value\n    - v13: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#8C](https://www.evm.codes/#8C)\n    \"\"\"\n\n    DUP14 = Opcode(0x8D, pushed_stack_items=1, min_stack_height=14)\n    \"\"\"\n    DUP14(v1, v2, ..., v13, v14) = v14, v1, v2, ..., v13, v14\n    ----\n\n    Description\n    ----\n    Duplicate 14th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v13: ignored value\n    - v14: value to duplicate\n\n    Outputs\n    ----\n    - v14: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v13: ignored value\n    - v14: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#8D](https://www.evm.codes/#8D)\n    \"\"\"\n\n    DUP15 = Opcode(0x8E, pushed_stack_items=1, min_stack_height=15)\n    \"\"\"\n    DUP15(v1, v2, ..., v14, v15) = v15, v1, v2, ..., v14, v15\n    ----\n\n    Description\n    ----\n    Duplicate 15th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v14: ignored value\n    - v15: value to duplicate\n\n    Outputs\n    ----\n    - v15: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v14: ignored value\n    - v15: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#8E](https://www.evm.codes/#8E)\n    \"\"\"\n\n    DUP16 = Opcode(0x8F, pushed_stack_items=1, min_stack_height=16)\n    \"\"\"\n    DUP16(v1, v2, ..., v15, v16) = v16, v1, v2, ..., v15, v16\n    ----\n\n    Description\n    ----\n    Duplicate 16th stack item\n\n    Inputs\n    ----\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v15: ignored value\n    - v16: value to duplicate\n\n    Outputs\n    ----\n    - v16: duplicated value\n    - v1: ignored value\n    - v2: ignored value\n    - ...\n    - v15: ignored value\n    - v16: original value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#8F](https://www.evm.codes/#8F)\n    \"\"\"\n\n    SWAP1 = Opcode(0x90, min_stack_height=2)\n    \"\"\"\n    SWAP1(v1, v2) = v2, v1\n    ----\n\n    Description\n    ----\n    Exchange the top stack item with the second stack item.\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: value to swap\n\n    Outputs\n    ----\n    - v1: swapped value\n    - v2: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#90](https://www.evm.codes/#90)\n    \"\"\"\n\n    SWAP2 = Opcode(0x91, min_stack_height=3)\n    \"\"\"\n    SWAP2(v1, v2, v3) = v3, v2, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 3rd stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - v3: value to swap\n\n    Outputs\n    ----\n    - v3: swapped value\n    - v2: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#91](https://www.evm.codes/#91)\n    \"\"\"\n\n    SWAP3 = Opcode(0x92, min_stack_height=4)\n    \"\"\"\n    SWAP3(v1, v2, v3, v4) = v4, v2, v3, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 4th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - v3: ignored value\n    - v4: value to swap\n\n    Outputs\n    ----\n    - v4: swapped value\n    - v2: ignored value\n    - v3: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#92](https://www.evm.codes/#92)\n    \"\"\"\n\n    SWAP4 = Opcode(0x93, min_stack_height=5)\n    \"\"\"\n    SWAP4(v1, v2, ..., v4, v5) = v5, v2, ..., v4, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 5th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v4: ignored value\n    - v5: value to swap\n\n    Outputs\n    ----\n    - v5: swapped value\n    - v2: ignored value\n    - ...\n    - v4: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#93](https://www.evm.codes/#93)\n    \"\"\"\n\n    SWAP5 = Opcode(0x94, min_stack_height=6)\n    \"\"\"\n    SWAP5(v1, v2, ..., v5, v6) = v6, v2, ..., v5, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 6th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v5: ignored value\n    - v6: value to swap\n\n    Outputs\n    ----\n    - v6: swapped value\n    - v2: ignored value\n    - ...\n    - v5: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#94](https://www.evm.codes/#94)\n    \"\"\"\n\n    SWAP6 = Opcode(0x95, min_stack_height=7)\n    \"\"\"\n    SWAP6(v1, v2, ..., v6, v7) = v7, v2, ..., v6, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 7th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v6: ignored value\n    - v7: value to swap\n\n    Outputs\n    ----\n    - v7: swapped value\n    - v2: ignored value\n    - ...\n    - v6: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#95](https://www.evm.codes/#95)\n    \"\"\"\n\n    SWAP7 = Opcode(0x96, min_stack_height=8)\n    \"\"\"\n    SWAP7(v1, v2, ..., v7, v8) = v8, v2, ..., v7, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 8th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v7: ignored value\n    - v8: value to swap\n\n    Outputs\n    ----\n    - v8: swapped value\n    - v2: ignored value\n    - ...\n    - v7: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#96](https://www.evm.codes/#96)\n    \"\"\"\n\n    SWAP8 = Opcode(0x97, min_stack_height=9)\n    \"\"\"\n    SWAP8(v1, v2, ..., v8, v9) = v9, v2, ..., v8, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 9th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v8: ignored value\n    - v9: value to swap\n\n    Outputs\n    ----\n    - v9: swapped value\n    - v2: ignored value\n    - ...\n    - v8: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#97](https://www.evm.codes/#97)\n    \"\"\"\n\n    SWAP9 = Opcode(0x98, min_stack_height=10)\n    \"\"\"\n    SWAP9(v1, v2, ..., v9, v10) = v10, v2, ..., v9, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 10th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v9: ignored value\n    - v10: value to swap\n\n    Outputs\n    ----\n    - v10: swapped value\n    - v2: ignored value\n    - ...\n    - v9: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#98](https://www.evm.codes/#98)\n    \"\"\"\n\n    SWAP10 = Opcode(0x99, min_stack_height=11)\n    \"\"\"\n    SWAP10(v1, v2, ..., v10, v11) = v11, v2, ..., v10, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 11th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v10: ignored value\n    - v11: value to swap\n\n    Outputs\n    ----\n    - v11: swapped value\n    - v2: ignored value\n    - ...\n    - v10: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#99](https://www.evm.codes/#99)\n    \"\"\"\n\n    SWAP11 = Opcode(0x9A, min_stack_height=12)\n    \"\"\"\n    SWAP11(v1, v2, ..., v11, v12) = v12, v2, ..., v11, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 12th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v11: ignored value\n    - v12: value to swap\n\n    Outputs\n    ----\n    - v12: swapped value\n    - v2: ignored value\n    - ...\n    - v11: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#9A](https://www.evm.codes/#9A)\n    \"\"\"\n\n    SWAP12 = Opcode(0x9B, min_stack_height=13)\n    \"\"\"\n    SWAP12(v1, v2, ..., v12, v13) = v13, v2, ..., v12, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 13th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v12: ignored value\n    - v13: value to swap\n\n    Outputs\n    ----\n    - v13: swapped value\n    - v2: ignored value\n    - ...\n    - v12: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#9B](https://www.evm.codes/#9B)\n    \"\"\"\n\n    SWAP13 = Opcode(0x9C, min_stack_height=14)\n    \"\"\"\n    SWAP13(v1, v2, ..., v13, v14) = v14, v2, ..., v13, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 14th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v13: ignored value\n    - v14: value to swap\n\n    Outputs\n    ----\n    - v14: swapped value\n    - v2: ignored value\n    - ...\n    - v13: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#9C](https://www.evm.codes/#9C)\n    \"\"\"\n\n    SWAP14 = Opcode(0x9D, min_stack_height=15)\n    \"\"\"\n    SWAP14(v1, v2, ..., v14, v15) = v15, v2, ..., v14, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 15th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v14: ignored value\n    - v15: value to swap\n\n    Outputs\n    ----\n    - v15: swapped value\n    - v2: ignored value\n    - ...\n    - v14: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#9D](https://www.evm.codes/#9D)\n    \"\"\"\n\n    SWAP15 = Opcode(0x9E, min_stack_height=16)\n    \"\"\"\n    SWAP15(v1, v2, ..., v15, v16) = v16, v2, ..., v15, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 16th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v15: ignored value\n    - v16: value to swap\n\n    Outputs\n    ----\n    - v16: swapped value\n    - v2: ignored value\n    - ...\n    - v15: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#9E](https://www.evm.codes/#9E)\n    \"\"\"\n\n    SWAP16 = Opcode(0x9F, min_stack_height=17)\n    \"\"\"\n    SWAP16(v1, v2, ..., v16, v17) = v17, v2, ..., v16, v1\n    ----\n\n    Description\n    ----\n    Exchange 1st and 17th stack items\n\n    Inputs\n    ----\n    - v1: value to swap\n    - v2: ignored value\n    - ...\n    - v16: ignored value\n    - v17: value to swap\n\n    Outputs\n    ----\n    - v17: swapped value\n    - v2: ignored value\n    - ...\n    - v16: ignored value\n    - v1: swapped value\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    3\n\n    Source: [evm.codes/#9F](https://www.evm.codes/#9F)\n    \"\"\"\n\n    LOG0 = Opcode(0xA0, popped_stack_items=2, kwargs=[\"offset\", \"size\"])\n    \"\"\"\n    LOG0(offset, size)\n    ----\n\n    Description\n    ----\n    Append log record with no topics\n\n    Inputs\n    ----\n    - offset: byte offset in the memory in bytes\n    - size: byte size to copy\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 375\n    - dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost\n\n    Source: [evm.codes/#A0](https://www.evm.codes/#A0)\n    \"\"\"\n\n    LOG1 = Opcode(0xA1, popped_stack_items=3, kwargs=[\"offset\", \"size\", \"topic_1\"])\n    \"\"\"\n    LOG1(offset, size, topic_1)\n    ----\n\n    Description\n    ----\n    Append log record with one topic\n\n    Inputs\n    ----\n    - offset: byte offset in the memory in bytes\n    - size: byte size to copy\n    - topic_1: 32-byte value\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 375\n    - dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost\n\n    Source: [evm.codes/#A1](https://www.evm.codes/#A1)\n    \"\"\"\n\n    LOG2 = Opcode(0xA2, popped_stack_items=4, kwargs=[\"offset\", \"size\", \"topic_1\", \"topic_2\"])\n    \"\"\"\n    LOG2(offset, size, topic_1, topic_2)\n    ----\n\n    Description\n    ----\n    Append log record with two topics\n\n    Inputs\n    ----\n    - offset: byte offset in the memory in bytes\n    - size: byte size to copy\n    - topic_1: 32-byte value\n    - topic_2: 32-byte value\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 375\n    - dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost\n\n    Source: [evm.codes/#A2](https://www.evm.codes/#A2)\n    \"\"\"\n\n    LOG3 = Opcode(\n        0xA3, popped_stack_items=5, kwargs=[\"offset\", \"size\", \"topic_1\", \"topic_2\", \"topic_3\"]\n    )\n    \"\"\"\n    LOG3(offset, size, topic_1, topic_2, topic_3)\n    ----\n\n    Description\n    ----\n    Append log record with three topics\n\n    Inputs\n    ----\n    - offset: byte offset in the memory in bytes\n    - size: byte size to copy\n    - topic_1: 32-byte value\n    - topic_2: 32-byte value\n    - topic_3: 32-byte value\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 375\n    - dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost\n\n    Source: [evm.codes/#A3](https://www.evm.codes/#A3)\n    \"\"\"\n\n    LOG4 = Opcode(\n        0xA4,\n        popped_stack_items=6,\n        kwargs=[\"offset\", \"size\", \"topic_1\", \"topic_2\", \"topic_3\", \"topic_4\"],\n    )\n    \"\"\"\n    LOG4(offset, size, topic_1, topic_2, topic_3, topic_4)\n    ----\n\n    Description\n    ----\n    Append log record with four topics\n\n    Inputs\n    ----\n    - offset: byte offset in the memory in bytes\n    - size: byte size to copy\n    - topic_1: 32-byte value\n    - topic_2: 32-byte value\n    - topic_3: 32-byte value\n    - topic_4: 32-byte value\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 375\n    - dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost\n\n    Source: [evm.codes/#A4](https://www.evm.codes/#A4)\n    \"\"\"\n\n    RJUMP = Opcode(0xE0, data_portion_length=2)\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    RJUMP()\n    ----\n\n    Description\n    ----\n\n    Inputs\n    ----\n\n    Outputs\n    ----\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n\n    Source: [eips.ethereum.org/EIPS/eip-4200](https://eips.ethereum.org/EIPS/eip-4200)\n    \"\"\"\n\n    DATALOAD = Opcode(0xD0, popped_stack_items=1, kwargs=[\"offset\"])\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    DATALOAD(offset)\n    ----\n\n    Description\n    ----\n    Reads 32 bytes of data at offset onto the stack\n\n    Inputs\n    ----\n    - offset: offset within the data section to start copying\n\n    Outputs\n    ----\n    none\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n    4\n\n    Source: [eips.ethereum.org/EIPS/eip-7480](https://eips.ethereum.org/EIPS/eip-7480)\n    \"\"\"\n\n    DATALOADN = Opcode(0xD1, pushed_stack_items=1, data_portion_length=2)\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    DATALOADN()\n    ----\n\n    Description\n    ----\n    Reads 32 bytes of data at offset onto the stack\n\n    Immediates\n    ----\n    2 bytes forming a UInt16, which is the offset into the data section.\n\n    Inputs\n    ----\n    none\n\n    Outputs\n    ----\n    none\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n    3\n\n    Source: [eips.ethereum.org/EIPS/eip-7480](https://eips.ethereum.org/EIPS/eip-7480)\n    \"\"\"\n\n    DATASIZE = Opcode(0xD2, pushed_stack_items=1)\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    DATASIZE()\n    ----\n\n    Description\n    ----\n    Returns the size of the data section\n\n    Inputs\n    ----\n\n    Outputs\n    ----\n    The size of the data section. If there is no data section, returns 0.\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n    2\n\n    Source: [eips.ethereum.org/EIPS/eip-7480](https://eips.ethereum.org/EIPS/eip-7480)\n    \"\"\"\n\n    DATACOPY = Opcode(0xD3, popped_stack_items=3, kwargs=[\"dest_offset\", \"offset\", \"size\"])\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    DATACOPY(dest_offset, offset, size)\n    ----\n\n    Description\n    ----\n    Copies data from the data section into call frame memory\n\n    Inputs\n    ----\n    - dest_offset: The offset within the memory section to start copying to\n    - offset: The offset within the data section to start copying from\n    - size: The number of bytes to copy\n\n    Outputs\n    ----\n    none\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n    - minimum_word_size = (size + 31) / 32\n    - static_gas = 3\n    - dynamic_gas = 3 * minimum_word_size + memory_expansion_cost\n\n    Source: [eips.ethereum.org/EIPS/eip-7480](https://eips.ethereum.org/EIPS/eip-7480)\n    \"\"\"\n\n    RJUMPI = Opcode(0xE1, popped_stack_items=1, data_portion_length=2)\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    RJUMPI()\n    ----\n\n    Description\n    ----\n\n    Inputs\n    ----\n\n    Outputs\n    ----\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n\n    Source: [eips.ethereum.org/EIPS/eip-4200](https://eips.ethereum.org/EIPS/eip-4200)\n    \"\"\"\n\n    RJUMPV = Opcode(\n        0xE2,\n        popped_stack_items=1,\n        data_portion_formatter=_rjumpv_encoder,\n    )\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    RJUMPV()\n    ----\n\n    Description\n    ----\n    Relative jump with variable offset.\n\n    When calling this opcode to generate bytecode, the first argument is used to format the data\n    portion of the opcode, and it can be either of two types:\n    - A bytes type, and in this instance the bytes are used verbatim as the data portion.\n    - An integer iterable, list or tuple or any other iterable, where each element is a\n        jump offset.\n\n    Inputs\n    ----\n\n    Outputs\n    ----\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n\n    Source: [eips.ethereum.org/EIPS/eip-4200](https://eips.ethereum.org/EIPS/eip-4200)\n    \"\"\"\n\n    CALLF = Opcode(0xE3, data_portion_length=2, unchecked_stack=True)\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    CALLF()\n    ----\n\n    Description\n    ----\n\n    - deduct 5 gas\n    - read uint16 operand idx\n    - if 1024 < len(stack) + types[idx].max_stack_height - types[idx].inputs, execution results in\n        an exceptional halt\n    - if 1024 <= len(return_stack), execution results in an exceptional halt\n    - push new element to return_stack (current_code_idx, pc+3)\n    - update current_code_idx to idx and set pc to 0\n\n    Inputs\n    ----\n    Any: The inputs are not checked because we cannot know how many inputs the callee\n    function/section requires\n\n    Outputs\n    ----\n    Any: The outputs are variable because we cannot know how many outputs the callee\n    function/section produces\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n    5\n\n    Source:\n    [ipsilon/eof/blob/main/spec/eof.md](https://github.com/ipsilon/eof/blob/main/spec/eof.md)\n    \"\"\"\n\n    RETF = Opcode(0xE4, terminating=True)\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    RETF()\n    ----\n\n    Description\n    ----\n\n    Inputs\n    ----\n\n    Outputs\n    ----\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n    3\n    \"\"\"\n\n    JUMPF = Opcode(0xE5, data_portion_length=2, terminating=True)\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    JUMPF()\n    ----\n\n    Description\n    ----\n\n    - deduct 5 gas\n    - read uint16 operand idx\n    - if 1024 < len(stack) + types[idx].max_stack_height - types[idx].inputs, execution results in\n        an exceptional halt\n    - set current_code_idx to idx\n    - set pc = 0\n\n\n    Inputs\n    ----\n\n    Outputs\n    ----\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n    5\n\n    \"\"\"\n\n    DUPN = Opcode(\n        0xE6,\n        pushed_stack_items=1,\n        data_portion_length=1,\n        stack_properties_modifier=_dupn_stack_properties_modifier,\n    )\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    DUPN()\n    ----\n\n    Description\n    ----\n\n    - deduct 3 gas\n    - read uint8 operand imm\n    - n = imm + 1\n    - n\u2018th (1-based) stack item is duplicated at the top of the stack\n    - Stack validation: stack_height >= n\n\n\n    Inputs\n    ----\n\n    Outputs\n    ----\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n\n    \"\"\"\n\n    SWAPN = Opcode(\n        0xE7, data_portion_length=1, stack_properties_modifier=_swapn_stack_properties_modifier\n    )\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    SWAPN()\n    ----\n\n    Description\n    ----\n\n    - deduct 3 gas\n    - read uint8 operand imm\n    - n = imm + 1\n    - n + 1th stack item is swapped with the top stack item (1-based).\n    - Stack validation: stack_height >= n + 1\n\n\n    Inputs\n    ----\n\n    Outputs\n    ----\n\n    Fork\n    ----\n    EOF Fork\n\n    Gas\n    ----\n\n    \"\"\"\n\n    EXCHANGE = Opcode(\n        0xE8,\n        data_portion_formatter=_exchange_encoder,\n        stack_properties_modifier=_exchange_stack_properties_modifier,\n    )\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    EXCHANGE[x, y]\n    ----\n\n    Description\n    ----\n    Exchanges two stack positions.  Two nybbles, n is high 4 bits + 1, then  m is 4 low bits + 1.\n    Exchanges tne n+1'th item with the n + m + 1 item.\n\n    Inputs x and y when the opcode is used as `EXCHANGE[x, y]`, are equal to:\n    - x = n + 1\n    - y = n + m + 1\n    Which each equals to 1-based stack positions swapped.\n\n    Inputs\n    ----\n    n + m + 1, or ((imm >> 4) + (imm &0x0F) + 3) from the raw immediate,\n\n    Outputs\n    ----\n    n + m + 1, or ((imm >> 4) + (imm &0x0F) + 3) from the raw immediate,\n\n    Fork\n    ----\n    EOF_FORK\n\n    Gas\n    ----\n    3\n\n    \"\"\"\n\n    EOFCREATE = Opcode(\n        0xEC,\n        popped_stack_items=4,\n        pushed_stack_items=1,\n        data_portion_length=1,\n        kwargs=[\"value\", \"salt\", \"input_offset\", \"input_size\"],\n    )\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    EOFCREATE[initcontainer_index](value, salt, input_offset, input_size)\n    ----\n\n    Description\n    ----\n\n    Inputs\n    ----\n\n    Outputs\n    ----\n\n    Fork\n    ----\n\n    Gas\n    ----\n\n    \"\"\"\n\n    RETURNCONTRACT = Opcode(0xEE, popped_stack_items=2, data_portion_length=1, terminating=True)\n    \"\"\"\n    !!! Note: This opcode is under development\n\n    RETURNCONTRACT()\n    ----\n\n    Description\n    ----\n\n    Inputs\n    ----\n\n    Outputs\n    ----\n\n    Fork\n    ----\n\n    Gas\n    ----\n\n    \"\"\"\n\n    CREATE = Opcode(\n        0xF0, popped_stack_items=3, pushed_stack_items=1, kwargs=[\"value\", \"offset\", \"size\"]\n    )\n    \"\"\"\n    CREATE(value, offset, size) = address\n    ----\n\n    Description\n    ----\n    Create a new contract with the given code\n\n    Inputs\n    ----\n    - value: value in wei to send to the new account\n    - offset: byte offset in the memory in bytes, the initialization code for the new account\n    - size: byte size to copy (size of the initialization code)\n\n    Outputs\n    ----\n    - address: the address of the deployed contract, 0 if the deployment failed\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    ```\n    minimum_word_size = (size + 31) / 32\n    init_code_cost = 2 * minimum_word_size\n    code_deposit_cost = 200 * deployed_code_size\n\n    static_gas = 32000\n    dynamic_gas = init_code_cost + memory_expansion_cost + deployment_code_execution_cost\n        + code_deposit_cost\n    ```\n\n    Source: [evm.codes/#F0](https://www.evm.codes/#F0)\n    \"\"\"\n\n    CALL = Opcode(\n        0xF1,\n        popped_stack_items=7,\n        pushed_stack_items=1,\n        kwargs=[\"gas\", \"address\", \"value\", \"args_offset\", \"args_size\", \"ret_offset\", \"ret_size\"],\n        kwargs_defaults={\"gas\": GAS},\n    )\n    \"\"\"\n    CALL(gas, address, value, args_offset, args_size, ret_offset, ret_size) = success\n    ----\n\n    Description\n    ----\n    Message-call into an account\n\n    Inputs\n    ----\n    - gas: amount of gas to send to the sub context to execute. The gas that is not used by the sub\n        context is returned to this one\n    - address: the account which context to execute\n    - value: value in wei to send to the account\n    - args_offset: byte offset in the memory in bytes, the calldata of the sub context\n    - args_size: byte size to copy (size of the calldata)\n    - ret_offset: byte offset in the memory in bytes, where to store the return data of the sub\n        context\n    - ret_size: byte size to copy (size of the return data)\n\n    Outputs\n    ----\n    - success: return 0 if the sub context reverted, 1 otherwise\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    ```\n    static_gas = 0\n    dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost\n        + positive_value_cost + value_to_empty_account_cost\n    ```\n\n    Source: [evm.codes/#F1](https://www.evm.codes/#F1)\n    \"\"\"\n\n    CALLCODE = Opcode(\n        0xF2,\n        popped_stack_items=7,\n        pushed_stack_items=1,\n        kwargs=[\"gas\", \"address\", \"value\", \"args_offset\", \"args_size\", \"ret_offset\", \"ret_size\"],\n        kwargs_defaults={\"gas\": GAS},\n    )\n    \"\"\"\n    CALLCODE(gas, address, value, args_offset, args_size, ret_offset, ret_size) = success\n    ----\n\n    Description\n    ----\n    Message-call into this account with an alternative account's code. Executes code starting at\n    the address to which the call is made.\n\n    Inputs\n    ----\n    - gas: amount of gas to send to the sub context to execute. The gas that is not used by the sub\n        context is returned to this one\n    - address: the account which code to execute\n    - value: value in wei to send to the account\n    - args_offset: byte offset in the memory in bytes, the calldata of the sub context\n    - args_size: byte size to copy (size of the calldata)\n    - ret_offset: byte offset in the memory in bytes, where to store the return data of the sub\n        context\n    - ret_size: byte size to copy (size of the return data)\n\n    Outputs\n    ----\n    - success: return 0 if the sub context reverted, 1 otherwise\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    ```\n    static_gas = 0\n    dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost\n        + positive_value_cost\n    ```\n\n    Source: [evm.codes/#F2](https://www.evm.codes/#F2)\n    \"\"\"\n\n    RETURN = Opcode(0xF3, popped_stack_items=2, kwargs=[\"offset\", \"size\"], terminating=True)\n    \"\"\"\n    RETURN(offset, size)\n    ----\n\n    Description\n    ----\n    Halt execution returning output data\n\n    Inputs\n    ----\n    - offset: byte offset in the memory in bytes, to copy what will be the return data of this\n        context\n    - size: byte size to copy (size of the return data)\n\n    Outputs\n    ----\n    - None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    - static_gas = 0\n    - dynamic_gas = memory_expansion_cost\n\n    Source: [evm.codes/#F3](https://www.evm.codes/#F3)\n    \"\"\"\n\n    DELEGATECALL = Opcode(\n        0xF4,\n        popped_stack_items=6,\n        pushed_stack_items=1,\n        kwargs=[\"gas\", \"address\", \"args_offset\", \"args_size\", \"ret_offset\", \"ret_size\"],\n        kwargs_defaults={\"gas\": GAS},\n    )\n    \"\"\"\n    DELEGATECALL(gas, address, args_offset, args_size, ret_offset, ret_size) = success\n    ----\n\n    Description\n    ----\n    Message-call into this account with an alternative account's code, but persisting the current\n    values for sender and value\n\n    Inputs\n    ----\n    - gas: amount of gas to send to the sub context to execute. The gas that is not used by the sub\n        context is returned to this one\n    - address: the account which code to execute\n    - args_offset: byte offset in the memory in bytes, the calldata of the sub context\n    - args_size: byte size to copy (size of the calldata)\n    - ret_offset: byte offset in the memory in bytes, where to store the return data of the sub\n        context\n    - ret_size: byte size to copy (size of the return data)\n\n    Outputs\n    ----\n    - success: return 0 if the sub context reverted, 1 otherwise\n\n    Fork\n    ----\n    Byzantium\n\n    Gas\n    ----\n    - static_gas = 0\n    - dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost\n\n    Source: [evm.codes/#F4](https://www.evm.codes/#F4)\n    \"\"\"\n\n    CREATE2 = Opcode(\n        0xF5,\n        popped_stack_items=4,\n        pushed_stack_items=1,\n        kwargs=[\"value\", \"offset\", \"size\", \"salt\"],\n    )\n    \"\"\"\n    CREATE2(value, offset, size, salt) = address\n    ----\n\n    Description\n    ----\n    Creates a new contract\n\n    Inputs\n    ----\n    - value: value in wei to send to the new account\n    - offset: byte offset in the memory in bytes, the initialization code of the new account\n    - size: byte size to copy (size of the initialization code)\n    - salt: 32-byte value used to create the new account at a deterministic address\n\n    Outputs\n    ----\n    - address: the address of the deployed contract, 0 if the deployment failed\n\n    Fork\n    ----\n    Constantinople\n\n    Gas\n    ----\n    ```\n    minimum_word_size = (size + 31) / 32\n    init_code_cost = 2 * minimum_word_size\n    hash_cost = 6 * minimum_word_size\n    code_deposit_cost = 200 * deployed_code_size\n\n    static_gas = 32000\n    dynamic_gas = init_code_cost + hash_cost + memory_expansion_cost\n        + deployment_code_execution_cost + code_deposit_cost\n    ```\n\n    Source: [evm.codes/#F5](https://www.evm.codes/#F5)\n    \"\"\"\n\n    EXTCALL = Opcode(\n        0xF8,\n        popped_stack_items=4,\n        pushed_stack_items=1,\n        kwargs=[\"address\", \"args_offset\", \"args_size\", \"value\"],\n    )\n    \"\"\"\n    EXTCALL(address, args_offset, args_size, value) = address\n    ----\n\n    Description\n    ----\n    Message-call into an account\n\n    Inputs\n    ----\n    - address: the account which context to execute\n    - args_offset: byte offset in the memory in bytes, the calldata of the sub context\n    - args_size: byte size to copy (size of the calldata)\n    - value: value in wei to send to the account\n\n    Outputs\n    ----\n    - success:\n        - `0` if the call was successful.\n        - `1` if the call has reverted (also can be pushed earlier in a light failure scenario).\n        - `2` if the call has failed.\n\n    Fork\n    ----\n    Prague\n\n    Gas\n    ----\n    ```\n    static_gas = 0\n    dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost\n        + positive_value_cost + value_to_empty_account_cost\n    ```\n\n    Source: [EIP-7069](https://eips.ethereum.org/EIPS/eip-7069)\n    \"\"\"\n\n    EXTDELEGATECALL = Opcode(\n        0xF9,\n        popped_stack_items=3,\n        pushed_stack_items=1,\n        kwargs=[\"address\", \"args_offset\", \"args_size\"],\n    )\n    \"\"\"\n    EXTDELEGATECALL(address, args_offset, args_size) = address\n    ----\n\n    Description\n    ----\n    Message-call into this account with an alternative account's code, but persisting the current\n    values for sender and value\n\n    Inputs\n    ----\n    - address: the account which context to execute\n    - args_offset: byte offset in the memory in bytes, the calldata of the sub context\n    - args_size: byte size to copy (size of the calldata)\n\n    Outputs\n    ----\n    - success:\n        - `0` if the call was successful.\n        - `1` if the call has reverted (also can be pushed earlier in a light failure scenario).\n        - `2` if the call has failed.\n\n    Fork\n    ----\n    Prague\n\n    Gas\n    ----\n    - static_gas = 0\n    - dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost\n\n    Source: [EIP-7069](https://eips.ethereum.org/EIPS/eip-7069)\n    \"\"\"\n\n    STATICCALL = Opcode(\n        0xFA,\n        popped_stack_items=6,\n        pushed_stack_items=1,\n        kwargs=[\"gas\", \"address\", \"args_offset\", \"args_size\", \"ret_offset\", \"ret_size\"],\n        kwargs_defaults={\"gas\": GAS},\n    )\n    \"\"\"\n    STATICCALL(gas, address, args_offset, args_size, ret_offset, ret_size) = success\n    ----\n\n    Description\n    ----\n    Static message-call into an account\n\n    Inputs\n    ----\n    - gas: amount of gas to send to the sub context to execute. The gas that is not used by the sub\n        context is returned to this one\n    - address: the account which context to execute\n    - args_offset: byte offset in the memory in bytes, the calldata of the sub context\n    - args_size: byte size to copy (size of the calldata)\n    - ret_offset: byte offset in the memory in bytes, where to store the return data of the sub\n        context\n    - ret_size: byte size to copy (size of the return data)\n\n    Outputs\n    ----\n    - success: return 0 if the sub context reverted, 1 otherwise\n\n    Fork\n    ----\n    Byzantium\n\n    Gas\n    ----\n    - static_gas = 0\n    - dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost\n\n    Source: [evm.codes/#FA](https://www.evm.codes/#FA)\n    \"\"\"\n\n    EXTSTATICCALL = Opcode(\n        0xFB,\n        popped_stack_items=3,\n        pushed_stack_items=1,\n        kwargs=[\"address\", \"args_offset\", \"args_size\"],\n    )\n    \"\"\"\n    EXTSTATICCALL(address, args_offset, args_size) = address\n    ----\n\n    Description\n    ----\n    Static message-call into an account\n\n    Inputs\n    ----\n    - address: the account which context to execute\n    - args_offset: byte offset in the memory in bytes, the calldata of the sub context\n    - args_size: byte size to copy (size of the calldata)\n\n    Outputs\n    ----\n    - success:\n        - `0` if the call was successful.\n        - `1` if the call has reverted (also can be pushed earlier in a light failure scenario).\n        - `2` if the call has failed.\n\n    Fork\n    ----\n    Prague\n\n    Gas\n    ----\n    - static_gas = 0\n    - dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost\n\n    Source: [EIP-7069](https://eips.ethereum.org/EIPS/eip-7069)\n    \"\"\"\n\n    RETURNDATALOAD = Opcode(0xF7, popped_stack_items=1, pushed_stack_items=1, kwargs=[\"offset\"])\n    \"\"\"\n    RETURNDATALOAD(offset)\n    ----\n\n    Description\n    ----\n    Copy 32 bytes from returndata at offset onto the stack\n\n    Inputs\n    ----\n    - offset: byte offset in the return data from the last executed sub context to copy\n\n    Fork\n    ----\n    EOF\n\n    Gas\n    ----\n    3\n    \"\"\"\n\n    REVERT = Opcode(0xFD, popped_stack_items=2, kwargs=[\"offset\", \"size\"], terminating=True)\n    \"\"\"\n    REVERT(offset, size)\n    ----\n\n    Description\n    ----\n    Halt execution reverting state changes but returning data and remaining gas\n\n    Inputs\n    ----\n    - offset: byte offset in the memory in bytes. The return data of the calling context\n    - size: byte size to copy (size of the return data)\n\n    Fork\n    ----\n    Byzantium\n\n    Gas\n    ----\n    static_gas = 0\n    dynamic_gas = memory_expansion_cost\n\n    Source: [evm.codes/#FD](https://www.evm.codes/#FD)\n    \"\"\"\n\n    INVALID = Opcode(0xFE, terminating=True)\n    \"\"\"\n    INVALID()\n    ----\n\n    Description\n    ----\n    Designated invalid instruction\n\n    Inputs\n    ----\n    None\n\n    Outputs\n    ----\n    None\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    All the remaining gas in this context is consumed\n\n    Source: [evm.codes/#FE](https://www.evm.codes/#FE)\n    \"\"\"\n\n    SELFDESTRUCT = Opcode(0xFF, popped_stack_items=1, kwargs=[\"address\"])\n    \"\"\"\n    SELFDESTRUCT(address)\n    ----\n\n    Description\n    ----\n    Halt execution and register the account for later deletion\n\n    Inputs\n    ----\n    - address: account to send the current balance to\n\n    Fork\n    ----\n    Frontier\n\n    Gas\n    ----\n    5000\n\n    Source: [evm.codes/#FF](https://www.evm.codes/#FF)\n    \"\"\"\n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STOP","title":"STOP = Opcode(0, terminating=True) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STOP--stop","title":"STOP()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STOP--description","title":"Description","text":"

    Stop execution

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STOP--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STOP--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STOP--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STOP--gas","title":"Gas","text":"

    0

    Source: evm.codes/#00

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADD","title":"ADD = Opcode(1, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADD--adda-b-c","title":"ADD(a, b) = c","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADD--description","title":"Description","text":"

    Addition operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADD--inputs","title":"Inputs","text":"
    • a: first integer value to add
    • b: second integer value to add
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADD--outputs","title":"Outputs","text":"
    • c: integer result of the addition modulo 2**256
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADD--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADD--gas","title":"Gas","text":"

    3

    Source: evm.codes/#01

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MUL","title":"MUL = Opcode(2, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MUL--mula-b-c","title":"MUL(a, b) = c","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MUL--description","title":"Description","text":"

    Multiplication operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MUL--inputs","title":"Inputs","text":"
    • a: first integer value to multiply
    • b: second integer value to multiply
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MUL--outputs","title":"Outputs","text":"
    • c: integer result of the multiplication modulo 2**256
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MUL--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MUL--gas","title":"Gas","text":"

    5

    Source: evm.codes/#02

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SUB","title":"SUB = Opcode(3, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SUB--suba-b-c","title":"SUB(a, b) = c","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SUB--description","title":"Description","text":"

    Subtraction operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SUB--inputs","title":"Inputs","text":"
    • a: first integer value
    • b: second integer value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SUB--outputs","title":"Outputs","text":"
    • c: integer result of the subtraction modulo 2**256
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SUB--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SUB--gas","title":"Gas","text":"

    3

    Source: evm.codes/#03

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DIV","title":"DIV = Opcode(4, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DIV--diva-b-c","title":"DIV(a, b) = c","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DIV--description","title":"Description","text":"

    Division operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DIV--inputs","title":"Inputs","text":"
    • a: numerator
    • b: denominator (must be non-zero)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DIV--outputs","title":"Outputs","text":"
    • c: integer result of the division
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DIV--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DIV--gas","title":"Gas","text":"

    5

    Source: evm.codes/#04

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SDIV","title":"SDIV = Opcode(5, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SDIV--sdiva-b-c","title":"SDIV(a, b) = c","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SDIV--description","title":"Description","text":"

    Signed division operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SDIV--inputs","title":"Inputs","text":"
    • a: signed numerator
    • b: signed denominator
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SDIV--outputs","title":"Outputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SDIV---c-signed-integer-result-of-the-division-if-the-denominator-is-0-the-result-will-be-0","title":"- c: signed integer result of the division. If the denominator is 0, the result will be 0","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SDIV--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SDIV--gas","title":"Gas","text":"

    5

    Source: evm.codes/#05

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MOD","title":"MOD = Opcode(6, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MOD--moda-b-c","title":"MOD(a, b) = c","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MOD--description","title":"Description","text":"

    Modulo operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MOD--inputs","title":"Inputs","text":"
    • a: integer numerator
    • b: integer denominator
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MOD--outputs","title":"Outputs","text":"
    • a % b: integer result of the integer modulo. If the denominator is 0, the result will be 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MOD--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MOD--gas","title":"Gas","text":"

    5

    Source: evm.codes/#06

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SMOD","title":"SMOD = Opcode(7, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SMOD--smoda-b-c","title":"SMOD(a, b) = c","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SMOD--description","title":"Description","text":"

    Signed modulo remainder operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SMOD--inputs","title":"Inputs","text":"
    • a: integer numerator
    • b: integer denominator
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SMOD--outputs","title":"Outputs","text":"
    • a % b: integer result of the signed integer modulo. If the denominator is 0, the result will be 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SMOD--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SMOD--gas","title":"Gas","text":"

    5

    Source: evm.codes/#07

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDMOD","title":"ADDMOD = Opcode(8, popped_stack_items=3, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDMOD--addmoda-b-c-d","title":"ADDMOD(a, b, c) = d","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDMOD--description","title":"Description","text":"

    Modular addition operation with overflow check

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDMOD--inputs","title":"Inputs","text":"
    • a: first integer value
    • b: second integer value
    • c: integer denominator
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDMOD--outputs","title":"Outputs","text":"
    • (a + b) % N: integer result of the addition followed by a modulo. If the denominator is 0, the result will be 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDMOD--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDMOD--gas","title":"Gas","text":"

    8

    Source: evm.codes/#08

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MULMOD","title":"MULMOD = Opcode(9, popped_stack_items=3, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MULMOD--mulmoda-b-n-d","title":"MULMOD(a, b, N) = d","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MULMOD--description","title":"Description","text":"

    Modulo multiplication operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MULMOD--inputs","title":"Inputs","text":"
    • a: first integer value to multiply
    • b: second integer value to multiply
    • N: integer denominator
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MULMOD--outputs","title":"Outputs","text":"
    • (a * b) % N: integer result of the multiplication followed by a modulo. If the denominator is 0, the result will be 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MULMOD--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MULMOD--gas","title":"Gas","text":"

    8

    Source: evm.codes/#09

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXP","title":"EXP = Opcode(10, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXP--expa-exponent-a-exponent","title":"EXP(a, exponent) = a ** exponent","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXP--description","title":"Description","text":"

    Exponential operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXP--inputs","title":"Inputs","text":"
    • a: integer base
    • exponent: integer exponent
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXP--outputs","title":"Outputs","text":"
    • a ** exponent: integer result of the exponential operation modulo 2**256
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXP--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXP--gas","title":"Gas","text":"
    • static_gas = 10
    • dynamic_gas = 50 * exponent_byte_size

    Source: evm.codes/#0A

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SIGNEXTEND","title":"SIGNEXTEND = Opcode(11, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SIGNEXTEND--signextendb-x-y","title":"SIGNEXTEND(b, x) = y","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SIGNEXTEND--description","title":"Description","text":"

    Sign extension operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SIGNEXTEND--inputs","title":"Inputs","text":"
    • b: size in byte - 1 of the integer to sign extend
    • x: integer value to sign extend
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SIGNEXTEND--outputs","title":"Outputs","text":"
    • y: integer result of the sign extend
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SIGNEXTEND--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SIGNEXTEND--gas","title":"Gas","text":"

    5

    Source: evm.codes/#0B

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LT","title":"LT = Opcode(16, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LT--lta-b-a-b","title":"LT(a, b) = a < b","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LT--description","title":"Description","text":"

    Less-than comparison

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LT--inputs","title":"Inputs","text":"
    • a: left side integer value
    • b: right side integer value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LT--outputs","title":"Outputs","text":"
    • a < b: 1 if the left side is smaller, 0 otherwise
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LT--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LT--gas","title":"Gas","text":"

    3

    Source: evm.codes/#10

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GT","title":"GT = Opcode(17, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GT--gta-b-a-b","title":"GT(a, b) = a > b","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GT--description","title":"Description","text":"

    Greater-than comparison

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GT--inputs","title":"Inputs","text":"
    • a: left side integer
    • b: right side integer
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GT--outputs","title":"Outputs","text":"
    • a > b: 1 if the left side is bigger, 0 otherwise
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GT--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GT--gas","title":"Gas","text":"

    3

    Source: evm.codes/#11

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLT","title":"SLT = Opcode(18, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLT--slta-b-a-b","title":"SLT(a, b) = a < b","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLT--description","title":"Description","text":"

    Signed less-than comparison

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLT--inputs","title":"Inputs","text":"
    • a: left side signed integer
    • b: right side signed integer
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLT--outputs","title":"Outputs","text":"
    • a < b: 1 if the left side is smaller, 0 otherwise
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLT--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLT--gas","title":"Gas","text":"

    3

    Source: evm.codes/#12

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SGT","title":"SGT = Opcode(19, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SGT--sgta-b-a-b","title":"SGT(a, b) = a > b","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SGT--description","title":"Description","text":"

    Signed greater-than comparison

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SGT--inputs","title":"Inputs","text":"
    • a: left side signed integer
    • b: right side signed integer
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SGT--outputs","title":"Outputs","text":"
    • a > b: 1 if the left side is bigger, 0 otherwise
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SGT--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SGT--gas","title":"Gas","text":"

    3

    Source: evm.codes/#13

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EQ","title":"EQ = Opcode(20, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EQ--eqa-b-a-b","title":"EQ(a, b) = a == b","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EQ--description","title":"Description","text":"

    Equality comparison

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EQ--inputs","title":"Inputs","text":"
    • a: left side integer
    • b: right side integer
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EQ--outputs","title":"Outputs","text":"
    • a == b: 1 if the left side is equal to the right side, 0 otherwise
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EQ--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EQ--gas","title":"Gas","text":"

    3

    Source: evm.codes/#14

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ISZERO","title":"ISZERO = Opcode(21, popped_stack_items=1, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ISZERO--iszeroa-a-0","title":"ISZERO(a) = a == 0","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ISZERO--description","title":"Description","text":"

    Is-zero comparison

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ISZERO--inputs","title":"Inputs","text":"
    • a: integer
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ISZERO--outputs","title":"Outputs","text":"
    • a == 0: 1 if a is 0, 0 otherwise
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ISZERO--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ISZERO--gas","title":"Gas","text":"

    3

    Source: evm.codes/#15

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.AND","title":"AND = Opcode(22, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.AND--anda-b-a-b","title":"AND(a, b) = a & b","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.AND--description","title":"Description","text":"

    Bitwise AND operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.AND--inputs","title":"Inputs","text":"
    • a: first binary value
    • b: second binary value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.AND--outputs","title":"Outputs","text":"
    • a & b: the bitwise AND result
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.AND--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.AND--gas","title":"Gas","text":"

    3

    Source: evm.codes/#16

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.OR","title":"OR = Opcode(23, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.OR--ora-b-a-b","title":"OR(a, b) = a | b","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.OR--description","title":"Description","text":"

    Bitwise OR operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.OR--inputs","title":"Inputs","text":"
    • a: first binary value
    • b: second binary value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.OR--outputs","title":"Outputs","text":"
    • a | b: the bitwise OR result
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.OR--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.OR--gas","title":"Gas","text":"

    3

    Source: evm.codes/#17

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.XOR","title":"XOR = Opcode(24, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.XOR--xora-b-a-b","title":"XOR(a, b) = a ^ b","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.XOR--description","title":"Description","text":"

    Bitwise XOR operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.XOR--inputs","title":"Inputs","text":"
    • a: first binary value
    • b: second binary value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.XOR--outputs","title":"Outputs","text":"
    • a ^ b: the bitwise XOR result
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.XOR--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.XOR--gas","title":"Gas","text":"

    3

    Source: evm.codes/#18

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOT","title":"NOT = Opcode(25, popped_stack_items=1, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOT--nota-a","title":"NOT(a) = ~a","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOT--description","title":"Description","text":"

    Bitwise NOT operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOT--inputs","title":"Inputs","text":"
    • a: binary value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOT--outputs","title":"Outputs","text":"
    • ~a: the bitwise NOT result
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOT--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOT--gas","title":"Gas","text":"

    3

    Source: evm.codes/#19

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BYTE","title":"BYTE = Opcode(26, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BYTE--bytei-x-y","title":"BYTE(i, x) = y","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BYTE--description","title":"Description","text":"

    Extract a byte from the given position in the value

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BYTE--inputs","title":"Inputs","text":"
    • i: byte offset starting from the most significant byte
    • x: 32-byte value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BYTE--outputs","title":"Outputs","text":"
    • y: the indicated byte at the least significant position. If the byte offset is out of range, the result is 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BYTE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BYTE--gas","title":"Gas","text":"

    3

    Source: evm.codes/#1A

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHL","title":"SHL = Opcode(27, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHL--shlshift-value-value-shift","title":"SHL(shift, value) = value << shift","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHL--description","title":"Description","text":"

    Shift left operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHL--inputs","title":"Inputs","text":"
    • shift: number of bits to shift to the left
    • value: 32 bytes to shift
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHL--outputs","title":"Outputs","text":"
    • value << shift: the shifted value. If shift is bigger than 255, returns 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHL--fork","title":"Fork","text":"

    Constantinople

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHL--gas","title":"Gas","text":"

    3

    Source: evm.codes/#1B

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHR","title":"SHR = Opcode(28, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHR--shrshift-value-value-shift","title":"SHR(shift, value) = value >> shift","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHR--description","title":"Description","text":"

    Logical shift right operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHR--inputs","title":"Inputs","text":"
    • shift: number of bits to shift to the right.
    • value: 32 bytes to shift
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHR--outputs","title":"Outputs","text":"
    • value >> shift: the shifted value. If shift is bigger than 255, returns 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHR--fork","title":"Fork","text":"

    Constantinople

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHR--gas","title":"Gas","text":"

    3

    Source: evm.codes/#1C

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SAR","title":"SAR = Opcode(29, popped_stack_items=2, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SAR--sarshift-value-value-shift","title":"SAR(shift, value) = value >> shift","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SAR--description","title":"Description","text":"

    Arithmetic shift right operation

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SAR--inputs","title":"Inputs","text":"
    • shift: number of bits to shift to the right
    • value: integer to shift
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SAR--outputs","title":"Outputs","text":"
    • value >> shift: the shifted value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SAR--fork","title":"Fork","text":"

    Constantinople

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SAR--gas","title":"Gas","text":"

    3

    Source: evm.codes/#1D

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHA3","title":"SHA3 = Opcode(32, popped_stack_items=2, pushed_stack_items=1, kwargs=['offset', 'size']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHA3--sha3offset-size-hash","title":"SHA3(offset, size) = hash","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHA3--description","title":"Description","text":"

    Compute Keccak-256 hash

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHA3--inputs","title":"Inputs","text":"
    • offset: byte offset in the memory
    • size: byte size to read in the memory
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHA3--outputs","title":"Outputs","text":"
    • hash: Keccak-256 hash of the given data in memory
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHA3--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHA3--gas","title":"Gas","text":"
    • minimum_word_size = (size + 31) / 32
    • static_gas = 30
    • dynamic_gas = 6 * minimum_word_size + memory_expansion_cost

    Source: evm.codes/#20

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDRESS","title":"ADDRESS = Opcode(48, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDRESS--address-address","title":"ADDRESS() = address","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDRESS--description","title":"Description","text":"

    Get address of currently executing account

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDRESS--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDRESS--outputs","title":"Outputs","text":"
    • address: the 20-byte address of the current account
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDRESS--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ADDRESS--gas","title":"Gas","text":"

    2

    Source: evm.codes/#30

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BALANCE","title":"BALANCE = Opcode(49, popped_stack_items=1, pushed_stack_items=1, kwargs=['address']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BALANCE--balanceaddress-balance","title":"BALANCE(address) = balance","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BALANCE--description","title":"Description","text":"

    Get the balance of the specified account

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BALANCE--inputs","title":"Inputs","text":"
    • address: 20-byte address of the account to check
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BALANCE--outputs","title":"Outputs","text":"
    • balance: balance of the given account in wei. Returns 0 if the account doesn't exist
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BALANCE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BALANCE--gas","title":"Gas","text":"
    • static_gas = 0
    • dynamic_gas = 100 if warm_address, 2600 if cold_address

    Source: evm.codes/#31

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ORIGIN","title":"ORIGIN = Opcode(50, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ORIGIN--origin-address","title":"ORIGIN() = address","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ORIGIN--description","title":"Description","text":"

    Get execution origination address

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ORIGIN--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ORIGIN--outputs","title":"Outputs","text":"
    • address: the 20-byte address of the sender of the transaction. It can only be an account without code
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ORIGIN--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.ORIGIN--gas","title":"Gas","text":"

    2

    Source: evm.codes/#32

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLER","title":"CALLER = Opcode(51, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLER--caller-address","title":"CALLER() = address","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLER--description","title":"Description","text":"

    Get caller address

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLER--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLER--outputs","title":"Outputs","text":"
    • address: the 20-byte address of the caller account. This is the account that did the last call (except delegate call)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLER--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLER--gas","title":"Gas","text":"

    2

    Source: evm.codes/#33

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLVALUE","title":"CALLVALUE = Opcode(52, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLVALUE--callvalue-value","title":"CALLVALUE() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLVALUE--description","title":"Description","text":"

    Get deposited value by the instruction/transaction responsible for this execution

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLVALUE--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLVALUE--outputs","title":"Outputs","text":"
    • value: the value of the current call in wei
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLVALUE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLVALUE--gas","title":"Gas","text":"

    2

    Source: evm.codes/#34

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATALOAD","title":"CALLDATALOAD = Opcode(53, popped_stack_items=1, pushed_stack_items=1, kwargs=['offset']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATALOAD--calldataloadoffset-dataoffset","title":"CALLDATALOAD(offset) = data[offset]","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATALOAD--description","title":"Description","text":"

    Get input data of current environment

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATALOAD--inputs","title":"Inputs","text":"
    • offset: byte offset in the calldata
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATALOAD--outputs","title":"Outputs","text":"
    • data[offset]: 32-byte value starting from the given offset of the calldata. All bytes after the end of the calldata are set to 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATALOAD--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATALOAD--gas","title":"Gas","text":"

    3

    Source: evm.codes/#35

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATASIZE","title":"CALLDATASIZE = Opcode(54, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATASIZE--calldatasize-size","title":"CALLDATASIZE() = size","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATASIZE--description","title":"Description","text":"

    Get size of input data in current environment

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATASIZE--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATASIZE--outputs","title":"Outputs","text":"
    • size: byte size of the calldata
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATASIZE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATASIZE--gas","title":"Gas","text":"

    2

    Source: evm.codes/#36

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATACOPY","title":"CALLDATACOPY = Opcode(55, popped_stack_items=3, kwargs=['dest_offset', 'offset', 'size']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATACOPY--calldatacopydest_offset-offset-size","title":"CALLDATACOPY(dest_offset, offset, size)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATACOPY--description","title":"Description","text":"

    Copy input data in current environment to memory

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATACOPY--inputs","title":"Inputs","text":"
    • dest_offset: byte offset in the memory where the result will be copied
    • offset: byte offset in the calldata to copy
    • size: byte size to copy
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATACOPY--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATACOPY--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATACOPY--gas","title":"Gas","text":"
    • minimum_word_size = (size + 31) / 32
    • static_gas = 3
    • dynamic_gas = 3 * minimum_word_size + memory_expansion_cost

    Source: evm.codes/#37

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODESIZE","title":"CODESIZE = Opcode(56, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODESIZE--codesize-size","title":"CODESIZE() = size","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODESIZE--description","title":"Description","text":"

    Get size of code running in current environment

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODESIZE--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODESIZE--outputs","title":"Outputs","text":"
    • size: byte size of the code
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODESIZE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODESIZE--gas","title":"Gas","text":"

    2

    Source: evm.codes/#38

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODECOPY","title":"CODECOPY = Opcode(57, popped_stack_items=3, kwargs=['dest_offset', 'offset', 'size']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODECOPY--codecopydest_offset-offset-size","title":"CODECOPY(dest_offset, offset, size)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODECOPY--description","title":"Description","text":"

    Copy code running in current environment to memory

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODECOPY--inputs","title":"Inputs","text":"
    • dest_offset: byte offset in the memory where the result will be copied.
    • offset: byte offset in the code to copy.
    • size: byte size to copy
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODECOPY--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODECOPY--gas","title":"Gas","text":"
    • minimum_word_size = (size + 31) / 32
    • static_gas = 3
    • dynamic_gas = 3 * minimum_word_size + memory_expansion_cost

    Source: evm.codes/#39

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASPRICE","title":"GASPRICE = Opcode(58, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASPRICE--gasprice-price","title":"GASPRICE() = price","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASPRICE--description","title":"Description","text":"

    Get price of gas in current environment

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASPRICE--outputs","title":"Outputs","text":"
    • price: gas price in wei per gas
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASPRICE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASPRICE--gas","title":"Gas","text":"

    2

    Source: evm.codes/#3A

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODESIZE","title":"EXTCODESIZE = Opcode(59, popped_stack_items=1, pushed_stack_items=1, kwargs=['address']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODESIZE--extcodesizeaddress-size","title":"EXTCODESIZE(address) = size","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODESIZE--description","title":"Description","text":"

    Get size of an account's code

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODESIZE--inputs","title":"Inputs","text":"
    • address: 20-byte address of the contract to query
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODESIZE--outputs","title":"Outputs","text":"
    • size: byte size of the code
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODESIZE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODESIZE--gas","title":"Gas","text":"
    • static_gas = 0
    • dynamic_gas = 100 if warm_address, 2600 if cold_address

    Source: evm.codes/#3B

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODECOPY","title":"EXTCODECOPY = Opcode(60, popped_stack_items=4, kwargs=['address', 'dest_offset', 'offset', 'size']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODECOPY--extcodecopyaddress-dest_offset-offset-size","title":"EXTCODECOPY(address, dest_offset, offset, size)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODECOPY--description","title":"Description","text":"

    Copy an account's code to memory

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODECOPY--inputs","title":"Inputs","text":"
    • address: 20-byte address of the contract to query
    • dest_offset: byte offset in the memory where the result will be copied
    • offset: byte offset in the code to copy
    • size: byte size to copy
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODECOPY--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODECOPY--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODECOPY--gas","title":"Gas","text":"
    • minimum_word_size = (size + 31) / 32
    • static_gas = 0
    • dynamic_gas = 3 * minimum_word_size + memory_expansion_cost + address_access_cost

    Source: evm.codes/#3C

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATASIZE","title":"RETURNDATASIZE = Opcode(61, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATASIZE--returndatasize-size","title":"RETURNDATASIZE() = size","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATASIZE--description","title":"Description","text":"

    Get size of output data from the previous call from the current environment

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATASIZE--outputs","title":"Outputs","text":"
    • size: byte size of the return data from the last executed sub context
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATASIZE--fork","title":"Fork","text":"

    Byzantium

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATASIZE--gas","title":"Gas","text":"

    2

    Source: evm.codes/#3D

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATACOPY","title":"RETURNDATACOPY = Opcode(62, popped_stack_items=3, kwargs=['dest_offset', 'offset', 'size']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATACOPY--returndatacopydest_offset-offset-size","title":"RETURNDATACOPY(dest_offset, offset, size)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATACOPY--description","title":"Description","text":"

    Copy output data from the previous call to memory

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATACOPY--inputs","title":"Inputs","text":"
    • dest_offset: byte offset in the memory where the result will be copied
    • offset: byte offset in the return data from the last executed sub context to copy
    • size: byte size to copy
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATACOPY--fork","title":"Fork","text":"

    Byzantium

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATACOPY--gas","title":"Gas","text":"
    • minimum_word_size = (size + 31) / 32
    • static_gas = 3
    • dynamic_gas = 3 * minimum_word_size + memory_expansion_cost

    Source: evm.codes/#3E

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODEHASH","title":"EXTCODEHASH = Opcode(63, popped_stack_items=1, pushed_stack_items=1, kwargs=['address']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODEHASH--extcodehashaddress-hash","title":"EXTCODEHASH(address) = hash","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODEHASH--description","title":"Description","text":"

    Get hash of an account's code

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODEHASH--inputs","title":"Inputs","text":"
    • address: 20-byte address of the account
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODEHASH--outputs","title":"Outputs","text":"
    • hash: hash of the chosen account's code, the empty hash (0xc5d24601...) if the account has no code, or 0 if the account does not exist or has been destroyed
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODEHASH--fork","title":"Fork","text":"

    Constantinople

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODEHASH--gas","title":"Gas","text":"
    • static_gas = 0
    • dynamic_gas = 100 if warm_address, 2600 if cold_address

    Source: evm.codes/#3F

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOCKHASH","title":"BLOCKHASH = Opcode(64, popped_stack_items=1, pushed_stack_items=1, kwargs=['block_number']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOCKHASH--blockhashblock_number-hash","title":"BLOCKHASH(block_number) = hash","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOCKHASH--description","title":"Description","text":"

    Get the hash of one of the 256 most recent complete blocks

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOCKHASH--inputs","title":"Inputs","text":"
    • blockNumber: block number to get the hash from. Valid range is the last 256 blocks (not including the current one). Current block number can be queried with NUMBER
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOCKHASH--outputs","title":"Outputs","text":"
    • hash: hash of the chosen block, or 0 if the block number is not in the valid range
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOCKHASH--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOCKHASH--gas","title":"Gas","text":"

    20

    Source: evm.codes/#40

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.COINBASE","title":"COINBASE = Opcode(65, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.COINBASE--coinbase-address","title":"COINBASE() = address","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.COINBASE--description","title":"Description","text":"

    Get the block's beneficiary address

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.COINBASE--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.COINBASE--outputs","title":"Outputs","text":"
    • address: miner's 20-byte address
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.COINBASE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.COINBASE--gas","title":"Gas","text":"

    2

    Source: evm.codes/#41

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TIMESTAMP","title":"TIMESTAMP = Opcode(66, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TIMESTAMP--timestamp-timestamp","title":"TIMESTAMP() = timestamp","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TIMESTAMP--description","title":"Description","text":"

    Get the block's timestamp

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TIMESTAMP--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TIMESTAMP--outputs","title":"Outputs","text":"
    • timestamp: unix timestamp of the current block
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TIMESTAMP--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TIMESTAMP--gas","title":"Gas","text":"

    2

    Source: evm.codes/#42

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NUMBER","title":"NUMBER = Opcode(67, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NUMBER--number-blocknumber","title":"NUMBER() = blockNumber","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NUMBER--description","title":"Description","text":"

    Get the block's number

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NUMBER--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NUMBER--outputs","title":"Outputs","text":"
    • blockNumber: current block number
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NUMBER--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NUMBER--gas","title":"Gas","text":"

    2

    Source: evm.codes/#43

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PREVRANDAO","title":"PREVRANDAO = Opcode(68, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PREVRANDAO--prevrandao-prevrandao","title":"PREVRANDAO() = prevRandao","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PREVRANDAO--description","title":"Description","text":"

    Get the previous block's RANDAO mix

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PREVRANDAO--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PREVRANDAO--outputs","title":"Outputs","text":"
    • prevRandao: previous block's RANDAO mix
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PREVRANDAO--fork","title":"Fork","text":"

    Merge

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PREVRANDAO--gas","title":"Gas","text":"

    2

    Source: evm.codes/#44

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASLIMIT","title":"GASLIMIT = Opcode(69, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASLIMIT--gaslimit-gaslimit","title":"GASLIMIT() = gasLimit","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASLIMIT--description","title":"Description","text":"

    Get the block's gas limit

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASLIMIT--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASLIMIT--outputs","title":"Outputs","text":"
    • gasLimit: gas limit
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASLIMIT--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GASLIMIT--gas","title":"Gas","text":"

    2

    Source: evm.codes/#45

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CHAINID","title":"CHAINID = Opcode(70, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CHAINID--chainid-chainid","title":"CHAINID() = chainId","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CHAINID--description","title":"Description","text":"

    Get the chain ID

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CHAINID--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CHAINID--outputs","title":"Outputs","text":"
    • chainId: chain id of the network
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CHAINID--fork","title":"Fork","text":"

    Istanbul

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CHAINID--gas","title":"Gas","text":"

    2

    Source: evm.codes/#46

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFBALANCE","title":"SELFBALANCE = Opcode(71, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFBALANCE--selfbalance-balance","title":"SELFBALANCE() = balance","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFBALANCE--description","title":"Description","text":"

    Get balance of currently executing account

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFBALANCE--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFBALANCE--outputs","title":"Outputs","text":"
    • balance: balance of the current account in wei
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFBALANCE--fork","title":"Fork","text":"

    Istanbul

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFBALANCE--gas","title":"Gas","text":"

    5

    Source: evm.codes/#47

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BASEFEE","title":"BASEFEE = Opcode(72, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BASEFEE--basefee-basefee","title":"BASEFEE() = baseFee","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BASEFEE--description","title":"Description","text":"

    Get the base fee

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BASEFEE--outputs","title":"Outputs","text":"
    • baseFee: base fee in wei
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BASEFEE--fork","title":"Fork","text":"

    London

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BASEFEE--gas","title":"Gas","text":"

    2

    Source: evm.codes/#48

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBHASH","title":"BLOBHASH = Opcode(73, popped_stack_items=1, pushed_stack_items=1, kwargs=['index']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBHASH--blobhashindex-versionedhash","title":"BLOBHASH(index) = versionedHash","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBHASH--description","title":"Description","text":"

    Returns the versioned hash of a single blob contained in the type-3 transaction

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBHASH--inputs","title":"Inputs","text":"
    • index: index of the blob
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBHASH--outputs","title":"Outputs","text":"
    • versionedHash: versioned hash of the blob
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBHASH--fork","title":"Fork","text":"

    Cancun

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBHASH--gas","title":"Gas","text":"

    3

    Source: eips.ethereum.org/EIPS/eip-4844

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBBASEFEE","title":"BLOBBASEFEE = Opcode(74, popped_stack_items=0, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBBASEFEE--blobbasefee-fee","title":"BLOBBASEFEE() = fee","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBBASEFEE--description","title":"Description","text":"

    Returns the value of the blob base fee of the block it is executing in

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBBASEFEE--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBBASEFEE--outputs","title":"Outputs","text":"
    • baseFeePerBlobGas: base fee for the blob gas in wei
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBBASEFEE--fork","title":"Fork","text":"

    Cancun

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BLOBBASEFEE--gas","title":"Gas","text":"

    2

    Source: eips.ethereum.org/EIPS/eip-7516

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.POP","title":"POP = Opcode(80, popped_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.POP--pop","title":"POP()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.POP--description","title":"Description","text":"

    Remove item from stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.POP--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.POP--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.POP--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.POP--gas","title":"Gas","text":"

    2

    Source: evm.codes/#50

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MLOAD","title":"MLOAD = Opcode(81, popped_stack_items=1, pushed_stack_items=1, kwargs=['offset']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MLOAD--mloadoffset-value","title":"MLOAD(offset) = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MLOAD--description","title":"Description","text":"

    Load word from memory

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MLOAD--inputs","title":"Inputs","text":"
    • offset: offset in the memory in bytes
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MLOAD--outputs","title":"Outputs","text":"
    • value: the 32 bytes in memory starting at that offset. If it goes beyond its current size (see MSIZE), writes 0s
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MLOAD--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MLOAD--gas","title":"Gas","text":"
    • static_gas = 3
    • dynamic_gas = memory_expansion_cost

    Source: evm.codes/#51

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE","title":"MSTORE = Opcode(82, popped_stack_items=2, kwargs=['offset', 'value']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE--mstoreoffset-value","title":"MSTORE(offset, value)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE--description","title":"Description","text":"

    Save word to memory

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE--inputs","title":"Inputs","text":"
    • offset: offset in the memory in bytes
    • value: 32-byte value to write in the memory
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE--gas","title":"Gas","text":"
    • static_gas = 3
    • dynamic_gas = memory_expansion_cost

    Source: evm.codes/#52

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE8","title":"MSTORE8 = Opcode(83, popped_stack_items=2, kwargs=['offset', 'value']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE8--mstore8offset-value","title":"MSTORE8(offset, value)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE8--description","title":"Description","text":"

    Save byte to memory

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE8--inputs","title":"Inputs","text":"
    • offset: offset in the memory in bytes
    • value: 1-byte value to write in the memory (the least significant byte of the 32-byte stack value)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE8--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE8--gas","title":"Gas","text":"
    • static_gas = 3
    • dynamic_gas = memory_expansion_cost

    Source: evm.codes/#53

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLOAD","title":"SLOAD = Opcode(84, popped_stack_items=1, pushed_stack_items=1, kwargs=['key']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLOAD--sloadkey-value","title":"SLOAD(key) = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLOAD--description","title":"Description","text":"

    Load word from storage

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLOAD--inputs","title":"Inputs","text":"
    • key: 32-byte key in storage
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLOAD--outputs","title":"Outputs","text":"
    • value: 32-byte value corresponding to that key. 0 if that key was never written before
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLOAD--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLOAD--gas","title":"Gas","text":"
    • static_gas = 0
    • dynamic_gas = 100 if warm_address, 2600 if cold_address

    Source: evm.codes/#54

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SSTORE","title":"SSTORE = Opcode(85, popped_stack_items=2, kwargs=['key', 'value']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SSTORE--sstorekey-value","title":"SSTORE(key, value)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SSTORE--description","title":"Description","text":"

    Save word to storage

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SSTORE--inputs","title":"Inputs","text":"
    • key: 32-byte key in storage
    • value: 32-byte value to store
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SSTORE--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SSTORE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SSTORE--gas","title":"Gas","text":"
    static_gas = 0\n\nif value == current_value\n    if key is warm\n        base_dynamic_gas = 100\n    else\n        base_dynamic_gas = 100\nelse if current_value == original_value\n    if original_value == 0\n        base_dynamic_gas = 20000\n    else\n        base_dynamic_gas = 2900\nelse\n    base_dynamic_gas = 100\n\nif key is cold:\n    base_dynamic_gas += 2100\n

    Source: evm.codes/#55

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMP","title":"JUMP = Opcode(86, popped_stack_items=1, kwargs=['pc']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMP--jumppc","title":"JUMP(pc)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMP--description","title":"Description","text":"

    Alter the program counter

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMP--inputs","title":"Inputs","text":"
    • pc: byte offset in the deployed code where execution will continue from. Must be a JUMPDEST instruction
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMP--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMP--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMP--gas","title":"Gas","text":"

    8

    Source: evm.codes/#56

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPI","title":"JUMPI = Opcode(87, popped_stack_items=2, kwargs=['pc', 'condition']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPI--jumpipc-condition","title":"JUMPI(pc, condition)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPI--description","title":"Description","text":"

    Conditionally alter the program counter

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPI--inputs","title":"Inputs","text":"
    • pc: byte offset in the deployed code where execution will continue from. Must be a JUMPDEST instruction
    • condition: the program counter will be altered with the new value only if this value is different from 0. Otherwise, the program counter is simply incremented and the next instruction will be executed
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPI--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPI--gas","title":"Gas","text":"

    10

    Source: evm.codes/#57

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PC","title":"PC = Opcode(88, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PC--pc-counter","title":"PC() = counter","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PC--description","title":"Description","text":"

    Get the value of the program counter prior to the increment corresponding to this instruction

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PC--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PC--outputs","title":"Outputs","text":"
    • counter: PC of this instruction in the current program.
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PC--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PC--gas","title":"Gas","text":"

    2

    Source: evm.codes/#58

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSIZE","title":"MSIZE = Opcode(89, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSIZE--msize-size","title":"MSIZE() = size","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSIZE--description","title":"Description","text":"

    Get the size of active memory in bytes

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSIZE--outputs","title":"Outputs","text":"
    • size: current memory size in bytes (higher offset accessed until now + 1)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSIZE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSIZE--gas","title":"Gas","text":"

    2

    Source: evm.codes/#59

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GAS","title":"GAS = Opcode(90, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GAS--gas-gas_remaining","title":"GAS() = gas_remaining","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GAS--description","title":"Description","text":"

    Get the amount of available gas, including the corresponding reduction for the cost of this instruction

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GAS--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GAS--outputs","title":"Outputs","text":"
    • gas: remaining gas (after this instruction)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GAS--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.GAS--gas","title":"Gas","text":"

    2

    Source: evm.codes/#5A

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPDEST","title":"JUMPDEST = Opcode(91) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPDEST--jumpdest","title":"JUMPDEST()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPDEST--description","title":"Description","text":"

    Mark a valid destination for jumps

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPDEST--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPDEST--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPDEST--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPDEST--gas","title":"Gas","text":"

    1

    Source: evm.codes/#5B

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOOP","title":"NOOP = Opcode(91) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOOP--noop","title":"NOOP()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOOP--description","title":"Description","text":"

    Synonym for JUMPDEST. Performs no operation.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOOP--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOOP--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOOP--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.NOOP--gas","title":"Gas","text":"

    1

    Source: evm.codes/#5B

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TLOAD","title":"TLOAD = Opcode(92, popped_stack_items=1, pushed_stack_items=1, kwargs=['key']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TLOAD--tloadkey-value","title":"TLOAD(key) = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TLOAD--description","title":"Description","text":"

    Load word from transient storage

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TLOAD--inputs","title":"Inputs","text":"
    • key: 32-byte key in transient storage
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TLOAD--outputs","title":"Outputs","text":"
    • value: 32-byte value corresponding to that key. 0 if that key was never written
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TLOAD--fork","title":"Fork","text":"

    Cancun

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TLOAD--gas","title":"Gas","text":"

    100

    Source: eips.ethereum.org/EIPS/eip-1153

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TSTORE","title":"TSTORE = Opcode(93, popped_stack_items=2, kwargs=['key', 'value']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TSTORE--tstorekey-value","title":"TSTORE(key, value)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TSTORE--description","title":"Description","text":"

    Save word to transient storage

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TSTORE--inputs","title":"Inputs","text":"
    • key: 32-byte key in transient storage
    • value: 32-byte value to store
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TSTORE--fork","title":"Fork","text":"

    Cancun

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.TSTORE--gas","title":"Gas","text":"

    100

    Source: eips.ethereum.org/EIPS/eip-1153

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MCOPY","title":"MCOPY = Opcode(94, popped_stack_items=3, kwargs=['dest_offset', 'offset', 'size']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MCOPY--mcopydest_offset-offset-size","title":"MCOPY(dest_offset, offset, size)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MCOPY--description","title":"Description","text":"

    Copies areas in memory

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MCOPY--inputs","title":"Inputs","text":"
    • dest_offset: byte offset in the memory where the result will be copied
    • offset: byte offset in the calldata to copy
    • size: byte size to copy
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MCOPY--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MCOPY--fork","title":"Fork","text":"

    Cancun

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MCOPY--gas","title":"Gas","text":"
    • minimum_word_size = (size + 31) / 32
    • static_gas = 3
    • dynamic_gas = 3 * minimum_word_size + memory_expansion_cost

    Source: eips.ethereum.org/EIPS/eip-5656

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH0","title":"PUSH0 = Opcode(95, pushed_stack_items=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH0--push0-value","title":"PUSH0() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH0--description","title":"Description","text":"

    Place value 0 on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH0--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH0--outputs","title":"Outputs","text":"
    • value: pushed value, equal to 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH0--fork","title":"Fork","text":"

    Shanghai

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH0--gas","title":"Gas","text":"

    2

    Source: evm.codes/#5F

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH1","title":"PUSH1 = Opcode(96, pushed_stack_items=1, data_portion_length=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH1--push1-value","title":"PUSH1() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH1--description","title":"Description","text":"

    Place 1 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH1--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH1--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH1--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH1--gas","title":"Gas","text":"

    3

    Source: evm.codes/#60

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH2","title":"PUSH2 = Opcode(97, pushed_stack_items=1, data_portion_length=2) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH2--push2-value","title":"PUSH2() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH2--description","title":"Description","text":"

    Place 2 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH2--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH2--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH2--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH2--gas","title":"Gas","text":"

    3

    Source: evm.codes/#61

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH3","title":"PUSH3 = Opcode(98, pushed_stack_items=1, data_portion_length=3) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH3--push3-value","title":"PUSH3() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH3--description","title":"Description","text":"

    Place 3 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH3--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH3--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH3--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH3--gas","title":"Gas","text":"

    3

    Source: evm.codes/#62

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH4","title":"PUSH4 = Opcode(99, pushed_stack_items=1, data_portion_length=4) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH4--push4-value","title":"PUSH4() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH4--description","title":"Description","text":"

    Place 4 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH4--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH4--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH4--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH4--gas","title":"Gas","text":"

    3

    Source: evm.codes/#63

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH5","title":"PUSH5 = Opcode(100, pushed_stack_items=1, data_portion_length=5) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH5--push5-value","title":"PUSH5() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH5--description","title":"Description","text":"

    Place 5 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH5--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH5--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH5--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH5--gas","title":"Gas","text":"

    3

    Source: evm.codes/#64

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH6","title":"PUSH6 = Opcode(101, pushed_stack_items=1, data_portion_length=6) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH6--push6-value","title":"PUSH6() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH6--description","title":"Description","text":"

    Place 6 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH6--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH6--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH6--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH6--gas","title":"Gas","text":"

    3

    Source: evm.codes/#65

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH7","title":"PUSH7 = Opcode(102, pushed_stack_items=1, data_portion_length=7) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH7--push7-value","title":"PUSH7() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH7--description","title":"Description","text":"

    Place 7 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH7--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH7--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH7--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH7--gas","title":"Gas","text":"

    3

    Source: evm.codes/#66

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH8","title":"PUSH8 = Opcode(103, pushed_stack_items=1, data_portion_length=8) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH8--push8-value","title":"PUSH8() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH8--description","title":"Description","text":"

    Place 8 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH8--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH8--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH8--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH8--gas","title":"Gas","text":"

    3

    Source: evm.codes/#67

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH9","title":"PUSH9 = Opcode(104, pushed_stack_items=1, data_portion_length=9) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH9--push9-value","title":"PUSH9() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH9--description","title":"Description","text":"

    Place 9 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH9--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH9--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH9--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH9--gas","title":"Gas","text":"

    3

    Source: evm.codes/#68

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH10","title":"PUSH10 = Opcode(105, pushed_stack_items=1, data_portion_length=10) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH10--push10-value","title":"PUSH10() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH10--description","title":"Description","text":"

    Place 10 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH10--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH10--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH10--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH10--gas","title":"Gas","text":"

    3

    Source: evm.codes/#69

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH11","title":"PUSH11 = Opcode(106, pushed_stack_items=1, data_portion_length=11) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH11--push11-value","title":"PUSH11() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH11--description","title":"Description","text":"

    Place 11 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH11--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH11--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH11--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH11--gas","title":"Gas","text":"

    3

    Source: evm.codes/#6A

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH12","title":"PUSH12 = Opcode(107, pushed_stack_items=1, data_portion_length=12) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH12--push12-value","title":"PUSH12() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH12--description","title":"Description","text":"

    Place 12 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH12--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH12--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH12--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH12--gas","title":"Gas","text":"

    3

    Source: evm.codes/#6B

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH13","title":"PUSH13 = Opcode(108, pushed_stack_items=1, data_portion_length=13) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH13--push13-value","title":"PUSH13() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH13--description","title":"Description","text":"

    Place 13 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH13--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH13--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH13--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH13--gas","title":"Gas","text":"

    3

    Source: evm.codes/#6C

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH14","title":"PUSH14 = Opcode(109, pushed_stack_items=1, data_portion_length=14) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH14--push14-value","title":"PUSH14() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH14--description","title":"Description","text":"

    Place 14 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH14--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH14--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH14--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH14--gas","title":"Gas","text":"

    3

    Source: evm.codes/#6D

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH15","title":"PUSH15 = Opcode(110, pushed_stack_items=1, data_portion_length=15) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH15--push15-value","title":"PUSH15() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH15--description","title":"Description","text":"

    Place 15 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH15--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH15--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH15--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH15--gas","title":"Gas","text":"

    3

    Source: evm.codes/#6E

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH16","title":"PUSH16 = Opcode(111, pushed_stack_items=1, data_portion_length=16) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH16--push16-value","title":"PUSH16() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH16--description","title":"Description","text":"

    Place 16 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH16--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH16--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH16--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH16--gas","title":"Gas","text":"

    3

    Source: evm.codes/#6F

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH17","title":"PUSH17 = Opcode(112, pushed_stack_items=1, data_portion_length=17) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH17--push17-value","title":"PUSH17() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH17--description","title":"Description","text":"

    Place 17 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH17--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH17--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH17--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH17--gas","title":"Gas","text":"

    3

    Source: evm.codes/#70

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH18","title":"PUSH18 = Opcode(113, pushed_stack_items=1, data_portion_length=18) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH18--push18-value","title":"PUSH18() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH18--description","title":"Description","text":"

    Place 18 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH18--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH18--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH18--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH18--gas","title":"Gas","text":"

    3

    Source: evm.codes/#71

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH19","title":"PUSH19 = Opcode(114, pushed_stack_items=1, data_portion_length=19) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH19--push19-value","title":"PUSH19() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH19--description","title":"Description","text":"

    Place 19 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH19--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH19--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH19--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH19--gas","title":"Gas","text":"

    3

    Source: evm.codes/#72

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH20","title":"PUSH20 = Opcode(115, pushed_stack_items=1, data_portion_length=20) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH20--push20-value","title":"PUSH20() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH20--description","title":"Description","text":"

    Place 20 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH20--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH20--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH20--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH20--gas","title":"Gas","text":"

    3

    Source: evm.codes/#73

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH21","title":"PUSH21 = Opcode(116, pushed_stack_items=1, data_portion_length=21) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH21--push21-value","title":"PUSH21() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH21--description","title":"Description","text":"

    Place 21 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH21--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH21--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH21--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH21--gas","title":"Gas","text":"

    3

    Source: evm.codes/#74

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH22","title":"PUSH22 = Opcode(117, pushed_stack_items=1, data_portion_length=22) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH22--push22-value","title":"PUSH22() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH22--description","title":"Description","text":"

    Place 22 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH22--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH22--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH22--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH22--gas","title":"Gas","text":"

    3

    Source: evm.codes/#75

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH23","title":"PUSH23 = Opcode(118, pushed_stack_items=1, data_portion_length=23) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH23--push23-value","title":"PUSH23() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH23--description","title":"Description","text":"

    Place 23 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH23--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH23--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH23--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH23--gas","title":"Gas","text":"

    3

    Source: evm.codes/#76

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH24","title":"PUSH24 = Opcode(119, pushed_stack_items=1, data_portion_length=24) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH24--push24-value","title":"PUSH24() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH24--description","title":"Description","text":"

    Place 24 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH24--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH24--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH24--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH24--gas","title":"Gas","text":"

    3

    Source: evm.codes/#77

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH25","title":"PUSH25 = Opcode(120, pushed_stack_items=1, data_portion_length=25) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH25--push25-value","title":"PUSH25() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH25--description","title":"Description","text":"

    Place 25 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH25--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH25--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH25--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH25--gas","title":"Gas","text":"

    3

    Source: evm.codes/#78

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH26","title":"PUSH26 = Opcode(121, pushed_stack_items=1, data_portion_length=26) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH26--push26-value","title":"PUSH26() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH26--description","title":"Description","text":"

    Place 26 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH26--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH26--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH26--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH26--gas","title":"Gas","text":"

    3

    Source: evm.codes/#79

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH27","title":"PUSH27 = Opcode(122, pushed_stack_items=1, data_portion_length=27) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH27--push27-value","title":"PUSH27() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH27--description","title":"Description","text":"

    Place 27 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH27--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH27--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH27--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH27--gas","title":"Gas","text":"

    3

    Source: evm.codes/#7A

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH28","title":"PUSH28 = Opcode(123, pushed_stack_items=1, data_portion_length=28) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH28--push28-value","title":"PUSH28() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH28--description","title":"Description","text":"

    Place 28 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH28--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH28--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH28--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH28--gas","title":"Gas","text":"

    3

    Source: evm.codes/#7B

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH29","title":"PUSH29 = Opcode(124, pushed_stack_items=1, data_portion_length=29) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH29--push29-value","title":"PUSH29() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH29--description","title":"Description","text":"

    Place 29 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH29--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH29--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH29--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH29--gas","title":"Gas","text":"

    3

    Source: evm.codes/#7C

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH30","title":"PUSH30 = Opcode(125, pushed_stack_items=1, data_portion_length=30) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH30--push30-value","title":"PUSH30() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH30--description","title":"Description","text":"

    Place 30 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH30--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH30--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH30--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH30--gas","title":"Gas","text":"

    3

    Source: evm.codes/#7D

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH31","title":"PUSH31 = Opcode(126, pushed_stack_items=1, data_portion_length=31) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH31--push31-value","title":"PUSH31() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH31--description","title":"Description","text":"

    Place 31 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH31--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH31--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH31--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH31--gas","title":"Gas","text":"

    3

    Source: evm.codes/#7E

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH32","title":"PUSH32 = Opcode(127, pushed_stack_items=1, data_portion_length=32) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH32--push32-value","title":"PUSH32() = value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH32--description","title":"Description","text":"

    Place 32 byte item on stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH32--inputs","title":"Inputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH32--outputs","title":"Outputs","text":"
    • value: pushed value, aligned to the right (put in the lowest significant bytes)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH32--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.PUSH32--gas","title":"Gas","text":"

    3

    Source: evm.codes/#7F

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP1","title":"DUP1 = Opcode(128, pushed_stack_items=1, min_stack_height=1) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP1--dup1value-value-value","title":"DUP1(value) = value, value","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP1--description","title":"Description","text":"

    Duplicate 1st stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP1--inputs","title":"Inputs","text":"
    • value: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP1--outputs","title":"Outputs","text":"
    • value: duplicated value
    • value: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP1--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP1--gas","title":"Gas","text":"

    3

    Source: evm.codes/#80

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP2","title":"DUP2 = Opcode(129, pushed_stack_items=1, min_stack_height=2) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP2--dup2v1-v2-v2-v1-v2","title":"DUP2(v1, v2) = v2, v1, v2","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP2--description","title":"Description","text":"

    Duplicate 2nd stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP2--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP2--outputs","title":"Outputs","text":"
    • v2: duplicated value
    • v1: ignored value
    • v2: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP2--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP2--gas","title":"Gas","text":"

    3

    Source: evm.codes/#81

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP3","title":"DUP3 = Opcode(130, pushed_stack_items=1, min_stack_height=3) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP3--dup3v1-v2-v3-v3-v1-v2-v3","title":"DUP3(v1, v2, v3) = v3, v1, v2, v3","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP3--description","title":"Description","text":"

    Duplicate 3rd stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP3--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • v3: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP3--outputs","title":"Outputs","text":"
    • v3: duplicated value
    • v1: ignored value
    • v2: ignored value
    • v3: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP3--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP3--gas","title":"Gas","text":"

    3

    Source: evm.codes/#82

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP4","title":"DUP4 = Opcode(131, pushed_stack_items=1, min_stack_height=4) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP4--dup4v1-v2-v3-v4-v4-v1-v2-v3-v4","title":"DUP4(v1, v2, v3, v4) = v4, v1, v2, v3, v4","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP4--description","title":"Description","text":"

    Duplicate 4th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP4--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • v3: ignored value
    • v4: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP4--outputs","title":"Outputs","text":"
    • v4: duplicated value
    • v1: ignored value
    • v2: ignored value
    • v3: ignored value
    • v4: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP4--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP4--gas","title":"Gas","text":"

    3

    Source: evm.codes/#83

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP5","title":"DUP5 = Opcode(132, pushed_stack_items=1, min_stack_height=5) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP5--dup5v1-v2-v3-v4-v5-v5-v1-v2-v3-v4-v5","title":"DUP5(v1, v2, v3, v4, v5) = v5, v1, v2, v3, v4, v5","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP5--description","title":"Description","text":"

    Duplicate 5th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP5--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • v3: ignored value
    • v4: ignored value
    • v5: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP5--outputs","title":"Outputs","text":"
    • v5: duplicated value
    • v1: ignored value
    • v2: ignored value
    • v3: ignored value
    • v4: ignored value
    • v5: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP5--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP5--gas","title":"Gas","text":"

    3

    Source: evm.codes/#84

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP6","title":"DUP6 = Opcode(133, pushed_stack_items=1, min_stack_height=6) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP6--dup6v1-v2-v5-v6-v6-v1-v2-v5-v6","title":"DUP6(v1, v2, ..., v5, v6) = v6, v1, v2, ..., v5, v6","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP6--description","title":"Description","text":"

    Duplicate 6th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP6--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v5: ignored value
    • v6: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP6--outputs","title":"Outputs","text":"
    • v6: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v5: ignored value
    • v6: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP6--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP6--gas","title":"Gas","text":"

    3

    Source: evm.codes/#85

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP7","title":"DUP7 = Opcode(134, pushed_stack_items=1, min_stack_height=7) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP7--dup7v1-v2-v6-v7-v7-v1-v2-v6-v7","title":"DUP7(v1, v2, ..., v6, v7) = v7, v1, v2, ..., v6, v7","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP7--description","title":"Description","text":"

    Duplicate 7th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP7--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v6: ignored value
    • v7: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP7--outputs","title":"Outputs","text":"
    • v7: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v6: ignored value
    • v7: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP7--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP7--gas","title":"Gas","text":"

    3

    Source: evm.codes/#86

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP8","title":"DUP8 = Opcode(135, pushed_stack_items=1, min_stack_height=8) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP8--dup8v1-v2-v7-v8-v8-v1-v2-v7-v8","title":"DUP8(v1, v2, ..., v7, v8) = v8, v1, v2, ..., v7, v8","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP8--description","title":"Description","text":"

    Duplicate 8th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP8--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v7: ignored value
    • v8: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP8--outputs","title":"Outputs","text":"
    • v8: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v7: ignored value
    • v8: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP8--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP8--gas","title":"Gas","text":"

    3

    Source: evm.codes/#87

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP9","title":"DUP9 = Opcode(136, pushed_stack_items=1, min_stack_height=9) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP9--dup9v1-v2-v8-v9-v9-v1-v2-v8-v9","title":"DUP9(v1, v2, ..., v8, v9) = v9, v1, v2, ..., v8, v9","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP9--description","title":"Description","text":"

    Duplicate 9th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP9--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v8: ignored value
    • v9: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP9--outputs","title":"Outputs","text":"
    • v9: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v8: ignored value
    • v9: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP9--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP9--gas","title":"Gas","text":"

    3

    Source: evm.codes/#88

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP10","title":"DUP10 = Opcode(137, pushed_stack_items=1, min_stack_height=10) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP10--dup10v1-v2-v9-v10-v10-v1-v2-v9-v10","title":"DUP10(v1, v2, ..., v9, v10) = v10, v1, v2, ..., v9, v10","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP10--description","title":"Description","text":"

    Duplicate 10th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP10--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v9: ignored value
    • v10: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP10--outputs","title":"Outputs","text":"
    • v10: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v9: ignored value
    • v10: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP10--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP10--gas","title":"Gas","text":"

    3

    Source: evm.codes/#89

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP11","title":"DUP11 = Opcode(138, pushed_stack_items=1, min_stack_height=11) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP11--dup11v1-v2-v10-v11-v11-v1-v2-v10-v11","title":"DUP11(v1, v2, ..., v10, v11) = v11, v1, v2, ..., v10, v11","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP11--description","title":"Description","text":"

    Duplicate 11th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP11--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v10: ignored value
    • v11: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP11--outputs","title":"Outputs","text":"
    • v11: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v10: ignored value
    • v11: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP11--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP11--gas","title":"Gas","text":"

    3

    Source: evm.codes/#8A

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP12","title":"DUP12 = Opcode(139, pushed_stack_items=1, min_stack_height=12) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP12--dup12v1-v2-v11-v12-v12-v1-v2-v11-v12","title":"DUP12(v1, v2, ..., v11, v12) = v12, v1, v2, ..., v11, v12","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP12--description","title":"Description","text":"

    Duplicate 12th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP12--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v11: ignored value
    • v12: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP12--outputs","title":"Outputs","text":"
    • v12: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v11: ignored value
    • v12: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP12--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP12--gas","title":"Gas","text":"

    3

    Source: evm.codes/#8B

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP13","title":"DUP13 = Opcode(140, pushed_stack_items=1, min_stack_height=13) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP13--dup13v1-v2-v12-v13-v13-v1-v2-v12-v13","title":"DUP13(v1, v2, ..., v12, v13) = v13, v1, v2, ..., v12, v13","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP13--description","title":"Description","text":"

    Duplicate 13th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP13--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v12: ignored value
    • v13: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP13--outputs","title":"Outputs","text":"
    • v13: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v12: ignored value
    • v13: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP13--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP13--gas","title":"Gas","text":"

    3

    Source: evm.codes/#8C

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP14","title":"DUP14 = Opcode(141, pushed_stack_items=1, min_stack_height=14) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP14--dup14v1-v2-v13-v14-v14-v1-v2-v13-v14","title":"DUP14(v1, v2, ..., v13, v14) = v14, v1, v2, ..., v13, v14","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP14--description","title":"Description","text":"

    Duplicate 14th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP14--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v13: ignored value
    • v14: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP14--outputs","title":"Outputs","text":"
    • v14: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v13: ignored value
    • v14: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP14--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP14--gas","title":"Gas","text":"

    3

    Source: evm.codes/#8D

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP15","title":"DUP15 = Opcode(142, pushed_stack_items=1, min_stack_height=15) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP15--dup15v1-v2-v14-v15-v15-v1-v2-v14-v15","title":"DUP15(v1, v2, ..., v14, v15) = v15, v1, v2, ..., v14, v15","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP15--description","title":"Description","text":"

    Duplicate 15th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP15--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v14: ignored value
    • v15: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP15--outputs","title":"Outputs","text":"
    • v15: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v14: ignored value
    • v15: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP15--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP15--gas","title":"Gas","text":"

    3

    Source: evm.codes/#8E

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP16","title":"DUP16 = Opcode(143, pushed_stack_items=1, min_stack_height=16) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP16--dup16v1-v2-v15-v16-v16-v1-v2-v15-v16","title":"DUP16(v1, v2, ..., v15, v16) = v16, v1, v2, ..., v15, v16","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP16--description","title":"Description","text":"

    Duplicate 16th stack item

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP16--inputs","title":"Inputs","text":"
    • v1: ignored value
    • v2: ignored value
    • ...
    • v15: ignored value
    • v16: value to duplicate
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP16--outputs","title":"Outputs","text":"
    • v16: duplicated value
    • v1: ignored value
    • v2: ignored value
    • ...
    • v15: ignored value
    • v16: original value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP16--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUP16--gas","title":"Gas","text":"

    3

    Source: evm.codes/#8F

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP1","title":"SWAP1 = Opcode(144, min_stack_height=2) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP1--swap1v1-v2-v2-v1","title":"SWAP1(v1, v2) = v2, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP1--description","title":"Description","text":"

    Exchange the top stack item with the second stack item.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP1--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP1--outputs","title":"Outputs","text":"
    • v1: swapped value
    • v2: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP1--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP1--gas","title":"Gas","text":"

    3

    Source: evm.codes/#90

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP2","title":"SWAP2 = Opcode(145, min_stack_height=3) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP2--swap2v1-v2-v3-v3-v2-v1","title":"SWAP2(v1, v2, v3) = v3, v2, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP2--description","title":"Description","text":"

    Exchange 1st and 3rd stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP2--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • v3: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP2--outputs","title":"Outputs","text":"
    • v3: swapped value
    • v2: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP2--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP2--gas","title":"Gas","text":"

    3

    Source: evm.codes/#91

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP3","title":"SWAP3 = Opcode(146, min_stack_height=4) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP3--swap3v1-v2-v3-v4-v4-v2-v3-v1","title":"SWAP3(v1, v2, v3, v4) = v4, v2, v3, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP3--description","title":"Description","text":"

    Exchange 1st and 4th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP3--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • v3: ignored value
    • v4: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP3--outputs","title":"Outputs","text":"
    • v4: swapped value
    • v2: ignored value
    • v3: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP3--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP3--gas","title":"Gas","text":"

    3

    Source: evm.codes/#92

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP4","title":"SWAP4 = Opcode(147, min_stack_height=5) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP4--swap4v1-v2-v4-v5-v5-v2-v4-v1","title":"SWAP4(v1, v2, ..., v4, v5) = v5, v2, ..., v4, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP4--description","title":"Description","text":"

    Exchange 1st and 5th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP4--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v4: ignored value
    • v5: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP4--outputs","title":"Outputs","text":"
    • v5: swapped value
    • v2: ignored value
    • ...
    • v4: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP4--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP4--gas","title":"Gas","text":"

    3

    Source: evm.codes/#93

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP5","title":"SWAP5 = Opcode(148, min_stack_height=6) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP5--swap5v1-v2-v5-v6-v6-v2-v5-v1","title":"SWAP5(v1, v2, ..., v5, v6) = v6, v2, ..., v5, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP5--description","title":"Description","text":"

    Exchange 1st and 6th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP5--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v5: ignored value
    • v6: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP5--outputs","title":"Outputs","text":"
    • v6: swapped value
    • v2: ignored value
    • ...
    • v5: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP5--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP5--gas","title":"Gas","text":"

    3

    Source: evm.codes/#94

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP6","title":"SWAP6 = Opcode(149, min_stack_height=7) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP6--swap6v1-v2-v6-v7-v7-v2-v6-v1","title":"SWAP6(v1, v2, ..., v6, v7) = v7, v2, ..., v6, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP6--description","title":"Description","text":"

    Exchange 1st and 7th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP6--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v6: ignored value
    • v7: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP6--outputs","title":"Outputs","text":"
    • v7: swapped value
    • v2: ignored value
    • ...
    • v6: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP6--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP6--gas","title":"Gas","text":"

    3

    Source: evm.codes/#95

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP7","title":"SWAP7 = Opcode(150, min_stack_height=8) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP7--swap7v1-v2-v7-v8-v8-v2-v7-v1","title":"SWAP7(v1, v2, ..., v7, v8) = v8, v2, ..., v7, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP7--description","title":"Description","text":"

    Exchange 1st and 8th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP7--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v7: ignored value
    • v8: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP7--outputs","title":"Outputs","text":"
    • v8: swapped value
    • v2: ignored value
    • ...
    • v7: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP7--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP7--gas","title":"Gas","text":"

    3

    Source: evm.codes/#96

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP8","title":"SWAP8 = Opcode(151, min_stack_height=9) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP8--swap8v1-v2-v8-v9-v9-v2-v8-v1","title":"SWAP8(v1, v2, ..., v8, v9) = v9, v2, ..., v8, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP8--description","title":"Description","text":"

    Exchange 1st and 9th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP8--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v8: ignored value
    • v9: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP8--outputs","title":"Outputs","text":"
    • v9: swapped value
    • v2: ignored value
    • ...
    • v8: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP8--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP8--gas","title":"Gas","text":"

    3

    Source: evm.codes/#97

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP9","title":"SWAP9 = Opcode(152, min_stack_height=10) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP9--swap9v1-v2-v9-v10-v10-v2-v9-v1","title":"SWAP9(v1, v2, ..., v9, v10) = v10, v2, ..., v9, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP9--description","title":"Description","text":"

    Exchange 1st and 10th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP9--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v9: ignored value
    • v10: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP9--outputs","title":"Outputs","text":"
    • v10: swapped value
    • v2: ignored value
    • ...
    • v9: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP9--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP9--gas","title":"Gas","text":"

    3

    Source: evm.codes/#98

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP10","title":"SWAP10 = Opcode(153, min_stack_height=11) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP10--swap10v1-v2-v10-v11-v11-v2-v10-v1","title":"SWAP10(v1, v2, ..., v10, v11) = v11, v2, ..., v10, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP10--description","title":"Description","text":"

    Exchange 1st and 11th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP10--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v10: ignored value
    • v11: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP10--outputs","title":"Outputs","text":"
    • v11: swapped value
    • v2: ignored value
    • ...
    • v10: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP10--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP10--gas","title":"Gas","text":"

    3

    Source: evm.codes/#99

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP11","title":"SWAP11 = Opcode(154, min_stack_height=12) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP11--swap11v1-v2-v11-v12-v12-v2-v11-v1","title":"SWAP11(v1, v2, ..., v11, v12) = v12, v2, ..., v11, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP11--description","title":"Description","text":"

    Exchange 1st and 12th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP11--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v11: ignored value
    • v12: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP11--outputs","title":"Outputs","text":"
    • v12: swapped value
    • v2: ignored value
    • ...
    • v11: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP11--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP11--gas","title":"Gas","text":"

    3

    Source: evm.codes/#9A

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP12","title":"SWAP12 = Opcode(155, min_stack_height=13) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP12--swap12v1-v2-v12-v13-v13-v2-v12-v1","title":"SWAP12(v1, v2, ..., v12, v13) = v13, v2, ..., v12, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP12--description","title":"Description","text":"

    Exchange 1st and 13th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP12--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v12: ignored value
    • v13: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP12--outputs","title":"Outputs","text":"
    • v13: swapped value
    • v2: ignored value
    • ...
    • v12: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP12--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP12--gas","title":"Gas","text":"

    3

    Source: evm.codes/#9B

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP13","title":"SWAP13 = Opcode(156, min_stack_height=14) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP13--swap13v1-v2-v13-v14-v14-v2-v13-v1","title":"SWAP13(v1, v2, ..., v13, v14) = v14, v2, ..., v13, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP13--description","title":"Description","text":"

    Exchange 1st and 14th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP13--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v13: ignored value
    • v14: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP13--outputs","title":"Outputs","text":"
    • v14: swapped value
    • v2: ignored value
    • ...
    • v13: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP13--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP13--gas","title":"Gas","text":"

    3

    Source: evm.codes/#9C

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP14","title":"SWAP14 = Opcode(157, min_stack_height=15) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP14--swap14v1-v2-v14-v15-v15-v2-v14-v1","title":"SWAP14(v1, v2, ..., v14, v15) = v15, v2, ..., v14, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP14--description","title":"Description","text":"

    Exchange 1st and 15th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP14--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v14: ignored value
    • v15: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP14--outputs","title":"Outputs","text":"
    • v15: swapped value
    • v2: ignored value
    • ...
    • v14: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP14--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP14--gas","title":"Gas","text":"

    3

    Source: evm.codes/#9D

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP15","title":"SWAP15 = Opcode(158, min_stack_height=16) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP15--swap15v1-v2-v15-v16-v16-v2-v15-v1","title":"SWAP15(v1, v2, ..., v15, v16) = v16, v2, ..., v15, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP15--description","title":"Description","text":"

    Exchange 1st and 16th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP15--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v15: ignored value
    • v16: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP15--outputs","title":"Outputs","text":"
    • v16: swapped value
    • v2: ignored value
    • ...
    • v15: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP15--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP15--gas","title":"Gas","text":"

    3

    Source: evm.codes/#9E

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP16","title":"SWAP16 = Opcode(159, min_stack_height=17) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP16--swap16v1-v2-v16-v17-v17-v2-v16-v1","title":"SWAP16(v1, v2, ..., v16, v17) = v17, v2, ..., v16, v1","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP16--description","title":"Description","text":"

    Exchange 1st and 17th stack items

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP16--inputs","title":"Inputs","text":"
    • v1: value to swap
    • v2: ignored value
    • ...
    • v16: ignored value
    • v17: value to swap
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP16--outputs","title":"Outputs","text":"
    • v17: swapped value
    • v2: ignored value
    • ...
    • v16: ignored value
    • v1: swapped value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP16--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAP16--gas","title":"Gas","text":"

    3

    Source: evm.codes/#9F

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG0","title":"LOG0 = Opcode(160, popped_stack_items=2, kwargs=['offset', 'size']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG0--log0offset-size","title":"LOG0(offset, size)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG0--description","title":"Description","text":"

    Append log record with no topics

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG0--inputs","title":"Inputs","text":"
    • offset: byte offset in the memory in bytes
    • size: byte size to copy
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG0--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG0--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG0--gas","title":"Gas","text":"
    • static_gas = 375
    • dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost

    Source: evm.codes/#A0

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG1","title":"LOG1 = Opcode(161, popped_stack_items=3, kwargs=['offset', 'size', 'topic_1']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG1--log1offset-size-topic_1","title":"LOG1(offset, size, topic_1)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG1--description","title":"Description","text":"

    Append log record with one topic

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG1--inputs","title":"Inputs","text":"
    • offset: byte offset in the memory in bytes
    • size: byte size to copy
    • topic_1: 32-byte value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG1--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG1--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG1--gas","title":"Gas","text":"
    • static_gas = 375
    • dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost

    Source: evm.codes/#A1

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG2","title":"LOG2 = Opcode(162, popped_stack_items=4, kwargs=['offset', 'size', 'topic_1', 'topic_2']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG2--log2offset-size-topic_1-topic_2","title":"LOG2(offset, size, topic_1, topic_2)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG2--description","title":"Description","text":"

    Append log record with two topics

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG2--inputs","title":"Inputs","text":"
    • offset: byte offset in the memory in bytes
    • size: byte size to copy
    • topic_1: 32-byte value
    • topic_2: 32-byte value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG2--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG2--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG2--gas","title":"Gas","text":"
    • static_gas = 375
    • dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost

    Source: evm.codes/#A2

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG3","title":"LOG3 = Opcode(163, popped_stack_items=5, kwargs=['offset', 'size', 'topic_1', 'topic_2', 'topic_3']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG3--log3offset-size-topic_1-topic_2-topic_3","title":"LOG3(offset, size, topic_1, topic_2, topic_3)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG3--description","title":"Description","text":"

    Append log record with three topics

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG3--inputs","title":"Inputs","text":"
    • offset: byte offset in the memory in bytes
    • size: byte size to copy
    • topic_1: 32-byte value
    • topic_2: 32-byte value
    • topic_3: 32-byte value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG3--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG3--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG3--gas","title":"Gas","text":"
    • static_gas = 375
    • dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost

    Source: evm.codes/#A3

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG4","title":"LOG4 = Opcode(164, popped_stack_items=6, kwargs=['offset', 'size', 'topic_1', 'topic_2', 'topic_3', 'topic_4']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG4--log4offset-size-topic_1-topic_2-topic_3-topic_4","title":"LOG4(offset, size, topic_1, topic_2, topic_3, topic_4)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG4--description","title":"Description","text":"

    Append log record with four topics

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG4--inputs","title":"Inputs","text":"
    • offset: byte offset in the memory in bytes
    • size: byte size to copy
    • topic_1: 32-byte value
    • topic_2: 32-byte value
    • topic_3: 32-byte value
    • topic_4: 32-byte value
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG4--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG4--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG4--gas","title":"Gas","text":"
    • static_gas = 375
    • dynamic_gas = 375 * topic_count + 8 * size + memory_expansion_cost

    Source: evm.codes/#A4

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMP","title":"RJUMP = Opcode(224, data_portion_length=2) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMP--rjump","title":"RJUMP()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMP--description","title":"Description","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMP--inputs","title":"Inputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMP--outputs","title":"Outputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMP--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMP--gas","title":"Gas","text":"

    Source: eips.ethereum.org/EIPS/eip-4200

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOAD","title":"DATALOAD = Opcode(208, popped_stack_items=1, kwargs=['offset']) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOAD--dataloadoffset","title":"DATALOAD(offset)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOAD--description","title":"Description","text":"

    Reads 32 bytes of data at offset onto the stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOAD--inputs","title":"Inputs","text":"
    • offset: offset within the data section to start copying
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOAD--outputs","title":"Outputs","text":"

    none

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOAD--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOAD--gas","title":"Gas","text":"

    4

    Source: eips.ethereum.org/EIPS/eip-7480

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOADN","title":"DATALOADN = Opcode(209, pushed_stack_items=1, data_portion_length=2) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOADN--dataloadn","title":"DATALOADN()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOADN--description","title":"Description","text":"

    Reads 32 bytes of data at offset onto the stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOADN--immediates","title":"Immediates","text":"

    2 bytes forming a UInt16, which is the offset into the data section.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOADN--inputs","title":"Inputs","text":"

    none

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOADN--outputs","title":"Outputs","text":"

    none

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOADN--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATALOADN--gas","title":"Gas","text":"

    3

    Source: eips.ethereum.org/EIPS/eip-7480

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATASIZE","title":"DATASIZE = Opcode(210, pushed_stack_items=1) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATASIZE--datasize","title":"DATASIZE()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATASIZE--description","title":"Description","text":"

    Returns the size of the data section

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATASIZE--inputs","title":"Inputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATASIZE--outputs","title":"Outputs","text":"

    The size of the data section. If there is no data section, returns 0.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATASIZE--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATASIZE--gas","title":"Gas","text":"

    2

    Source: eips.ethereum.org/EIPS/eip-7480

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATACOPY","title":"DATACOPY = Opcode(211, popped_stack_items=3, kwargs=['dest_offset', 'offset', 'size']) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATACOPY--datacopydest_offset-offset-size","title":"DATACOPY(dest_offset, offset, size)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATACOPY--description","title":"Description","text":"

    Copies data from the data section into call frame memory

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATACOPY--inputs","title":"Inputs","text":"
    • dest_offset: The offset within the memory section to start copying to
    • offset: The offset within the data section to start copying from
    • size: The number of bytes to copy
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATACOPY--outputs","title":"Outputs","text":"

    none

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATACOPY--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DATACOPY--gas","title":"Gas","text":"
    • minimum_word_size = (size + 31) / 32
    • static_gas = 3
    • dynamic_gas = 3 * minimum_word_size + memory_expansion_cost

    Source: eips.ethereum.org/EIPS/eip-7480

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPI","title":"RJUMPI = Opcode(225, popped_stack_items=1, data_portion_length=2) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPI--rjumpi","title":"RJUMPI()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPI--description","title":"Description","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPI--inputs","title":"Inputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPI--outputs","title":"Outputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPI--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPI--gas","title":"Gas","text":"

    Source: eips.ethereum.org/EIPS/eip-4200

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPV","title":"RJUMPV = Opcode(226, popped_stack_items=1, data_portion_formatter=_rjumpv_encoder) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPV--rjumpv","title":"RJUMPV()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPV--description","title":"Description","text":"

    Relative jump with variable offset.

    When calling this opcode to generate bytecode, the first argument is used to format the data portion of the opcode, and it can be either of two types: - A bytes type, and in this instance the bytes are used verbatim as the data portion. - An integer iterable, list or tuple or any other iterable, where each element is a jump offset.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPV--inputs","title":"Inputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPV--outputs","title":"Outputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPV--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RJUMPV--gas","title":"Gas","text":"

    Source: eips.ethereum.org/EIPS/eip-4200

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLF","title":"CALLF = Opcode(227, data_portion_length=2, unchecked_stack=True) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLF--callf","title":"CALLF()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLF--description","title":"Description","text":"
    • deduct 5 gas
    • read uint16 operand idx
    • if 1024 < len(stack) + types[idx].max_stack_height - types[idx].inputs, execution results in an exceptional halt
    • if 1024 <= len(return_stack), execution results in an exceptional halt
    • push new element to return_stack (current_code_idx, pc+3)
    • update current_code_idx to idx and set pc to 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLF--inputs","title":"Inputs","text":"

    Any: The inputs are not checked because we cannot know how many inputs the callee function/section requires

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLF--outputs","title":"Outputs","text":"

    Any: The outputs are variable because we cannot know how many outputs the callee function/section produces

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLF--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLF--gas","title":"Gas","text":"

    5

    Source: ipsilon/eof/blob/main/spec/eof.md

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETF","title":"RETF = Opcode(228, terminating=True) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETF--retf","title":"RETF()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETF--description","title":"Description","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETF--inputs","title":"Inputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETF--outputs","title":"Outputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETF--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETF--gas","title":"Gas","text":"

    3

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPF","title":"JUMPF = Opcode(229, data_portion_length=2, terminating=True) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPF--jumpf","title":"JUMPF()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPF--description","title":"Description","text":"
    • deduct 5 gas
    • read uint16 operand idx
    • if 1024 < len(stack) + types[idx].max_stack_height - types[idx].inputs, execution results in an exceptional halt
    • set current_code_idx to idx
    • set pc = 0
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPF--inputs","title":"Inputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPF--outputs","title":"Outputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPF--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.JUMPF--gas","title":"Gas","text":"

    5

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUPN","title":"DUPN = Opcode(230, pushed_stack_items=1, data_portion_length=1, stack_properties_modifier=_dupn_stack_properties_modifier) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUPN--dupn","title":"DUPN()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUPN--description","title":"Description","text":"
    • deduct 3 gas
    • read uint8 operand imm
    • n = imm + 1
    • n\u2018th (1-based) stack item is duplicated at the top of the stack
    • Stack validation: stack_height >= n
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUPN--inputs","title":"Inputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUPN--outputs","title":"Outputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUPN--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DUPN--gas","title":"Gas","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAPN","title":"SWAPN = Opcode(231, data_portion_length=1, stack_properties_modifier=_swapn_stack_properties_modifier) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAPN--swapn","title":"SWAPN()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAPN--description","title":"Description","text":"
    • deduct 3 gas
    • read uint8 operand imm
    • n = imm + 1
    • n + 1th stack item is swapped with the top stack item (1-based).
    • Stack validation: stack_height >= n + 1
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAPN--inputs","title":"Inputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAPN--outputs","title":"Outputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAPN--fork","title":"Fork","text":"

    EOF Fork

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SWAPN--gas","title":"Gas","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXCHANGE","title":"EXCHANGE = Opcode(232, data_portion_formatter=_exchange_encoder, stack_properties_modifier=_exchange_stack_properties_modifier) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXCHANGE--exchangex-y","title":"EXCHANGE[x, y]","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXCHANGE--description","title":"Description","text":"

    Exchanges two stack positions. Two nybbles, n is high 4 bits + 1, then m is 4 low bits + 1. Exchanges tne n+1'th item with the n + m + 1 item.

    Inputs x and y when the opcode is used as EXCHANGE[x, y], are equal to: - x = n + 1 - y = n + m + 1 Which each equals to 1-based stack positions swapped.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXCHANGE--inputs","title":"Inputs","text":"

    n + m + 1, or ((imm >> 4) + (imm &0x0F) + 3) from the raw immediate,

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXCHANGE--outputs","title":"Outputs","text":"

    n + m + 1, or ((imm >> 4) + (imm &0x0F) + 3) from the raw immediate,

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXCHANGE--fork","title":"Fork","text":"

    EOF_FORK

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXCHANGE--gas","title":"Gas","text":"

    3

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EOFCREATE","title":"EOFCREATE = Opcode(236, popped_stack_items=4, pushed_stack_items=1, data_portion_length=1, kwargs=['value', 'salt', 'input_offset', 'input_size']) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EOFCREATE--eofcreateinitcontainer_index","title":"EOFCREATEinitcontainer_index","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EOFCREATE--description","title":"Description","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EOFCREATE--inputs","title":"Inputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EOFCREATE--outputs","title":"Outputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EOFCREATE--fork","title":"Fork","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EOFCREATE--gas","title":"Gas","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNCONTRACT","title":"RETURNCONTRACT = Opcode(238, popped_stack_items=2, data_portion_length=1, terminating=True) class-attribute instance-attribute","text":"

    !!! Note: This opcode is under development

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNCONTRACT--returncontract","title":"RETURNCONTRACT()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNCONTRACT--description","title":"Description","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNCONTRACT--inputs","title":"Inputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNCONTRACT--outputs","title":"Outputs","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNCONTRACT--fork","title":"Fork","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNCONTRACT--gas","title":"Gas","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE","title":"CREATE = Opcode(240, popped_stack_items=3, pushed_stack_items=1, kwargs=['value', 'offset', 'size']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE--createvalue-offset-size-address","title":"CREATE(value, offset, size) = address","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE--description","title":"Description","text":"

    Create a new contract with the given code

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE--inputs","title":"Inputs","text":"
    • value: value in wei to send to the new account
    • offset: byte offset in the memory in bytes, the initialization code for the new account
    • size: byte size to copy (size of the initialization code)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE--outputs","title":"Outputs","text":"
    • address: the address of the deployed contract, 0 if the deployment failed
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE--gas","title":"Gas","text":"
    minimum_word_size = (size + 31) / 32\ninit_code_cost = 2 * minimum_word_size\ncode_deposit_cost = 200 * deployed_code_size\n\nstatic_gas = 32000\ndynamic_gas = init_code_cost + memory_expansion_cost + deployment_code_execution_cost\n    + code_deposit_cost\n

    Source: evm.codes/#F0

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALL","title":"CALL = Opcode(241, popped_stack_items=7, pushed_stack_items=1, kwargs=['gas', 'address', 'value', 'args_offset', 'args_size', 'ret_offset', 'ret_size'], kwargs_defaults={'gas': GAS}) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALL--callgas-address-value-args_offset-args_size-ret_offset-ret_size-success","title":"CALL(gas, address, value, args_offset, args_size, ret_offset, ret_size) = success","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALL--description","title":"Description","text":"

    Message-call into an account

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALL--inputs","title":"Inputs","text":"
    • gas: amount of gas to send to the sub context to execute. The gas that is not used by the sub context is returned to this one
    • address: the account which context to execute
    • value: value in wei to send to the account
    • args_offset: byte offset in the memory in bytes, the calldata of the sub context
    • args_size: byte size to copy (size of the calldata)
    • ret_offset: byte offset in the memory in bytes, where to store the return data of the sub context
    • ret_size: byte size to copy (size of the return data)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALL--outputs","title":"Outputs","text":"
    • success: return 0 if the sub context reverted, 1 otherwise
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALL--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALL--gas","title":"Gas","text":"
    static_gas = 0\ndynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost\n    + positive_value_cost + value_to_empty_account_cost\n

    Source: evm.codes/#F1

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLCODE","title":"CALLCODE = Opcode(242, popped_stack_items=7, pushed_stack_items=1, kwargs=['gas', 'address', 'value', 'args_offset', 'args_size', 'ret_offset', 'ret_size'], kwargs_defaults={'gas': GAS}) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLCODE--callcodegas-address-value-args_offset-args_size-ret_offset-ret_size-success","title":"CALLCODE(gas, address, value, args_offset, args_size, ret_offset, ret_size) = success","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLCODE--description","title":"Description","text":"

    Message-call into this account with an alternative account's code. Executes code starting at the address to which the call is made.

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLCODE--inputs","title":"Inputs","text":"
    • gas: amount of gas to send to the sub context to execute. The gas that is not used by the sub context is returned to this one
    • address: the account which code to execute
    • value: value in wei to send to the account
    • args_offset: byte offset in the memory in bytes, the calldata of the sub context
    • args_size: byte size to copy (size of the calldata)
    • ret_offset: byte offset in the memory in bytes, where to store the return data of the sub context
    • ret_size: byte size to copy (size of the return data)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLCODE--outputs","title":"Outputs","text":"
    • success: return 0 if the sub context reverted, 1 otherwise
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLCODE--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLCODE--gas","title":"Gas","text":"
    static_gas = 0\ndynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost\n    + positive_value_cost\n

    Source: evm.codes/#F2

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURN","title":"RETURN = Opcode(243, popped_stack_items=2, kwargs=['offset', 'size'], terminating=True) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURN--returnoffset-size","title":"RETURN(offset, size)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURN--description","title":"Description","text":"

    Halt execution returning output data

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURN--inputs","title":"Inputs","text":"
    • offset: byte offset in the memory in bytes, to copy what will be the return data of this context
    • size: byte size to copy (size of the return data)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURN--outputs","title":"Outputs","text":"
    • None
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURN--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURN--gas","title":"Gas","text":"
    • static_gas = 0
    • dynamic_gas = memory_expansion_cost

    Source: evm.codes/#F3

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DELEGATECALL","title":"DELEGATECALL = Opcode(244, popped_stack_items=6, pushed_stack_items=1, kwargs=['gas', 'address', 'args_offset', 'args_size', 'ret_offset', 'ret_size'], kwargs_defaults={'gas': GAS}) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DELEGATECALL--delegatecallgas-address-args_offset-args_size-ret_offset-ret_size-success","title":"DELEGATECALL(gas, address, args_offset, args_size, ret_offset, ret_size) = success","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DELEGATECALL--description","title":"Description","text":"

    Message-call into this account with an alternative account's code, but persisting the current values for sender and value

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DELEGATECALL--inputs","title":"Inputs","text":"
    • gas: amount of gas to send to the sub context to execute. The gas that is not used by the sub context is returned to this one
    • address: the account which code to execute
    • args_offset: byte offset in the memory in bytes, the calldata of the sub context
    • args_size: byte size to copy (size of the calldata)
    • ret_offset: byte offset in the memory in bytes, where to store the return data of the sub context
    • ret_size: byte size to copy (size of the return data)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DELEGATECALL--outputs","title":"Outputs","text":"
    • success: return 0 if the sub context reverted, 1 otherwise
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DELEGATECALL--fork","title":"Fork","text":"

    Byzantium

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DELEGATECALL--gas","title":"Gas","text":"
    • static_gas = 0
    • dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost

    Source: evm.codes/#F4

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE2","title":"CREATE2 = Opcode(245, popped_stack_items=4, pushed_stack_items=1, kwargs=['value', 'offset', 'size', 'salt']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE2--create2value-offset-size-salt-address","title":"CREATE2(value, offset, size, salt) = address","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE2--description","title":"Description","text":"

    Creates a new contract

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE2--inputs","title":"Inputs","text":"
    • value: value in wei to send to the new account
    • offset: byte offset in the memory in bytes, the initialization code of the new account
    • size: byte size to copy (size of the initialization code)
    • salt: 32-byte value used to create the new account at a deterministic address
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE2--outputs","title":"Outputs","text":"
    • address: the address of the deployed contract, 0 if the deployment failed
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE2--fork","title":"Fork","text":"

    Constantinople

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CREATE2--gas","title":"Gas","text":"
    minimum_word_size = (size + 31) / 32\ninit_code_cost = 2 * minimum_word_size\nhash_cost = 6 * minimum_word_size\ncode_deposit_cost = 200 * deployed_code_size\n\nstatic_gas = 32000\ndynamic_gas = init_code_cost + hash_cost + memory_expansion_cost\n    + deployment_code_execution_cost + code_deposit_cost\n

    Source: evm.codes/#F5

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCALL","title":"EXTCALL = Opcode(248, popped_stack_items=4, pushed_stack_items=1, kwargs=['address', 'args_offset', 'args_size', 'value']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCALL--extcalladdress-args_offset-args_size-value-address","title":"EXTCALL(address, args_offset, args_size, value) = address","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCALL--description","title":"Description","text":"

    Message-call into an account

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCALL--inputs","title":"Inputs","text":"
    • address: the account which context to execute
    • args_offset: byte offset in the memory in bytes, the calldata of the sub context
    • args_size: byte size to copy (size of the calldata)
    • value: value in wei to send to the account
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCALL--outputs","title":"Outputs","text":"
    • success:
      • 0 if the call was successful.
      • 1 if the call has reverted (also can be pushed earlier in a light failure scenario).
      • 2 if the call has failed.
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCALL--fork","title":"Fork","text":"

    Prague

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCALL--gas","title":"Gas","text":"
    static_gas = 0\ndynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost\n    + positive_value_cost + value_to_empty_account_cost\n

    Source: EIP-7069

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTDELEGATECALL","title":"EXTDELEGATECALL = Opcode(249, popped_stack_items=3, pushed_stack_items=1, kwargs=['address', 'args_offset', 'args_size']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTDELEGATECALL--extdelegatecalladdress-args_offset-args_size-address","title":"EXTDELEGATECALL(address, args_offset, args_size) = address","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTDELEGATECALL--description","title":"Description","text":"

    Message-call into this account with an alternative account's code, but persisting the current values for sender and value

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTDELEGATECALL--inputs","title":"Inputs","text":"
    • address: the account which context to execute
    • args_offset: byte offset in the memory in bytes, the calldata of the sub context
    • args_size: byte size to copy (size of the calldata)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTDELEGATECALL--outputs","title":"Outputs","text":"
    • success:
      • 0 if the call was successful.
      • 1 if the call has reverted (also can be pushed earlier in a light failure scenario).
      • 2 if the call has failed.
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTDELEGATECALL--fork","title":"Fork","text":"

    Prague

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTDELEGATECALL--gas","title":"Gas","text":"
    • static_gas = 0
    • dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost

    Source: EIP-7069

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STATICCALL","title":"STATICCALL = Opcode(250, popped_stack_items=6, pushed_stack_items=1, kwargs=['gas', 'address', 'args_offset', 'args_size', 'ret_offset', 'ret_size'], kwargs_defaults={'gas': GAS}) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STATICCALL--staticcallgas-address-args_offset-args_size-ret_offset-ret_size-success","title":"STATICCALL(gas, address, args_offset, args_size, ret_offset, ret_size) = success","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STATICCALL--description","title":"Description","text":"

    Static message-call into an account

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STATICCALL--inputs","title":"Inputs","text":"
    • gas: amount of gas to send to the sub context to execute. The gas that is not used by the sub context is returned to this one
    • address: the account which context to execute
    • args_offset: byte offset in the memory in bytes, the calldata of the sub context
    • args_size: byte size to copy (size of the calldata)
    • ret_offset: byte offset in the memory in bytes, where to store the return data of the sub context
    • ret_size: byte size to copy (size of the return data)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STATICCALL--outputs","title":"Outputs","text":"
    • success: return 0 if the sub context reverted, 1 otherwise
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STATICCALL--fork","title":"Fork","text":"

    Byzantium

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STATICCALL--gas","title":"Gas","text":"
    • static_gas = 0
    • dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost

    Source: evm.codes/#FA

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTSTATICCALL","title":"EXTSTATICCALL = Opcode(251, popped_stack_items=3, pushed_stack_items=1, kwargs=['address', 'args_offset', 'args_size']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTSTATICCALL--extstaticcalladdress-args_offset-args_size-address","title":"EXTSTATICCALL(address, args_offset, args_size) = address","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTSTATICCALL--description","title":"Description","text":"

    Static message-call into an account

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTSTATICCALL--inputs","title":"Inputs","text":"
    • address: the account which context to execute
    • args_offset: byte offset in the memory in bytes, the calldata of the sub context
    • args_size: byte size to copy (size of the calldata)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTSTATICCALL--outputs","title":"Outputs","text":"
    • success:
      • 0 if the call was successful.
      • 1 if the call has reverted (also can be pushed earlier in a light failure scenario).
      • 2 if the call has failed.
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTSTATICCALL--fork","title":"Fork","text":"

    Prague

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTSTATICCALL--gas","title":"Gas","text":"
    • static_gas = 0
    • dynamic_gas = memory_expansion_cost + code_execution_cost + address_access_cost

    Source: EIP-7069

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATALOAD","title":"RETURNDATALOAD = Opcode(247, popped_stack_items=1, pushed_stack_items=1, kwargs=['offset']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATALOAD--returndataloadoffset","title":"RETURNDATALOAD(offset)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATALOAD--description","title":"Description","text":"

    Copy 32 bytes from returndata at offset onto the stack

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATALOAD--inputs","title":"Inputs","text":"
    • offset: byte offset in the return data from the last executed sub context to copy
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATALOAD--fork","title":"Fork","text":"

    EOF

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATALOAD--gas","title":"Gas","text":"

    3

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.REVERT","title":"REVERT = Opcode(253, popped_stack_items=2, kwargs=['offset', 'size'], terminating=True) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.REVERT--revertoffset-size","title":"REVERT(offset, size)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.REVERT--description","title":"Description","text":"

    Halt execution reverting state changes but returning data and remaining gas

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.REVERT--inputs","title":"Inputs","text":"
    • offset: byte offset in the memory in bytes. The return data of the calling context
    • size: byte size to copy (size of the return data)
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.REVERT--fork","title":"Fork","text":"

    Byzantium

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.REVERT--gas","title":"Gas","text":"

    static_gas = 0 dynamic_gas = memory_expansion_cost

    Source: evm.codes/#FD

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.INVALID","title":"INVALID = Opcode(254, terminating=True) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.INVALID--invalid","title":"INVALID()","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.INVALID--description","title":"Description","text":"

    Designated invalid instruction

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.INVALID--inputs","title":"Inputs","text":"

    None

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.INVALID--outputs","title":"Outputs","text":"

    None

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.INVALID--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.INVALID--gas","title":"Gas","text":"

    All the remaining gas in this context is consumed

    Source: evm.codes/#FE

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFDESTRUCT","title":"SELFDESTRUCT = Opcode(255, popped_stack_items=1, kwargs=['address']) class-attribute instance-attribute","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFDESTRUCT--selfdestructaddress","title":"SELFDESTRUCT(address)","text":""},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFDESTRUCT--description","title":"Description","text":"

    Halt execution and register the account for later deletion

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFDESTRUCT--inputs","title":"Inputs","text":"
    • address: account to send the current balance to
    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFDESTRUCT--fork","title":"Fork","text":"

    Frontier

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SELFDESTRUCT--gas","title":"Gas","text":"

    5000

    Source: evm.codes/#FF

    "},{"location":"library/ethereum_test_vm/#ethereum_test_vm.UndefinedOpcodes","title":"UndefinedOpcodes","text":"

    Bases: Opcode, Enum

    Enum containing all unknown opcodes (88 at the moment).

    Source code in src/ethereum_test_vm/opcode.py
    class UndefinedOpcodes(Opcode, Enum):\n    \"\"\"\n    Enum containing all unknown opcodes (88 at the moment).\n    \"\"\"\n\n    OPCODE_0C = Opcode(0x0C)\n    OPCODE_0D = Opcode(0x0D)\n    OPCODE_0E = Opcode(0x0E)\n    OPCODE_0F = Opcode(0x0F)\n    OPCODE_1E = Opcode(0x1E)\n    OPCODE_1F = Opcode(0x1F)\n    OPCODE_21 = Opcode(0x21)\n    OPCODE_22 = Opcode(0x22)\n    OPCODE_23 = Opcode(0x23)\n    OPCODE_24 = Opcode(0x24)\n    OPCODE_25 = Opcode(0x25)\n    OPCODE_26 = Opcode(0x26)\n    OPCODE_27 = Opcode(0x27)\n    OPCODE_28 = Opcode(0x28)\n    OPCODE_29 = Opcode(0x29)\n    OPCODE_2A = Opcode(0x2A)\n    OPCODE_2B = Opcode(0x2B)\n    OPCODE_2C = Opcode(0x2C)\n    OPCODE_2D = Opcode(0x2D)\n    OPCODE_2E = Opcode(0x2E)\n    OPCODE_2F = Opcode(0x2F)\n    OPCODE_4B = Opcode(0x4B)\n    OPCODE_4C = Opcode(0x4C)\n    OPCODE_4D = Opcode(0x4D)\n    OPCODE_4E = Opcode(0x4E)\n    OPCODE_4F = Opcode(0x4F)\n    OPCODE_A5 = Opcode(0xA5)\n    OPCODE_A6 = Opcode(0xA6)\n    OPCODE_A7 = Opcode(0xA7)\n    OPCODE_A8 = Opcode(0xA8)\n    OPCODE_A9 = Opcode(0xA9)\n    OPCODE_AA = Opcode(0xAA)\n    OPCODE_AB = Opcode(0xAB)\n    OPCODE_AC = Opcode(0xAC)\n    OPCODE_AD = Opcode(0xAD)\n    OPCODE_AE = Opcode(0xAE)\n    OPCODE_AF = Opcode(0xAF)\n    OPCODE_B0 = Opcode(0xB0)\n    OPCODE_B1 = Opcode(0xB1)\n    OPCODE_B2 = Opcode(0xB2)\n    OPCODE_B3 = Opcode(0xB3)\n    OPCODE_B4 = Opcode(0xB4)\n    OPCODE_B5 = Opcode(0xB5)\n    OPCODE_B6 = Opcode(0xB6)\n    OPCODE_B7 = Opcode(0xB7)\n    OPCODE_B8 = Opcode(0xB8)\n    OPCODE_B9 = Opcode(0xB9)\n    OPCODE_BA = Opcode(0xBA)\n    OPCODE_BB = Opcode(0xBB)\n    OPCODE_BC = Opcode(0xBC)\n    OPCODE_BD = Opcode(0xBD)\n    OPCODE_BE = Opcode(0xBE)\n    OPCODE_BF = Opcode(0xBF)\n    OPCODE_C0 = Opcode(0xC0)\n    OPCODE_C1 = Opcode(0xC1)\n    OPCODE_C2 = Opcode(0xC2)\n    OPCODE_C3 = Opcode(0xC3)\n    OPCODE_C4 = Opcode(0xC4)\n    OPCODE_C5 = Opcode(0xC5)\n    OPCODE_C6 = Opcode(0xC6)\n    OPCODE_C7 = Opcode(0xC7)\n    OPCODE_C8 = Opcode(0xC8)\n    OPCODE_C9 = Opcode(0xC9)\n    OPCODE_CA = Opcode(0xCA)\n    OPCODE_CB = Opcode(0xCB)\n    OPCODE_CC = Opcode(0xCC)\n    OPCODE_CD = Opcode(0xCD)\n    OPCODE_CE = Opcode(0xCE)\n    OPCODE_CF = Opcode(0xCF)\n    OPCODE_D4 = Opcode(0xD4)\n    OPCODE_D5 = Opcode(0xD5)\n    OPCODE_D6 = Opcode(0xD6)\n    OPCODE_D7 = Opcode(0xD7)\n    OPCODE_D8 = Opcode(0xD8)\n    OPCODE_D9 = Opcode(0xD9)\n    OPCODE_DA = Opcode(0xDA)\n    OPCODE_DB = Opcode(0xDB)\n    OPCODE_DC = Opcode(0xDC)\n    OPCODE_DD = Opcode(0xDD)\n    OPCODE_DE = Opcode(0xDE)\n    OPCODE_DF = Opcode(0xDF)\n    OPCODE_E9 = Opcode(0xE9)\n    OPCODE_EA = Opcode(0xEA)\n    OPCODE_EB = Opcode(0xEB)\n    OPCODE_ED = Opcode(0xED)\n    OPCODE_EF = Opcode(0xEF)\n    OPCODE_F6 = Opcode(0xF6)\n    OPCODE_FC = Opcode(0xFC)\n
    "},{"location":"library/evm_transition_tool/","title":"EVM Transition Tool Package","text":"

    Library of Python wrappers for the different implementations of transition tools.

    "},{"location":"library/evm_transition_tool/#evm_transition_tool.BesuTransitionTool","title":"BesuTransitionTool","text":"

    Bases: TransitionTool

    Besu EvmTool Transition tool frontend wrapper class.

    Source code in src/evm_transition_tool/besu.py
    class BesuTransitionTool(TransitionTool):\n    \"\"\"\n    Besu EvmTool Transition tool frontend wrapper class.\n    \"\"\"\n\n    default_binary = Path(\"evm\")\n    detect_binary_pattern = compile(r\"^Hyperledger Besu evm .*$\")\n\n    binary: Path\n    cached_version: Optional[str] = None\n    trace: bool\n    process: Optional[subprocess.Popen] = None\n    server_url: str\n    besu_trace_dir: Optional[tempfile.TemporaryDirectory]\n\n    def __init__(\n        self,\n        *,\n        binary: Optional[Path] = None,\n        trace: bool = False,\n    ):\n        super().__init__(binary=binary, trace=trace)\n        args = [str(self.binary), \"t8n\", \"--help\"]\n        try:\n            result = subprocess.run(args, capture_output=True, text=True)\n        except subprocess.CalledProcessError as e:\n            raise Exception(\"evm process unexpectedly returned a non-zero status code: \" f\"{e}.\")\n        except Exception as e:\n            raise Exception(f\"Unexpected exception calling evm tool: {e}.\")\n        self.help_string = result.stdout\n        self.besu_trace_dir = tempfile.TemporaryDirectory() if self.trace else None\n\n    def start_server(self):\n        \"\"\"\n        Starts the t8n-server process, extracts the port, and leaves it running for future re-use.\n        \"\"\"\n        args = [\n            str(self.binary),\n            \"t8n-server\",\n            \"--port=0\",  # OS assigned server port\n        ]\n\n        if self.trace:\n            args.append(\"--trace\")\n            args.append(f\"--output.basedir={self.besu_trace_dir.name}\")\n\n        self.process = subprocess.Popen(\n            args=args,\n            stdout=subprocess.PIPE,\n            stderr=subprocess.STDOUT,\n        )\n\n        while True:\n            line = str(self.process.stdout.readline())\n\n            if not line or \"Failed to start transition server\" in line:\n                raise Exception(\"Failed starting Besu subprocess\\n\" + line)\n            if \"Transition server listening on\" in line:\n                port = re.search(\"Transition server listening on (\\\\d+)\", line).group(1)\n                self.server_url = f\"http://localhost:{port}/\"\n                break\n\n    def shutdown(self):\n        \"\"\"\n        Stops the t8n-server process if it was started\n        \"\"\"\n        if self.process:\n            self.process.kill()\n        if self.besu_trace_dir:\n            self.besu_trace_dir.cleanup()\n\n    def evaluate(\n        self,\n        *,\n        alloc: Alloc,\n        txs: List[Transaction],\n        env: Environment,\n        fork: Fork,\n        chain_id: int = 1,\n        reward: int = 0,\n        eips: Optional[List[int]] = None,\n        debug_output_path: str = \"\",\n    ) -> TransitionToolOutput:\n        \"\"\"\n        Executes `evm t8n` with the specified arguments.\n        \"\"\"\n        if not self.process:\n            self.start_server()\n\n        fork_name = fork.transition_tool_name(\n            block_number=env.number,\n            timestamp=env.timestamp,\n        )\n        if eips is not None:\n            fork_name = \"+\".join([fork_name] + [str(eip) for eip in eips])\n\n        input_json = TransitionToolInput(\n            alloc=alloc,\n            txs=txs,\n            env=env,\n        ).model_dump(mode=\"json\", **model_dump_config)\n\n        state_json = {\n            \"fork\": fork_name,\n            \"chainid\": chain_id,\n            \"reward\": reward,\n        }\n\n        post_data = {\"state\": state_json, \"input\": input_json}\n\n        if debug_output_path:\n            post_data_string = json.dumps(post_data, indent=4)\n            additional_indent = \" \" * 16  # for pretty indentation in t8n.sh\n            indented_post_data_string = \"{\\n\" + \"\\n\".join(\n                additional_indent + line for line in post_data_string[1:].splitlines()\n            )\n            t8n_script = textwrap.dedent(\n                f\"\"\"\\\n                #!/bin/bash\n                # Use $1 as t8n-server port if provided, else default to 3000\n                PORT=${{1:-3000}}\n                curl http://localhost:${{PORT}}/ -X POST -H \"Content-Type: application/json\" \\\\\n                --data '{indented_post_data_string}'\n                \"\"\"  # noqa: E221\n            )\n            dump_files_to_directory(\n                debug_output_path,\n                {\n                    \"state.json\": state_json,\n                    \"input/alloc.json\": input_json[\"alloc\"],\n                    \"input/env.json\": input_json[\"env\"],\n                    \"input/txs.json\": input_json[\"txs\"],\n                    \"t8n.sh+x\": t8n_script,\n                },\n            )\n\n        response = requests.post(self.server_url, json=post_data, timeout=5)\n        response.raise_for_status()  # exception visible in pytest failure output\n        output: TransitionToolOutput = TransitionToolOutput.model_validate(response.json())\n\n        if debug_output_path:\n            dump_files_to_directory(\n                debug_output_path,\n                {\n                    \"response.txt\": response.text,\n                    \"status_code.txt\": response.status_code,\n                    \"time_elapsed_seconds.txt\": response.elapsed.total_seconds(),\n                },\n            )\n\n        if response.status_code != 200:\n            raise Exception(\n                f\"t8n-server returned status code {response.status_code}, \"\n                f\"response: {response.text}\"\n            )\n\n        if debug_output_path:\n            dump_files_to_directory(\n                debug_output_path,\n                {\n                    \"output/alloc.json\": output.alloc.model_dump(mode=\"json\", **model_dump_config),\n                    \"output/result.json\": output.result.model_dump(\n                        mode=\"json\", **model_dump_config\n                    ),\n                    \"output/txs.rlp\": str(output.body),\n                },\n            )\n\n        if self.trace and self.besu_trace_dir:\n            self.collect_traces(output.result.receipts, self.besu_trace_dir, debug_output_path)\n            for i, r in enumerate(output.result.receipts):\n                trace_file_name = f\"trace-{i}-{r.transaction_hash}.jsonl\"\n                os.remove(os.path.join(self.besu_trace_dir.name, trace_file_name))\n\n        return output\n\n    def is_fork_supported(self, fork: Fork) -> bool:\n        \"\"\"\n        Returns True if the fork is supported by the tool\n        \"\"\"\n        return fork.transition_tool_name() in self.help_string\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.BesuTransitionTool.start_server","title":"start_server()","text":"

    Starts the t8n-server process, extracts the port, and leaves it running for future re-use.

    Source code in src/evm_transition_tool/besu.py
    def start_server(self):\n    \"\"\"\n    Starts the t8n-server process, extracts the port, and leaves it running for future re-use.\n    \"\"\"\n    args = [\n        str(self.binary),\n        \"t8n-server\",\n        \"--port=0\",  # OS assigned server port\n    ]\n\n    if self.trace:\n        args.append(\"--trace\")\n        args.append(f\"--output.basedir={self.besu_trace_dir.name}\")\n\n    self.process = subprocess.Popen(\n        args=args,\n        stdout=subprocess.PIPE,\n        stderr=subprocess.STDOUT,\n    )\n\n    while True:\n        line = str(self.process.stdout.readline())\n\n        if not line or \"Failed to start transition server\" in line:\n            raise Exception(\"Failed starting Besu subprocess\\n\" + line)\n        if \"Transition server listening on\" in line:\n            port = re.search(\"Transition server listening on (\\\\d+)\", line).group(1)\n            self.server_url = f\"http://localhost:{port}/\"\n            break\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.BesuTransitionTool.shutdown","title":"shutdown()","text":"

    Stops the t8n-server process if it was started

    Source code in src/evm_transition_tool/besu.py
    def shutdown(self):\n    \"\"\"\n    Stops the t8n-server process if it was started\n    \"\"\"\n    if self.process:\n        self.process.kill()\n    if self.besu_trace_dir:\n        self.besu_trace_dir.cleanup()\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.BesuTransitionTool.evaluate","title":"evaluate(*, alloc, txs, env, fork, chain_id=1, reward=0, eips=None, debug_output_path='')","text":"

    Executes evm t8n with the specified arguments.

    Source code in src/evm_transition_tool/besu.py
    def evaluate(\n    self,\n    *,\n    alloc: Alloc,\n    txs: List[Transaction],\n    env: Environment,\n    fork: Fork,\n    chain_id: int = 1,\n    reward: int = 0,\n    eips: Optional[List[int]] = None,\n    debug_output_path: str = \"\",\n) -> TransitionToolOutput:\n    \"\"\"\n    Executes `evm t8n` with the specified arguments.\n    \"\"\"\n    if not self.process:\n        self.start_server()\n\n    fork_name = fork.transition_tool_name(\n        block_number=env.number,\n        timestamp=env.timestamp,\n    )\n    if eips is not None:\n        fork_name = \"+\".join([fork_name] + [str(eip) for eip in eips])\n\n    input_json = TransitionToolInput(\n        alloc=alloc,\n        txs=txs,\n        env=env,\n    ).model_dump(mode=\"json\", **model_dump_config)\n\n    state_json = {\n        \"fork\": fork_name,\n        \"chainid\": chain_id,\n        \"reward\": reward,\n    }\n\n    post_data = {\"state\": state_json, \"input\": input_json}\n\n    if debug_output_path:\n        post_data_string = json.dumps(post_data, indent=4)\n        additional_indent = \" \" * 16  # for pretty indentation in t8n.sh\n        indented_post_data_string = \"{\\n\" + \"\\n\".join(\n            additional_indent + line for line in post_data_string[1:].splitlines()\n        )\n        t8n_script = textwrap.dedent(\n            f\"\"\"\\\n            #!/bin/bash\n            # Use $1 as t8n-server port if provided, else default to 3000\n            PORT=${{1:-3000}}\n            curl http://localhost:${{PORT}}/ -X POST -H \"Content-Type: application/json\" \\\\\n            --data '{indented_post_data_string}'\n            \"\"\"  # noqa: E221\n        )\n        dump_files_to_directory(\n            debug_output_path,\n            {\n                \"state.json\": state_json,\n                \"input/alloc.json\": input_json[\"alloc\"],\n                \"input/env.json\": input_json[\"env\"],\n                \"input/txs.json\": input_json[\"txs\"],\n                \"t8n.sh+x\": t8n_script,\n            },\n        )\n\n    response = requests.post(self.server_url, json=post_data, timeout=5)\n    response.raise_for_status()  # exception visible in pytest failure output\n    output: TransitionToolOutput = TransitionToolOutput.model_validate(response.json())\n\n    if debug_output_path:\n        dump_files_to_directory(\n            debug_output_path,\n            {\n                \"response.txt\": response.text,\n                \"status_code.txt\": response.status_code,\n                \"time_elapsed_seconds.txt\": response.elapsed.total_seconds(),\n            },\n        )\n\n    if response.status_code != 200:\n        raise Exception(\n            f\"t8n-server returned status code {response.status_code}, \"\n            f\"response: {response.text}\"\n        )\n\n    if debug_output_path:\n        dump_files_to_directory(\n            debug_output_path,\n            {\n                \"output/alloc.json\": output.alloc.model_dump(mode=\"json\", **model_dump_config),\n                \"output/result.json\": output.result.model_dump(\n                    mode=\"json\", **model_dump_config\n                ),\n                \"output/txs.rlp\": str(output.body),\n            },\n        )\n\n    if self.trace and self.besu_trace_dir:\n        self.collect_traces(output.result.receipts, self.besu_trace_dir, debug_output_path)\n        for i, r in enumerate(output.result.receipts):\n            trace_file_name = f\"trace-{i}-{r.transaction_hash}.jsonl\"\n            os.remove(os.path.join(self.besu_trace_dir.name, trace_file_name))\n\n    return output\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.BesuTransitionTool.is_fork_supported","title":"is_fork_supported(fork)","text":"

    Returns True if the fork is supported by the tool

    Source code in src/evm_transition_tool/besu.py
    def is_fork_supported(self, fork: Fork) -> bool:\n    \"\"\"\n    Returns True if the fork is supported by the tool\n    \"\"\"\n    return fork.transition_tool_name() in self.help_string\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.EvmOneTransitionTool","title":"EvmOneTransitionTool","text":"

    Bases: TransitionTool

    Evmone evmone-t8n Transition tool interface wrapper class.

    Source code in src/evm_transition_tool/evmone.py
    class EvmOneTransitionTool(TransitionTool):\n    \"\"\"\n    Evmone `evmone-t8n` Transition tool interface wrapper class.\n    \"\"\"\n\n    default_binary = Path(\"evmone-t8n\")\n    detect_binary_pattern = compile(r\"^evmone-t8n\\b\")\n    t8n_use_stream = False\n\n    binary: Path\n    cached_version: Optional[str] = None\n    trace: bool\n\n    def __init__(\n        self,\n        *,\n        binary: Optional[Path] = None,\n        trace: bool = False,\n    ):\n        super().__init__(binary=binary, trace=trace)\n\n    def is_fork_supported(self, fork: Fork) -> bool:\n        \"\"\"\n        Returns True if the fork is supported by the tool.\n        Currently, evmone-t8n provides no way to determine supported forks.\n        \"\"\"\n        return True\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.EvmOneTransitionTool.is_fork_supported","title":"is_fork_supported(fork)","text":"

    Returns True if the fork is supported by the tool. Currently, evmone-t8n provides no way to determine supported forks.

    Source code in src/evm_transition_tool/evmone.py
    def is_fork_supported(self, fork: Fork) -> bool:\n    \"\"\"\n    Returns True if the fork is supported by the tool.\n    Currently, evmone-t8n provides no way to determine supported forks.\n    \"\"\"\n    return True\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.ExecutionSpecsTransitionTool","title":"ExecutionSpecsTransitionTool","text":"

    Bases: GethTransitionTool

    Ethereum Specs ethereum-spec-evm Transition tool interface wrapper class.

    The behavior of this tool is almost identical to go-ethereum's evm t8n command.

    note: Using the latest version of the ethereum-spec-evm tool:

    As the `ethereum` package provided by `execution-specs` is a requirement of\n`execution-spec-tests`, the `ethereum-spec-evm` is already installed in the\nvirtual environment where `execution-spec-tests` is installed\n(via `pip install -e .`). Therefore, the `ethereum-spec-evm` transition tool\ncan be used to fill tests via:\n\n```console\n    fill --evm-bin=ethereum-spec-evm\n```\n\nTo ensure you're using the latest version of `ethereum-spec-evm` you can run:\n\n```\npip install --force-reinstall -e .\n```\n\nor\n\n```\npip install --force-reinstall -e .[docs,lint,tests]\n```\n\nas appropriate.\n

    note: Using a specific version of the ethereum-spec-evm tool:

    1. Create a virtual environment and activate it:\n    ```\n    python -m venv venv-execution-specs\n    source venv-execution-specs/bin/activate\n    ```\n2. Clone the ethereum/execution-specs repository, change working directory to it and\n    retrieve the desired version of the repository:\n    ```\n    git clone git@github.com:ethereum/execution-specs.git\n    cd execution-specs\n    git checkout <version>\n    ```\n3. Install the packages provided by the repository:\n    ```\n    pip install -e .\n    ```\n    Check that the `ethereum-spec-evm` command is available:\n    ```\n    ethereum-spec-evm --help\n    ```\n4. Clone the ethereum/execution-specs-tests repository and change working directory to it:\n    ```\n    cd ..\n    git clone git@github.com:ethereum/execution-spec-tests.git\n    cd execution-spec-tests\n    ```\n5. Install the packages provided by the ethereum/execution-spec-tests repository:\n    ```\n    pip install -e .\n    ```\n6. Run the tests, specifying the `ethereum-spec-evm` command as the transition tool:\n    ```\n    fill --evm-bin=path/to/venv-execution-specs/ethereum-spec-evm\n    ```\n
    Source code in src/evm_transition_tool/execution_specs.py
    class ExecutionSpecsTransitionTool(GethTransitionTool):\n    \"\"\"\n    Ethereum Specs `ethereum-spec-evm` Transition tool interface wrapper class.\n\n    The behavior of this tool is almost identical to go-ethereum's `evm t8n` command.\n\n    note: Using the latest version of the `ethereum-spec-evm` tool:\n\n        As the `ethereum` package provided by `execution-specs` is a requirement of\n        `execution-spec-tests`, the `ethereum-spec-evm` is already installed in the\n        virtual environment where `execution-spec-tests` is installed\n        (via `pip install -e .`). Therefore, the `ethereum-spec-evm` transition tool\n        can be used to fill tests via:\n\n        ```console\n            fill --evm-bin=ethereum-spec-evm\n        ```\n\n        To ensure you're using the latest version of `ethereum-spec-evm` you can run:\n\n        ```\n        pip install --force-reinstall -e .\n        ```\n\n        or\n\n        ```\n        pip install --force-reinstall -e .[docs,lint,tests]\n        ```\n\n        as appropriate.\n\n    note: Using a specific version of the `ethereum-spec-evm` tool:\n\n        1. Create a virtual environment and activate it:\n            ```\n            python -m venv venv-execution-specs\n            source venv-execution-specs/bin/activate\n            ```\n        2. Clone the ethereum/execution-specs repository, change working directory to it and\n            retrieve the desired version of the repository:\n            ```\n            git clone git@github.com:ethereum/execution-specs.git\n            cd execution-specs\n            git checkout <version>\n            ```\n        3. Install the packages provided by the repository:\n            ```\n            pip install -e .\n            ```\n            Check that the `ethereum-spec-evm` command is available:\n            ```\n            ethereum-spec-evm --help\n            ```\n        4. Clone the ethereum/execution-specs-tests repository and change working directory to it:\n            ```\n            cd ..\n            git clone git@github.com:ethereum/execution-spec-tests.git\n            cd execution-spec-tests\n            ```\n        5. Install the packages provided by the ethereum/execution-spec-tests repository:\n            ```\n            pip install -e .\n            ```\n        6. Run the tests, specifying the `ethereum-spec-evm` command as the transition tool:\n            ```\n            fill --evm-bin=path/to/venv-execution-specs/ethereum-spec-evm\n            ```\n    \"\"\"\n\n    default_binary = Path(\"ethereum-spec-evm\")\n    detect_binary_pattern = compile(r\"^ethereum-spec-evm\\b\")\n    statetest_subcommand: Optional[str] = None\n    blocktest_subcommand: Optional[str] = None\n\n    def is_fork_supported(self, fork: Fork) -> bool:\n        \"\"\"\n        Returns True if the fork is supported by the tool.\n        Currently, ethereum-spec-evm provides no way to determine supported forks.\n        \"\"\"\n        return fork not in UNSUPPORTED_FORKS\n\n    def get_blocktest_help(self) -> str:\n        \"\"\"\n        Return the help string for the blocktest subcommand.\n        \"\"\"\n        raise NotImplementedError(\n            \"The `blocktest` command is not supported by the ethereum-spec-evm. \"\n            \"Use geth's evm tool.\"\n        )\n\n    def verify_fixture(\n        self,\n        fixture_format: FixtureFormats,\n        fixture_path: Path,\n        fixture_name: Optional[str] = None,\n        debug_output_path: Optional[Path] = None,\n    ):\n        \"\"\"\n        Executes `evm [state|block]test` to verify the fixture at `fixture_path`.\n\n        Currently only implemented by geth's evm.\n        \"\"\"\n        raise NotImplementedError(\n            \"The `verify_fixture()` function is not supported by the ethereum-spec-evm. \"\n            \"Use geth's evm tool.\"\n        )\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.ExecutionSpecsTransitionTool.is_fork_supported","title":"is_fork_supported(fork)","text":"

    Returns True if the fork is supported by the tool. Currently, ethereum-spec-evm provides no way to determine supported forks.

    Source code in src/evm_transition_tool/execution_specs.py
    def is_fork_supported(self, fork: Fork) -> bool:\n    \"\"\"\n    Returns True if the fork is supported by the tool.\n    Currently, ethereum-spec-evm provides no way to determine supported forks.\n    \"\"\"\n    return fork not in UNSUPPORTED_FORKS\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.ExecutionSpecsTransitionTool.get_blocktest_help","title":"get_blocktest_help()","text":"

    Return the help string for the blocktest subcommand.

    Source code in src/evm_transition_tool/execution_specs.py
    def get_blocktest_help(self) -> str:\n    \"\"\"\n    Return the help string for the blocktest subcommand.\n    \"\"\"\n    raise NotImplementedError(\n        \"The `blocktest` command is not supported by the ethereum-spec-evm. \"\n        \"Use geth's evm tool.\"\n    )\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.ExecutionSpecsTransitionTool.verify_fixture","title":"verify_fixture(fixture_format, fixture_path, fixture_name=None, debug_output_path=None)","text":"

    Executes evm [state|block]test to verify the fixture at fixture_path.

    Currently only implemented by geth's evm.

    Source code in src/evm_transition_tool/execution_specs.py
    def verify_fixture(\n    self,\n    fixture_format: FixtureFormats,\n    fixture_path: Path,\n    fixture_name: Optional[str] = None,\n    debug_output_path: Optional[Path] = None,\n):\n    \"\"\"\n    Executes `evm [state|block]test` to verify the fixture at `fixture_path`.\n\n    Currently only implemented by geth's evm.\n    \"\"\"\n    raise NotImplementedError(\n        \"The `verify_fixture()` function is not supported by the ethereum-spec-evm. \"\n        \"Use geth's evm tool.\"\n    )\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.GethTransitionTool","title":"GethTransitionTool","text":"

    Bases: TransitionTool

    Go-ethereum evm Transition tool interface wrapper class.

    Source code in src/evm_transition_tool/geth.py
    class GethTransitionTool(TransitionTool):\n    \"\"\"\n    Go-ethereum `evm` Transition tool interface wrapper class.\n    \"\"\"\n\n    default_binary = Path(\"evm\")\n    detect_binary_pattern = compile(r\"^evm(.exe)? version\\b\")\n    t8n_subcommand: Optional[str] = \"t8n\"\n    statetest_subcommand: Optional[str] = \"statetest\"\n    blocktest_subcommand: Optional[str] = \"blocktest\"\n\n    binary: Path\n    cached_version: Optional[str] = None\n    trace: bool\n\n    def __init__(\n        self,\n        *,\n        binary: Optional[Path] = None,\n        trace: bool = False,\n    ):\n        super().__init__(binary=binary, trace=trace)\n        args = [str(self.binary), str(self.t8n_subcommand), \"--help\"]\n        try:\n            result = subprocess.run(args, capture_output=True, text=True)\n        except subprocess.CalledProcessError as e:\n            raise Exception(\"evm process unexpectedly returned a non-zero status code: \" f\"{e}.\")\n        except Exception as e:\n            raise Exception(f\"Unexpected exception calling evm tool: {e}.\")\n        self.help_string = result.stdout\n\n    def is_fork_supported(self, fork: Fork) -> bool:\n        \"\"\"\n        Returns True if the fork is supported by the tool.\n\n        If the fork is a transition fork, we want to check the fork it transitions to.\n        \"\"\"\n        return fork.transition_tool_name() in self.help_string\n\n    def get_blocktest_help(self) -> str:\n        \"\"\"\n        Return the help string for the blocktest subcommand.\n        \"\"\"\n        args = [str(self.binary), \"blocktest\", \"--help\"]\n        try:\n            result = subprocess.run(args, capture_output=True, text=True)\n        except subprocess.CalledProcessError as e:\n            raise Exception(\"evm process unexpectedly returned a non-zero status code: \" f\"{e}.\")\n        except Exception as e:\n            raise Exception(f\"Unexpected exception calling evm tool: {e}.\")\n        return result.stdout\n\n    def verify_fixture(\n        self,\n        fixture_format: FixtureFormats,\n        fixture_path: Path,\n        fixture_name: Optional[str] = None,\n        debug_output_path: Optional[Path] = None,\n    ):\n        \"\"\"\n        Executes `evm [state|block]test` to verify the fixture at `fixture_path`.\n        \"\"\"\n        command: list[str] = [str(self.binary)]\n\n        if debug_output_path:\n            command += [\"--debug\", \"--json\", \"--verbosity\", \"100\"]\n\n        if FixtureFormats.is_state_test(fixture_format):\n            assert self.statetest_subcommand, \"statetest subcommand not set\"\n            command.append(self.statetest_subcommand)\n        elif FixtureFormats.is_blockchain_test(fixture_format):\n            assert self.blocktest_subcommand, \"blocktest subcommand not set\"\n            command.append(self.blocktest_subcommand)\n        else:\n            raise Exception(f\"Invalid test fixture format: {fixture_format}\")\n\n        if fixture_name and fixture_format == FixtureFormats.BLOCKCHAIN_TEST:\n            assert isinstance(fixture_name, str), \"fixture_name must be a string\"\n            command.append(\"--run\")\n            command.append(fixture_name)\n        command.append(str(fixture_path))\n\n        result = subprocess.run(\n            command,\n            stdout=subprocess.PIPE,\n            stderr=subprocess.PIPE,\n        )\n\n        if debug_output_path:\n            debug_fixture_path = debug_output_path / \"fixtures.json\"\n            # Use the local copy of the fixture in the debug directory\n            verify_fixtures_call = \" \".join(command[:-1]) + f\" {debug_fixture_path}\"\n            verify_fixtures_script = textwrap.dedent(\n                f\"\"\"\\\n                #!/bin/bash\n                {verify_fixtures_call}\n                \"\"\"\n            )\n            dump_files_to_directory(\n                str(debug_output_path),\n                {\n                    \"verify_fixtures_args.py\": command,\n                    \"verify_fixtures_returncode.txt\": result.returncode,\n                    \"verify_fixtures_stdout.txt\": result.stdout.decode(),\n                    \"verify_fixtures_stderr.txt\": result.stderr.decode(),\n                    \"verify_fixtures.sh+x\": verify_fixtures_script,\n                },\n            )\n            shutil.copyfile(fixture_path, debug_fixture_path)\n\n        if result.returncode != 0:\n            raise Exception(\n                f\"EVM test failed.\\n{' '.join(command)}\\n\\n Error:\\n{result.stderr.decode()}\"\n            )\n\n        if FixtureFormats.is_state_test(fixture_format):\n            result_json = json.loads(result.stdout.decode())\n            if not isinstance(result_json, list):\n                raise Exception(f\"Unexpected result from evm statetest: {result_json}\")\n        else:\n            result_json = []  # there is no parseable format for blocktest output\n        return result_json\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.GethTransitionTool.is_fork_supported","title":"is_fork_supported(fork)","text":"

    Returns True if the fork is supported by the tool.

    If the fork is a transition fork, we want to check the fork it transitions to.

    Source code in src/evm_transition_tool/geth.py
    def is_fork_supported(self, fork: Fork) -> bool:\n    \"\"\"\n    Returns True if the fork is supported by the tool.\n\n    If the fork is a transition fork, we want to check the fork it transitions to.\n    \"\"\"\n    return fork.transition_tool_name() in self.help_string\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.GethTransitionTool.get_blocktest_help","title":"get_blocktest_help()","text":"

    Return the help string for the blocktest subcommand.

    Source code in src/evm_transition_tool/geth.py
    def get_blocktest_help(self) -> str:\n    \"\"\"\n    Return the help string for the blocktest subcommand.\n    \"\"\"\n    args = [str(self.binary), \"blocktest\", \"--help\"]\n    try:\n        result = subprocess.run(args, capture_output=True, text=True)\n    except subprocess.CalledProcessError as e:\n        raise Exception(\"evm process unexpectedly returned a non-zero status code: \" f\"{e}.\")\n    except Exception as e:\n        raise Exception(f\"Unexpected exception calling evm tool: {e}.\")\n    return result.stdout\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.GethTransitionTool.verify_fixture","title":"verify_fixture(fixture_format, fixture_path, fixture_name=None, debug_output_path=None)","text":"

    Executes evm [state|block]test to verify the fixture at fixture_path.

    Source code in src/evm_transition_tool/geth.py
    def verify_fixture(\n    self,\n    fixture_format: FixtureFormats,\n    fixture_path: Path,\n    fixture_name: Optional[str] = None,\n    debug_output_path: Optional[Path] = None,\n):\n    \"\"\"\n    Executes `evm [state|block]test` to verify the fixture at `fixture_path`.\n    \"\"\"\n    command: list[str] = [str(self.binary)]\n\n    if debug_output_path:\n        command += [\"--debug\", \"--json\", \"--verbosity\", \"100\"]\n\n    if FixtureFormats.is_state_test(fixture_format):\n        assert self.statetest_subcommand, \"statetest subcommand not set\"\n        command.append(self.statetest_subcommand)\n    elif FixtureFormats.is_blockchain_test(fixture_format):\n        assert self.blocktest_subcommand, \"blocktest subcommand not set\"\n        command.append(self.blocktest_subcommand)\n    else:\n        raise Exception(f\"Invalid test fixture format: {fixture_format}\")\n\n    if fixture_name and fixture_format == FixtureFormats.BLOCKCHAIN_TEST:\n        assert isinstance(fixture_name, str), \"fixture_name must be a string\"\n        command.append(\"--run\")\n        command.append(fixture_name)\n    command.append(str(fixture_path))\n\n    result = subprocess.run(\n        command,\n        stdout=subprocess.PIPE,\n        stderr=subprocess.PIPE,\n    )\n\n    if debug_output_path:\n        debug_fixture_path = debug_output_path / \"fixtures.json\"\n        # Use the local copy of the fixture in the debug directory\n        verify_fixtures_call = \" \".join(command[:-1]) + f\" {debug_fixture_path}\"\n        verify_fixtures_script = textwrap.dedent(\n            f\"\"\"\\\n            #!/bin/bash\n            {verify_fixtures_call}\n            \"\"\"\n        )\n        dump_files_to_directory(\n            str(debug_output_path),\n            {\n                \"verify_fixtures_args.py\": command,\n                \"verify_fixtures_returncode.txt\": result.returncode,\n                \"verify_fixtures_stdout.txt\": result.stdout.decode(),\n                \"verify_fixtures_stderr.txt\": result.stderr.decode(),\n                \"verify_fixtures.sh+x\": verify_fixtures_script,\n            },\n        )\n        shutil.copyfile(fixture_path, debug_fixture_path)\n\n    if result.returncode != 0:\n        raise Exception(\n            f\"EVM test failed.\\n{' '.join(command)}\\n\\n Error:\\n{result.stderr.decode()}\"\n        )\n\n    if FixtureFormats.is_state_test(fixture_format):\n        result_json = json.loads(result.stdout.decode())\n        if not isinstance(result_json, list):\n            raise Exception(f\"Unexpected result from evm statetest: {result_json}\")\n    else:\n        result_json = []  # there is no parseable format for blocktest output\n    return result_json\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.NimbusTransitionTool","title":"NimbusTransitionTool","text":"

    Bases: TransitionTool

    Nimbus evm Transition tool interface wrapper class.

    Source code in src/evm_transition_tool/nimbus.py
    class NimbusTransitionTool(TransitionTool):\n    \"\"\"\n    Nimbus `evm` Transition tool interface wrapper class.\n    \"\"\"\n\n    default_binary = Path(\"t8n\")\n    detect_binary_pattern = compile(r\"^Nimbus-t8n\\b\")\n    version_flag: str = \"--version\"\n\n    binary: Path\n    cached_version: Optional[str] = None\n    trace: bool\n\n    def __init__(\n        self,\n        *,\n        binary: Optional[Path] = None,\n        trace: bool = False,\n    ):\n        super().__init__(binary=binary, trace=trace)\n        args = [str(self.binary), \"--help\"]\n        try:\n            result = subprocess.run(args, capture_output=True, text=True)\n        except subprocess.CalledProcessError as e:\n            raise Exception(\"evm process unexpectedly returned a non-zero status code: \" f\"{e}.\")\n        except Exception as e:\n            raise Exception(f\"Unexpected exception calling evm tool: {e}.\")\n        self.help_string = result.stdout\n\n    def version(self) -> str:\n        \"\"\"\n        Gets `evm` binary version.\n        \"\"\"\n        if self.cached_version is None:\n            self.cached_version = re.sub(r\"\\x1b\\[0m\", \"\", super().version()).strip()\n\n        return self.cached_version\n\n    def is_fork_supported(self, fork: Fork) -> bool:\n        \"\"\"\n        Returns True if the fork is supported by the tool.\n\n        If the fork is a transition fork, we want to check the fork it transitions to.\n        \"\"\"\n        return fork.transition_tool_name() in self.help_string\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.NimbusTransitionTool.version","title":"version()","text":"

    Gets evm binary version.

    Source code in src/evm_transition_tool/nimbus.py
    def version(self) -> str:\n    \"\"\"\n    Gets `evm` binary version.\n    \"\"\"\n    if self.cached_version is None:\n        self.cached_version = re.sub(r\"\\x1b\\[0m\", \"\", super().version()).strip()\n\n    return self.cached_version\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.NimbusTransitionTool.is_fork_supported","title":"is_fork_supported(fork)","text":"

    Returns True if the fork is supported by the tool.

    If the fork is a transition fork, we want to check the fork it transitions to.

    Source code in src/evm_transition_tool/nimbus.py
    def is_fork_supported(self, fork: Fork) -> bool:\n    \"\"\"\n    Returns True if the fork is supported by the tool.\n\n    If the fork is a transition fork, we want to check the fork it transitions to.\n    \"\"\"\n    return fork.transition_tool_name() in self.help_string\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool","title":"TransitionTool","text":"

    Bases: FixtureVerifier

    Transition tool abstract base class which should be inherited by all transition tool implementations.

    Source code in src/evm_transition_tool/transition_tool.py
    class TransitionTool(FixtureVerifier):\n    \"\"\"\n    Transition tool abstract base class which should be inherited by all transition tool\n    implementations.\n    \"\"\"\n\n    traces: List[List[List[Dict]]] | None = None\n\n    registered_tools: List[Type[\"TransitionTool\"]] = []\n    default_tool: Optional[Type[\"TransitionTool\"]] = None\n    default_binary: Path\n    detect_binary_pattern: Pattern\n    version_flag: str = \"-v\"\n    t8n_subcommand: Optional[str] = None\n    statetest_subcommand: Optional[str] = None\n    blocktest_subcommand: Optional[str] = None\n    cached_version: Optional[str] = None\n    t8n_use_stream: bool = True\n\n    # Abstract methods that each tool must implement\n\n    @abstractmethod\n    def __init__(\n        self,\n        *,\n        binary: Optional[Path] = None,\n        trace: bool = False,\n    ):\n        \"\"\"\n        Abstract initialization method that all subclasses must implement.\n        \"\"\"\n        if binary is None:\n            binary = self.default_binary\n        else:\n            # improve behavior of which by resolving the path: ~/relative paths don't work\n            resolved_path = Path(os.path.expanduser(binary)).resolve()\n            if resolved_path.exists():\n                binary = resolved_path\n        binary = shutil.which(binary)  # type: ignore\n        if not binary:\n            raise TransitionToolNotFoundInPath(binary=binary)\n        self.binary = Path(binary)\n        self.trace = trace\n\n    def __init_subclass__(cls):\n        \"\"\"\n        Registers all subclasses of TransitionTool as possible tools.\n        \"\"\"\n        TransitionTool.register_tool(cls)\n\n    @classmethod\n    def register_tool(cls, tool_subclass: Type[\"TransitionTool\"]):\n        \"\"\"\n        Registers a given subclass as tool option.\n        \"\"\"\n        cls.registered_tools.append(tool_subclass)\n\n    @classmethod\n    def set_default_tool(cls, tool_subclass: Type[\"TransitionTool\"]):\n        \"\"\"\n        Registers the default tool subclass.\n        \"\"\"\n        cls.default_tool = tool_subclass\n\n    @classmethod\n    def from_binary_path(cls, *, binary_path: Optional[Path], **kwargs) -> \"TransitionTool\":\n        \"\"\"\n        Instantiates the appropriate TransitionTool subclass derived from the\n        tool's binary path.\n        \"\"\"\n        assert cls.default_tool is not None, \"default transition tool was never set\"\n\n        if binary_path is None:\n            return cls.default_tool(binary=binary_path, **kwargs)\n\n        resolved_path = Path(os.path.expanduser(binary_path)).resolve()\n        if resolved_path.exists():\n            binary_path = resolved_path\n        binary = shutil.which(binary_path)  # type: ignore\n\n        if not binary:\n            raise TransitionToolNotFoundInPath(binary=binary)\n\n        binary = Path(binary)\n\n        # Group the tools by version flag, so we only have to call the tool once for all the\n        # classes that share the same version flag\n        for version_flag, subclasses in groupby(\n            cls.registered_tools, key=lambda x: x.version_flag\n        ):\n            try:\n                result = subprocess.run(\n                    [binary, version_flag], stdout=subprocess.PIPE, stderr=subprocess.PIPE\n                )\n                if result.returncode != 0:\n                    raise Exception(f\"Non-zero return code: {result.returncode}\")\n\n                if result.stderr:\n                    raise Exception(f\"Tool wrote to stderr: {result.stderr.decode()}\")\n\n                binary_output = \"\"\n                if result.stdout:\n                    binary_output = result.stdout.decode().strip()\n            except Exception:\n                # If the tool doesn't support the version flag,\n                # we'll get an non-zero exit code.\n                continue\n            for subclass in subclasses:\n                if subclass.detect_binary(binary_output):\n                    return subclass(binary=binary, **kwargs)\n\n        raise UnknownTransitionTool(f\"Unknown transition tool binary: {binary_path}\")\n\n    @classmethod\n    def detect_binary(cls, binary_output: str) -> bool:\n        \"\"\"\n        Returns True if the binary matches the tool\n        \"\"\"\n        assert cls.detect_binary_pattern is not None\n\n        return cls.detect_binary_pattern.match(binary_output) is not None\n\n    def version(self) -> str:\n        \"\"\"\n        Return name and version of tool used to state transition\n        \"\"\"\n        if self.cached_version is None:\n            result = subprocess.run(\n                [str(self.binary), self.version_flag],\n                stdout=subprocess.PIPE,\n            )\n\n            if result.returncode != 0:\n                raise Exception(\"failed to evaluate: \" + result.stderr.decode())\n\n            self.cached_version = result.stdout.decode().strip()\n\n        return self.cached_version\n\n    @abstractmethod\n    def is_fork_supported(self, fork: Fork) -> bool:\n        \"\"\"\n        Returns True if the fork is supported by the tool\n        \"\"\"\n        pass\n\n    def shutdown(self):\n        \"\"\"\n        Perform any cleanup tasks related to the tested tool.\n        \"\"\"\n        pass\n\n    def reset_traces(self):\n        \"\"\"\n        Resets the internal trace storage for a new test to begin\n        \"\"\"\n        self.traces = None\n\n    def append_traces(self, new_traces: List[List[Dict]]):\n        \"\"\"\n        Appends a list of traces of a state transition to the current list\n        \"\"\"\n        if self.traces is None:\n            self.traces = []\n        self.traces.append(new_traces)\n\n    def get_traces(self) -> List[List[List[Dict]]] | None:\n        \"\"\"\n        Returns the accumulated traces\n        \"\"\"\n        return self.traces\n\n    def collect_traces(\n        self,\n        receipts: List[TransactionReceipt],\n        temp_dir: tempfile.TemporaryDirectory,\n        debug_output_path: str = \"\",\n    ) -> None:\n        \"\"\"\n        Collect the traces from the t8n tool output and store them in the traces list.\n        \"\"\"\n        traces: List[List[Dict]] = []\n        for i, r in enumerate(receipts):\n            trace_file_name = f\"trace-{i}-{r.transaction_hash}.jsonl\"\n            if debug_output_path:\n                shutil.copy(\n                    os.path.join(temp_dir.name, trace_file_name),\n                    os.path.join(debug_output_path, trace_file_name),\n                )\n            with open(os.path.join(temp_dir.name, trace_file_name), \"r\") as trace_file:\n                tx_traces: List[Dict] = []\n                for trace_line in trace_file.readlines():\n                    tx_traces.append(json.loads(trace_line))\n                traces.append(tx_traces)\n        self.append_traces(traces)\n\n    @dataclass\n    class TransitionToolData:\n        \"\"\"\n        Transition tool files and data to pass between methods\n        \"\"\"\n\n        alloc: Alloc\n        txs: List[Transaction]\n        env: Environment\n        fork_name: str\n        chain_id: int = field(default=1)\n        reward: int = field(default=0)\n\n        def to_input(self) -> TransitionToolInput:\n            \"\"\"\n            Convert the data to a TransactionToolInput object\n            \"\"\"\n            return TransitionToolInput(\n                alloc=self.alloc,\n                txs=self.txs,\n                env=self.env,\n            )\n\n    def _evaluate_filesystem(\n        self,\n        *,\n        t8n_data: TransitionToolData,\n        debug_output_path: str = \"\",\n    ) -> TransitionToolOutput:\n        \"\"\"\n        Executes a transition tool using the filesystem for its inputs and outputs.\n        \"\"\"\n        temp_dir = tempfile.TemporaryDirectory()\n        os.mkdir(os.path.join(temp_dir.name, \"input\"))\n        os.mkdir(os.path.join(temp_dir.name, \"output\"))\n\n        input_contents = t8n_data.to_input().model_dump(mode=\"json\", **model_dump_config)\n\n        input_paths = {\n            k: os.path.join(temp_dir.name, \"input\", f\"{k}.json\") for k in input_contents.keys()\n        }\n        for key, file_path in input_paths.items():\n            write_json_file(input_contents[key], file_path)\n\n        output_paths = {\n            output: os.path.join(\"output\", f\"{output}.json\") for output in [\"alloc\", \"result\"]\n        }\n        output_paths[\"body\"] = os.path.join(\"output\", \"txs.rlp\")\n\n        # Construct args for evmone-t8n binary\n        args = [\n            str(self.binary),\n            \"--state.fork\",\n            t8n_data.fork_name,\n            \"--input.alloc\",\n            input_paths[\"alloc\"],\n            \"--input.env\",\n            input_paths[\"env\"],\n            \"--input.txs\",\n            input_paths[\"txs\"],\n            \"--output.basedir\",\n            temp_dir.name,\n            \"--output.result\",\n            output_paths[\"result\"],\n            \"--output.alloc\",\n            output_paths[\"alloc\"],\n            \"--output.body\",\n            output_paths[\"body\"],\n            \"--state.reward\",\n            str(t8n_data.reward),\n            \"--state.chainid\",\n            str(t8n_data.chain_id),\n        ]\n\n        if self.trace:\n            args.append(\"--trace\")\n\n        result = subprocess.run(\n            args,\n            stdout=subprocess.PIPE,\n            stderr=subprocess.PIPE,\n        )\n\n        if debug_output_path:\n            if os.path.exists(debug_output_path):\n                shutil.rmtree(debug_output_path)\n            shutil.copytree(temp_dir.name, debug_output_path)\n            t8n_output_base_dir = os.path.join(debug_output_path, \"t8n.sh.out\")\n            t8n_call = \" \".join(args)\n            for file_path in input_paths.values():  # update input paths\n                t8n_call = t8n_call.replace(\n                    os.path.dirname(file_path), os.path.join(debug_output_path, \"input\")\n                )\n            t8n_call = t8n_call.replace(  # use a new output path for basedir and outputs\n                temp_dir.name,\n                t8n_output_base_dir,\n            )\n            t8n_script = textwrap.dedent(\n                f\"\"\"\\\n                #!/bin/bash\n                rm -rf {debug_output_path}/t8n.sh.out  # hard-coded to avoid surprises\n                mkdir -p {debug_output_path}/t8n.sh.out/output\n                {t8n_call}\n                \"\"\"\n            )\n            dump_files_to_directory(\n                debug_output_path,\n                {\n                    \"args.py\": args,\n                    \"returncode.txt\": result.returncode,\n                    \"stdout.txt\": result.stdout.decode(),\n                    \"stderr.txt\": result.stderr.decode(),\n                    \"t8n.sh+x\": t8n_script,\n                },\n            )\n\n        if result.returncode != 0:\n            raise Exception(\"failed to evaluate: \" + result.stderr.decode())\n\n        for key, file_path in output_paths.items():\n            output_paths[key] = os.path.join(temp_dir.name, file_path)\n\n        output_contents = {}\n        for key, file_path in output_paths.items():\n            if \"txs.rlp\" in file_path:\n                continue\n            with open(file_path, \"r+\") as file:\n                output_contents[key] = json.load(file)\n        output = TransitionToolOutput(**output_contents)\n        if self.trace:\n            self.collect_traces(output.result.receipts, temp_dir, debug_output_path)\n\n        temp_dir.cleanup()\n\n        return output\n\n    def _evaluate_stream(\n        self,\n        *,\n        t8n_data: TransitionToolData,\n        debug_output_path: str = \"\",\n    ) -> TransitionToolOutput:\n        \"\"\"\n        Executes a transition tool using stdin and stdout for its inputs and outputs.\n        \"\"\"\n        temp_dir = tempfile.TemporaryDirectory()\n        args = self.construct_args_stream(t8n_data, temp_dir)\n\n        stdin = t8n_data.to_input()\n\n        result = subprocess.run(\n            args,\n            input=stdin.model_dump_json(**model_dump_config).encode(),\n            stdout=subprocess.PIPE,\n            stderr=subprocess.PIPE,\n        )\n\n        self.dump_debug_stream(debug_output_path, temp_dir, stdin, args, result)\n\n        if result.returncode != 0:\n            raise Exception(\"failed to evaluate: \" + result.stderr.decode())\n\n        output: TransitionToolOutput = TransitionToolOutput.model_validate_json(result.stdout)\n\n        if debug_output_path:\n            dump_files_to_directory(\n                debug_output_path,\n                {\n                    \"output/alloc.json\": output.alloc,\n                    \"output/result.json\": output.result,\n                    \"output/txs.rlp\": str(output.body),\n                },\n            )\n\n        if self.trace:\n            self.collect_traces(output.result.receipts, temp_dir, debug_output_path)\n            temp_dir.cleanup()\n\n        return output\n\n    def construct_args_stream(\n        self, t8n_data: TransitionToolData, temp_dir: tempfile.TemporaryDirectory\n    ) -> List[str]:\n        \"\"\"\n        Construct arguments for t8n interaction via streams\n        \"\"\"\n        command: list[str] = [str(self.binary)]\n        if self.t8n_subcommand:\n            command.append(self.t8n_subcommand)\n\n        args = command + [\n            \"--input.alloc=stdin\",\n            \"--input.txs=stdin\",\n            \"--input.env=stdin\",\n            \"--output.result=stdout\",\n            \"--output.alloc=stdout\",\n            \"--output.body=stdout\",\n            f\"--state.fork={t8n_data.fork_name}\",\n            f\"--state.chainid={t8n_data.chain_id}\",\n            f\"--state.reward={t8n_data.reward}\",\n        ]\n\n        if self.trace:\n            args.append(\"--trace\")\n            args.append(f\"--output.basedir={temp_dir.name}\")\n        return args\n\n    def dump_debug_stream(\n        self,\n        debug_output_path: str,\n        temp_dir: tempfile.TemporaryDirectory,\n        stdin: TransitionToolInput,\n        args: List[str],\n        result: subprocess.CompletedProcess,\n    ):\n        \"\"\"\n        Export debug files if requested when interacting with t8n via streams\n        \"\"\"\n        if not debug_output_path:\n            return\n\n        t8n_call = \" \".join(args)\n        t8n_output_base_dir = os.path.join(debug_output_path, \"t8n.sh.out\")\n        if self.trace:\n            t8n_call = t8n_call.replace(temp_dir.name, t8n_output_base_dir)\n        t8n_script = textwrap.dedent(\n            f\"\"\"\\\n            #!/bin/bash\n            rm -rf {debug_output_path}/t8n.sh.out  # hard-coded to avoid surprises\n            mkdir {debug_output_path}/t8n.sh.out  # unused if tracing is not enabled\n            {t8n_call} < {debug_output_path}/stdin.txt\n            \"\"\"\n        )\n        dump_files_to_directory(\n            debug_output_path,\n            {\n                \"args.py\": args,\n                \"input/alloc.json\": stdin.alloc,\n                \"input/env.json\": stdin.env,\n                \"input/txs.json\": [\n                    tx.model_dump(mode=\"json\", **model_dump_config) for tx in stdin.txs\n                ],\n                \"returncode.txt\": result.returncode,\n                \"stdin.txt\": stdin,\n                \"stdout.txt\": result.stdout.decode(),\n                \"stderr.txt\": result.stderr.decode(),\n                \"t8n.sh+x\": t8n_script,\n            },\n        )\n\n    def evaluate(\n        self,\n        *,\n        alloc: Alloc,\n        txs: List[Transaction],\n        env: Environment,\n        fork: Fork,\n        chain_id: int = 1,\n        reward: int = 0,\n        eips: Optional[List[int]] = None,\n        debug_output_path: str = \"\",\n    ) -> TransitionToolOutput:\n        \"\"\"\n        Executes the relevant evaluate method as required by the `t8n` tool.\n\n        If a client's `t8n` tool varies from the default behavior, this method\n        can be overridden.\n        \"\"\"\n        fork_name = fork.transition_tool_name(\n            block_number=env.number,\n            timestamp=env.timestamp,\n        )\n        if eips is not None:\n            fork_name = \"+\".join([fork_name] + [str(eip) for eip in eips])\n        if env.number == 0:\n            reward = -1\n        t8n_data = self.TransitionToolData(\n            alloc=alloc,\n            txs=txs,\n            env=env,\n            fork_name=fork_name,\n            chain_id=chain_id,\n            reward=reward,\n        )\n\n        if self.t8n_use_stream:\n            return self._evaluate_stream(t8n_data=t8n_data, debug_output_path=debug_output_path)\n        else:\n            return self._evaluate_filesystem(\n                t8n_data=t8n_data,\n                debug_output_path=debug_output_path,\n            )\n\n    def verify_fixture(\n        self,\n        fixture_format: FixtureFormats,\n        fixture_path: Path,\n        fixture_name: Optional[str] = None,\n        debug_output_path: Optional[Path] = None,\n    ):\n        \"\"\"\n        Executes `evm [state|block]test` to verify the fixture at `fixture_path`.\n\n        Currently only implemented by geth's evm.\n        \"\"\"\n        raise NotImplementedError(\n            \"The `verify_fixture()` function is not supported by this tool. Use geth's evm tool.\"\n        )\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.__init__","title":"__init__(*, binary=None, trace=False) abstractmethod","text":"

    Abstract initialization method that all subclasses must implement.

    Source code in src/evm_transition_tool/transition_tool.py
    @abstractmethod\ndef __init__(\n    self,\n    *,\n    binary: Optional[Path] = None,\n    trace: bool = False,\n):\n    \"\"\"\n    Abstract initialization method that all subclasses must implement.\n    \"\"\"\n    if binary is None:\n        binary = self.default_binary\n    else:\n        # improve behavior of which by resolving the path: ~/relative paths don't work\n        resolved_path = Path(os.path.expanduser(binary)).resolve()\n        if resolved_path.exists():\n            binary = resolved_path\n    binary = shutil.which(binary)  # type: ignore\n    if not binary:\n        raise TransitionToolNotFoundInPath(binary=binary)\n    self.binary = Path(binary)\n    self.trace = trace\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.__init_subclass__","title":"__init_subclass__()","text":"

    Registers all subclasses of TransitionTool as possible tools.

    Source code in src/evm_transition_tool/transition_tool.py
    def __init_subclass__(cls):\n    \"\"\"\n    Registers all subclasses of TransitionTool as possible tools.\n    \"\"\"\n    TransitionTool.register_tool(cls)\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.register_tool","title":"register_tool(tool_subclass) classmethod","text":"

    Registers a given subclass as tool option.

    Source code in src/evm_transition_tool/transition_tool.py
    @classmethod\ndef register_tool(cls, tool_subclass: Type[\"TransitionTool\"]):\n    \"\"\"\n    Registers a given subclass as tool option.\n    \"\"\"\n    cls.registered_tools.append(tool_subclass)\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.set_default_tool","title":"set_default_tool(tool_subclass) classmethod","text":"

    Registers the default tool subclass.

    Source code in src/evm_transition_tool/transition_tool.py
    @classmethod\ndef set_default_tool(cls, tool_subclass: Type[\"TransitionTool\"]):\n    \"\"\"\n    Registers the default tool subclass.\n    \"\"\"\n    cls.default_tool = tool_subclass\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.from_binary_path","title":"from_binary_path(*, binary_path, **kwargs) classmethod","text":"

    Instantiates the appropriate TransitionTool subclass derived from the tool's binary path.

    Source code in src/evm_transition_tool/transition_tool.py
    @classmethod\ndef from_binary_path(cls, *, binary_path: Optional[Path], **kwargs) -> \"TransitionTool\":\n    \"\"\"\n    Instantiates the appropriate TransitionTool subclass derived from the\n    tool's binary path.\n    \"\"\"\n    assert cls.default_tool is not None, \"default transition tool was never set\"\n\n    if binary_path is None:\n        return cls.default_tool(binary=binary_path, **kwargs)\n\n    resolved_path = Path(os.path.expanduser(binary_path)).resolve()\n    if resolved_path.exists():\n        binary_path = resolved_path\n    binary = shutil.which(binary_path)  # type: ignore\n\n    if not binary:\n        raise TransitionToolNotFoundInPath(binary=binary)\n\n    binary = Path(binary)\n\n    # Group the tools by version flag, so we only have to call the tool once for all the\n    # classes that share the same version flag\n    for version_flag, subclasses in groupby(\n        cls.registered_tools, key=lambda x: x.version_flag\n    ):\n        try:\n            result = subprocess.run(\n                [binary, version_flag], stdout=subprocess.PIPE, stderr=subprocess.PIPE\n            )\n            if result.returncode != 0:\n                raise Exception(f\"Non-zero return code: {result.returncode}\")\n\n            if result.stderr:\n                raise Exception(f\"Tool wrote to stderr: {result.stderr.decode()}\")\n\n            binary_output = \"\"\n            if result.stdout:\n                binary_output = result.stdout.decode().strip()\n        except Exception:\n            # If the tool doesn't support the version flag,\n            # we'll get an non-zero exit code.\n            continue\n        for subclass in subclasses:\n            if subclass.detect_binary(binary_output):\n                return subclass(binary=binary, **kwargs)\n\n    raise UnknownTransitionTool(f\"Unknown transition tool binary: {binary_path}\")\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.detect_binary","title":"detect_binary(binary_output) classmethod","text":"

    Returns True if the binary matches the tool

    Source code in src/evm_transition_tool/transition_tool.py
    @classmethod\ndef detect_binary(cls, binary_output: str) -> bool:\n    \"\"\"\n    Returns True if the binary matches the tool\n    \"\"\"\n    assert cls.detect_binary_pattern is not None\n\n    return cls.detect_binary_pattern.match(binary_output) is not None\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.version","title":"version()","text":"

    Return name and version of tool used to state transition

    Source code in src/evm_transition_tool/transition_tool.py
    def version(self) -> str:\n    \"\"\"\n    Return name and version of tool used to state transition\n    \"\"\"\n    if self.cached_version is None:\n        result = subprocess.run(\n            [str(self.binary), self.version_flag],\n            stdout=subprocess.PIPE,\n        )\n\n        if result.returncode != 0:\n            raise Exception(\"failed to evaluate: \" + result.stderr.decode())\n\n        self.cached_version = result.stdout.decode().strip()\n\n    return self.cached_version\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.is_fork_supported","title":"is_fork_supported(fork) abstractmethod","text":"

    Returns True if the fork is supported by the tool

    Source code in src/evm_transition_tool/transition_tool.py
    @abstractmethod\ndef is_fork_supported(self, fork: Fork) -> bool:\n    \"\"\"\n    Returns True if the fork is supported by the tool\n    \"\"\"\n    pass\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.shutdown","title":"shutdown()","text":"

    Perform any cleanup tasks related to the tested tool.

    Source code in src/evm_transition_tool/transition_tool.py
    def shutdown(self):\n    \"\"\"\n    Perform any cleanup tasks related to the tested tool.\n    \"\"\"\n    pass\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.reset_traces","title":"reset_traces()","text":"

    Resets the internal trace storage for a new test to begin

    Source code in src/evm_transition_tool/transition_tool.py
    def reset_traces(self):\n    \"\"\"\n    Resets the internal trace storage for a new test to begin\n    \"\"\"\n    self.traces = None\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.append_traces","title":"append_traces(new_traces)","text":"

    Appends a list of traces of a state transition to the current list

    Source code in src/evm_transition_tool/transition_tool.py
    def append_traces(self, new_traces: List[List[Dict]]):\n    \"\"\"\n    Appends a list of traces of a state transition to the current list\n    \"\"\"\n    if self.traces is None:\n        self.traces = []\n    self.traces.append(new_traces)\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.get_traces","title":"get_traces()","text":"

    Returns the accumulated traces

    Source code in src/evm_transition_tool/transition_tool.py
    def get_traces(self) -> List[List[List[Dict]]] | None:\n    \"\"\"\n    Returns the accumulated traces\n    \"\"\"\n    return self.traces\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.collect_traces","title":"collect_traces(receipts, temp_dir, debug_output_path='')","text":"

    Collect the traces from the t8n tool output and store them in the traces list.

    Source code in src/evm_transition_tool/transition_tool.py
    def collect_traces(\n    self,\n    receipts: List[TransactionReceipt],\n    temp_dir: tempfile.TemporaryDirectory,\n    debug_output_path: str = \"\",\n) -> None:\n    \"\"\"\n    Collect the traces from the t8n tool output and store them in the traces list.\n    \"\"\"\n    traces: List[List[Dict]] = []\n    for i, r in enumerate(receipts):\n        trace_file_name = f\"trace-{i}-{r.transaction_hash}.jsonl\"\n        if debug_output_path:\n            shutil.copy(\n                os.path.join(temp_dir.name, trace_file_name),\n                os.path.join(debug_output_path, trace_file_name),\n            )\n        with open(os.path.join(temp_dir.name, trace_file_name), \"r\") as trace_file:\n            tx_traces: List[Dict] = []\n            for trace_line in trace_file.readlines():\n                tx_traces.append(json.loads(trace_line))\n            traces.append(tx_traces)\n    self.append_traces(traces)\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.TransitionToolData","title":"TransitionToolData dataclass","text":"

    Transition tool files and data to pass between methods

    Source code in src/evm_transition_tool/transition_tool.py
    @dataclass\nclass TransitionToolData:\n    \"\"\"\n    Transition tool files and data to pass between methods\n    \"\"\"\n\n    alloc: Alloc\n    txs: List[Transaction]\n    env: Environment\n    fork_name: str\n    chain_id: int = field(default=1)\n    reward: int = field(default=0)\n\n    def to_input(self) -> TransitionToolInput:\n        \"\"\"\n        Convert the data to a TransactionToolInput object\n        \"\"\"\n        return TransitionToolInput(\n            alloc=self.alloc,\n            txs=self.txs,\n            env=self.env,\n        )\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.TransitionToolData.to_input","title":"to_input()","text":"

    Convert the data to a TransactionToolInput object

    Source code in src/evm_transition_tool/transition_tool.py
    def to_input(self) -> TransitionToolInput:\n    \"\"\"\n    Convert the data to a TransactionToolInput object\n    \"\"\"\n    return TransitionToolInput(\n        alloc=self.alloc,\n        txs=self.txs,\n        env=self.env,\n    )\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.construct_args_stream","title":"construct_args_stream(t8n_data, temp_dir)","text":"

    Construct arguments for t8n interaction via streams

    Source code in src/evm_transition_tool/transition_tool.py
    def construct_args_stream(\n    self, t8n_data: TransitionToolData, temp_dir: tempfile.TemporaryDirectory\n) -> List[str]:\n    \"\"\"\n    Construct arguments for t8n interaction via streams\n    \"\"\"\n    command: list[str] = [str(self.binary)]\n    if self.t8n_subcommand:\n        command.append(self.t8n_subcommand)\n\n    args = command + [\n        \"--input.alloc=stdin\",\n        \"--input.txs=stdin\",\n        \"--input.env=stdin\",\n        \"--output.result=stdout\",\n        \"--output.alloc=stdout\",\n        \"--output.body=stdout\",\n        f\"--state.fork={t8n_data.fork_name}\",\n        f\"--state.chainid={t8n_data.chain_id}\",\n        f\"--state.reward={t8n_data.reward}\",\n    ]\n\n    if self.trace:\n        args.append(\"--trace\")\n        args.append(f\"--output.basedir={temp_dir.name}\")\n    return args\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.dump_debug_stream","title":"dump_debug_stream(debug_output_path, temp_dir, stdin, args, result)","text":"

    Export debug files if requested when interacting with t8n via streams

    Source code in src/evm_transition_tool/transition_tool.py
    def dump_debug_stream(\n    self,\n    debug_output_path: str,\n    temp_dir: tempfile.TemporaryDirectory,\n    stdin: TransitionToolInput,\n    args: List[str],\n    result: subprocess.CompletedProcess,\n):\n    \"\"\"\n    Export debug files if requested when interacting with t8n via streams\n    \"\"\"\n    if not debug_output_path:\n        return\n\n    t8n_call = \" \".join(args)\n    t8n_output_base_dir = os.path.join(debug_output_path, \"t8n.sh.out\")\n    if self.trace:\n        t8n_call = t8n_call.replace(temp_dir.name, t8n_output_base_dir)\n    t8n_script = textwrap.dedent(\n        f\"\"\"\\\n        #!/bin/bash\n        rm -rf {debug_output_path}/t8n.sh.out  # hard-coded to avoid surprises\n        mkdir {debug_output_path}/t8n.sh.out  # unused if tracing is not enabled\n        {t8n_call} < {debug_output_path}/stdin.txt\n        \"\"\"\n    )\n    dump_files_to_directory(\n        debug_output_path,\n        {\n            \"args.py\": args,\n            \"input/alloc.json\": stdin.alloc,\n            \"input/env.json\": stdin.env,\n            \"input/txs.json\": [\n                tx.model_dump(mode=\"json\", **model_dump_config) for tx in stdin.txs\n            ],\n            \"returncode.txt\": result.returncode,\n            \"stdin.txt\": stdin,\n            \"stdout.txt\": result.stdout.decode(),\n            \"stderr.txt\": result.stderr.decode(),\n            \"t8n.sh+x\": t8n_script,\n        },\n    )\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.evaluate","title":"evaluate(*, alloc, txs, env, fork, chain_id=1, reward=0, eips=None, debug_output_path='')","text":"

    Executes the relevant evaluate method as required by the t8n tool.

    If a client's t8n tool varies from the default behavior, this method can be overridden.

    Source code in src/evm_transition_tool/transition_tool.py
    def evaluate(\n    self,\n    *,\n    alloc: Alloc,\n    txs: List[Transaction],\n    env: Environment,\n    fork: Fork,\n    chain_id: int = 1,\n    reward: int = 0,\n    eips: Optional[List[int]] = None,\n    debug_output_path: str = \"\",\n) -> TransitionToolOutput:\n    \"\"\"\n    Executes the relevant evaluate method as required by the `t8n` tool.\n\n    If a client's `t8n` tool varies from the default behavior, this method\n    can be overridden.\n    \"\"\"\n    fork_name = fork.transition_tool_name(\n        block_number=env.number,\n        timestamp=env.timestamp,\n    )\n    if eips is not None:\n        fork_name = \"+\".join([fork_name] + [str(eip) for eip in eips])\n    if env.number == 0:\n        reward = -1\n    t8n_data = self.TransitionToolData(\n        alloc=alloc,\n        txs=txs,\n        env=env,\n        fork_name=fork_name,\n        chain_id=chain_id,\n        reward=reward,\n    )\n\n    if self.t8n_use_stream:\n        return self._evaluate_stream(t8n_data=t8n_data, debug_output_path=debug_output_path)\n    else:\n        return self._evaluate_filesystem(\n            t8n_data=t8n_data,\n            debug_output_path=debug_output_path,\n        )\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionTool.verify_fixture","title":"verify_fixture(fixture_format, fixture_path, fixture_name=None, debug_output_path=None)","text":"

    Executes evm [state|block]test to verify the fixture at fixture_path.

    Currently only implemented by geth's evm.

    Source code in src/evm_transition_tool/transition_tool.py
    def verify_fixture(\n    self,\n    fixture_format: FixtureFormats,\n    fixture_path: Path,\n    fixture_name: Optional[str] = None,\n    debug_output_path: Optional[Path] = None,\n):\n    \"\"\"\n    Executes `evm [state|block]test` to verify the fixture at `fixture_path`.\n\n    Currently only implemented by geth's evm.\n    \"\"\"\n    raise NotImplementedError(\n        \"The `verify_fixture()` function is not supported by this tool. Use geth's evm tool.\"\n    )\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionToolNotFoundInPath","title":"TransitionToolNotFoundInPath","text":"

    Bases: Exception

    Exception raised if the specified t8n tool is not found in the path

    Source code in src/evm_transition_tool/transition_tool.py
    class TransitionToolNotFoundInPath(Exception):\n    \"\"\"Exception raised if the specified t8n tool is not found in the path\"\"\"\n\n    def __init__(self, message=\"The transition tool was not found in the path\", binary=None):\n        if binary:\n            message = f\"{message} ({binary})\"\n        super().__init__(message)\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.UnknownTransitionTool","title":"UnknownTransitionTool","text":"

    Bases: Exception

    Exception raised if an unknown t8n is encountered

    Source code in src/evm_transition_tool/transition_tool.py
    class UnknownTransitionTool(Exception):\n    \"\"\"Exception raised if an unknown t8n is encountered\"\"\"\n\n    pass\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.Result","title":"Result","text":"

    Bases: CamelModel

    Result of a t8n

    Source code in src/evm_transition_tool/types.py
    class Result(CamelModel):\n    \"\"\"\n    Result of a t8n\n    \"\"\"\n\n    state_root: Hash\n    ommers_hash: Hash | None = Field(None, validation_alias=\"sha3Uncles\")\n    transactions_trie: Hash = Field(..., alias=\"txRoot\")\n    receipts_root: Hash\n    logs_hash: Hash\n    logs_bloom: Bloom\n    receipts: List[TransactionReceipt]\n    rejected_transactions: List[RejectedTransaction] = Field(\n        default_factory=list, alias=\"rejected\"\n    )\n    difficulty: HexNumber | None = Field(None, alias=\"currentDifficulty\")\n    gas_used: HexNumber\n    base_fee_per_gas: HexNumber | None = Field(None, alias=\"currentBaseFee\")\n    withdrawals_root: Hash | None = None\n    excess_blob_gas: HexNumber | None = Field(None, alias=\"currentExcessBlobGas\")\n    blob_gas_used: HexNumber | None = None\n    requests_root: Hash | None = None\n    deposit_requests: List[DepositRequest] | None = None\n    withdrawal_requests: List[WithdrawalRequest] | None = None\n    consolidation_requests: List[ConsolidationRequest] | None = None\n
    "},{"location":"library/evm_transition_tool/#evm_transition_tool.TransitionToolOutput","title":"TransitionToolOutput","text":"

    Bases: CamelModel

    Transition tool output

    Source code in src/evm_transition_tool/types.py
    class TransitionToolOutput(CamelModel):\n    \"\"\"\n    Transition tool output\n    \"\"\"\n\n    alloc: Alloc\n    result: Result\n    body: Bytes | None = None\n
    "},{"location":"library/pytest_plugins/","title":"Pytest Framework and Customizations","text":"

    Package containing pytest plugins related to test filling.

    "},{"location":"library/pytest_plugins/filler/","title":"Filler Plugin","text":"

    A pytest plugin that provides fixtures that fill tests and generate fixtures.

    Top-level pytest configuration file providing: - Command-line options, - Test-fixtures that can be used by all test cases, and that modifies pytest hooks in order to fill test specs for all tests and writes the generated fixtures to file.

    Pre-alloc specifically conditioned for test filling.

    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.default_output_directory","title":"default_output_directory()","text":"

    The default directory to store the generated test fixtures. Defined as a function to allow for easier testing.

    Source code in src/pytest_plugins/filler/filler.py
    def default_output_directory() -> str:\n    \"\"\"\n    The default directory to store the generated test fixtures. Defined as a\n    function to allow for easier testing.\n    \"\"\"\n    return \"./fixtures\"\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.default_html_report_file_path","title":"default_html_report_file_path()","text":"

    The default file path to store the generated HTML test report. Defined as a function to allow for easier testing.

    Source code in src/pytest_plugins/filler/filler.py
    def default_html_report_file_path() -> str:\n    \"\"\"\n    The default file path to store the generated HTML test report. Defined as a\n    function to allow for easier testing.\n    \"\"\"\n    return \".meta/report_fill.html\"\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.strip_output_tarball_suffix","title":"strip_output_tarball_suffix(output)","text":"

    Strip the '.tar.gz' suffix from the output path.

    Source code in src/pytest_plugins/filler/filler.py
    def strip_output_tarball_suffix(output: Path) -> Path:\n    \"\"\"\n    Strip the '.tar.gz' suffix from the output path.\n    \"\"\"\n    if str(output).endswith(\".tar.gz\"):\n        return output.with_suffix(\"\").with_suffix(\"\")\n    return output\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.is_output_stdout","title":"is_output_stdout(output)","text":"

    Returns True if the fixture output is configured to be stdout.

    Source code in src/pytest_plugins/filler/filler.py
    def is_output_stdout(output: Path) -> bool:\n    \"\"\"\n    Returns True if the fixture output is configured to be stdout.\n    \"\"\"\n    return strip_output_tarball_suffix(output).name == \"stdout\"\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_addoption","title":"pytest_addoption(parser)","text":"

    Adds command-line options to pytest.

    Source code in src/pytest_plugins/filler/filler.py
    def pytest_addoption(parser: pytest.Parser):\n    \"\"\"\n    Adds command-line options to pytest.\n    \"\"\"\n    evm_group = parser.getgroup(\"evm\", \"Arguments defining evm executable behavior\")\n    evm_group.addoption(\n        \"--evm-bin\",\n        action=\"store\",\n        dest=\"evm_bin\",\n        type=Path,\n        default=None,\n        help=(\n            \"Path to an evm executable that provides `t8n`. Default: First 'evm' entry in PATH.\"\n        ),\n    )\n    evm_group.addoption(\n        \"--traces\",\n        action=\"store_true\",\n        dest=\"evm_collect_traces\",\n        default=None,\n        help=\"Collect traces of the execution information from the transition tool.\",\n    )\n    evm_group.addoption(\n        \"--verify-fixtures\",\n        action=\"store_true\",\n        dest=\"verify_fixtures\",\n        default=False,\n        help=(\n            \"Verify generated fixture JSON files using geth's evm blocktest command. \"\n            \"By default, the same evm binary as for the t8n tool is used. A different (geth) evm \"\n            \"binary may be specified via --verify-fixtures-bin, this must be specified if filling \"\n            \"with a non-geth t8n tool that does not support blocktest.\"\n        ),\n    )\n    evm_group.addoption(\n        \"--verify-fixtures-bin\",\n        action=\"store\",\n        dest=\"verify_fixtures_bin\",\n        type=Path,\n        default=None,\n        help=(\n            \"Path to an evm executable that provides the `blocktest` command. \"\n            \"Default: The first (geth) 'evm' entry in PATH.\"\n        ),\n    )\n\n    test_group = parser.getgroup(\"tests\", \"Arguments defining filler location and output\")\n    test_group.addoption(\n        \"--filler-path\",\n        action=\"store\",\n        dest=\"filler_path\",\n        default=\"./tests/\",\n        type=Path,\n        help=\"Path to filler directives\",\n    )\n    test_group.addoption(\n        \"--output\",\n        action=\"store\",\n        dest=\"output\",\n        type=Path,\n        default=Path(default_output_directory()),\n        help=(\n            \"Directory path to store the generated test fixtures. \"\n            \"If the specified path ends in '.tar.gz', then the specified tarball is additionally \"\n            \"created (the fixtures are still written to the specified path without the '.tar.gz' \"\n            f\"suffix). Can be deleted. Default: '{default_output_directory()}'.\"\n        ),\n    )\n    test_group.addoption(\n        \"--flat-output\",\n        action=\"store_true\",\n        dest=\"flat_output\",\n        default=False,\n        help=\"Output each test case in the directory without the folder structure.\",\n    )\n    test_group.addoption(\n        \"--single-fixture-per-file\",\n        action=\"store_true\",\n        dest=\"single_fixture_per_file\",\n        default=False,\n        help=(\n            \"Don't group fixtures in JSON files by test function; write each fixture to its own \"\n            \"file. This can be used to increase the granularity of --verify-fixtures.\"\n        ),\n    )\n    test_group.addoption(\n        \"--no-html\",\n        action=\"store_true\",\n        dest=\"disable_html\",\n        default=False,\n        help=(\n            \"Don't generate an HTML test report (in the output directory). \"\n            \"The --html flag can be used to specify a different path.\"\n        ),\n    )\n    test_group.addoption(\n        \"--build-name\",\n        action=\"store\",\n        dest=\"build_name\",\n        default=None,\n        type=str,\n        help=\"Specify a build name for the fixtures.ini file, e.g., 'stable'.\",\n    )\n    test_group.addoption(\n        \"--index\",\n        action=\"store_true\",\n        dest=\"generate_index\",\n        default=False,\n        help=\"Generate an index file for all produced fixtures.\",\n    )\n\n    debug_group = parser.getgroup(\"debug\", \"Arguments defining debug behavior\")\n    debug_group.addoption(\n        \"--evm-dump-dir\",\n        \"--t8n-dump-dir\",\n        action=\"store\",\n        dest=\"base_dump_dir\",\n        default=\"\",\n        help=\"Path to dump the transition tool debug output.\",\n    )\n\n    internal_group = parser.getgroup(\"internal\", \"Internal arguments\")\n    internal_group.addoption(\n        \"--session-temp-folder\",\n        action=\"store\",\n        dest=\"session_temp_folder\",\n        type=Path,\n        default=None,\n        help=argparse.SUPPRESS,\n    )\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_configure","title":"pytest_configure(config)","text":"

    Pytest hook called after command line options have been parsed and before test collection begins.

    Couple of notes: 1. Register the plugin's custom markers and process command-line options.

    Custom marker registration:\nhttps://docs.pytest.org/en/7.1.x/how-to/writing_plugins.html#registering-custom-markers\n
    1. @pytest.hookimpl(tryfirst=True) is applied to ensure that this hook is called before the pytest-html plugin's pytest_configure to ensure that it uses the modified htmlpath option.
    Source code in src/pytest_plugins/filler/filler.py
    @pytest.hookimpl(tryfirst=True)\ndef pytest_configure(config):\n    \"\"\"\n    Pytest hook called after command line options have been parsed and before\n    test collection begins.\n\n    Couple of notes:\n    1. Register the plugin's custom markers and process command-line options.\n\n        Custom marker registration:\n        https://docs.pytest.org/en/7.1.x/how-to/writing_plugins.html#registering-custom-markers\n\n    2. `@pytest.hookimpl(tryfirst=True)` is applied to ensure that this hook is\n        called before the pytest-html plugin's pytest_configure to ensure that\n        it uses the modified `htmlpath` option.\n    \"\"\"\n    for fixture_format in FixtureFormats:\n        config.addinivalue_line(\n            \"markers\",\n            (\n                f\"{fixture_format.name.lower()}: \"\n                f\"{FixtureFormats.get_format_description(fixture_format)}\"\n            ),\n        )\n    config.addinivalue_line(\n        \"markers\",\n        \"yul_test: a test case that compiles Yul code.\",\n    )\n    config.addinivalue_line(\n        \"markers\",\n        \"compile_yul_with(fork): Always compile Yul source using the corresponding evm version.\",\n    )\n    if config.option.collectonly:\n        return\n    if not config.getoption(\"disable_html\") and config.getoption(\"htmlpath\") is None:\n        # generate an html report by default, unless explicitly disabled\n        config.option.htmlpath = (\n            strip_output_tarball_suffix(config.getoption(\"output\"))\n            / default_html_report_file_path()\n        )\n    # Instantiate the transition tool here to check that the binary path/trace option is valid.\n    # This ensures we only raise an error once, if appropriate, instead of for every test.\n    t8n = TransitionTool.from_binary_path(\n        binary_path=config.getoption(\"evm_bin\"), trace=config.getoption(\"evm_collect_traces\")\n    )\n    if (\n        isinstance(config.getoption(\"numprocesses\"), int)\n        and config.getoption(\"numprocesses\") > 0\n        and \"Besu\" in str(t8n.detect_binary_pattern)\n    ):\n        pytest.exit(\n            \"The Besu t8n tool does not work well with the xdist plugin; use -n=0.\",\n            returncode=pytest.ExitCode.USAGE_ERROR,\n        )\n\n    if \"Tools\" not in config.stash[metadata_key]:\n        config.stash[metadata_key][\"Tools\"] = {\n            \"t8n\": t8n.version(),\n        }\n    else:\n        config.stash[metadata_key][\"Tools\"][\"t8n\"] = t8n.version()\n\n    args = [\"fill\"] + [str(arg) for arg in config.invocation_params.args]\n    for i in range(len(args)):\n        if \" \" in args[i]:\n            args[i] = f'\"{args[i]}\"'\n    command_line_args = \" \".join(args)\n    config.stash[metadata_key][\"Command-line args\"] = f\"<code>{command_line_args}</code>\"\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_report_header","title":"pytest_report_header(config)","text":"

    Add lines to pytest's console output header

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.hookimpl(trylast=True)\ndef pytest_report_header(config: pytest.Config):\n    \"\"\"Add lines to pytest's console output header\"\"\"\n    if config.option.collectonly:\n        return\n    t8n_version = config.stash[metadata_key][\"Tools\"][\"t8n\"]\n    solc_version = config.stash[metadata_key][\"Tools\"][\"solc\"]\n    return [(f\"{t8n_version}, {solc_version}\")]\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_report_teststatus","title":"pytest_report_teststatus(report, config)","text":"

    Disable test session progress report if we're writing the JSON fixtures to stdout to be read by a consume command on stdin. I.e., don't write this type of output to the console:

    ...x...\n
    Source code in src/pytest_plugins/filler/filler.py
    def pytest_report_teststatus(report, config: pytest.Config):\n    \"\"\"\n    Disable test session progress report if we're writing the JSON fixtures to\n    stdout to be read by a consume command on stdin. I.e., don't write this\n    type of output to the console:\n\n    ```text\n    ...x...\n    ```\n    \"\"\"\n    if is_output_stdout(config.getoption(\"output\")):\n        return report.outcome, \"\", report.outcome.upper()\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_metadata","title":"pytest_metadata(metadata)","text":"

    Add or remove metadata to/from the pytest report.

    Source code in src/pytest_plugins/filler/filler.py
    def pytest_metadata(metadata):\n    \"\"\"\n    Add or remove metadata to/from the pytest report.\n    \"\"\"\n    metadata.pop(\"JAVA_HOME\", None)\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_html_results_table_header","title":"pytest_html_results_table_header(cells)","text":"

    Customize the table headers of the HTML report table.

    Source code in src/pytest_plugins/filler/filler.py
    def pytest_html_results_table_header(cells):\n    \"\"\"\n    Customize the table headers of the HTML report table.\n    \"\"\"\n    cells.insert(3, '<th class=\"sortable\" data-column-type=\"fixturePath\">JSON Fixture File</th>')\n    cells.insert(4, '<th class=\"sortable\" data-column-type=\"evmDumpDir\">EVM Dump Dir</th>')\n    del cells[-1]  # Remove the \"Links\" column\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_html_results_table_row","title":"pytest_html_results_table_row(report, cells)","text":"

    Customize the table rows of the HTML report table.

    Source code in src/pytest_plugins/filler/filler.py
    def pytest_html_results_table_row(report, cells):\n    \"\"\"\n    Customize the table rows of the HTML report table.\n    \"\"\"\n    if hasattr(report, \"user_properties\"):\n        user_props = dict(report.user_properties)\n        if (\n            report.passed\n            and \"fixture_path_absolute\" in user_props\n            and \"fixture_path_relative\" in user_props\n        ):\n            fixture_path_absolute = user_props[\"fixture_path_absolute\"]\n            fixture_path_relative = user_props[\"fixture_path_relative\"]\n            fixture_path_link = (\n                f'<a href=\"{fixture_path_absolute}\" target=\"_blank\">{fixture_path_relative}</a>'\n            )\n            cells.insert(3, f\"<td>{fixture_path_link}</td>\")\n        elif report.failed:\n            cells.insert(3, \"<td>Fixture unavailable</td>\")\n        if \"evm_dump_dir\" in user_props:\n            if user_props[\"evm_dump_dir\"] is None:\n                cells.insert(\n                    4, \"<td>For t8n debug info use <code>--evm-dump-dir=path --traces</code></td>\"\n                )\n            else:\n                evm_dump_dir = user_props.get(\"evm_dump_dir\")\n                if evm_dump_dir == \"N/A\":\n                    evm_dump_entry = \"N/A\"\n                else:\n                    evm_dump_entry = f'<a href=\"{evm_dump_dir}\" target=\"_blank\">{evm_dump_dir}</a>'\n                cells.insert(4, f\"<td>{evm_dump_entry}</td>\")\n    del cells[-1]  # Remove the \"Links\" column\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_runtest_makereport","title":"pytest_runtest_makereport(item, call)","text":"

    This hook is called when each test is run and a report is being made.

    Make each test's fixture json path available to the test report via user_properties.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.hookimpl(hookwrapper=True)\ndef pytest_runtest_makereport(item, call):\n    \"\"\"\n    This hook is called when each test is run and a report is being made.\n\n    Make each test's fixture json path available to the test report via\n    user_properties.\n    \"\"\"\n    outcome = yield\n    report = outcome.get_result()\n\n    if call.when == \"call\":\n        if hasattr(item.config, \"fixture_path_absolute\") and hasattr(\n            item.config, \"fixture_path_relative\"\n        ):\n            report.user_properties.append(\n                (\"fixture_path_absolute\", item.config.fixture_path_absolute)\n            )\n            report.user_properties.append(\n                (\"fixture_path_relative\", item.config.fixture_path_relative)\n            )\n        if hasattr(item.config, \"evm_dump_dir\") and hasattr(item.config, \"fixture_format\"):\n            if item.config.fixture_format in [\n                \"state_test\",\n                \"blockchain_test\",\n                \"blockchain_test_engine\",\n            ]:\n                report.user_properties.append((\"evm_dump_dir\", item.config.evm_dump_dir))\n            else:\n                report.user_properties.append((\"evm_dump_dir\", \"N/A\"))  # not yet for EOF\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_html_report_title","title":"pytest_html_report_title(report)","text":"

    Set the HTML report title (pytest-html plugin).

    Source code in src/pytest_plugins/filler/filler.py
    def pytest_html_report_title(report):\n    \"\"\"\n    Set the HTML report title (pytest-html plugin).\n    \"\"\"\n    report.title = \"Fill Test Report\"\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.evm_bin","title":"evm_bin(request)","text":"

    Returns the configured evm tool binary path used to run t8n.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(autouse=True, scope=\"session\")\ndef evm_bin(request: pytest.FixtureRequest) -> Path:\n    \"\"\"\n    Returns the configured evm tool binary path used to run t8n.\n    \"\"\"\n    return request.config.getoption(\"evm_bin\")\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.verify_fixtures_bin","title":"verify_fixtures_bin(request)","text":"

    Returns the configured evm tool binary path used to run statetest or blocktest.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(autouse=True, scope=\"session\")\ndef verify_fixtures_bin(request: pytest.FixtureRequest) -> Path | None:\n    \"\"\"\n    Returns the configured evm tool binary path used to run statetest or\n    blocktest.\n    \"\"\"\n    return request.config.getoption(\"verify_fixtures_bin\")\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.t8n","title":"t8n(request, evm_bin)","text":"

    Returns the configured transition tool.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(autouse=True, scope=\"session\")\ndef t8n(request: pytest.FixtureRequest, evm_bin: Path) -> Generator[TransitionTool, None, None]:\n    \"\"\"\n    Returns the configured transition tool.\n    \"\"\"\n    t8n = TransitionTool.from_binary_path(\n        binary_path=evm_bin, trace=request.config.getoption(\"evm_collect_traces\")\n    )\n    yield t8n\n    t8n.shutdown()\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.do_fixture_verification","title":"do_fixture_verification(request, verify_fixtures_bin)","text":"

    Returns True if evm statetest or evm blocktest should be ran on the generated fixture JSON files.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=\"session\")\ndef do_fixture_verification(\n    request: pytest.FixtureRequest, verify_fixtures_bin: Path | None\n) -> bool:\n    \"\"\"\n    Returns True if evm statetest or evm blocktest should be ran on the\n    generated fixture JSON files.\n    \"\"\"\n    do_fixture_verification = False\n    if verify_fixtures_bin:\n        do_fixture_verification = True\n    if request.config.getoption(\"verify_fixtures\"):\n        do_fixture_verification = True\n    return do_fixture_verification\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.evm_fixture_verification","title":"evm_fixture_verification(do_fixture_verification, evm_bin, verify_fixtures_bin)","text":"

    Returns the configured evm binary for executing statetest and blocktest commands used to verify generated JSON fixtures.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(autouse=True, scope=\"session\")\ndef evm_fixture_verification(\n    do_fixture_verification: bool,\n    evm_bin: Path,\n    verify_fixtures_bin: Path | None,\n) -> Generator[TransitionTool | None, None, None]:\n    \"\"\"\n    Returns the configured evm binary for executing statetest and blocktest\n    commands used to verify generated JSON fixtures.\n    \"\"\"\n    if not do_fixture_verification:\n        yield None\n        return\n    if not verify_fixtures_bin and evm_bin:\n        verify_fixtures_bin = evm_bin\n    evm_fixture_verification = TransitionTool.from_binary_path(binary_path=verify_fixtures_bin)\n    if not evm_fixture_verification.blocktest_subcommand:\n        pytest.exit(\n            \"Only geth's evm tool is supported to verify fixtures: \"\n            \"Either remove --verify-fixtures or set --verify-fixtures-bin to a Geth evm binary.\",\n            returncode=pytest.ExitCode.USAGE_ERROR,\n        )\n    yield evm_fixture_verification\n    evm_fixture_verification.shutdown()\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.base_dump_dir","title":"base_dump_dir(request)","text":"

    The base directory to dump the evm debug output.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=\"session\")\ndef base_dump_dir(request: pytest.FixtureRequest) -> Path | None:\n    \"\"\"\n    The base directory to dump the evm debug output.\n    \"\"\"\n    base_dump_dir_str = request.config.getoption(\"base_dump_dir\")\n    if base_dump_dir_str:\n        return Path(base_dump_dir_str)\n    return None\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.is_output_tarball","title":"is_output_tarball(request)","text":"

    Returns True if the output directory is a tarball.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=\"session\")\ndef is_output_tarball(request: pytest.FixtureRequest) -> bool:\n    \"\"\"\n    Returns True if the output directory is a tarball.\n    \"\"\"\n    output: Path = request.config.getoption(\"output\")\n    if output.suffix == \".gz\" and output.with_suffix(\"\").suffix == \".tar\":\n        return True\n    return False\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.output_dir","title":"output_dir(request, is_output_tarball)","text":"

    Returns the directory to store the generated test fixtures.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=\"session\")\ndef output_dir(request: pytest.FixtureRequest, is_output_tarball: bool) -> Path:\n    \"\"\"\n    Returns the directory to store the generated test fixtures.\n    \"\"\"\n    output = request.config.getoption(\"output\")\n    if is_output_tarball:\n        return strip_output_tarball_suffix(output)\n    return output\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.output_metadata_dir","title":"output_metadata_dir(output_dir)","text":"

    Returns the metadata directory to store fixture meta files.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=\"session\")\ndef output_metadata_dir(output_dir: Path) -> Path:\n    \"\"\"\n    Returns the metadata directory to store fixture meta files.\n    \"\"\"\n    return output_dir / \".meta\"\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.create_properties_file","title":"create_properties_file(request, output_dir, output_metadata_dir)","text":"

    Creates an ini file with fixture build properties in the fixture output directory.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=\"session\", autouse=True)\ndef create_properties_file(\n    request: pytest.FixtureRequest, output_dir: Path, output_metadata_dir: Path\n) -> None:\n    \"\"\"\n    Creates an ini file with fixture build properties in the fixture output\n    directory.\n    \"\"\"\n    if is_output_stdout(request.config.getoption(\"output\")):\n        return\n    if not output_dir.exists():\n        output_dir.mkdir(parents=True)\n    if not output_metadata_dir.exists():\n        output_metadata_dir.mkdir(parents=True)\n\n    fixture_properties = {\n        \"timestamp\": datetime.datetime.now().isoformat(),\n    }\n    if build_name := request.config.getoption(\"build_name\"):\n        fixture_properties[\"build\"] = build_name\n    if github_ref := os.getenv(\"GITHUB_REF\"):\n        fixture_properties[\"ref\"] = github_ref\n    if github_sha := os.getenv(\"GITHUB_SHA\"):\n        fixture_properties[\"commit\"] = github_sha\n    command_line_args = request.config.stash[metadata_key][\"Command-line args\"]\n    command_line_args = command_line_args.replace(\"<code>\", \"\").replace(\"</code>\", \"\")\n    fixture_properties[\"command_line_args\"] = command_line_args\n\n    config = configparser.ConfigParser()\n    config[\"fixtures\"] = fixture_properties\n    environment_properties = {}\n    for key, val in request.config.stash[metadata_key].items():\n        if key.lower() == \"command-line args\":\n            continue\n        if key.lower() in [\"ci\", \"python\", \"platform\"]:\n            environment_properties[key] = val\n        elif isinstance(val, dict):\n            config[key.lower()] = val\n        else:\n            warnings.warn(f\"Fixtures ini file: Skipping metadata key {key} with value {val}.\")\n    config[\"environment\"] = environment_properties\n\n    ini_filename = output_metadata_dir / \"fixtures.ini\"\n    with open(ini_filename, \"w\") as f:\n        f.write(\"; This file describes fixture build properties\\n\\n\")\n        config.write(f)\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.create_tarball","title":"create_tarball(request, output_dir, is_output_tarball)","text":"

    Create a tarball of json files the output directory if the configured output ends with '.tar.gz'.

    Only include .json and .ini files in the archive.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=\"session\", autouse=True)\ndef create_tarball(\n    request: pytest.FixtureRequest, output_dir: Path, is_output_tarball: bool\n) -> Generator[None, None, None]:\n    \"\"\"\n    Create a tarball of json files the output directory if the configured\n    output ends with '.tar.gz'.\n\n    Only include .json and .ini files in the archive.\n    \"\"\"\n    yield\n    if is_output_tarball:\n        source_dir = output_dir\n        tarball_filename = request.config.getoption(\"output\")\n        with tarfile.open(tarball_filename, \"w:gz\") as tar:\n            for file in source_dir.rglob(\"*\"):\n                if file.suffix in {\".json\", \".ini\"}:\n                    arcname = Path(\"fixtures\") / file.relative_to(source_dir)\n                    tar.add(file, arcname=arcname)\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.dump_dir_parameter_level","title":"dump_dir_parameter_level(request, base_dump_dir, filler_path)","text":"

    The directory to dump evm transition tool debug output on a test parameter level.

    Example with --evm-dump-dir=/tmp/evm: -> /tmp/evm/shanghai__eip3855_push0__test_push0__test_push0_key_sstore/fork_shanghai/

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=\"function\")\ndef dump_dir_parameter_level(\n    request: pytest.FixtureRequest, base_dump_dir: Path | None, filler_path: Path\n) -> Path | None:\n    \"\"\"\n    The directory to dump evm transition tool debug output on a test parameter\n    level.\n\n    Example with --evm-dump-dir=/tmp/evm:\n    -> /tmp/evm/shanghai__eip3855_push0__test_push0__test_push0_key_sstore/fork_shanghai/\n    \"\"\"\n    evm_dump_dir = node_to_test_info(request.node).get_dump_dir_path(\n        base_dump_dir,\n        filler_path,\n        level=\"test_parameter\",\n    )\n    # NOTE: Use str for compatibility with pytest-dist\n    if evm_dump_dir:\n        request.node.config.evm_dump_dir = str(evm_dump_dir)\n    else:\n        request.node.config.evm_dump_dir = None\n    return evm_dump_dir\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.get_fixture_collection_scope","title":"get_fixture_collection_scope(fixture_name, config)","text":"

    Return the appropriate scope to write fixture JSON files.

    See: https://docs.pytest.org/en/stable/how-to/fixtures.html#dynamic-scope

    Source code in src/pytest_plugins/filler/filler.py
    def get_fixture_collection_scope(fixture_name, config):\n    \"\"\"\n    Return the appropriate scope to write fixture JSON files.\n\n    See: https://docs.pytest.org/en/stable/how-to/fixtures.html#dynamic-scope\n    \"\"\"\n    if is_output_stdout(config.getoption(\"output\")):\n        return \"session\"\n    if config.getoption(\"single_fixture_per_file\"):\n        return \"function\"\n    return \"module\"\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.fixture_collector","title":"fixture_collector(request, do_fixture_verification, evm_fixture_verification, filler_path, base_dump_dir, output_dir, session_temp_folder, generate_index)","text":"

    Returns the configured fixture collector instance used for all tests in one test module.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=get_fixture_collection_scope)\ndef fixture_collector(\n    request: pytest.FixtureRequest,\n    do_fixture_verification: bool,\n    evm_fixture_verification: TransitionTool,\n    filler_path: Path,\n    base_dump_dir: Path | None,\n    output_dir: Path,\n    session_temp_folder: Path | None,\n    generate_index: bool,\n) -> Generator[FixtureCollector, None, None]:\n    \"\"\"\n    Returns the configured fixture collector instance used for all tests\n    in one test module.\n    \"\"\"\n    if session_temp_folder is not None:\n        fixture_collector_count_file_name = \"fixture_collector_count\"\n        fixture_collector_count_file = session_temp_folder / fixture_collector_count_file_name\n        fixture_collector_count_file_lock = (\n            session_temp_folder / f\"{fixture_collector_count_file_name}.lock\"\n        )\n        with FileLock(fixture_collector_count_file_lock):\n            if fixture_collector_count_file.exists():\n                with open(fixture_collector_count_file, \"r\") as f:\n                    fixture_collector_count = int(f.read())\n            else:\n                fixture_collector_count = 0\n            fixture_collector_count += 1\n            with open(fixture_collector_count_file, \"w\") as f:\n                f.write(str(fixture_collector_count))\n\n    fixture_collector = FixtureCollector(\n        output_dir=output_dir,\n        flat_output=request.config.getoption(\"flat_output\"),\n        single_fixture_per_file=request.config.getoption(\"single_fixture_per_file\"),\n        filler_path=filler_path,\n        base_dump_dir=base_dump_dir,\n    )\n    yield fixture_collector\n    fixture_collector.dump_fixtures()\n    if do_fixture_verification:\n        fixture_collector.verify_fixture_files(evm_fixture_verification)\n\n    fixture_collector_count = 0\n    if session_temp_folder is not None:\n        with FileLock(fixture_collector_count_file_lock):\n            with open(fixture_collector_count_file, \"r\") as f:\n                fixture_collector_count = int(f.read())\n            fixture_collector_count -= 1\n            with open(fixture_collector_count_file, \"w\") as f:\n                f.write(str(fixture_collector_count))\n    if generate_index and fixture_collector_count == 0:\n        generate_fixtures_index(\n            output_dir, quiet_mode=True, force_flag=False, disable_infer_format=False\n        )\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.filler_path","title":"filler_path(request)","text":"

    Returns the directory containing the tests to execute.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(autouse=True, scope=\"session\")\ndef filler_path(request: pytest.FixtureRequest) -> Path:\n    \"\"\"\n    Returns the directory containing the tests to execute.\n    \"\"\"\n    return request.config.getoption(\"filler_path\")\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.eips","title":"eips()","text":"

    A fixture specifying that, by default, no EIPs should be activated for tests.

    This fixture (function) may be redefined in test filler modules in order to overwrite this default and return a list of integers specifying which EIPs should be activated for the tests in scope.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(autouse=True)\ndef eips():\n    \"\"\"\n    A fixture specifying that, by default, no EIPs should be activated for\n    tests.\n\n    This fixture (function) may be redefined in test filler modules in order\n    to overwrite this default and return a list of integers specifying which\n    EIPs should be activated for the tests in scope.\n    \"\"\"\n    return []\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.yul","title":"yul(fork, request)","text":"

    A fixture that allows contract code to be defined with Yul code.

    This fixture defines a class that wraps the ::ethereum_test_tools.Yul class so that upon instantiation within the test case, it provides the test case's current fork parameter. The forks is then available for use in solc's arguments for the Yul code compilation.

    Test cases can override the default value by specifying a fixed version with the @pytest.mark.compile_yul_with(FORK) marker.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture\ndef yul(fork: Fork, request):\n    \"\"\"\n    A fixture that allows contract code to be defined with Yul code.\n\n    This fixture defines a class that wraps the ::ethereum_test_tools.Yul\n    class so that upon instantiation within the test case, it provides the\n    test case's current fork parameter. The forks is then available for use\n    in solc's arguments for the Yul code compilation.\n\n    Test cases can override the default value by specifying a fixed version\n    with the @pytest.mark.compile_yul_with(FORK) marker.\n    \"\"\"\n    solc_target_fork: Fork | None\n    marker = request.node.get_closest_marker(\"compile_yul_with\")\n    if marker:\n        if not marker.args[0]:\n            pytest.fail(\n                f\"{request.node.name}: Expected one argument in 'compile_yul_with' marker.\"\n            )\n        for fork in request.config.forks:\n            if fork.name() == marker.args[0]:\n                solc_target_fork = fork\n                break\n        else:\n            pytest.fail(f\"{request.node.name}: Fork {marker.args[0]} not found in forks list.\")\n        assert solc_target_fork in get_forks_with_solc_support(request.config.solc_version)\n    else:\n        solc_target_fork = get_closest_fork_with_solc_support(fork, request.config.solc_version)\n        assert solc_target_fork is not None, \"No fork supports provided solc version.\"\n        if solc_target_fork != fork and request.config.getoption(\"verbose\") >= 1:\n            warnings.warn(f\"Compiling Yul for {solc_target_fork.name()}, not {fork.name()}.\")\n\n    class YulWrapper(Yul):\n        def __new__(cls, *args, **kwargs):\n            return super(YulWrapper, cls).__new__(cls, *args, **kwargs, fork=solc_target_fork)\n\n    return YulWrapper\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.node_to_test_info","title":"node_to_test_info(node)","text":"

    Returns the test info of the current node item.

    Source code in src/pytest_plugins/filler/filler.py
    def node_to_test_info(node: pytest.Item) -> TestInfo:\n    \"\"\"\n    Returns the test info of the current node item.\n    \"\"\"\n    return TestInfo(\n        name=node.name,\n        id=node.nodeid,\n        original_name=node.originalname,  # type: ignore\n        path=Path(node.path),\n    )\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.fixture_source_url","title":"fixture_source_url(request)","text":"

    Returns the URL to the fixture source.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=\"function\")\ndef fixture_source_url(request: pytest.FixtureRequest) -> str:\n    \"\"\"\n    Returns the URL to the fixture source.\n    \"\"\"\n    function_line_number = request.function.__code__.co_firstlineno\n    module_relative_path = os.path.relpath(request.module.__file__)\n    hash_or_tag = get_current_commit_hash_or_tag()\n    github_url = generate_github_url(\n        module_relative_path, branch_or_commit_or_tag=hash_or_tag, line_number=function_line_number\n    )\n    return github_url\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.fixture_description","title":"fixture_description(request)","text":"

    Fixture to extract and combine docstrings from the test class and the test function.

    Source code in src/pytest_plugins/filler/filler.py
    @pytest.fixture(scope=\"function\")\ndef fixture_description(request: pytest.FixtureRequest) -> str:\n    \"\"\"Fixture to extract and combine docstrings from the test class and the test function.\"\"\"\n    description_unavailable = (\n        \"No description available - add a docstring to the python test class or function.\"\n    )\n    test_class_doc = f\"Test class documentation:\\n{request.cls.__doc__}\" if request.cls else \"\"\n    test_function_doc = (\n        f\"Test function documentation:\\n{request.function.__doc__}\"\n        if request.function.__doc__\n        else \"\"\n    )\n    if not test_class_doc and not test_function_doc:\n        return description_unavailable\n    combined_docstring = f\"{test_class_doc}\\n\\n{test_function_doc}\".strip()\n    return combined_docstring\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.base_test_parametrizer","title":"base_test_parametrizer(cls)","text":"

    Generates a pytest.fixture for a given BaseTest subclass.

    Implementation detail: All spec fixtures must be scoped on test function level to avoid leakage between tests.

    Source code in src/pytest_plugins/filler/filler.py
    def base_test_parametrizer(cls: Type[BaseTest]):\n    \"\"\"\n    Generates a pytest.fixture for a given BaseTest subclass.\n\n    Implementation detail: All spec fixtures must be scoped on test function level to avoid\n    leakage between tests.\n    \"\"\"\n\n    @pytest.fixture(\n        scope=\"function\",\n        name=cls.pytest_parameter_name(),\n    )\n    def base_test_parametrizer_func(\n        request: pytest.FixtureRequest,\n        t8n: TransitionTool,\n        fork: Fork,\n        reference_spec: ReferenceSpec,\n        eips: List[int],\n        pre: Alloc,\n        output_dir: Path,\n        dump_dir_parameter_level: Path | None,\n        fixture_collector: FixtureCollector,\n        fixture_description: str,\n        fixture_source_url: str,\n    ):\n        \"\"\"\n        Fixture used to instantiate an auto-fillable BaseTest object from within\n        a test function.\n\n        Every test that defines a test filler must explicitly specify its parameter name\n        (see `pytest_parameter_name` in each implementation of BaseTest) in its function\n        arguments.\n\n        When parametrize, indirect must be used along with the fixture format as value.\n        \"\"\"\n        fixture_format = request.param\n        assert isinstance(fixture_format, FixtureFormats)\n\n        class BaseTestWrapper(cls):  # type: ignore\n            def __init__(self, *args, **kwargs):\n                kwargs[\"t8n_dump_dir\"] = dump_dir_parameter_level\n                if \"pre\" not in kwargs:\n                    kwargs[\"pre\"] = pre\n                super(BaseTestWrapper, self).__init__(*args, **kwargs)\n                fixture = self.generate(\n                    t8n=t8n,\n                    fork=fork,\n                    fixture_format=fixture_format,\n                    eips=eips,\n                )\n                fixture.fill_info(\n                    t8n.version(),\n                    fixture_description,\n                    fixture_source_url=fixture_source_url,\n                    ref_spec=reference_spec,\n                )\n\n                fixture_path = fixture_collector.add_fixture(\n                    node_to_test_info(request.node),\n                    fixture,\n                )\n\n                # NOTE: Use str for compatibility with pytest-dist\n                request.node.config.fixture_path_absolute = str(fixture_path.absolute())\n                request.node.config.fixture_path_relative = str(\n                    fixture_path.relative_to(output_dir)\n                )\n                request.node.config.fixture_format = fixture_format.value\n\n        return BaseTestWrapper\n\n    return base_test_parametrizer_func\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_generate_tests","title":"pytest_generate_tests(metafunc)","text":"

    Pytest hook used to dynamically generate test cases for each fixture format a given test spec supports.

    Source code in src/pytest_plugins/filler/filler.py
    def pytest_generate_tests(metafunc: pytest.Metafunc):\n    \"\"\"\n    Pytest hook used to dynamically generate test cases for each fixture format a given\n    test spec supports.\n    \"\"\"\n    for test_type in SPEC_TYPES:\n        if test_type.pytest_parameter_name() in metafunc.fixturenames:\n            metafunc.parametrize(\n                [test_type.pytest_parameter_name()],\n                [\n                    pytest.param(\n                        fixture_format,\n                        id=fixture_format.name.lower(),\n                        marks=[getattr(pytest.mark, fixture_format.name.lower())],\n                    )\n                    for fixture_format in test_type.supported_fixture_formats\n                ],\n                scope=\"function\",\n                indirect=True,\n            )\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_collection_modifyitems","title":"pytest_collection_modifyitems(config, items)","text":"

    Remove pre-Paris tests parametrized to generate engine type fixtures; these can't be used in the Hive Pyspec Simulator.

    This can't be handled in this plugins pytest_generate_tests() as the fork parametrization occurs in the forks plugin.

    Source code in src/pytest_plugins/filler/filler.py
    def pytest_collection_modifyitems(config, items):\n    \"\"\"\n    Remove pre-Paris tests parametrized to generate engine type fixtures; these\n    can't be used in the Hive Pyspec Simulator.\n\n    This can't be handled in this plugins pytest_generate_tests() as the fork\n    parametrization occurs in the forks plugin.\n    \"\"\"\n    for item in items[:]:  # use a copy of the list, as we'll be modifying it\n        if isinstance(item, EIPSpecTestItem):\n            continue\n        if \"fork\" not in item.callspec.params or item.callspec.params[\"fork\"] is None:\n            items.remove(item)\n            continue\n        if item.callspec.params[\"fork\"] < Paris:\n            # Even though the `state_test` test spec does not produce an engine STATE_TEST, it does\n            # produce a BLOCKCHAIN_TEST_ENGINE, so we need to remove it here.\n            # TODO: Ideally, the logic could be contained in the `FixtureFormat` class, we create\n            # a `fork_supported` method that returns True if the fork is supported.\n            if (\"state_test\" in item.callspec.params) and item.callspec.params[\n                \"state_test\"\n            ].name.endswith(\"ENGINE\"):\n                items.remove(item)\n            if (\"blockchain_test\" in item.callspec.params) and item.callspec.params[\n                \"blockchain_test\"\n            ].name.endswith(\"ENGINE\"):\n                items.remove(item)\n        if \"yul\" in item.fixturenames:\n            item.add_marker(pytest.mark.yul_test)\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_make_parametrize_id","title":"pytest_make_parametrize_id(config, val, argname)","text":"

    Pytest hook called when generating test ids. We use this to generate more readable test ids for the generated tests.

    Source code in src/pytest_plugins/filler/filler.py
    def pytest_make_parametrize_id(config, val, argname):\n    \"\"\"\n    Pytest hook called when generating test ids. We use this to generate\n    more readable test ids for the generated tests.\n    \"\"\"\n    return f\"{argname}_{val}\"\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.filler.pytest_runtest_call","title":"pytest_runtest_call(item)","text":"

    Pytest hook called in the context of test execution.

    Source code in src/pytest_plugins/filler/filler.py
    def pytest_runtest_call(item):\n    \"\"\"\n    Pytest hook called in the context of test execution.\n    \"\"\"\n    if isinstance(item, EIPSpecTestItem):\n        return\n\n    class InvalidFiller(Exception):\n        def __init__(self, message):\n            super().__init__(message)\n\n    if \"state_test\" in item.fixturenames and \"blockchain_test\" in item.fixturenames:\n        raise InvalidFiller(\n            \"A filler should only implement either a state test or \" \"a blockchain test; not both.\"\n        )\n\n    # Check that the test defines either test type as parameter.\n    if not any([i for i in item.funcargs if i in SPEC_TYPES_PARAMETERS]):\n        pytest.fail(\n            \"Test must define either one of the following parameters to \"\n            + \"properly generate a test: \"\n            + \", \".join(SPEC_TYPES_PARAMETERS)\n        )\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.pytest_addoption","title":"pytest_addoption(parser)","text":"

    Adds command-line options to pytest.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    def pytest_addoption(parser: pytest.Parser):\n    \"\"\"\n    Adds command-line options to pytest.\n    \"\"\"\n    pre_alloc_group = parser.getgroup(\"pre_alloc\", \"Arguments defining pre-allocation behavior.\")\n\n    pre_alloc_group.addoption(\n        \"--strict-alloc\",\n        action=\"store_true\",\n        dest=\"strict_alloc\",\n        default=False,\n        help=(\"[DEBUG ONLY] Disallows deploying a contract in a predefined address.\"),\n    )\n    pre_alloc_group.addoption(\n        \"--ca-start\",\n        \"--contract-address-start\",\n        action=\"store\",\n        dest=\"test_contract_start_address\",\n        default=f\"{CONTRACT_START_ADDRESS_DEFAULT}\",\n        type=str,\n        help=\"The starting address from which tests will deploy contracts.\",\n    )\n    pre_alloc_group.addoption(\n        \"--ca-incr\",\n        \"--contract-address-increment\",\n        action=\"store\",\n        dest=\"test_contract_address_increments\",\n        default=f\"{CONTRACT_ADDRESS_INCREMENTS_DEFAULT}\",\n        type=str,\n        help=\"The address increment value to each deployed contract by a test.\",\n    )\n    pre_alloc_group.addoption(\n        \"--evm-code-type\",\n        action=\"store\",\n        dest=\"evm_code_type\",\n        default=None,\n        type=EVMCodeType,\n        choices=list(EVMCodeType),\n        help=\"Type of EVM code to deploy in each test by default.\",\n    )\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.AllocMode","title":"AllocMode","text":"

    Bases: IntEnum

    Allocation mode for the state.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    class AllocMode(IntEnum):\n    \"\"\"\n    Allocation mode for the state.\n    \"\"\"\n\n    PERMISSIVE = 0\n    STRICT = 1\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.Alloc","title":"Alloc","text":"

    Bases: Alloc

    Allocation of accounts in the state, pre and post test execution.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    class Alloc(BaseAlloc):\n    \"\"\"\n    Allocation of accounts in the state, pre and post test execution.\n    \"\"\"\n\n    _alloc_mode: AllocMode = PrivateAttr(...)\n    _contract_address_iterator: Iterator[Address] = PrivateAttr(...)\n    _eoa_iterator: Iterator[EOA] = PrivateAttr(...)\n    _evm_code_type: EVMCodeType | None = PrivateAttr(None)\n\n    def __init__(\n        self,\n        *args,\n        alloc_mode: AllocMode,\n        contract_address_iterator: Iterator[Address],\n        eoa_iterator: Iterator[EOA],\n        evm_code_type: EVMCodeType | None = None,\n        **kwargs,\n    ):\n        \"\"\"\n        Initializes the allocation with the given properties.\n        \"\"\"\n        super().__init__(*args, **kwargs)\n        self._alloc_mode = alloc_mode\n        self._contract_address_iterator = contract_address_iterator\n        self._eoa_iterator = eoa_iterator\n        self._evm_code_type = evm_code_type\n\n    def __setitem__(self, address: Address | FixedSizeBytesConvertible, account: Account | None):\n        \"\"\"\n        Sets the account associated with an address.\n        \"\"\"\n        if self._alloc_mode == AllocMode.STRICT:\n            raise ValueError(\"Cannot set items in strict mode\")\n        super().__setitem__(address, account)\n\n    def code_pre_processor(\n        self, code: BytesConvertible, *, evm_code_type: EVMCodeType | None\n    ) -> BytesConvertible:\n        \"\"\"\n        Pre-processes the code before setting it.\n        \"\"\"\n        if evm_code_type is None:\n            evm_code_type = self._evm_code_type\n        if evm_code_type == EVMCodeType.EOF_V1:\n            if not isinstance(code, Container):\n                if isinstance(code, Bytecode) and not code.terminating:\n                    return Container.Code(code + Opcodes.STOP)\n                return Container.Code(code)\n        return code\n\n    def deploy_contract(\n        self,\n        code: BytesConvertible,\n        *,\n        storage: Storage | StorageRootType = {},\n        balance: NumberConvertible = 0,\n        nonce: NumberConvertible = 1,\n        address: Address | None = None,\n        evm_code_type: EVMCodeType | None = None,\n        label: str | None = None,\n    ) -> Address:\n        \"\"\"\n        Deploy a contract to the allocation.\n\n        Warning: `address` parameter is a temporary solution to allow tests to hard-code the\n        contract address. Do NOT use in new tests as it will be removed in the future!\n        \"\"\"\n        if address is not None:\n            assert self._alloc_mode == AllocMode.PERMISSIVE, \"address parameter is not supported\"\n            assert address not in self, f\"address {address} already in allocation\"\n            contract_address = address\n        else:\n            contract_address = next(self._contract_address_iterator)\n\n        if self._alloc_mode == AllocMode.STRICT:\n            assert Number(nonce) >= 1, \"impossible to deploy contract with nonce lower than one\"\n\n        super().__setitem__(\n            contract_address,\n            Account(\n                nonce=nonce,\n                balance=balance,\n                code=self.code_pre_processor(code, evm_code_type=evm_code_type),\n                storage=storage,\n            ),\n        )\n        if label is None:\n            # Try to deduce the label from the code\n            frame = inspect.currentframe()\n            if frame is not None:\n                caller_frame = frame.f_back\n                if caller_frame is not None:\n                    code_context = inspect.getframeinfo(caller_frame).code_context\n                    if code_context is not None:\n                        line = code_context[0].strip()\n                        if \"=\" in line:\n                            label = line.split(\"=\")[0].strip()\n\n        contract_address.label = label\n        return contract_address\n\n    def fund_eoa(\n        self,\n        amount: NumberConvertible = 10**21,\n        label: str | None = None,\n        storage: Storage | None = None,\n    ) -> EOA:\n        \"\"\"\n        Add a previously unused EOA to the pre-alloc with the balance specified by `amount`.\n\n        If amount is 0, nothing will be added to the pre-alloc but a new and unique EOA will be\n        returned.\n        \"\"\"\n        eoa = next(self._eoa_iterator)\n        if Number(amount) > 0 or storage is not None:\n            if storage is None:\n                account = Account(\n                    nonce=0,\n                    balance=amount,\n                )\n            else:\n                # Type-4 transaction is sent to the EOA to set the storage, so the nonce must be 1\n                account = Account(\n                    nonce=1,\n                    balance=amount,\n                    storage=storage,\n                )\n                eoa.nonce = Number(1)\n\n            super().__setitem__(eoa, account)\n        return eoa\n\n    def fund_address(self, address: Address, amount: NumberConvertible):\n        \"\"\"\n        Fund an address with a given amount.\n\n        If the address is already present in the pre-alloc the amount will be\n        added to its existing balance.\n        \"\"\"\n        if address in self:\n            account = self[address]\n            if account is not None:\n                current_balance = account.balance or 0\n                account.balance = ZeroPaddedHexNumber(current_balance + Number(amount))\n                return\n        super().__setitem__(address, Account(balance=amount))\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.Alloc.__init__","title":"__init__(*args, alloc_mode, contract_address_iterator, eoa_iterator, evm_code_type=None, **kwargs)","text":"

    Initializes the allocation with the given properties.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    def __init__(\n    self,\n    *args,\n    alloc_mode: AllocMode,\n    contract_address_iterator: Iterator[Address],\n    eoa_iterator: Iterator[EOA],\n    evm_code_type: EVMCodeType | None = None,\n    **kwargs,\n):\n    \"\"\"\n    Initializes the allocation with the given properties.\n    \"\"\"\n    super().__init__(*args, **kwargs)\n    self._alloc_mode = alloc_mode\n    self._contract_address_iterator = contract_address_iterator\n    self._eoa_iterator = eoa_iterator\n    self._evm_code_type = evm_code_type\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.Alloc.__setitem__","title":"__setitem__(address, account)","text":"

    Sets the account associated with an address.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    def __setitem__(self, address: Address | FixedSizeBytesConvertible, account: Account | None):\n    \"\"\"\n    Sets the account associated with an address.\n    \"\"\"\n    if self._alloc_mode == AllocMode.STRICT:\n        raise ValueError(\"Cannot set items in strict mode\")\n    super().__setitem__(address, account)\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.Alloc.code_pre_processor","title":"code_pre_processor(code, *, evm_code_type)","text":"

    Pre-processes the code before setting it.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    def code_pre_processor(\n    self, code: BytesConvertible, *, evm_code_type: EVMCodeType | None\n) -> BytesConvertible:\n    \"\"\"\n    Pre-processes the code before setting it.\n    \"\"\"\n    if evm_code_type is None:\n        evm_code_type = self._evm_code_type\n    if evm_code_type == EVMCodeType.EOF_V1:\n        if not isinstance(code, Container):\n            if isinstance(code, Bytecode) and not code.terminating:\n                return Container.Code(code + Opcodes.STOP)\n            return Container.Code(code)\n    return code\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.Alloc.deploy_contract","title":"deploy_contract(code, *, storage={}, balance=0, nonce=1, address=None, evm_code_type=None, label=None)","text":"

    Deploy a contract to the allocation.

    Warning: address parameter is a temporary solution to allow tests to hard-code the contract address. Do NOT use in new tests as it will be removed in the future!

    Source code in src/pytest_plugins/filler/pre_alloc.py
    def deploy_contract(\n    self,\n    code: BytesConvertible,\n    *,\n    storage: Storage | StorageRootType = {},\n    balance: NumberConvertible = 0,\n    nonce: NumberConvertible = 1,\n    address: Address | None = None,\n    evm_code_type: EVMCodeType | None = None,\n    label: str | None = None,\n) -> Address:\n    \"\"\"\n    Deploy a contract to the allocation.\n\n    Warning: `address` parameter is a temporary solution to allow tests to hard-code the\n    contract address. Do NOT use in new tests as it will be removed in the future!\n    \"\"\"\n    if address is not None:\n        assert self._alloc_mode == AllocMode.PERMISSIVE, \"address parameter is not supported\"\n        assert address not in self, f\"address {address} already in allocation\"\n        contract_address = address\n    else:\n        contract_address = next(self._contract_address_iterator)\n\n    if self._alloc_mode == AllocMode.STRICT:\n        assert Number(nonce) >= 1, \"impossible to deploy contract with nonce lower than one\"\n\n    super().__setitem__(\n        contract_address,\n        Account(\n            nonce=nonce,\n            balance=balance,\n            code=self.code_pre_processor(code, evm_code_type=evm_code_type),\n            storage=storage,\n        ),\n    )\n    if label is None:\n        # Try to deduce the label from the code\n        frame = inspect.currentframe()\n        if frame is not None:\n            caller_frame = frame.f_back\n            if caller_frame is not None:\n                code_context = inspect.getframeinfo(caller_frame).code_context\n                if code_context is not None:\n                    line = code_context[0].strip()\n                    if \"=\" in line:\n                        label = line.split(\"=\")[0].strip()\n\n    contract_address.label = label\n    return contract_address\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.Alloc.fund_eoa","title":"fund_eoa(amount=10 ** 21, label=None, storage=None)","text":"

    Add a previously unused EOA to the pre-alloc with the balance specified by amount.

    If amount is 0, nothing will be added to the pre-alloc but a new and unique EOA will be returned.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    def fund_eoa(\n    self,\n    amount: NumberConvertible = 10**21,\n    label: str | None = None,\n    storage: Storage | None = None,\n) -> EOA:\n    \"\"\"\n    Add a previously unused EOA to the pre-alloc with the balance specified by `amount`.\n\n    If amount is 0, nothing will be added to the pre-alloc but a new and unique EOA will be\n    returned.\n    \"\"\"\n    eoa = next(self._eoa_iterator)\n    if Number(amount) > 0 or storage is not None:\n        if storage is None:\n            account = Account(\n                nonce=0,\n                balance=amount,\n            )\n        else:\n            # Type-4 transaction is sent to the EOA to set the storage, so the nonce must be 1\n            account = Account(\n                nonce=1,\n                balance=amount,\n                storage=storage,\n            )\n            eoa.nonce = Number(1)\n\n        super().__setitem__(eoa, account)\n    return eoa\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.Alloc.fund_address","title":"fund_address(address, amount)","text":"

    Fund an address with a given amount.

    If the address is already present in the pre-alloc the amount will be added to its existing balance.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    def fund_address(self, address: Address, amount: NumberConvertible):\n    \"\"\"\n    Fund an address with a given amount.\n\n    If the address is already present in the pre-alloc the amount will be\n    added to its existing balance.\n    \"\"\"\n    if address in self:\n        account = self[address]\n        if account is not None:\n            current_balance = account.balance or 0\n            account.balance = ZeroPaddedHexNumber(current_balance + Number(amount))\n            return\n    super().__setitem__(address, Account(balance=amount))\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.alloc_mode","title":"alloc_mode(request)","text":"

    Returns the allocation mode for the tests.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    @pytest.fixture(scope=\"session\")\ndef alloc_mode(request: pytest.FixtureRequest) -> AllocMode:\n    \"\"\"\n    Returns the allocation mode for the tests.\n    \"\"\"\n    if request.config.getoption(\"strict_alloc\"):\n        return AllocMode.STRICT\n    return AllocMode.PERMISSIVE\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.contract_start_address","title":"contract_start_address(request)","text":"

    Returns the starting address for contract deployment.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    @pytest.fixture(scope=\"session\")\ndef contract_start_address(request: pytest.FixtureRequest) -> int:\n    \"\"\"\n    Returns the starting address for contract deployment.\n    \"\"\"\n    return int(request.config.getoption(\"test_contract_start_address\"), 0)\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.contract_address_increments","title":"contract_address_increments(request)","text":"

    Returns the address increment for contract deployment.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    @pytest.fixture(scope=\"session\")\ndef contract_address_increments(request: pytest.FixtureRequest) -> int:\n    \"\"\"\n    Returns the address increment for contract deployment.\n    \"\"\"\n    return int(request.config.getoption(\"test_contract_address_increments\"), 0)\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.contract_address_iterator","title":"contract_address_iterator(contract_start_address, contract_address_increments)","text":"

    Returns an iterator over contract addresses.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    @pytest.fixture(scope=\"function\")\ndef contract_address_iterator(\n    contract_start_address: int,\n    contract_address_increments: int,\n) -> Iterator[Address]:\n    \"\"\"\n    Returns an iterator over contract addresses.\n    \"\"\"\n    return iter(\n        Address(contract_start_address + (i * contract_address_increments)) for i in count()\n    )\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.eoa_by_index","title":"eoa_by_index(i) cached","text":"

    Returns an EOA by index.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    @cache\ndef eoa_by_index(i: int) -> EOA:\n    \"\"\"\n    Returns an EOA by index.\n    \"\"\"\n    return EOA(key=TestPrivateKey + i if i != 1 else TestPrivateKey2, nonce=0)\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.eoa_iterator","title":"eoa_iterator()","text":"

    Returns an iterator over EOAs copies.

    Source code in src/pytest_plugins/filler/pre_alloc.py
    @pytest.fixture(scope=\"function\")\ndef eoa_iterator() -> Iterator[EOA]:\n    \"\"\"\n    Returns an iterator over EOAs copies.\n    \"\"\"\n    return iter(eoa_by_index(i).copy() for i in count())\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.evm_code_type","title":"evm_code_type(request)","text":"

    Returns the default EVM code type for all tests (LEGACY).

    Source code in src/pytest_plugins/filler/pre_alloc.py
    @pytest.fixture(autouse=True)\ndef evm_code_type(request: pytest.FixtureRequest) -> EVMCodeType:\n    \"\"\"\n    Returns the default EVM code type for all tests (LEGACY).\n    \"\"\"\n    parameter_evm_code_type = request.config.getoption(\"evm_code_type\")\n    if parameter_evm_code_type is not None:\n        assert type(parameter_evm_code_type) is EVMCodeType, \"Invalid EVM code type\"\n        return parameter_evm_code_type\n    return EVMCodeType.LEGACY\n
    "},{"location":"library/pytest_plugins/filler/#pytest_plugins.filler.pre_alloc.pre","title":"pre(alloc_mode, contract_address_iterator, eoa_iterator, evm_code_type)","text":"

    Returns the default pre allocation for all tests (Empty alloc).

    Source code in src/pytest_plugins/filler/pre_alloc.py
    @pytest.fixture(scope=\"function\")\ndef pre(\n    alloc_mode: AllocMode,\n    contract_address_iterator: Iterator[Address],\n    eoa_iterator: Iterator[EOA],\n    evm_code_type: EVMCodeType,\n) -> Alloc:\n    \"\"\"\n    Returns the default pre allocation for all tests (Empty alloc).\n    \"\"\"\n    return Alloc(\n        alloc_mode=alloc_mode,\n        contract_address_iterator=contract_address_iterator,\n        eoa_iterator=eoa_iterator,\n        evm_code_type=evm_code_type,\n    )\n
    "},{"location":"library/pytest_plugins/forks/","title":"Forks Plugin","text":"

    A pytest plugin to configure the forks in the test session. It parametrizes tests based on the user-provided fork range the tests' specified validity markers.

    Pytest plugin to enable fork range configuration for the test session.

    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.pytest_addoption","title":"pytest_addoption(parser)","text":"

    Adds command-line options to pytest.

    Source code in src/pytest_plugins/forks/forks.py
    def pytest_addoption(parser):\n    \"\"\"\n    Adds command-line options to pytest.\n    \"\"\"\n    fork_group = parser.getgroup(\"Forks\", \"Specify the fork range to generate fixtures for\")\n    fork_group.addoption(\n        \"--forks\",\n        action=\"store_true\",\n        dest=\"show_fork_help\",\n        default=False,\n        help=\"Display forks supported by the test framework and exit.\",\n    )\n    fork_group.addoption(\n        \"--fork\",\n        action=\"store\",\n        dest=\"single_fork\",\n        default=None,\n        help=\"Only fill tests for the specified fork.\",\n    )\n    fork_group.addoption(\n        \"--from\",\n        action=\"store\",\n        dest=\"forks_from\",\n        default=None,\n        help=\"Fill tests from and including the specified fork.\",\n    )\n    fork_group.addoption(\n        \"--until\",\n        action=\"store\",\n        dest=\"forks_until\",\n        default=None,\n        help=\"Fill tests until and including the specified fork.\",\n    )\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.MarkedValue","title":"MarkedValue dataclass","text":"

    A processed value for a covariant parameter.

    Value can be a list for inclusive parameters.

    Source code in src/pytest_plugins/forks/forks.py
    @dataclass(kw_only=True)\nclass MarkedValue:\n    \"\"\"\n    A processed value for a covariant parameter.\n\n    Value can be a list for inclusive parameters.\n    \"\"\"\n\n    value: Any\n    marks: List[pytest.Mark | pytest.MarkDecorator] = field(default_factory=list)\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.ForkCovariantParameter","title":"ForkCovariantParameter dataclass","text":"

    Value list for a fork covariant parameter in a given fork.

    Source code in src/pytest_plugins/forks/forks.py
    @dataclass(kw_only=True)\nclass ForkCovariantParameter:\n    \"\"\"\n    Value list for a fork covariant parameter in a given fork.\n    \"\"\"\n\n    names: List[str]\n    values: List[List[MarkedValue]]\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.ForkParametrizer","title":"ForkParametrizer dataclass","text":"

    A parametrizer for a test case that is parametrized by the fork.

    Source code in src/pytest_plugins/forks/forks.py
    @dataclass(kw_only=True)\nclass ForkParametrizer:\n    \"\"\"\n    A parametrizer for a test case that is parametrized by the fork.\n    \"\"\"\n\n    fork: Fork\n    fork_covariant_parameters: List[ForkCovariantParameter] = field(default_factory=list)\n    marks: List[pytest.MarkDecorator | pytest.Mark] = field(default_factory=list)\n\n    @property\n    def parameter_names(self) -> List[str]:\n        \"\"\"\n        Return the parameter names for the test case.\n        \"\"\"\n        parameter_names = [\"fork\"]\n        for p in self.fork_covariant_parameters:\n            parameter_names.extend(p.names)\n        return parameter_names\n\n    @property\n    def parameter_values(self) -> List[ParameterSet]:\n        \"\"\"\n        Return the parameter values for the test case.\n        \"\"\"\n        param_value_combinations = [\n            # Flatten the list of values for each parameter\n            list(itertools.chain(*params))\n            for params in itertools.product(\n                # Add the fork so it is multiplied by the other parameters.\n                # It's a list of lists because all parameters are, but it will\n                # flattened after the product.\n                [[MarkedValue(value=self.fork)]],\n                # Add the values for each parameter, all of them are lists of at least one element.\n                *[p.values for p in self.fork_covariant_parameters],\n            )\n        ]\n\n        parameter_set_list: List[ParameterSet] = []\n        for marked_params in param_value_combinations:\n            marks = self.marks.copy()\n            params: List[Any] = []\n            for p in marked_params:\n                params.append(p.value)\n                if p.marks:\n                    marks.extend(p.marks)\n            parameter_set_list.append(pytest.param(*params, marks=marks))\n\n        return parameter_set_list\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.ForkParametrizer.parameter_names","title":"parameter_names: List[str] property","text":"

    Return the parameter names for the test case.

    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.ForkParametrizer.parameter_values","title":"parameter_values: List[ParameterSet] property","text":"

    Return the parameter values for the test case.

    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.CovariantDescriptor","title":"CovariantDescriptor dataclass","text":"

    A descriptor for a parameter that is covariant with the fork: the parametrized values change depending on the fork.

    Source code in src/pytest_plugins/forks/forks.py
    @dataclass(kw_only=True)\nclass CovariantDescriptor:\n    \"\"\"\n    A descriptor for a parameter that is covariant with the fork:\n    the parametrized values change depending on the fork.\n    \"\"\"\n\n    marker_name: str\n    description: str\n    fork_attribute_name: str\n    parameter_names: List[str]\n\n    def get_marker(self, metafunc: Metafunc) -> pytest.Mark | None:\n        \"\"\"\n        Get the marker for the given test function.\n        \"\"\"\n        m = metafunc.definition.iter_markers(self.marker_name)\n        if m is None:\n            return None\n        marker_list = list(m)\n        assert len(marker_list) <= 1, f\"Multiple markers {self.marker_name} found\"\n        if len(marker_list) == 0:\n            return None\n        return marker_list[0]\n\n    def check_enabled(self, metafunc: Metafunc) -> bool:\n        \"\"\"\n        Check if the marker is enabled for the given test function.\n        \"\"\"\n        return self.get_marker(metafunc) is not None\n\n    @staticmethod\n    def process_value(\n        values: Any | List[Any] | Tuple[Any],\n        selector: FunctionType,\n        marks: None\n        | pytest.Mark\n        | pytest.MarkDecorator\n        | List[pytest.Mark | pytest.MarkDecorator]\n        | Callable[\n            [Any],\n            List[pytest.Mark | pytest.MarkDecorator] | pytest.Mark | pytest.MarkDecorator | None,\n        ],\n    ) -> List[List[MarkedValue]]:\n        \"\"\"\n        Process a value for a covariant parameter.\n\n        The `selector` is applied to values in order to filter them.\n        \"\"\"\n        if not isinstance(values, tuple) and not isinstance(values, list):\n            values = [values]\n\n        if selector(*values[: selector.__code__.co_argcount]):\n            if isinstance(marks, FunctionType):\n                marks = marks(*values[: marks.__code__.co_argcount])\n            assert not isinstance(marks, FunctionType), \"marks must be a list or None\"\n            if marks is None:\n                marks = []\n            elif not isinstance(marks, list):\n                marks = [marks]  # type: ignore\n\n            return [[MarkedValue(value=v, marks=marks) for v in values]]\n\n        return []\n\n    def process_values(self, metafunc: Metafunc, values: List[Any]) -> List[List[MarkedValue]]:\n        \"\"\"\n        Filter the values for the covariant parameter.\n\n        I.e. if the marker has an argument, the argument is interpreted as a lambda function\n        that filters the values.\n        \"\"\"\n        marker = self.get_marker(metafunc)\n        assert marker is not None\n        assert len(marker.args) == 0, \"Only keyword arguments are supported\"\n\n        kwargs = dict(marker.kwargs)\n\n        selector = kwargs.pop(\"selector\", lambda _: True)\n        assert isinstance(selector, FunctionType), \"selector must be a function\"\n\n        marks = kwargs.pop(\"marks\", None)\n\n        if len(kwargs) > 0:\n            raise ValueError(f\"Unknown arguments to {self.marker_name}: {kwargs}\")\n\n        processed_values: List[List[MarkedValue]] = []\n        for value in values:\n            processed_values.extend(self.process_value(value, selector, marks))\n\n        return processed_values\n\n    def add_values(self, metafunc: Metafunc, fork_parametrizer: ForkParametrizer) -> None:\n        \"\"\"\n        Add the values for the covariant parameter to the parametrizer.\n        \"\"\"\n        if not self.check_enabled(metafunc=metafunc):\n            return\n        fork = fork_parametrizer.fork\n        get_fork_covariant_values: ForkAttribute = getattr(fork, self.fork_attribute_name)\n        values = get_fork_covariant_values(block_number=0, timestamp=0)\n        assert isinstance(values, list)\n        assert len(values) > 0\n        values = self.process_values(metafunc, values)\n        fork_parametrizer.fork_covariant_parameters.append(\n            ForkCovariantParameter(names=self.parameter_names, values=values)\n        )\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.CovariantDescriptor.get_marker","title":"get_marker(metafunc)","text":"

    Get the marker for the given test function.

    Source code in src/pytest_plugins/forks/forks.py
    def get_marker(self, metafunc: Metafunc) -> pytest.Mark | None:\n    \"\"\"\n    Get the marker for the given test function.\n    \"\"\"\n    m = metafunc.definition.iter_markers(self.marker_name)\n    if m is None:\n        return None\n    marker_list = list(m)\n    assert len(marker_list) <= 1, f\"Multiple markers {self.marker_name} found\"\n    if len(marker_list) == 0:\n        return None\n    return marker_list[0]\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.CovariantDescriptor.check_enabled","title":"check_enabled(metafunc)","text":"

    Check if the marker is enabled for the given test function.

    Source code in src/pytest_plugins/forks/forks.py
    def check_enabled(self, metafunc: Metafunc) -> bool:\n    \"\"\"\n    Check if the marker is enabled for the given test function.\n    \"\"\"\n    return self.get_marker(metafunc) is not None\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.CovariantDescriptor.process_value","title":"process_value(values, selector, marks) staticmethod","text":"

    Process a value for a covariant parameter.

    The selector is applied to values in order to filter them.

    Source code in src/pytest_plugins/forks/forks.py
    @staticmethod\ndef process_value(\n    values: Any | List[Any] | Tuple[Any],\n    selector: FunctionType,\n    marks: None\n    | pytest.Mark\n    | pytest.MarkDecorator\n    | List[pytest.Mark | pytest.MarkDecorator]\n    | Callable[\n        [Any],\n        List[pytest.Mark | pytest.MarkDecorator] | pytest.Mark | pytest.MarkDecorator | None,\n    ],\n) -> List[List[MarkedValue]]:\n    \"\"\"\n    Process a value for a covariant parameter.\n\n    The `selector` is applied to values in order to filter them.\n    \"\"\"\n    if not isinstance(values, tuple) and not isinstance(values, list):\n        values = [values]\n\n    if selector(*values[: selector.__code__.co_argcount]):\n        if isinstance(marks, FunctionType):\n            marks = marks(*values[: marks.__code__.co_argcount])\n        assert not isinstance(marks, FunctionType), \"marks must be a list or None\"\n        if marks is None:\n            marks = []\n        elif not isinstance(marks, list):\n            marks = [marks]  # type: ignore\n\n        return [[MarkedValue(value=v, marks=marks) for v in values]]\n\n    return []\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.CovariantDescriptor.process_values","title":"process_values(metafunc, values)","text":"

    Filter the values for the covariant parameter.

    I.e. if the marker has an argument, the argument is interpreted as a lambda function that filters the values.

    Source code in src/pytest_plugins/forks/forks.py
    def process_values(self, metafunc: Metafunc, values: List[Any]) -> List[List[MarkedValue]]:\n    \"\"\"\n    Filter the values for the covariant parameter.\n\n    I.e. if the marker has an argument, the argument is interpreted as a lambda function\n    that filters the values.\n    \"\"\"\n    marker = self.get_marker(metafunc)\n    assert marker is not None\n    assert len(marker.args) == 0, \"Only keyword arguments are supported\"\n\n    kwargs = dict(marker.kwargs)\n\n    selector = kwargs.pop(\"selector\", lambda _: True)\n    assert isinstance(selector, FunctionType), \"selector must be a function\"\n\n    marks = kwargs.pop(\"marks\", None)\n\n    if len(kwargs) > 0:\n        raise ValueError(f\"Unknown arguments to {self.marker_name}: {kwargs}\")\n\n    processed_values: List[List[MarkedValue]] = []\n    for value in values:\n        processed_values.extend(self.process_value(value, selector, marks))\n\n    return processed_values\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.CovariantDescriptor.add_values","title":"add_values(metafunc, fork_parametrizer)","text":"

    Add the values for the covariant parameter to the parametrizer.

    Source code in src/pytest_plugins/forks/forks.py
    def add_values(self, metafunc: Metafunc, fork_parametrizer: ForkParametrizer) -> None:\n    \"\"\"\n    Add the values for the covariant parameter to the parametrizer.\n    \"\"\"\n    if not self.check_enabled(metafunc=metafunc):\n        return\n    fork = fork_parametrizer.fork\n    get_fork_covariant_values: ForkAttribute = getattr(fork, self.fork_attribute_name)\n    values = get_fork_covariant_values(block_number=0, timestamp=0)\n    assert isinstance(values, list)\n    assert len(values) > 0\n    values = self.process_values(metafunc, values)\n    fork_parametrizer.fork_covariant_parameters.append(\n        ForkCovariantParameter(names=self.parameter_names, values=values)\n    )\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.pytest_configure","title":"pytest_configure(config)","text":"

    Register the plugin's custom markers and process command-line options.

    Custom marker registration: https://docs.pytest.org/en/7.1.x/how-to/writing_plugins.html#registering-custom-markers

    Source code in src/pytest_plugins/forks/forks.py
    @pytest.hookimpl(tryfirst=True)\ndef pytest_configure(config: pytest.Config):\n    \"\"\"\n    Register the plugin's custom markers and process command-line options.\n\n    Custom marker registration:\n    https://docs.pytest.org/en/7.1.x/how-to/writing_plugins.html#registering-custom-markers\n    \"\"\"\n    config.addinivalue_line(\n        \"markers\",\n        (\n            \"valid_at_transition_to(fork): specifies a test case is valid \"\n            \"only at fork transition boundary to the specified fork\"\n        ),\n    )\n    config.addinivalue_line(\n        \"markers\",\n        \"valid_from(fork): specifies from which fork a test case is valid\",\n    )\n    config.addinivalue_line(\n        \"markers\",\n        \"valid_until(fork): specifies until which fork a test case is valid\",\n    )\n\n    for d in fork_covariant_descriptors:\n        config.addinivalue_line(\"markers\", f\"{d.marker_name}: {d.description}\")\n\n    forks = set([fork for fork in get_forks() if not fork.ignore()])\n    config.forks = forks  # type: ignore\n    config.fork_names = set([fork.name() for fork in sorted(list(forks))])  # type: ignore\n    config.forks_by_name = {fork.name(): fork for fork in forks}  # type: ignore\n\n    available_forks_help = textwrap.dedent(\n        f\"\"\"\\\n        Available forks:\n        {\", \".join(fork.name() for fork in forks)}\n        \"\"\"\n    )\n    available_forks_help += textwrap.dedent(\n        f\"\"\"\\\n        Available transition forks:\n        {\", \".join([fork.name() for fork in get_transition_forks()])}\n        \"\"\"\n    )\n\n    def get_fork_option(config, option_name: str, parameter_name: str) -> Set[Fork]:\n        \"\"\"Post-process get option to allow for external fork conditions.\"\"\"\n        config_str = config.getoption(option_name)\n        if not config_str:\n            return set()\n        forks_str = config_str.split(\",\")\n        for i in range(len(forks_str)):\n            forks_str[i] = forks_str[i].strip()\n            if forks_str[i] == \"Merge\":\n                forks_str[i] = \"Paris\"\n\n        resulting_forks = set()\n\n        for fork in get_forks():\n            if fork.name() in forks_str:\n                resulting_forks.add(fork)\n\n        if len(resulting_forks) != len(forks_str):\n            print(\n                f\"Error: Unsupported fork provided to {parameter_name}:\",\n                config_str,\n                \"\\n\",\n                file=sys.stderr,\n            )\n            print(available_forks_help, file=sys.stderr)\n            pytest.exit(\"Invalid command-line options.\", returncode=pytest.ExitCode.USAGE_ERROR)\n\n        return resulting_forks\n\n    single_fork = get_fork_option(config, \"single_fork\", \"--fork\")\n    forks_from = get_fork_option(config, \"forks_from\", \"--from\")\n    forks_until = get_fork_option(config, \"forks_until\", \"--until\")\n    show_fork_help = config.getoption(\"show_fork_help\")\n\n    dev_forks_help = textwrap.dedent(\n        \"To run tests for a fork under active development, it must be \"\n        \"specified explicitly via --forks-until=FORK.\\n\"\n        \"Tests are only ran for deployed mainnet forks by default, i.e., \"\n        f\"until {get_deployed_forks()[-1].name()}.\\n\"\n    )\n    if show_fork_help:\n        print(available_forks_help)\n        print(dev_forks_help)\n        pytest.exit(\"After displaying help.\", returncode=0)\n\n    if single_fork and (forks_from or forks_until):\n        print(\n            \"Error: --fork cannot be used in combination with --from or --until\", file=sys.stderr\n        )\n        pytest.exit(\"Invalid command-line options.\", returncode=pytest.ExitCode.USAGE_ERROR)\n\n    if single_fork:\n        forks_from = single_fork\n        forks_until = single_fork\n    else:\n        if not forks_from:\n            forks_from = get_forks_with_no_parents(forks)\n        if not forks_until:\n            forks_until = get_last_descendants(set(get_deployed_forks()), forks_from)\n\n    fork_set = get_from_until_fork_set(forks, forks_from, forks_until)\n    config.fork_set = fork_set  # type: ignore\n\n    if not fork_set:\n        print(\n            f\"Error: --from {','.join(fork.name() for fork in forks_from)} \"\n            f\"--until {','.join(fork.name() for fork in forks_until)} \"\n            \"creates an empty fork range.\",\n            file=sys.stderr,\n        )\n        pytest.exit(\n            \"Command-line options produce empty fork range.\",\n            returncode=pytest.ExitCode.USAGE_ERROR,\n        )\n\n    # with --collect-only, we don't have access to these config options\n    config.unsupported_forks: Set[Fork] = set()  # type: ignore\n    if config.option.collectonly:\n        return\n\n    evm_bin = config.getoption(\"evm_bin\")\n    t8n = TransitionTool.from_binary_path(binary_path=evm_bin)\n    config.unsupported_forks = filter(  # type: ignore\n        lambda fork: not t8n.is_fork_supported(fork), fork_set\n    )\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.pytest_report_header","title":"pytest_report_header(config, start_path)","text":"

    A pytest hook called to obtain the report header.

    Source code in src/pytest_plugins/forks/forks.py
    @pytest.hookimpl(trylast=True)\ndef pytest_report_header(config, start_path):\n    \"\"\"A pytest hook called to obtain the report header.\"\"\"\n    bold = \"\\033[1m\"\n    warning = \"\\033[93m\"\n    reset = \"\\033[39;49m\"\n    header = [\n        (\n            bold\n            + \"Executing tests for: \"\n            + \", \".join([f.name() for f in sorted(list(config.fork_set))])\n            + reset\n        ),\n    ]\n    if config.getoption(\"forks_until\") is None:\n        header += [\n            (\n                bold + warning + \"Only executing tests with stable/deployed forks: \"\n                \"Specify an upcoming fork via --until=fork to \"\n                \"add forks under development.\" + reset\n            )\n        ]\n    return header\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.fork","title":"fork(request)","text":"

    Parametrize test cases by fork.

    Source code in src/pytest_plugins/forks/forks.py
    @pytest.fixture(autouse=True)\ndef fork(request):\n    \"\"\"\n    Parametrize test cases by fork.\n    \"\"\"\n    pass\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.get_validity_marker_args","title":"get_validity_marker_args(metafunc, validity_marker_name, test_name)","text":"

    Check and return the arguments specified to validity markers.

    Check that the validity markers:

    • pytest.mark.valid_from
    • pytest.mark.valid_until
    • pytest.mark.valid_at_transition_to

    are applied at most once and have been provided with exactly one argument which is a valid fork name.

    Parameters:

    Name Type Description Default metafunc Metafunc

    Pytest's metafunc object.

    required validity_marker_name str

    Name of the validity marker to validate and return.

    required test_name str

    The name of the test being parametrized by pytest_generate_tests.

    required

    Returns:

    Type Description Set[Fork]

    The name of the fork specified to the validity marker.

    Source code in src/pytest_plugins/forks/forks.py
    def get_validity_marker_args(\n    metafunc: Metafunc,\n    validity_marker_name: str,\n    test_name: str,\n) -> Set[Fork]:\n    \"\"\"Check and return the arguments specified to validity markers.\n\n    Check that the validity markers:\n\n    - `pytest.mark.valid_from`\n    - `pytest.mark.valid_until`\n    - `pytest.mark.valid_at_transition_to`\n\n    are applied at most once and have been provided with exactly one\n    argument which is a valid fork name.\n\n    Args:\n        metafunc: Pytest's metafunc object.\n        validity_marker_name: Name of the validity marker to validate\n            and return.\n        test_name: The name of the test being parametrized by\n            `pytest_generate_tests`.\n\n    Returns:\n        The name of the fork specified to the validity marker.\n    \"\"\"\n    validity_markers = [\n        marker for marker in metafunc.definition.iter_markers(validity_marker_name)\n    ]\n    if not validity_markers:\n        return set()\n    if len(validity_markers) > 1:\n        pytest.fail(f\"'{test_name}': Too many '{validity_marker_name}' markers applied to test. \")\n    if len(validity_markers[0].args) == 0:\n        pytest.fail(f\"'{test_name}': Missing fork argument with '{validity_marker_name}' marker. \")\n    if len(validity_markers[0].args) > 1:\n        pytest.fail(\n            f\"'{test_name}': Too many arguments specified to '{validity_marker_name}' marker. \"\n        )\n    fork_names_string = validity_markers[0].args[0]\n    fork_names = fork_names_string.split(\",\")\n    resulting_set: Set[Fork] = set()\n    for fork_name in fork_names:  # type: ignore\n        if fork_name not in metafunc.config.fork_names:  # type: ignore\n            pytest.fail(\n                f\"'{test_name}' specifies an invalid fork '{fork_names_string}' to the \"\n                f\"'{validity_marker_name}'. \"\n                \"List of valid forks: \"\n                \", \".join(name for name in metafunc.config.fork_names)  # type: ignore\n            )\n\n        resulting_set.add(metafunc.config.forks_by_name[fork_name])  # type: ignore\n\n    return resulting_set\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.pytest_generate_tests","title":"pytest_generate_tests(metafunc)","text":"

    Pytest hook used to dynamically generate test cases.

    Source code in src/pytest_plugins/forks/forks.py
    def pytest_generate_tests(metafunc: pytest.Metafunc):\n    \"\"\"\n    Pytest hook used to dynamically generate test cases.\n    \"\"\"\n    test_name = metafunc.function.__name__\n    valid_at_transition_to = get_validity_marker_args(\n        metafunc, \"valid_at_transition_to\", test_name\n    )\n    valid_from = get_validity_marker_args(metafunc, \"valid_from\", test_name)\n    valid_until = get_validity_marker_args(metafunc, \"valid_until\", test_name)\n\n    if valid_at_transition_to and valid_from:\n        pytest.fail(\n            f\"'{test_name}': \"\n            \"The markers 'valid_from' and 'valid_at_transition_to' can't be combined. \"\n        )\n    if valid_at_transition_to and valid_until:\n        pytest.fail(\n            f\"'{test_name}': \"\n            \"The markers 'valid_until' and 'valid_at_transition_to' can't be combined. \"\n        )\n\n    fork_set: Set[Fork] = metafunc.config.fork_set  # type: ignore\n    forks: Set[Fork] = metafunc.config.forks  # type: ignore\n\n    intersection_set: Set[Fork] = set()\n    if valid_at_transition_to:\n        for fork in valid_at_transition_to:\n            if fork in fork_set:\n                intersection_set = intersection_set | set(transition_fork_to(fork))\n\n    else:\n        if not valid_from:\n            valid_from = get_forks_with_no_parents(forks)\n\n        if not valid_until:\n            valid_until = get_last_descendants(forks, valid_from)\n\n        test_fork_set = get_from_until_fork_set(forks, valid_from, valid_until)\n\n        if not test_fork_set:\n            pytest.fail(\n                \"The test function's \"\n                f\"'{test_name}' fork validity markers generate \"\n                \"an empty fork range. Please check the arguments to its \"\n                f\"markers:  @pytest.mark.valid_from ({valid_from}) and \"\n                f\"@pytest.mark.valid_until ({valid_until}).\"\n            )\n\n        intersection_set = fork_set & test_fork_set\n\n    pytest_params: List[Any]\n    if \"fork\" in metafunc.fixturenames:\n        if not intersection_set:\n            if metafunc.config.getoption(\"verbose\") >= 2:\n                pytest_params = [\n                    pytest.param(\n                        None,\n                        marks=[\n                            pytest.mark.skip(\n                                reason=(\n                                    f\"{test_name} is not valid for any any of forks specified on \"\n                                    \"the command-line.\"\n                                )\n                            )\n                        ],\n                    )\n                ]\n                metafunc.parametrize(\"fork\", pytest_params, scope=\"function\")\n        else:\n            unsupported_forks: Set[Fork] = metafunc.config.unsupported_forks  # type: ignore\n            pytest_params = [\n                (\n                    ForkParametrizer(\n                        fork=fork,\n                        marks=[\n                            pytest.mark.skip(\n                                reason=(\n                                    f\"Fork '{fork}' unsupported by \"\n                                    f\"'{metafunc.config.getoption('evm_bin')}'.\"\n                                )\n                            )\n                        ],\n                    )\n                    if fork.name() in sorted(list(unsupported_forks))\n                    else ForkParametrizer(fork=fork)\n                )\n                for fork in sorted(list(intersection_set))\n            ]\n            add_fork_covariant_parameters(metafunc, pytest_params)\n            parametrize_fork(metafunc, pytest_params)\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.add_fork_covariant_parameters","title":"add_fork_covariant_parameters(metafunc, fork_parametrizers)","text":"

    Iterate over the fork covariant descriptors and add their values to the test function.

    Source code in src/pytest_plugins/forks/forks.py
    def add_fork_covariant_parameters(\n    metafunc: Metafunc, fork_parametrizers: List[ForkParametrizer]\n) -> None:\n    \"\"\"\n    Iterate over the fork covariant descriptors and add their values to the test function.\n    \"\"\"\n    for covariant_descriptor in fork_covariant_descriptors:\n        for fork_parametrizer in fork_parametrizers:\n            covariant_descriptor.add_values(metafunc=metafunc, fork_parametrizer=fork_parametrizer)\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.parameters_from_fork_parametrizer_list","title":"parameters_from_fork_parametrizer_list(fork_parametrizers)","text":"

    Get the parameters from the fork parametrizers.

    Source code in src/pytest_plugins/forks/forks.py
    def parameters_from_fork_parametrizer_list(\n    fork_parametrizers: List[ForkParametrizer],\n) -> Tuple[List[str], List[ParameterSet]]:\n    \"\"\"\n    Get the parameters from the fork parametrizers.\n    \"\"\"\n    param_names: List[str] = []\n    param_values: List[ParameterSet] = []\n\n    for fork_parametrizer in fork_parametrizers:\n        if not param_names:\n            param_names = fork_parametrizer.parameter_names\n        else:\n            assert param_names == fork_parametrizer.parameter_names\n        param_values.extend(fork_parametrizer.parameter_values)\n\n    # Remove duplicate parameters\n    param_1 = 0\n    while param_1 < len(param_names):\n        param_2 = param_1 + 1\n        while param_2 < len(param_names):\n            if param_names[param_1] == param_names[param_2]:\n                i = 0\n                while i < len(param_values):\n                    if param_values[i].values[param_1] != param_values[i].values[param_2]:\n                        del param_values[i]\n                    else:\n                        param_values[i] = pytest.param(\n                            *param_values[i].values[:param_2],\n                            *param_values[i].values[(param_2 + 1) :],\n                            id=param_values[i].id,\n                            marks=param_values[i].marks,\n                        )\n                        i += 1\n\n                del param_names[param_2]\n            else:\n                param_2 += 1\n        param_1 += 1\n\n    return param_names, param_values\n
    "},{"location":"library/pytest_plugins/forks/#pytest_plugins.forks.forks.parametrize_fork","title":"parametrize_fork(metafunc, fork_parametrizers)","text":"

    Add the fork parameters to the test function.

    Source code in src/pytest_plugins/forks/forks.py
    def parametrize_fork(metafunc: Metafunc, fork_parametrizers: List[ForkParametrizer]) -> None:\n    \"\"\"\n    Add the fork parameters to the test function.\n    \"\"\"\n    metafunc.parametrize(\n        *parameters_from_fork_parametrizer_list(fork_parametrizers), scope=\"function\"\n    )\n
    "},{"location":"library/pytest_plugins/navigation/","title":"Navigation","text":"
    • Overview
    • Forks
    • Test Filler
    • Spec Version Checker
    "},{"location":"library/pytest_plugins/spec_version_checker/","title":"Spec Version Checker Plugin","text":"

    A pytest plugin that verifies the tested version of an EIP specification against the latest version from the ethereum/EIPs Github repository.

    A pytest plugin that checks that the spec version specified in test/filler modules matches that of ethereum/EIPs.

    "},{"location":"library/pytest_plugins/spec_version_checker/#pytest_plugins.spec_version_checker.spec_version_checker.pytest_configure","title":"pytest_configure(config)","text":"

    Register the plugin's custom markers and process command-line options.

    Custom marker registration: https://docs.pytest.org/en/7.1.x/how-to/writing_plugins.html#registering-custom-markers

    Source code in src/pytest_plugins/spec_version_checker/spec_version_checker.py
    @pytest.hookimpl(tryfirst=True)\ndef pytest_configure(config):\n    \"\"\"\n    Register the plugin's custom markers and process command-line options.\n\n    Custom marker registration:\n    https://docs.pytest.org/en/7.1.x/how-to/writing_plugins.html#registering-custom-markers\n    \"\"\"\n    config.addinivalue_line(\n        \"markers\",\n        \"eip_version_check: a test that tests the reference spec defined in an EIP test module.\",\n    )\n
    "},{"location":"library/pytest_plugins/spec_version_checker/#pytest_plugins.spec_version_checker.spec_version_checker.get_ref_spec_from_module","title":"get_ref_spec_from_module(module)","text":"

    Return the reference spec object defined in a module.

    Raises:

    Type Description Exception

    If the module path contains \"eip\" and the module does not define a reference spec.

    Returns:

    Name Type Description spec_obj None | ReferenceSpec

    Return None if the module path does not contain \"eip\", i.e., the module is not required to define a reference spec, otherwise, return the ReferenceSpec object as defined by the module.

    Source code in src/pytest_plugins/spec_version_checker/spec_version_checker.py
    def get_ref_spec_from_module(module: ModuleType) -> None | ReferenceSpec:\n    \"\"\"\n    Return the reference spec object defined in a module.\n\n    Raises:\n        Exception: If the module path contains \"eip\" and the module\n            does not define a reference spec.\n\n    Returns:\n        spec_obj: Return None if the module path does not contain \"eip\",\n            i.e., the module is not required to define a reference spec,\n            otherwise, return the ReferenceSpec object as defined by the\n            module.\n    \"\"\"\n    if not is_test_for_an_eip(str(module.__file__)):\n        return None\n    module_dict = module.__dict__\n    parseable_ref_specs = [\n        ref_spec_type\n        for ref_spec_type in ReferenceSpecTypes\n        if ref_spec_type.parseable_from_module(module_dict)\n    ]\n    if len(parseable_ref_specs) > 0:\n        module_dict = module.__dict__\n        try:\n            spec_obj = parseable_ref_specs[0].parse_from_module(module_dict)\n        except Exception as e:\n            raise Exception(f\"Error in spec_version_checker: {e} (this test is generated).\")\n    else:\n        raise Exception(\"Test doesn't define REFERENCE_SPEC_GIT_PATH and REFERENCE_SPEC_VERSION\")\n    return spec_obj\n
    "},{"location":"library/pytest_plugins/spec_version_checker/#pytest_plugins.spec_version_checker.spec_version_checker.reference_spec","title":"reference_spec(request)","text":"

    Pytest fixture that returns the reference spec defined in a module.

    See get_ref_spec_from_module.

    Source code in src/pytest_plugins/spec_version_checker/spec_version_checker.py
    @pytest.fixture(autouse=True, scope=\"module\")\ndef reference_spec(request) -> None | ReferenceSpec:\n    \"\"\"\n    Pytest fixture that returns the reference spec defined in a module.\n\n    See `get_ref_spec_from_module`.\n    \"\"\"\n    return get_ref_spec_from_module(request.module)\n
    "},{"location":"library/pytest_plugins/spec_version_checker/#pytest_plugins.spec_version_checker.spec_version_checker.is_test_for_an_eip","title":"is_test_for_an_eip(input_string)","text":"

    Return True if input_string contains an EIP number, i.e., eipNNNN.

    Source code in src/pytest_plugins/spec_version_checker/spec_version_checker.py
    def is_test_for_an_eip(input_string: str) -> bool:\n    \"\"\"\n    Return True if `input_string` contains an EIP number, i.e., eipNNNN.\n    \"\"\"\n    pattern = re.compile(r\".*eip\\d{1,4}\", re.IGNORECASE)\n    if pattern.match(input_string):\n        return True\n    return False\n
    "},{"location":"library/pytest_plugins/spec_version_checker/#pytest_plugins.spec_version_checker.spec_version_checker.test_eip_spec_version","title":"test_eip_spec_version(module)","text":"

    Test that the ReferenceSpec object as defined in the test module is not outdated when compared to the remote hash from ethereum/EIPs.

    Source code in src/pytest_plugins/spec_version_checker/spec_version_checker.py
    def test_eip_spec_version(module: ModuleType):\n    \"\"\"\n    Test that the ReferenceSpec object as defined in the test module\n    is not outdated when compared to the remote hash from\n    ethereum/EIPs.\n    \"\"\"\n    ref_spec = get_ref_spec_from_module(module)\n    assert ref_spec, \"No reference spec object defined\"\n\n    message = (\n        \"The version of the spec referenced in \"\n        f\"{module} does not match that from ethereum/EIPs, \"\n        f\"tests might be outdated: Spec: {ref_spec.name()}. \"\n        f\"Referenced version: {ref_spec.known_version()}. \"\n        f\"Latest version: {ref_spec.latest_version()}. The \"\n        f\"version was retrieved from {ref_spec.api_url()}.\"\n    )\n    try:\n        is_up_to_date = not ref_spec.is_outdated()\n    except Exception as e:\n        raise Exception(\n            f\"Error in spec_version_checker: {e} (this test is generated). \"\n            f\"Reference spec URL: {ref_spec.api_url()}.\"\n        )\n\n    assert is_up_to_date, message\n
    "},{"location":"library/pytest_plugins/spec_version_checker/#pytest_plugins.spec_version_checker.spec_version_checker.EIPSpecTestItem","title":"EIPSpecTestItem","text":"

    Bases: Item

    Custom pytest test item to test EIP spec versions.

    Source code in src/pytest_plugins/spec_version_checker/spec_version_checker.py
    class EIPSpecTestItem(Item):\n    \"\"\"\n    Custom pytest test item to test EIP spec versions.\n    \"\"\"\n\n    def __init__(self, name, parent, module):\n        super().__init__(name, parent)\n        self.module = module\n\n    @classmethod\n    def from_parent(cls, parent, module):\n        \"\"\"\n        Public constructor to define new tests.\n        https://docs.pytest.org/en/latest/reference/reference.html#pytest.nodes.Node.from_parent\n        \"\"\"\n        return super().from_parent(parent=parent, name=\"test_eip_spec_version\", module=module)\n\n    def runtest(self):\n        \"\"\"\n        Define the test to execute for this item.\n        \"\"\"\n        test_eip_spec_version(self.module)\n\n    def reportinfo(self):\n        \"\"\"\n        Get location information for this test item to use test reports.\n        \"\"\"\n        return \"spec_version_checker\", 0, f\"{self.name}\"\n
    "},{"location":"library/pytest_plugins/spec_version_checker/#pytest_plugins.spec_version_checker.spec_version_checker.EIPSpecTestItem.from_parent","title":"from_parent(parent, module) classmethod","text":"

    Public constructor to define new tests. https://docs.pytest.org/en/latest/reference/reference.html#pytest.nodes.Node.from_parent

    Source code in src/pytest_plugins/spec_version_checker/spec_version_checker.py
    @classmethod\ndef from_parent(cls, parent, module):\n    \"\"\"\n    Public constructor to define new tests.\n    https://docs.pytest.org/en/latest/reference/reference.html#pytest.nodes.Node.from_parent\n    \"\"\"\n    return super().from_parent(parent=parent, name=\"test_eip_spec_version\", module=module)\n
    "},{"location":"library/pytest_plugins/spec_version_checker/#pytest_plugins.spec_version_checker.spec_version_checker.EIPSpecTestItem.runtest","title":"runtest()","text":"

    Define the test to execute for this item.

    Source code in src/pytest_plugins/spec_version_checker/spec_version_checker.py
    def runtest(self):\n    \"\"\"\n    Define the test to execute for this item.\n    \"\"\"\n    test_eip_spec_version(self.module)\n
    "},{"location":"library/pytest_plugins/spec_version_checker/#pytest_plugins.spec_version_checker.spec_version_checker.EIPSpecTestItem.reportinfo","title":"reportinfo()","text":"

    Get location information for this test item to use test reports.

    Source code in src/pytest_plugins/spec_version_checker/spec_version_checker.py
    def reportinfo(self):\n    \"\"\"\n    Get location information for this test item to use test reports.\n    \"\"\"\n    return \"spec_version_checker\", 0, f\"{self.name}\"\n
    "},{"location":"library/pytest_plugins/spec_version_checker/#pytest_plugins.spec_version_checker.spec_version_checker.pytest_collection_modifyitems","title":"pytest_collection_modifyitems(session, config, items)","text":"

    Insert a new test EIPSpecTestItem for every test modules that contains 'eip' in its path.

    Source code in src/pytest_plugins/spec_version_checker/spec_version_checker.py
    def pytest_collection_modifyitems(session, config, items):\n    \"\"\"\n    Insert a new test EIPSpecTestItem for every test modules that\n    contains 'eip' in its path.\n    \"\"\"\n    modules = set(item.parent for item in items if isinstance(item.parent, Module))\n    new_test_eip_spec_version_items = [\n        EIPSpecTestItem.from_parent(module, module.obj)\n        for module in modules\n        if is_test_for_an_eip(str(module.path))\n    ]\n    for item in new_test_eip_spec_version_items:\n        item.add_marker(\"eip_version_check\", append=True)\n    items.extend(new_test_eip_spec_version_items)\n
    "},{"location":"tests/","title":"Test case reference","text":"

    Documentation for tests.

    Generate fixtures for these test cases for all forks deployed to mainnet with:

    fill -v tests\n

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Cross-client test cases organized by fork. Each directory underneath tests/ contains test cases corresponding to the fork in which the functionality-under-test was introduced.

    "},{"location":"tests/berlin/","title":"Berlin","text":"

    Documentation for tests/berlin.

    Generate fixtures for these test cases with:

    fill -v tests/berlin\n

    Test cases for EVM functionality introduced in Berlin.

    "},{"location":"tests/berlin/eip2930_access_list/","title":"EIP-2930 Access List","text":"

    Documentation for tests/berlin/eip2930_access_list.

    Generate fixtures for these test cases with:

    fill -v tests/berlin/eip2930_access_list\n
    Tests EIP-2930: Optional access lists

    Test cases for EIP-2930: Optional access lists.

    "},{"location":"tests/berlin/eip2930_access_list/test_acl/","title":"Test ACL","text":"

    Documentation for tests/berlin/eip2930_access_list/test_acl.py.

    Generate fixtures for these test cases with:

    fill -v tests/berlin/eip2930_access_list/test_acl.py\n

    Test ACL Transaction Source Code Examples

    "},{"location":"tests/berlin/eip2930_access_list/test_acl/#tests.berlin.eip2930_access_list.test_acl.test_access_list","title":"test_access_list(state_test, pre)","text":"

    Test type 1 transaction.

    Source code in tests/berlin/eip2930_access_list/test_acl.py
    @pytest.mark.valid_from(\"Berlin\")\ndef test_access_list(state_test: StateTestFiller, pre: Alloc):\n    \"\"\"\n    Test type 1 transaction.\n    \"\"\"\n    env = Environment()\n\n    contract_address = pre.deploy_contract(\n        Op.PC + Op.SLOAD + Op.POP + Op.PC + Op.SLOAD,\n        balance=0x03,\n    )\n    sender = pre.fund_eoa(0x300000)\n\n    tx = Transaction(\n        ty=1,\n        chain_id=0x01,\n        to=contract_address,\n        value=1,\n        gas_limit=323328,\n        gas_price=7,\n        access_list=[\n            AccessList(\n                address=\"0x0000000000000000000000000000000000000000\",\n                storage_keys=[\n                    \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n                ],\n            )\n        ],\n        secret_key=\"0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8\",\n        protected=True,\n        sender=sender,\n    )\n\n    post = {\n        contract_address: Account(\n            code=\"0x5854505854\",\n            balance=4,\n            nonce=1,\n        ),\n        sender: Account(\n            balance=0x2CD931,\n            nonce=1,\n        ),\n    }\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/berlin/eip2930_access_list/test_acl/index/test_cases/","title":"Test ACL - Test Cases","text":"

    Test cases generated from tests/berlin/eip2930_access_list/test_acl.py

    Parametrized test cases generated from the test module tests/berlin/eip2930_access_list/test_acl.py:

    test_access_list[fork_Berlin-blockchain_test]\ntest_access_list[fork_Berlin-state_test]\ntest_access_list[fork_London-blockchain_test]\ntest_access_list[fork_London-state_test]\ntest_access_list[fork_Paris-blockchain_test]\ntest_access_list[fork_Paris-blockchain_test_engine]\ntest_access_list[fork_Paris-state_test]\ntest_access_list[fork_Shanghai-blockchain_test]\ntest_access_list[fork_Shanghai-blockchain_test_engine]\ntest_access_list[fork_Shanghai-state_test]\ntest_access_list[fork_Cancun-blockchain_test]\ntest_access_list[fork_Cancun-blockchain_test_engine]\ntest_access_list[fork_Cancun-state_test]\ntest_access_list[fork_Prague-blockchain_test]\ntest_access_list[fork_Prague-blockchain_test_engine]\ntest_access_list[fork_Prague-state_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/berlin/eip2930_access_list/test_acl.py\n
    "},{"location":"tests/byzantium/","title":"Byzantium","text":"

    Documentation for tests/byzantium.

    Generate fixtures for these test cases with:

    fill -v tests/byzantium\n

    Test cases for EVM functionality introduced in Byzantium.

    "},{"location":"tests/byzantium/eip198_modexp_precompile/","title":"EIP-198 Modexp Precompile","text":"

    Documentation for tests/byzantium/eip198_modexp_precompile.

    Generate fixtures for these test cases with:

    fill -v tests/byzantium/eip198_modexp_precompile\n

    Test for precompiles introduced in Byzantium.

    "},{"location":"tests/byzantium/eip198_modexp_precompile/test_modexp/","title":"Test Modexp","text":"

    Documentation for tests/byzantium/eip198_modexp_precompile/test_modexp.py.

    Generate fixtures for these test cases with:

    fill -v tests/byzantium/eip198_modexp_precompile/test_modexp.py\n
    Test EIP-198: MODEXP Precompile

    Tests the MODEXP precompile, located at address 0x0000..0005. Test cases from the EIP are labelled with EIP-198-caseX in the test id.

    "},{"location":"tests/byzantium/eip198_modexp_precompile/test_modexp/#tests.byzantium.eip198_modexp_precompile.test_modexp.test_modexp","title":"test_modexp(state_test, input, output, pre)","text":"

    Test the MODEXP precompile

    Source code in tests/byzantium/eip198_modexp_precompile/test_modexp.py
    @pytest.mark.valid_from(\"Byzantium\")\n@pytest.mark.parametrize(\n    [\"input\", \"output\"],\n    [\n        (\n            ModExpInput(base=\"\", exponent=\"\", modulus=\"02\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x01\"),\n        ),\n        (\n            ModExpInput(base=\"\", exponent=\"\", modulus=\"0002\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x0001\"),\n        ),\n        (\n            ModExpInput(base=\"00\", exponent=\"00\", modulus=\"02\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x01\"),\n        ),\n        (\n            ModExpInput(base=\"\", exponent=\"01\", modulus=\"02\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x00\"),\n        ),\n        (\n            ModExpInput(base=\"01\", exponent=\"01\", modulus=\"02\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x01\"),\n        ),\n        (\n            ModExpInput(base=\"02\", exponent=\"01\", modulus=\"03\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x02\"),\n        ),\n        (\n            ModExpInput(base=\"02\", exponent=\"02\", modulus=\"05\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x04\"),\n        ),\n        (\n            ModExpInput(base=\"\", exponent=\"\", modulus=\"\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x\"),\n        ),\n        (\n            ModExpInput(base=\"\", exponent=\"\", modulus=\"00\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x00\"),\n        ),\n        (\n            ModExpInput(base=\"\", exponent=\"\", modulus=\"01\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x00\"),\n        ),\n        (\n            ModExpInput(base=\"\", exponent=\"\", modulus=\"0001\"),\n            ExpectedOutput(call_return_code=\"0x01\", returned_data=\"0x0000\"),\n        ),\n        # Test cases from EIP 198.\n        pytest.param(\n            ModExpInput(\n                base=\"03\",\n                exponent=\"fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e\",\n                modulus=\"fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f\",\n            ),\n            ExpectedOutput(\n                call_return_code=\"0x01\",\n                returned_data=\"0000000000000000000000000000000000000000000000000000000000000001\",\n            ),\n            id=\"EIP-198-case1\",\n        ),\n        pytest.param(\n            ModExpInput(\n                base=\"\",\n                exponent=\"fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e\",\n                modulus=\"fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f\",\n            ),\n            ExpectedOutput(\n                call_return_code=\"0x01\",\n                returned_data=\"0000000000000000000000000000000000000000000000000000000000000000\",\n            ),\n            id=\"EIP-198-case2\",\n        ),\n        pytest.param(  # Note: This is the only test case which goes out-of-gas.\n            ModExpRawInput(\n                raw_input=\"0000000000000000000000000000000000000000000000000000000000000000\"\n                \"0000000000000000000000000000000000000000000000000000000000000020\"\n                \"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\"\n                \"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe\"\n                \"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd\"\n            ),\n            ExpectedOutput(\n                call_return_code=\"0x00\",\n                returned_data=\"0000000000000000000000000000000000000000000000000000000000000000\",\n            ),\n            id=\"EIP-198-case3-raw-input-out-of-gas\",\n        ),\n        pytest.param(\n            ModExpInput(\n                base=\"03\",\n                exponent=\"ffff\",\n                modulus=\"8000000000000000000000000000000000000000000000000000000000000000\",\n                extra_data=\"07\",\n            ),\n            ExpectedOutput(\n                call_return_code=\"0x01\",\n                returned_data=\"0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab\",\n            ),\n            id=\"EIP-198-case4-extra-data_07\",\n        ),\n        pytest.param(\n            ModExpRawInput(\n                raw_input=\"0000000000000000000000000000000000000000000000000000000000000001\"\n                \"0000000000000000000000000000000000000000000000000000000000000002\"\n                \"0000000000000000000000000000000000000000000000000000000000000020\"\n                \"03\"\n                \"ffff\"\n                \"80\"\n            ),\n            ExpectedOutput(\n                call_return_code=\"0x01\",\n                returned_data=\"0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab\",\n            ),\n            id=\"EIP-198-case5-raw-input\",\n        ),\n    ],\n    ids=lambda param: param.__repr__(),  # only required to remove parameter names (input/output)\n)\ndef test_modexp(\n    state_test: StateTestFiller, input: ModExpInput, output: ExpectedOutput, pre: Alloc\n):\n    \"\"\"\n    Test the MODEXP precompile\n    \"\"\"\n    env = Environment()\n    sender = pre.fund_eoa()\n\n    account = pre.deploy_contract(\n        # Store all CALLDATA into memory (offset 0)\n        Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n        # Store the returned CALL status (success = 1, fail = 0) into slot 0:\n        + Op.SSTORE(\n            0,\n            # Setup stack to CALL into ModExp with the CALLDATA and CALL into it (+ pop value)\n            Op.CALL(Op.GAS(), 0x05, 0, 0, Op.CALLDATASIZE(), 0, 0),\n        )\n        # Store contract deployment code to deploy the returned data from ModExp as\n        # contract code (16 bytes)\n        + Op.MSTORE(\n            0,\n            (\n                (\n                    # Need to `ljust` this PUSH32 in order to ensure the code starts\n                    # in memory at offset 0 (memory right-aligns stack items which are not\n                    # 32 bytes)\n                    Op.PUSH32(\n                        bytes(\n                            Op.CODECOPY(0, 16, Op.SUB(Op.CODESIZE(), 16))\n                            + Op.RETURN(0, Op.SUB(Op.CODESIZE, 16))\n                        ).ljust(32, bytes(1))\n                    )\n                )\n            ),\n        )\n        # RETURNDATACOPY the returned data from ModExp into memory (offset 16 bytes)\n        + Op.RETURNDATACOPY(16, 0, Op.RETURNDATASIZE())\n        # CREATE contract with the deployment code + the returned data from ModExp\n        + Op.CREATE(0, 0, Op.ADD(16, Op.RETURNDATASIZE()))\n        # STOP (handy for tracing)\n        + Op.STOP(),\n    )\n\n    tx = Transaction(\n        ty=0x0,\n        to=account,\n        data=input.create_modexp_tx_data(),\n        gas_limit=500000,\n        gas_price=10,\n        protected=True,\n        sender=sender,\n    )\n\n    post = {}\n    if output.call_return_code != \"0x00\":\n        contract_address = compute_create_address(address=account, nonce=1)\n        post[contract_address] = Account(code=output.returned_data)\n    post[account] = Account(storage={0: output.call_return_code})\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/byzantium/eip198_modexp_precompile/test_modexp/index/test_cases/","title":"Test Modexp - Test Cases","text":"

    Test cases generated from tests/byzantium/eip198_modexp_precompile/test_modexp.py

    Parametrized test cases generated from the test module tests/byzantium/eip198_modexp_precompile/test_modexp.py:

    test_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Byzantium-blockchain_test-EIP-198-case1]\ntest_modexp[fork_Byzantium-blockchain_test-EIP-198-case2]\ntest_modexp[fork_Byzantium-blockchain_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Byzantium-blockchain_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Byzantium-blockchain_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Byzantium-state_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Byzantium-state_test-EIP-198-case1]\ntest_modexp[fork_Byzantium-state_test-EIP-198-case2]\ntest_modexp[fork_Byzantium-state_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Byzantium-state_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Byzantium-state_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Constantinople-blockchain_test-EIP-198-case1]\ntest_modexp[fork_Constantinople-blockchain_test-EIP-198-case2]\ntest_modexp[fork_Constantinople-blockchain_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Constantinople-blockchain_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Constantinople-blockchain_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Constantinople-state_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Constantinople-state_test-EIP-198-case1]\ntest_modexp[fork_Constantinople-state_test-EIP-198-case2]\ntest_modexp[fork_Constantinople-state_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Constantinople-state_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Constantinople-state_test-EIP-198-case5-raw-input]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-EIP-198-case1]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-EIP-198-case2]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_ConstantinopleFix-blockchain_test-EIP-198-case5-raw-input]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_ConstantinopleFix-state_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_ConstantinopleFix-state_test-EIP-198-case1]\ntest_modexp[fork_ConstantinopleFix-state_test-EIP-198-case2]\ntest_modexp[fork_ConstantinopleFix-state_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_ConstantinopleFix-state_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_ConstantinopleFix-state_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Istanbul-blockchain_test-EIP-198-case1]\ntest_modexp[fork_Istanbul-blockchain_test-EIP-198-case2]\ntest_modexp[fork_Istanbul-blockchain_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Istanbul-blockchain_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Istanbul-blockchain_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Istanbul-state_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Istanbul-state_test-EIP-198-case1]\ntest_modexp[fork_Istanbul-state_test-EIP-198-case2]\ntest_modexp[fork_Istanbul-state_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Istanbul-state_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Istanbul-state_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Berlin-blockchain_test-EIP-198-case1]\ntest_modexp[fork_Berlin-blockchain_test-EIP-198-case2]\ntest_modexp[fork_Berlin-blockchain_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Berlin-blockchain_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Berlin-blockchain_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Berlin-state_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Berlin-state_test-EIP-198-case1]\ntest_modexp[fork_Berlin-state_test-EIP-198-case2]\ntest_modexp[fork_Berlin-state_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Berlin-state_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Berlin-state_test-EIP-198-case5-raw-input]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_London-blockchain_test-EIP-198-case1]\ntest_modexp[fork_London-blockchain_test-EIP-198-case2]\ntest_modexp[fork_London-blockchain_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_London-blockchain_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_London-blockchain_test-EIP-198-case5-raw-input]\ntest_modexp[fork_London-state_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_London-state_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_London-state_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_London-state_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_London-state_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_London-state_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_London-state_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_London-state_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_London-state_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_London-state_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_London-state_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_London-state_test-EIP-198-case1]\ntest_modexp[fork_London-state_test-EIP-198-case2]\ntest_modexp[fork_London-state_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_London-state_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_London-state_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Paris-blockchain_test-EIP-198-case1]\ntest_modexp[fork_Paris-blockchain_test-EIP-198-case2]\ntest_modexp[fork_Paris-blockchain_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Paris-blockchain_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Paris-blockchain_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Paris-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Paris-blockchain_test_engine-EIP-198-case1]\ntest_modexp[fork_Paris-blockchain_test_engine-EIP-198-case2]\ntest_modexp[fork_Paris-blockchain_test_engine-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Paris-blockchain_test_engine-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Paris-blockchain_test_engine-EIP-198-case5-raw-input]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Paris-state_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Paris-state_test-EIP-198-case1]\ntest_modexp[fork_Paris-state_test-EIP-198-case2]\ntest_modexp[fork_Paris-state_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Paris-state_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Paris-state_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Shanghai-blockchain_test-EIP-198-case1]\ntest_modexp[fork_Shanghai-blockchain_test-EIP-198-case2]\ntest_modexp[fork_Shanghai-blockchain_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Shanghai-blockchain_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Shanghai-blockchain_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Shanghai-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Shanghai-blockchain_test_engine-EIP-198-case1]\ntest_modexp[fork_Shanghai-blockchain_test_engine-EIP-198-case2]\ntest_modexp[fork_Shanghai-blockchain_test_engine-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Shanghai-blockchain_test_engine-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Shanghai-blockchain_test_engine-EIP-198-case5-raw-input]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Shanghai-state_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Shanghai-state_test-EIP-198-case1]\ntest_modexp[fork_Shanghai-state_test-EIP-198-case2]\ntest_modexp[fork_Shanghai-state_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Shanghai-state_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Shanghai-state_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Cancun-blockchain_test-EIP-198-case1]\ntest_modexp[fork_Cancun-blockchain_test-EIP-198-case2]\ntest_modexp[fork_Cancun-blockchain_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Cancun-blockchain_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Cancun-blockchain_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Cancun-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Cancun-blockchain_test_engine-EIP-198-case1]\ntest_modexp[fork_Cancun-blockchain_test_engine-EIP-198-case2]\ntest_modexp[fork_Cancun-blockchain_test_engine-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Cancun-blockchain_test_engine-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Cancun-blockchain_test_engine-EIP-198-case5-raw-input]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Cancun-state_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Cancun-state_test-EIP-198-case1]\ntest_modexp[fork_Cancun-state_test-EIP-198-case2]\ntest_modexp[fork_Cancun-state_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Cancun-state_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Cancun-state_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Prague-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Prague-blockchain_test-EIP-198-case1]\ntest_modexp[fork_Prague-blockchain_test-EIP-198-case2]\ntest_modexp[fork_Prague-blockchain_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Prague-blockchain_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Prague-blockchain_test-EIP-198-case5-raw-input]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Prague-blockchain_test_engine-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Prague-blockchain_test_engine-EIP-198-case1]\ntest_modexp[fork_Prague-blockchain_test_engine-EIP-198-case2]\ntest_modexp[fork_Prague-blockchain_test_engine-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Prague-blockchain_test_engine-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Prague-blockchain_test_engine-EIP-198-case5-raw-input]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]\ntest_modexp[fork_Prague-state_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]\ntest_modexp[fork_Prague-state_test-EIP-198-case1]\ntest_modexp[fork_Prague-state_test-EIP-198-case2]\ntest_modexp[fork_Prague-state_test-EIP-198-case3-raw-input-out-of-gas]\ntest_modexp[fork_Prague-state_test-EIP-198-case4-extra-data_07]\ntest_modexp[fork_Prague-state_test-EIP-198-case5-raw-input]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/byzantium/eip198_modexp_precompile/test_modexp.py\n
    "},{"location":"tests/cancun/","title":"Cancun","text":"

    Documentation for tests/cancun.

    Generate fixtures for these test cases with:

    fill -v tests/cancun\n

    Test cases for EVM functionality introduced in Cancun.

    See EIP-7659: Hardfork Meta - Dencun for a list of EIPS included in Dencun (Deneb/Cancun).

    "},{"location":"tests/cancun/eip1153_tstore/","title":"EIP-1153 Tstore","text":"

    Documentation for tests/cancun/eip1153_tstore.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore\n

    EIP-1153 Tests

    "},{"location":"tests/cancun/eip1153_tstore/spec/","title":"Spec","text":"

    Documentation for tests/cancun/eip1153_tstore/spec.py.

    Defines EIP-1153 specification constants and functions.

    "},{"location":"tests/cancun/eip1153_tstore/spec/#tests.cancun.eip1153_tstore.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-1153 specifications as defined at https://eips.ethereum.org/EIPS/eip-1153

    Source code in tests/cancun/eip1153_tstore/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-1153 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-1153\n    \"\"\"\n\n    TLOAD_OPCODE_BYTE = 0x5C\n    TSTORE_OPCODE_BYTE = 0x5D\n    TLOAD_GAS_COST = 100\n    TSTORE_GAS_COST = 100\n
    "},{"location":"tests/cancun/eip1153_tstore/test_basic_tload/","title":"Test Basic Tload","text":"

    Documentation for tests/cancun/eip1153_tstore/test_basic_tload.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_basic_tload.py\n

    Ethereum Transient Storage EIP Tests https://eips.ethereum.org/EIPS/eip-1153

    "},{"location":"tests/cancun/eip1153_tstore/test_basic_tload/#tests.cancun.eip1153_tstore.test_basic_tload.test_basic_tload_transaction_begin","title":"test_basic_tload_transaction_begin(state_test, pre)","text":"

    Ported .json vectors:

    (01_tloadBeginningTxnFiller.yml) load arbitrary value is 0 at beginning of transaction

    Source code in tests/cancun/eip1153_tstore/test_basic_tload.py
    @pytest.mark.valid_from(\"Cancun\")\ndef test_basic_tload_transaction_begin(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Ported .json vectors:\n\n    (01_tloadBeginningTxnFiller.yml)\n    load arbitrary value is 0 at beginning of transaction\n    \"\"\"\n    slot_tload_at_transaction_begin_result = 1\n    slot_code_worked = 2\n\n    address_to = pre.deploy_contract(\n        code=Op.JUMPDEST()\n        # 01 test\n        + Op.SSTORE(slot_tload_at_transaction_begin_result, Op.TLOAD(0))\n        + Op.SSTORE(slot_code_worked, 1),\n        storage={\n            slot_tload_at_transaction_begin_result: 0xFF,\n        },\n    )\n\n    post = {\n        address_to: Account(\n            storage={\n                slot_tload_at_transaction_begin_result: 0x00,\n                slot_code_worked: 0x01,\n            }\n        )\n    }\n\n    tx = Transaction(\n        sender=pre.fund_eoa(7_000_000_000_000_000_000),\n        to=address_to,\n        gas_price=10,\n        data=b\"\",\n        gas_limit=5000000,\n        value=0,\n    )\n\n    state_test(env=Environment(), pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_basic_tload/#tests.cancun.eip1153_tstore.test_basic_tload.test_basic_tload_works","title":"test_basic_tload_works(state_test, pre)","text":"

    Ported .json vectors:

    (02_tloadAfterTstoreFiller.yml) tload from same slot after tstore returns correct value

    Source code in tests/cancun/eip1153_tstore/test_basic_tload.py
    @pytest.mark.valid_from(\"Cancun\")\ndef test_basic_tload_works(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Ported .json vectors:\n\n    (02_tloadAfterTstoreFiller.yml)\n    tload from same slot after tstore returns correct value\n    \"\"\"\n    tstore_value = 88\n\n    slot_tload_after_tstore_result = 0\n    slot_tload_after_tstore_result_second_time = 1\n    slot_code_worked = 2\n\n    address_to = pre.deploy_contract(\n        code=Op.JUMPDEST()\n        # 02 test\n        + Op.TSTORE(2, tstore_value)\n        + Op.SSTORE(slot_tload_after_tstore_result, Op.TLOAD(2))\n        + Op.SSTORE(slot_tload_after_tstore_result_second_time, Op.TLOAD(2))\n        + Op.SSTORE(slot_code_worked, 1),\n        storage={\n            slot_tload_after_tstore_result: 0xFF,\n            slot_tload_after_tstore_result_second_time: 0xFF,\n        },\n    )\n\n    post = {\n        address_to: Account(\n            storage={\n                slot_tload_after_tstore_result: tstore_value,\n                slot_tload_after_tstore_result_second_time: tstore_value,\n                slot_code_worked: 0x01,\n            }\n        )\n    }\n\n    tx = Transaction(\n        sender=pre.fund_eoa(7_000_000_000_000_000_000),\n        to=address_to,\n        gas_price=10,\n        data=b\"\",\n        gas_limit=5000000,\n        value=0,\n    )\n\n    state_test(env=Environment(), pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_basic_tload/#tests.cancun.eip1153_tstore.test_basic_tload.test_basic_tload_other_after_tstore","title":"test_basic_tload_other_after_tstore(state_test, pre)","text":"

    Ported .json vectors:

    (03_tloadAfterStoreIs0Filler.yml) Loading any other slot after storing to a slot returns 0.

    Source code in tests/cancun/eip1153_tstore/test_basic_tload.py
    @pytest.mark.valid_from(\"Cancun\")\ndef test_basic_tload_other_after_tstore(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Ported .json vectors:\n\n    (03_tloadAfterStoreIs0Filler.yml)\n    Loading any other slot after storing to a slot returns 0.\n    \"\"\"\n    tstore_value = 88\n\n    slot_tload_untouched_slot_after_tstore_result = 1\n    slot_code_worked = 2\n\n    address_to = pre.deploy_contract(\n        code=Op.JUMPDEST()\n        # 03 test\n        + Op.TSTORE(3, tstore_value)\n        + Op.SSTORE(slot_tload_untouched_slot_after_tstore_result, Op.TLOAD(0))\n        + Op.SSTORE(slot_code_worked, 1),\n        storage={\n            slot_tload_untouched_slot_after_tstore_result: 0xFF,\n        },\n    )\n\n    post = {\n        address_to: Account(\n            storage={\n                slot_tload_untouched_slot_after_tstore_result: 0x00,\n                slot_code_worked: 0x01,\n            }\n        )\n    }\n\n    tx = Transaction(\n        sender=pre.fund_eoa(7_000_000_000_000_000_000),\n        to=address_to,\n        gas_price=10,\n        data=b\"\",\n        gas_limit=5000000,\n        value=0,\n    )\n\n    state_test(env=Environment(), pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_basic_tload/#tests.cancun.eip1153_tstore.test_basic_tload.test_basic_tload_gasprice","title":"test_basic_tload_gasprice(state_test, pre)","text":"

    Ported .json vectors:

    (16_tloadGasFiller.yml) tload costs 100 gas same as a warm sload

    Source code in tests/cancun/eip1153_tstore/test_basic_tload.py
    @pytest.mark.valid_from(\"Cancun\")\ndef test_basic_tload_gasprice(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Ported .json vectors:\n\n    (16_tloadGasFiller.yml)\n    tload costs 100 gas same as a warm sload\n    \"\"\"\n    slot_tload_nonzero_gas_price_result = 1\n    slot_tload_zero_gas_price_result = 2\n    slot_code_worked = 3\n\n    \"\"\"\n    N         OPNAME       GAS_COST  TOTAL_GAS REMAINING_GAS     STACK\n    28-1         MSTORE         2     20748   4958252    2:[4ba82f,0,]\n                 MSTORE [0] = 4958255\n    29-1          PUSH1         3     20754   4958246\n    30-1          TLOAD       100     20757   4958243    1:[10,]\n    31-1            GAS         2     20857   4958143    1:[2,]\n    32-1          PUSH1         3     20859   4958141    2:[2,4ba7bd,]\n    33-1         MSTORE         6     20862   4958138    3:[2,4ba7bd,20,]\n                 MSTORE [32] = 4958141\n    \"\"\"\n    extra_opcode_gas = 11  # mstore(3), push1(3),gas(2),push1(3)\n\n    address_to = pre.deploy_contract(\n        code=Op.JUMPDEST()\n        # 16 test\n        + Op.TSTORE(16, 2)\n        + Op.MSTORE(0, Op.GAS())  # hot load the memory to make the extra_opcode_gas be 11\n        + Op.MSTORE(0, Op.GAS())\n        + Op.TLOAD(16)\n        + Op.MSTORE(32, Op.GAS())\n        + Op.SSTORE(slot_tload_nonzero_gas_price_result, Op.SUB(Op.MLOAD(0), Op.MLOAD(32)))\n        + Op.SSTORE(\n            slot_tload_nonzero_gas_price_result,\n            Op.SUB(Op.SLOAD(slot_tload_nonzero_gas_price_result), extra_opcode_gas),\n        )\n        + Op.MSTORE(0, Op.GAS())\n        + Op.TLOAD(5)  # tload slot at 5 is 0\n        + Op.MSTORE(32, Op.GAS())\n        + Op.SSTORE(slot_tload_zero_gas_price_result, Op.SUB(Op.MLOAD(0), Op.MLOAD(32)))\n        + Op.SSTORE(\n            slot_tload_zero_gas_price_result,\n            Op.SUB(Op.SLOAD(slot_tload_zero_gas_price_result), extra_opcode_gas),\n        )\n        + Op.SSTORE(slot_code_worked, 1),\n        storage={\n            slot_tload_nonzero_gas_price_result: 0xFF,\n            slot_tload_zero_gas_price_result: 0xFF,\n        },\n    )\n\n    post = {\n        address_to: Account(\n            storage={\n                slot_tload_nonzero_gas_price_result: Spec.TLOAD_GAS_COST,\n                slot_tload_zero_gas_price_result: Spec.TLOAD_GAS_COST,\n                slot_code_worked: 0x01,\n            }\n        )\n    }\n\n    tx = Transaction(\n        sender=pre.fund_eoa(7_000_000_000_000_000_000),\n        to=address_to,\n        gas_price=10,\n        data=b\"\",\n        gas_limit=5000000,\n        value=0,\n    )\n\n    state_test(env=Environment(), pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_basic_tload/#tests.cancun.eip1153_tstore.test_basic_tload.test_basic_tload_after_store","title":"test_basic_tload_after_store(state_test, pre)","text":"

    Ported .json vectors:

    (18_tloadAfterStoreFiller.yml) tload from same slot after store returns 0

    Source code in tests/cancun/eip1153_tstore/test_basic_tload.py
    @pytest.mark.valid_from(\"Cancun\")\ndef test_basic_tload_after_store(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Ported .json vectors:\n\n    (18_tloadAfterStoreFiller.yml)\n    tload from same slot after store returns 0\n    \"\"\"\n    slot_tload_from_sstore_result = 1\n    slot_code_worked = 2\n\n    address_to = pre.deploy_contract(\n        code=Op.JUMPDEST()\n        # 18 test\n        + Op.SSTORE(slot_tload_from_sstore_result, 22)\n        + Op.SSTORE(slot_tload_from_sstore_result, Op.TLOAD(slot_tload_from_sstore_result))\n        + Op.SSTORE(slot_code_worked, 1),\n        storage={\n            slot_tload_from_sstore_result: 0xFF,\n        },\n    )\n\n    post: Dict[Address, Union[Account, object]] = {}\n    post[address_to] = Account(\n        storage={\n            slot_tload_from_sstore_result: 0x00,\n            slot_code_worked: 0x01,\n        }\n    )\n\n    tx = Transaction(\n        sender=pre.fund_eoa(7_000_000_000_000_000_000),\n        to=address_to,\n        gas_price=10,\n        data=b\"\",\n        gas_limit=5000000,\n        value=0,\n    )\n\n    state_test(env=Environment(), pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_basic_tload/index/test_cases/","title":"Test Basic Tload - Test Cases","text":"

    Test cases generated from tests/cancun/eip1153_tstore/test_basic_tload.py

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_basic_tload.py:

    test_basic_tload_transaction_begin[fork_Cancun-blockchain_test]\ntest_basic_tload_transaction_begin[fork_Cancun-blockchain_test_engine]\ntest_basic_tload_transaction_begin[fork_Cancun-state_test]\ntest_basic_tload_transaction_begin[fork_Prague-blockchain_test]\ntest_basic_tload_transaction_begin[fork_Prague-blockchain_test_engine]\ntest_basic_tload_transaction_begin[fork_Prague-state_test]\ntest_basic_tload_works[fork_Cancun-blockchain_test]\ntest_basic_tload_works[fork_Cancun-blockchain_test_engine]\ntest_basic_tload_works[fork_Cancun-state_test]\ntest_basic_tload_works[fork_Prague-blockchain_test]\ntest_basic_tload_works[fork_Prague-blockchain_test_engine]\ntest_basic_tload_works[fork_Prague-state_test]\ntest_basic_tload_other_after_tstore[fork_Cancun-blockchain_test]\ntest_basic_tload_other_after_tstore[fork_Cancun-blockchain_test_engine]\ntest_basic_tload_other_after_tstore[fork_Cancun-state_test]\ntest_basic_tload_other_after_tstore[fork_Prague-blockchain_test]\ntest_basic_tload_other_after_tstore[fork_Prague-blockchain_test_engine]\ntest_basic_tload_other_after_tstore[fork_Prague-state_test]\ntest_basic_tload_gasprice[fork_Cancun-blockchain_test]\ntest_basic_tload_gasprice[fork_Cancun-blockchain_test_engine]\ntest_basic_tload_gasprice[fork_Cancun-state_test]\ntest_basic_tload_gasprice[fork_Prague-blockchain_test]\ntest_basic_tload_gasprice[fork_Prague-blockchain_test_engine]\ntest_basic_tload_gasprice[fork_Prague-state_test]\ntest_basic_tload_after_store[fork_Cancun-blockchain_test]\ntest_basic_tload_after_store[fork_Cancun-blockchain_test_engine]\ntest_basic_tload_after_store[fork_Cancun-state_test]\ntest_basic_tload_after_store[fork_Prague-blockchain_test]\ntest_basic_tload_after_store[fork_Prague-blockchain_test_engine]\ntest_basic_tload_after_store[fork_Prague-state_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip1153_tstore/test_basic_tload.py\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tload_calls/","title":"Test Tload Calls","text":"

    Documentation for tests/cancun/eip1153_tstore/test_tload_calls.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tload_calls.py\n

    Ethereum Transient Storage EIP Tests https://eips.ethereum.org/EIPS/eip-1153

    "},{"location":"tests/cancun/eip1153_tstore/test_tload_calls/#tests.cancun.eip1153_tstore.test_tload_calls.test_tload_calls","title":"test_tload_calls(state_test, pre, call_type)","text":"

    Ported .json vectors:

    (04_tloadAfterCallFiller.yml) Loading a slot after a call to another contract is 0.

    (12_tloadDelegateCallFiller.yml) delegatecall reads transient storage in the context of the current address

    Source code in tests/cancun/eip1153_tstore/test_tload_calls.py
    @pytest.mark.valid_from(\"Cancun\")\n@pytest.mark.parametrize(\"call_type\", [Op.CALL, Op.CALLCODE, Op.DELEGATECALL])\ndef test_tload_calls(state_test: StateTestFiller, pre: Alloc, call_type: Op):\n    \"\"\"\n    Ported .json vectors:\n\n    (04_tloadAfterCallFiller.yml)\n    Loading a slot after a call to another contract is 0.\n\n    (12_tloadDelegateCallFiller.yml)\n    delegatecall reads transient storage in the context of the current address\n    \"\"\"\n    # Storage variables\n    slot_a_tload_after_subcall_result = 0\n    slot_a_subcall_result = 1\n    slot_b_subcall_tload_result = 2\n    slot_b_subcall_updated_tload_result = 3\n\n    def make_call(call_type: Op, address: Address) -> Bytecode:\n        if call_type == Op.DELEGATECALL or call_type == Op.STATICCALL:\n            return call_type(Op.GAS(), address, 0, 32, 0, 0)\n        else:\n            return call_type(Op.GAS(), address, 0, 0, 32, 0, 0)\n\n    address_call = pre.deploy_contract(\n        balance=1_000_000_000_000_000_000,\n        code=Op.JUMPDEST()\n        + Op.SSTORE(slot_b_subcall_tload_result, Op.TLOAD(0))\n        + Op.TSTORE(0, 20)\n        + Op.SSTORE(slot_b_subcall_updated_tload_result, Op.TLOAD(0)),\n        storage={\n            slot_b_subcall_tload_result: 0xFF,\n            slot_b_subcall_updated_tload_result: 0xFF,\n        },\n    )\n\n    address_to = pre.deploy_contract(\n        balance=1_000_000_000_000_000_000,\n        code=Op.JUMPDEST()\n        + Op.TSTORE(0, 10)\n        + Op.SSTORE(slot_a_subcall_result, make_call(call_type, address_call))\n        + Op.SSTORE(slot_a_tload_after_subcall_result, Op.TLOAD(0)),\n        storage={\n            slot_a_subcall_result: 0xFF,\n            slot_a_tload_after_subcall_result: 0xFF,\n        },\n    )\n\n    post = {\n        address_to: Account(\n            storage={\n                # other calls don't change context, there for tload updated in this account\n                slot_a_tload_after_subcall_result: 10 if call_type == Op.CALL else 20,\n                slot_a_subcall_result: 1,\n                # since context unchanged the subcall works as if continued execution\n                slot_b_subcall_tload_result: 0 if call_type == Op.CALL else 10,\n                slot_b_subcall_updated_tload_result: 0 if call_type == Op.CALL else 20,\n            }\n        ),\n        address_call: Account(\n            storage={\n                slot_b_subcall_tload_result: 0 if call_type == Op.CALL else 0xFF,\n                slot_b_subcall_updated_tload_result: 20 if call_type == Op.CALL else 0xFF,\n            }\n        ),\n    }\n\n    tx = Transaction(\n        sender=pre.fund_eoa(7_000_000_000_000_000_000),\n        to=address_to,\n        gas_price=10,\n        data=b\"\",\n        gas_limit=5000000,\n        value=0,\n    )\n\n    state_test(env=Environment(), pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tload_calls/index/test_cases/","title":"Test Tload Calls - Test Cases","text":"

    Test cases generated from tests/cancun/eip1153_tstore/test_tload_calls.py

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tload_calls.py:

    test_tload_calls[fork_Cancun-blockchain_test-call_type_CALL]\ntest_tload_calls[fork_Cancun-blockchain_test-call_type_CALLCODE]\ntest_tload_calls[fork_Cancun-blockchain_test-call_type_DELEGATECALL]\ntest_tload_calls[fork_Cancun-blockchain_test_engine-call_type_CALL]\ntest_tload_calls[fork_Cancun-blockchain_test_engine-call_type_CALLCODE]\ntest_tload_calls[fork_Cancun-blockchain_test_engine-call_type_DELEGATECALL]\ntest_tload_calls[fork_Cancun-state_test-call_type_CALL]\ntest_tload_calls[fork_Cancun-state_test-call_type_CALLCODE]\ntest_tload_calls[fork_Cancun-state_test-call_type_DELEGATECALL]\ntest_tload_calls[fork_Prague-blockchain_test-call_type_CALL]\ntest_tload_calls[fork_Prague-blockchain_test-call_type_CALLCODE]\ntest_tload_calls[fork_Prague-blockchain_test-call_type_DELEGATECALL]\ntest_tload_calls[fork_Prague-blockchain_test_engine-call_type_CALL]\ntest_tload_calls[fork_Prague-blockchain_test_engine-call_type_CALLCODE]\ntest_tload_calls[fork_Prague-blockchain_test_engine-call_type_DELEGATECALL]\ntest_tload_calls[fork_Prague-state_test-call_type_CALL]\ntest_tload_calls[fork_Prague-state_test-call_type_CALLCODE]\ntest_tload_calls[fork_Prague-state_test-call_type_DELEGATECALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip1153_tstore/test_tload_calls.py\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tload_reentrancy/","title":"Test Tload Reentrancy","text":"

    Documentation for tests/cancun/eip1153_tstore/test_tload_reentrancy.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tload_reentrancy.py\n

    Ethereum Transient Storage EIP Tests https://eips.ethereum.org/EIPS/eip-1153

    "},{"location":"tests/cancun/eip1153_tstore/test_tload_reentrancy/#tests.cancun.eip1153_tstore.test_tload_reentrancy.test_tload_reentrancy","title":"test_tload_reentrancy(state_test, pre, call_type, call_return, call_dest_type)","text":"

    Ported .json vectors:

    (05_tloadReentrancyFiller.yml) Reentrant calls access the same transient storage

    Source code in tests/cancun/eip1153_tstore/test_tload_reentrancy.py
    @pytest.mark.valid_from(\"Cancun\")\n@pytest.mark.parametrize(\"call_type\", [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL])\n@pytest.mark.parametrize(\"call_return\", [Op.RETURN, Op.REVERT, Om.OOG])\n@pytest.mark.parametrize(\"call_dest_type\", [CallDestType.REENTRANCY, CallDestType.EXTERNAL_CALL])\ndef test_tload_reentrancy(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    call_type: Op,\n    call_return: Op,\n    call_dest_type: CallDestType,\n):\n    \"\"\"\n    Ported .json vectors:\n\n    (05_tloadReentrancyFiller.yml)\n    Reentrant calls access the same transient storage\n    \"\"\"\n    tload_value = 44\n    empty_value = 0\n\n    # Storage variables\n    slot_tload_in_subcall_result = 1\n    slot_tload_after_subcall_result = 2\n    slot_subcall_worked = 3\n    slot_code_worked = 4\n\n    # Function names\n    do_load = 1\n    do_reenter = 2\n    call_dest_address: Bytecode | Address\n    call_dest_address = Op.ADDRESS()\n\n    def make_call(call_type: Op) -> Bytecode:\n        if call_type == Op.DELEGATECALL or call_type == Op.STATICCALL:\n            return call_type(Op.GAS(), call_dest_address, 0, 32, 32, 32)\n        else:\n            return call_type(Op.GAS(), call_dest_address, 0, 0, 32, 32, 32)\n\n    subcall_code = Op.MSTORE(0, Op.TLOAD(0)) + call_return(0, 32)\n\n    address_code = pre.deploy_contract(\n        balance=0,\n        code=subcall_code,\n        storage={},\n    )\n    if call_dest_type == CallDestType.EXTERNAL_CALL:\n        call_dest_address = address_code\n\n    address_to = pre.deploy_contract(\n        balance=1_000_000_000_000_000_000,\n        code=Switch(\n            cases=[\n                Case(\n                    condition=Op.EQ(Op.CALLDATALOAD(0), do_load),\n                    action=subcall_code,\n                ),\n                Case(\n                    condition=Op.EQ(Op.CALLDATALOAD(0), do_reenter),\n                    action=Op.TSTORE(0, tload_value)\n                    + Op.MSTORE(0, do_load)\n                    + Op.MSTORE(32, 0xFF)\n                    + Op.SSTORE(slot_subcall_worked, make_call(call_type))\n                    + Op.SSTORE(slot_tload_in_subcall_result, Op.MLOAD(32))\n                    + Op.SSTORE(slot_tload_after_subcall_result, Op.TLOAD(0))\n                    + Op.SSTORE(slot_code_worked, 1),\n                ),\n            ],\n            default_action=None,\n        ),\n        storage={\n            slot_tload_in_subcall_result: 0xFF,\n            slot_tload_after_subcall_result: 0xFF,\n            slot_subcall_worked: 0xFF,\n            slot_code_worked: 0xFF,\n        },\n    )\n\n    if call_dest_type == CallDestType.REENTRANCY:\n        post = {\n            address_to: Account(\n                storage={\n                    slot_code_worked: 1,\n                    # if call OOG, we fail to obtain the result\n                    slot_tload_in_subcall_result: 0xFF if call_return == Om.OOG else tload_value,\n                    slot_tload_after_subcall_result: tload_value,\n                    slot_subcall_worked: (\n                        0 if call_return == Op.REVERT or call_return == Om.OOG else 1\n                    ),\n                }\n            )\n        }\n    else:\n        post = {\n            address_to: Account(\n                storage={\n                    slot_code_worked: 1,\n                    slot_tload_in_subcall_result: (\n                        0xFF  # if call OOG, we fail to obtain the result\n                        if call_return == Om.OOG\n                        # else delegate and callcode are working in the same context so tload works\n                        else (\n                            tload_value\n                            if call_type == Op.DELEGATECALL or call_type == Op.CALLCODE\n                            else empty_value\n                        )\n                    ),\n                    # no subcall errors can change the tload result\n                    slot_tload_after_subcall_result: 44,\n                    slot_subcall_worked: (\n                        0 if call_return == Op.REVERT or call_return == Om.OOG else 1\n                    ),\n                }\n            )\n        }\n\n    tx = Transaction(\n        sender=pre.fund_eoa(7_000_000_000_000_000_000),\n        to=address_to,\n        gas_price=10,\n        data=Hash(do_reenter),\n        gas_limit=5000000,\n        value=0,\n    )\n\n    state_test(env=Environment(), pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tload_reentrancy/index/test_cases/","title":"Test Tload Reentrancy - Test Cases","text":"

    Test cases generated from tests/cancun/eip1153_tstore/test_tload_reentrancy.py

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tload_reentrancy.py:

    test_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tload_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip1153_tstore/test_tload_reentrancy.py\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage/","title":"Test Tstorage","text":"

    Documentation for tests/cancun/eip1153_tstore/test_tstorage.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tstorage.py\n
    Tests EIP-1153: Transient Storage Opcodes

    Test EIP-1153: Transient Storage Opcodes. Ports and extends some tests from ethereum/tests/src/EIPTestsFiller/StateTests/stEIP1153-transientStorage/

    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage/#tests.cancun.eip1153_tstore.test_tstorage.test_transient_storage_unset_values","title":"test_transient_storage_unset_values(state_test, pre)","text":"

    Test that tload returns zero for unset values. Loading an arbitrary value is 0 at beginning of transaction: TLOAD(x) is 0.

    Based on ethereum/tests/.../01_tloadBeginningTxnFiller.yml\", # noqa: E501

    Source code in tests/cancun/eip1153_tstore/test_tstorage.py
    def test_transient_storage_unset_values(state_test: StateTestFiller, pre: Alloc):\n    \"\"\"\n    Test that tload returns zero for unset values. Loading an arbitrary value is\n    0 at beginning of transaction: TLOAD(x) is 0.\n\n    Based on [ethereum/tests/.../01_tloadBeginningTxnFiller.yml](https://github.com/ethereum/tests/blob/9b00b68593f5869eb51a6659e1cc983e875e616b/src/EIPTestsFiller/StateTests/stEIP1153-transientStorage/01_tloadBeginningTxnFiller.yml)\",  # noqa: E501\n    \"\"\"\n    env = Environment()\n\n    slots_under_test = [0, 1, 2, 2**128, 2**256 - 1]\n    code = sum(Op.SSTORE(slot, Op.TLOAD(slot)) for slot in slots_under_test)\n\n    code_address = pre.deploy_contract(\n        code=code,  # type: ignore\n        storage={slot: 1 for slot in slots_under_test},\n    )\n\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        to=code_address,\n        gas_limit=1_000_000,\n    )\n\n    post = {code_address: Account(storage={slot: 0 for slot in slots_under_test})}\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage/#tests.cancun.eip1153_tstore.test_tstorage.test_tload_after_tstore","title":"test_tload_after_tstore(state_test, pre)","text":"

    Loading after storing returns the stored value: TSTORE(x, y), TLOAD(x) returns y.

    Based on ethereum/tests/.../02_tloadAfterTstoreFiller.yml\", # noqa: E501

    Source code in tests/cancun/eip1153_tstore/test_tstorage.py
    def test_tload_after_tstore(state_test: StateTestFiller, pre: Alloc):\n    \"\"\"\n    Loading after storing returns the stored value: TSTORE(x, y), TLOAD(x)\n    returns y.\n\n    Based on [ethereum/tests/.../02_tloadAfterTstoreFiller.yml](https://github.com/ethereum/tests/blob/9b00b68593f5869eb51a6659e1cc983e875e616b/src/EIPTestsFiller/StateTests/stEIP1153-transientStorage/02_tloadAfterTstoreFiller.yml)\",  # noqa: E501\n    \"\"\"\n    env = Environment()\n\n    slots_under_test = [0, 1, 2, 2**128, 2**256 - 1]\n    code = sum(\n        Op.TSTORE(slot, slot) + Op.SSTORE(slot, Op.TLOAD(slot)) for slot in slots_under_test\n    )\n    code_address = pre.deploy_contract(\n        code=code,  # type: ignore\n        storage={slot: 0xFF for slot in slots_under_test},\n    )\n\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        to=code_address,\n        gas_limit=1_000_000,\n    )\n\n    post = {code_address: Account(storage={slot: slot for slot in slots_under_test})}\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage/#tests.cancun.eip1153_tstore.test_tstorage.test_tload_after_sstore","title":"test_tload_after_sstore(state_test, pre)","text":"

    Loading after storing returns the stored value: TSTORE(x, y), TLOAD(x) returns y.

    Based on ethereum/tests/.../18_tloadAfterStoreFiller.yml\", # noqa: E501

    Source code in tests/cancun/eip1153_tstore/test_tstorage.py
    def test_tload_after_sstore(state_test: StateTestFiller, pre: Alloc):\n    \"\"\"\n    Loading after storing returns the stored value: TSTORE(x, y), TLOAD(x)\n    returns y.\n\n    Based on [ethereum/tests/.../18_tloadAfterStoreFiller.yml](https://github.com/ethereum/tests/blob/9b00b68593f5869eb51a6659e1cc983e875e616b/src/EIPTestsFiller/StateTests/stEIP1153-transientStorage/18_tloadAfterStoreFiller.yml)\",  # noqa: E501\n    \"\"\"\n    env = Environment()\n\n    slots_under_test = [1, 3, 2**128, 2**256 - 1]\n    code = sum(\n        Op.SSTORE(slot - 1, 0xFF) + Op.SSTORE(slot, Op.TLOAD(slot - 1))\n        for slot in slots_under_test\n    )\n    code_address = pre.deploy_contract(\n        code=code,  # type: ignore\n        storage={slot: 1 for slot in slots_under_test},\n    )\n\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        to=code_address,\n        gas_limit=1_000_000,\n    )\n\n    post = {\n        code_address: Account(\n            code=code,\n            storage={slot - 1: 0xFF for slot in slots_under_test}\n            | {slot: 0 for slot in slots_under_test},\n        )\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage/#tests.cancun.eip1153_tstore.test_tstorage.test_tload_after_tstore_is_zero","title":"test_tload_after_tstore_is_zero(state_test, pre)","text":"

    Test that tload returns zero after tstore is called with zero.

    Based on ethereum/tests/.../03_tloadAfterStoreIs0Filler.yml\", # noqa: E501

    Source code in tests/cancun/eip1153_tstore/test_tstorage.py
    def test_tload_after_tstore_is_zero(state_test: StateTestFiller, pre: Alloc):\n    \"\"\"\n    Test that tload returns zero after tstore is called with zero.\n\n    Based on [ethereum/tests/.../03_tloadAfterStoreIs0Filler.yml](https://github.com/ethereum/tests/blob/9b00b68593f5869eb51a6659e1cc983e875e616b/src/EIPTestsFiller/StateTests/stEIP1153-transientStorage/03_tloadAfterStoreIs0Filler.yml)\",  # noqa: E501\n    \"\"\"\n    env = Environment()\n\n    slots_to_write = [1, 4, 2**128, 2**256 - 2]\n    slots_to_read = [slot - 1 for slot in slots_to_write] + [slot + 1 for slot in slots_to_write]\n    assert set.intersection(set(slots_to_write), set(slots_to_read)) == set()\n\n    code = sum(Op.TSTORE(slot, 1234) for slot in slots_to_write) + sum(\n        Op.SSTORE(slot, Op.TLOAD(slot)) for slot in slots_to_read\n    )\n\n    code_address = pre.deploy_contract(\n        code=code,  # type: ignore\n        storage={slot: 0xFFFF for slot in slots_to_write + slots_to_read},\n    )\n\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        to=code_address,\n        gas_limit=1_000_000,\n    )\n\n    post = {\n        code_address: Account(\n            storage={slot: 0 for slot in slots_to_read} | {slot: 0xFFFF for slot in slots_to_write}\n        )\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage/#tests.cancun.eip1153_tstore.test_tstorage.test_gas_usage","title":"test_gas_usage(state_test, pre, bytecode, expected_gas, overhead_cost, extra_stack_items)","text":"

    Test that tstore and tload consume the expected gas.

    Source code in tests/cancun/eip1153_tstore/test_tstorage.py
    @GasMeasureTestCases.parametrize()\ndef test_gas_usage(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    bytecode: Bytecode,\n    expected_gas: int,\n    overhead_cost: int,\n    extra_stack_items: int,\n):\n    \"\"\"\n    Test that tstore and tload consume the expected gas.\n    \"\"\"\n    gas_measure_bytecode = CodeGasMeasure(\n        code=bytecode, overhead_cost=overhead_cost, extra_stack_items=extra_stack_items\n    )\n\n    env = Environment()\n    code_address = pre.deploy_contract(code=gas_measure_bytecode)\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        to=code_address,\n        gas_limit=1_000_000,\n    )\n    post = {\n        code_address: Account(code=gas_measure_bytecode, storage={0: expected_gas}),\n    }\n    state_test(env=env, pre=pre, tx=tx, post=post)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage/#tests.cancun.eip1153_tstore.test_tstorage.test_run_until_out_of_gas","title":"test_run_until_out_of_gas(state_test, pre, repeat_bytecode, bytecode_repeat_times)","text":"

    Use TSTORE over and over to different keys until we run out of gas.

    Source code in tests/cancun/eip1153_tstore/test_tstorage.py
    @LoopRunUntilOutOfGasCases.parametrize()\ndef test_run_until_out_of_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    repeat_bytecode: Bytecode,\n    bytecode_repeat_times: int,\n):\n    \"\"\"\n    Use TSTORE over and over to different keys until we run out of gas.\n    \"\"\"\n    bytecode = Op.JUMPDEST + repeat_bytecode * bytecode_repeat_times + Op.JUMP(Op.PUSH0)\n    code_address = pre.deploy_contract(code=bytecode)\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        to=code_address,\n        gas_limit=30_000_000,\n    )\n    post = {\n        code_address: Account(code=bytecode, storage={}),\n    }\n    state_test(env=Environment(), pre=pre, tx=tx, post=post)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage/index/test_cases/","title":"Test Tstorage - Test Cases","text":"

    Test cases generated from tests/cancun/eip1153_tstore/test_tstorage.py

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstorage.py:

    test_transient_storage_unset_values[fork_Cancun-blockchain_test]\ntest_transient_storage_unset_values[fork_Cancun-blockchain_test_engine]\ntest_transient_storage_unset_values[fork_Cancun-state_test]\ntest_transient_storage_unset_values[fork_Prague-blockchain_test]\ntest_transient_storage_unset_values[fork_Prague-blockchain_test_engine]\ntest_transient_storage_unset_values[fork_Prague-state_test]\ntest_tload_after_tstore[fork_Cancun-blockchain_test]\ntest_tload_after_tstore[fork_Cancun-blockchain_test_engine]\ntest_tload_after_tstore[fork_Cancun-state_test]\ntest_tload_after_tstore[fork_Prague-blockchain_test]\ntest_tload_after_tstore[fork_Prague-blockchain_test_engine]\ntest_tload_after_tstore[fork_Prague-state_test]\ntest_tload_after_sstore[fork_Cancun-blockchain_test]\ntest_tload_after_sstore[fork_Cancun-blockchain_test_engine]\ntest_tload_after_sstore[fork_Cancun-state_test]\ntest_tload_after_sstore[fork_Prague-blockchain_test]\ntest_tload_after_sstore[fork_Prague-blockchain_test_engine]\ntest_tload_after_sstore[fork_Prague-state_test]\ntest_tload_after_tstore_is_zero[fork_Cancun-blockchain_test]\ntest_tload_after_tstore_is_zero[fork_Cancun-blockchain_test_engine]\ntest_tload_after_tstore_is_zero[fork_Cancun-state_test]\ntest_tload_after_tstore_is_zero[fork_Prague-blockchain_test]\ntest_tload_after_tstore_is_zero[fork_Prague-blockchain_test_engine]\ntest_tload_after_tstore_is_zero[fork_Prague-state_test]\ntest_gas_usage[fork_Cancun-blockchain_test-tload]\ntest_gas_usage[fork_Cancun-blockchain_test-tstore_tload]\ntest_gas_usage[fork_Cancun-blockchain_test-tstore_cold]\ntest_gas_usage[fork_Cancun-blockchain_test-tstore_warm]\ntest_gas_usage[fork_Cancun-blockchain_test_engine-tload]\ntest_gas_usage[fork_Cancun-blockchain_test_engine-tstore_tload]\ntest_gas_usage[fork_Cancun-blockchain_test_engine-tstore_cold]\ntest_gas_usage[fork_Cancun-blockchain_test_engine-tstore_warm]\ntest_gas_usage[fork_Cancun-state_test-tload]\ntest_gas_usage[fork_Cancun-state_test-tstore_tload]\ntest_gas_usage[fork_Cancun-state_test-tstore_cold]\ntest_gas_usage[fork_Cancun-state_test-tstore_warm]\ntest_gas_usage[fork_Prague-blockchain_test-tload]\ntest_gas_usage[fork_Prague-blockchain_test-tstore_tload]\ntest_gas_usage[fork_Prague-blockchain_test-tstore_cold]\ntest_gas_usage[fork_Prague-blockchain_test-tstore_warm]\ntest_gas_usage[fork_Prague-blockchain_test_engine-tload]\ntest_gas_usage[fork_Prague-blockchain_test_engine-tstore_tload]\ntest_gas_usage[fork_Prague-blockchain_test_engine-tstore_cold]\ntest_gas_usage[fork_Prague-blockchain_test_engine-tstore_warm]\ntest_gas_usage[fork_Prague-state_test-tload]\ntest_gas_usage[fork_Prague-state_test-tstore_tload]\ntest_gas_usage[fork_Prague-state_test-tstore_cold]\ntest_gas_usage[fork_Prague-state_test-tstore_warm]\ntest_run_until_out_of_gas[fork_Cancun-blockchain_test-tstore]\ntest_run_until_out_of_gas[fork_Cancun-blockchain_test-tstore_wide_address_space]\ntest_run_until_out_of_gas[fork_Cancun-blockchain_test-tstore_tload]\ntest_run_until_out_of_gas[fork_Cancun-blockchain_test_engine-tstore]\ntest_run_until_out_of_gas[fork_Cancun-blockchain_test_engine-tstore_wide_address_space]\ntest_run_until_out_of_gas[fork_Cancun-blockchain_test_engine-tstore_tload]\ntest_run_until_out_of_gas[fork_Cancun-state_test-tstore]\ntest_run_until_out_of_gas[fork_Cancun-state_test-tstore_wide_address_space]\ntest_run_until_out_of_gas[fork_Cancun-state_test-tstore_tload]\ntest_run_until_out_of_gas[fork_Prague-blockchain_test-tstore]\ntest_run_until_out_of_gas[fork_Prague-blockchain_test-tstore_wide_address_space]\ntest_run_until_out_of_gas[fork_Prague-blockchain_test-tstore_tload]\ntest_run_until_out_of_gas[fork_Prague-blockchain_test_engine-tstore]\ntest_run_until_out_of_gas[fork_Prague-blockchain_test_engine-tstore_wide_address_space]\ntest_run_until_out_of_gas[fork_Prague-blockchain_test_engine-tstore_tload]\ntest_run_until_out_of_gas[fork_Prague-state_test-tstore]\ntest_run_until_out_of_gas[fork_Prague-state_test-tstore_wide_address_space]\ntest_run_until_out_of_gas[fork_Prague-state_test-tstore_tload]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip1153_tstore/test_tstorage.py\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_create_contexts/","title":"Test Tstorage Create Contexts","text":"

    Documentation for tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py\n
    Tests for EIP-1153: Transient Storage

    Test cases for TSTORE and TLOAD opcode calls in contract initcode.

    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_create_contexts/#tests.cancun.eip1153_tstore.test_tstorage_create_contexts.TestTransientStorageInContractCreation","title":"TestTransientStorageInContractCreation","text":"

    Test transient storage in contract creation contexts:

    • TSTORE/TLOAD in initcode should not be able to access the creator's transient storage.
    • TSTORE/TLOAD in initcode should be able to access the created contract's transient storage.
    • TSTORE/TLOAD in creator contract should be able to use its own transient storage.
    Source code in tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py
    @CreateOpcodeParams.parametrize()\n@InitcodeTestCases.parametrize()\nclass TestTransientStorageInContractCreation:\n    \"\"\"\n    Test transient storage in contract creation contexts:\n\n    - TSTORE/TLOAD in initcode should not be able to access the creator's transient storage.\n    - TSTORE/TLOAD in initcode should be able to access the created contract's transient\n        storage.\n    - TSTORE/TLOAD in creator contract should be able to use its own transient storage.\n    \"\"\"\n\n    @pytest.fixture()\n    def create2_salt(self) -> int:  # noqa: D102\n        return 0xDEADBEEF\n\n    @pytest.fixture()\n    def initcode(  # noqa: D102\n        self,\n        deploy_code: Bytecode,\n        constructor_code: Bytecode,\n    ) -> Initcode:\n        return Initcode(deploy_code=deploy_code, initcode_prefix=constructor_code)\n\n    @pytest.fixture()\n    def creator_contract_code(  # noqa: D102\n        self,\n        opcode: Op,\n        create2_salt: int,\n    ) -> Bytecode:\n        return (\n            Op.TSTORE(0, 0x0100)\n            + Op.TSTORE(1, 0x0200)\n            + Op.TSTORE(2, 0x0300)\n            + Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n            + Op.SSTORE(4, Op.CALL(address=opcode(size=Op.CALLDATASIZE, salt=create2_salt)))\n            # Save the state of transient storage following call to storage; the transient\n            # storage should not have been overwritten\n            + Op.SSTORE(0, Op.TLOAD(0))\n            + Op.SSTORE(1, Op.TLOAD(1))\n            + Op.SSTORE(2, Op.TLOAD(2))\n        )\n\n    @pytest.fixture()\n    def creator_address(self, pre: Alloc, creator_contract_code: Bytecode) -> Address:\n        \"\"\"The address that creates the contract with create/create2\"\"\"\n        return pre.deploy_contract(creator_contract_code)\n\n    @pytest.fixture()\n    def expected_creator_storage(self) -> dict:  # noqa: D102\n        return {0: 0x0100, 1: 0x0200, 2: 0x0300, 4: 0x0001}\n\n    @pytest.fixture()\n    def created_contract_address(  # noqa: D102\n        self, creator_address: Address, opcode: Op, create2_salt: int, initcode: Initcode\n    ) -> Address:\n        return compute_create_address(\n            address=creator_address,\n            nonce=1,\n            salt=create2_salt,\n            initcode=initcode,\n            opcode=opcode,\n        )\n\n    def test_contract_creation(\n        self,\n        state_test: StateTestFiller,\n        pre: Alloc,\n        creator_address: Address,\n        created_contract_address: Address,\n        initcode: Initcode,\n        deploy_code: Bytecode,\n        expected_creator_storage: dict,\n        expected_storage: dict,\n    ) -> None:\n        \"\"\"\n        Test transient storage in contract creation contexts.\n        \"\"\"\n        sender = pre.fund_eoa()\n\n        tx = Transaction(\n            sender=sender,\n            to=creator_address,\n            data=initcode,\n            gas_limit=1_000_000,\n        )\n\n        post = {\n            creator_address: Account(\n                nonce=2,\n                storage=expected_creator_storage,\n            ),\n            created_contract_address: Account(\n                nonce=1,\n                code=deploy_code,\n                storage=expected_storage,\n            ),\n        }\n\n        state_test(\n            env=Environment(),\n            pre=pre,\n            post=post,\n            tx=tx,\n        )\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_create_contexts/#tests.cancun.eip1153_tstore.test_tstorage_create_contexts.TestTransientStorageInContractCreation.test_contract_creation","title":"test_contract_creation(state_test, pre, creator_address, created_contract_address, initcode, deploy_code, expected_creator_storage, expected_storage)","text":"

    Test transient storage in contract creation contexts.

    Source code in tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py
    def test_contract_creation(\n    self,\n    state_test: StateTestFiller,\n    pre: Alloc,\n    creator_address: Address,\n    created_contract_address: Address,\n    initcode: Initcode,\n    deploy_code: Bytecode,\n    expected_creator_storage: dict,\n    expected_storage: dict,\n) -> None:\n    \"\"\"\n    Test transient storage in contract creation contexts.\n    \"\"\"\n    sender = pre.fund_eoa()\n\n    tx = Transaction(\n        sender=sender,\n        to=creator_address,\n        data=initcode,\n        gas_limit=1_000_000,\n    )\n\n    post = {\n        creator_address: Account(\n            nonce=2,\n            storage=expected_creator_storage,\n        ),\n        created_contract_address: Account(\n            nonce=1,\n            code=deploy_code,\n            storage=expected_storage,\n        ),\n    }\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_create_contexts/index/test_cases/","title":"Test Tstorage Create Contexts - Test Cases","text":"

    Test cases generated from tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py:

    TestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\nTestTransientStorageInContractCreation\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_execution_contexts/","title":"Test Tstorage Execution Contexts","text":"

    Documentation for tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py\n
    Tests for EIP-1153: Transient Storage

    Test cases for TSTORE and TLOAD opcode calls in different execution contexts.

    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_execution_contexts/#tests.cancun.eip1153_tstore.test_tstorage_execution_contexts.test_subcall","title":"test_subcall(state_test, env, pre, tx, post)","text":"

    Test transient storage with a subcall using the following opcodes:

    • CALL
    • CALLCODE
    • DELEGATECALL
    • STATICCALL
    Source code in tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py
    @CallContextTestCases.parametrize()\ndef test_subcall(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    tx: Transaction,\n    post: Mapping,\n):\n    \"\"\"\n    Test transient storage with a subcall using the following opcodes:\n\n    - `CALL`\n    - `CALLCODE`\n    - `DELEGATECALL`\n    - `STATICCALL`\n    \"\"\"\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_execution_contexts/index/test_cases/","title":"Test Tstorage Execution Contexts - Test Cases","text":"

    Test cases generated from tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py:

    test_subcall[fork_Cancun-blockchain_test-call]\ntest_subcall[fork_Cancun-blockchain_test-staticcall_cant_call_tstore]\ntest_subcall[fork_Cancun-blockchain_test-staticcall_cant_call_tstore_with_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test-staticcalled_context_can_call_tload]\ntest_subcall[fork_Cancun-blockchain_test-callcode]\ntest_subcall[fork_Cancun-blockchain_test-delegatecall]\ntest_subcall[fork_Cancun-blockchain_test-call_with_revert]\ntest_subcall[fork_Cancun-blockchain_test-call_with_invalid]\ntest_subcall[fork_Cancun-blockchain_test-call_with_stack_overflow]\ntest_subcall[fork_Cancun-blockchain_test-call_with_tstore_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test-call_with_tstore_stack_underflow_2]\ntest_subcall[fork_Cancun-blockchain_test-call_with_tload_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test-call_with_out_of_gas]\ntest_subcall[fork_Cancun-blockchain_test-call_with_out_of_gas_2]\ntest_subcall[fork_Cancun-blockchain_test-callcode_with_revert]\ntest_subcall[fork_Cancun-blockchain_test-callcode_with_invalid]\ntest_subcall[fork_Cancun-blockchain_test-callcode_with_stack_overflow]\ntest_subcall[fork_Cancun-blockchain_test-callcode_with_tstore_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test-callcode_with_tstore_stack_underflow_2]\ntest_subcall[fork_Cancun-blockchain_test-callcode_with_tload_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test-callcode_with_out_of_gas]\ntest_subcall[fork_Cancun-blockchain_test-callcode_with_out_of_gas_2]\ntest_subcall[fork_Cancun-blockchain_test-delegatecall_with_revert]\ntest_subcall[fork_Cancun-blockchain_test-delegatecall_with_invalid]\ntest_subcall[fork_Cancun-blockchain_test-delegatecall_with_stack_overflow]\ntest_subcall[fork_Cancun-blockchain_test-delegatecall_with_tstore_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test-delegatecall_with_tstore_stack_underflow_2]\ntest_subcall[fork_Cancun-blockchain_test-delegatecall_with_tload_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test-delegatecall_with_out_of_gas]\ntest_subcall[fork_Cancun-blockchain_test-delegatecall_with_out_of_gas_2]\ntest_subcall[fork_Cancun-blockchain_test_engine-call]\ntest_subcall[fork_Cancun-blockchain_test_engine-staticcall_cant_call_tstore]\ntest_subcall[fork_Cancun-blockchain_test_engine-staticcall_cant_call_tstore_with_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test_engine-staticcalled_context_can_call_tload]\ntest_subcall[fork_Cancun-blockchain_test_engine-callcode]\ntest_subcall[fork_Cancun-blockchain_test_engine-delegatecall]\ntest_subcall[fork_Cancun-blockchain_test_engine-call_with_revert]\ntest_subcall[fork_Cancun-blockchain_test_engine-call_with_invalid]\ntest_subcall[fork_Cancun-blockchain_test_engine-call_with_stack_overflow]\ntest_subcall[fork_Cancun-blockchain_test_engine-call_with_tstore_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test_engine-call_with_tstore_stack_underflow_2]\ntest_subcall[fork_Cancun-blockchain_test_engine-call_with_tload_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test_engine-call_with_out_of_gas]\ntest_subcall[fork_Cancun-blockchain_test_engine-call_with_out_of_gas_2]\ntest_subcall[fork_Cancun-blockchain_test_engine-callcode_with_revert]\ntest_subcall[fork_Cancun-blockchain_test_engine-callcode_with_invalid]\ntest_subcall[fork_Cancun-blockchain_test_engine-callcode_with_stack_overflow]\ntest_subcall[fork_Cancun-blockchain_test_engine-callcode_with_tstore_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test_engine-callcode_with_tstore_stack_underflow_2]\ntest_subcall[fork_Cancun-blockchain_test_engine-callcode_with_tload_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test_engine-callcode_with_out_of_gas]\ntest_subcall[fork_Cancun-blockchain_test_engine-callcode_with_out_of_gas_2]\ntest_subcall[fork_Cancun-blockchain_test_engine-delegatecall_with_revert]\ntest_subcall[fork_Cancun-blockchain_test_engine-delegatecall_with_invalid]\ntest_subcall[fork_Cancun-blockchain_test_engine-delegatecall_with_stack_overflow]\ntest_subcall[fork_Cancun-blockchain_test_engine-delegatecall_with_tstore_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test_engine-delegatecall_with_tstore_stack_underflow_2]\ntest_subcall[fork_Cancun-blockchain_test_engine-delegatecall_with_tload_stack_underflow]\ntest_subcall[fork_Cancun-blockchain_test_engine-delegatecall_with_out_of_gas]\ntest_subcall[fork_Cancun-blockchain_test_engine-delegatecall_with_out_of_gas_2]\ntest_subcall[fork_Cancun-state_test-call]\ntest_subcall[fork_Cancun-state_test-staticcall_cant_call_tstore]\ntest_subcall[fork_Cancun-state_test-staticcall_cant_call_tstore_with_stack_underflow]\ntest_subcall[fork_Cancun-state_test-staticcalled_context_can_call_tload]\ntest_subcall[fork_Cancun-state_test-callcode]\ntest_subcall[fork_Cancun-state_test-delegatecall]\ntest_subcall[fork_Cancun-state_test-call_with_revert]\ntest_subcall[fork_Cancun-state_test-call_with_invalid]\ntest_subcall[fork_Cancun-state_test-call_with_stack_overflow]\ntest_subcall[fork_Cancun-state_test-call_with_tstore_stack_underflow]\ntest_subcall[fork_Cancun-state_test-call_with_tstore_stack_underflow_2]\ntest_subcall[fork_Cancun-state_test-call_with_tload_stack_underflow]\ntest_subcall[fork_Cancun-state_test-call_with_out_of_gas]\ntest_subcall[fork_Cancun-state_test-call_with_out_of_gas_2]\ntest_subcall[fork_Cancun-state_test-callcode_with_revert]\ntest_subcall[fork_Cancun-state_test-callcode_with_invalid]\ntest_subcall[fork_Cancun-state_test-callcode_with_stack_overflow]\ntest_subcall[fork_Cancun-state_test-callcode_with_tstore_stack_underflow]\ntest_subcall[fork_Cancun-state_test-callcode_with_tstore_stack_underflow_2]\ntest_subcall[fork_Cancun-state_test-callcode_with_tload_stack_underflow]\ntest_subcall[fork_Cancun-state_test-callcode_with_out_of_gas]\ntest_subcall[fork_Cancun-state_test-callcode_with_out_of_gas_2]\ntest_subcall[fork_Cancun-state_test-delegatecall_with_revert]\ntest_subcall[fork_Cancun-state_test-delegatecall_with_invalid]\ntest_subcall[fork_Cancun-state_test-delegatecall_with_stack_overflow]\ntest_subcall[fork_Cancun-state_test-delegatecall_with_tstore_stack_underflow]\ntest_subcall[fork_Cancun-state_test-delegatecall_with_tstore_stack_underflow_2]\ntest_subcall[fork_Cancun-state_test-delegatecall_with_tload_stack_underflow]\ntest_subcall[fork_Cancun-state_test-delegatecall_with_out_of_gas]\ntest_subcall[fork_Cancun-state_test-delegatecall_with_out_of_gas_2]\ntest_subcall[fork_Prague-blockchain_test-call]\ntest_subcall[fork_Prague-blockchain_test-staticcall_cant_call_tstore]\ntest_subcall[fork_Prague-blockchain_test-staticcall_cant_call_tstore_with_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test-staticcalled_context_can_call_tload]\ntest_subcall[fork_Prague-blockchain_test-callcode]\ntest_subcall[fork_Prague-blockchain_test-delegatecall]\ntest_subcall[fork_Prague-blockchain_test-call_with_revert]\ntest_subcall[fork_Prague-blockchain_test-call_with_invalid]\ntest_subcall[fork_Prague-blockchain_test-call_with_stack_overflow]\ntest_subcall[fork_Prague-blockchain_test-call_with_tstore_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test-call_with_tstore_stack_underflow_2]\ntest_subcall[fork_Prague-blockchain_test-call_with_tload_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test-call_with_out_of_gas]\ntest_subcall[fork_Prague-blockchain_test-call_with_out_of_gas_2]\ntest_subcall[fork_Prague-blockchain_test-callcode_with_revert]\ntest_subcall[fork_Prague-blockchain_test-callcode_with_invalid]\ntest_subcall[fork_Prague-blockchain_test-callcode_with_stack_overflow]\ntest_subcall[fork_Prague-blockchain_test-callcode_with_tstore_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test-callcode_with_tstore_stack_underflow_2]\ntest_subcall[fork_Prague-blockchain_test-callcode_with_tload_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test-callcode_with_out_of_gas]\ntest_subcall[fork_Prague-blockchain_test-callcode_with_out_of_gas_2]\ntest_subcall[fork_Prague-blockchain_test-delegatecall_with_revert]\ntest_subcall[fork_Prague-blockchain_test-delegatecall_with_invalid]\ntest_subcall[fork_Prague-blockchain_test-delegatecall_with_stack_overflow]\ntest_subcall[fork_Prague-blockchain_test-delegatecall_with_tstore_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test-delegatecall_with_tstore_stack_underflow_2]\ntest_subcall[fork_Prague-blockchain_test-delegatecall_with_tload_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test-delegatecall_with_out_of_gas]\ntest_subcall[fork_Prague-blockchain_test-delegatecall_with_out_of_gas_2]\ntest_subcall[fork_Prague-blockchain_test_engine-call]\ntest_subcall[fork_Prague-blockchain_test_engine-staticcall_cant_call_tstore]\ntest_subcall[fork_Prague-blockchain_test_engine-staticcall_cant_call_tstore_with_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test_engine-staticcalled_context_can_call_tload]\ntest_subcall[fork_Prague-blockchain_test_engine-callcode]\ntest_subcall[fork_Prague-blockchain_test_engine-delegatecall]\ntest_subcall[fork_Prague-blockchain_test_engine-call_with_revert]\ntest_subcall[fork_Prague-blockchain_test_engine-call_with_invalid]\ntest_subcall[fork_Prague-blockchain_test_engine-call_with_stack_overflow]\ntest_subcall[fork_Prague-blockchain_test_engine-call_with_tstore_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test_engine-call_with_tstore_stack_underflow_2]\ntest_subcall[fork_Prague-blockchain_test_engine-call_with_tload_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test_engine-call_with_out_of_gas]\ntest_subcall[fork_Prague-blockchain_test_engine-call_with_out_of_gas_2]\ntest_subcall[fork_Prague-blockchain_test_engine-callcode_with_revert]\ntest_subcall[fork_Prague-blockchain_test_engine-callcode_with_invalid]\ntest_subcall[fork_Prague-blockchain_test_engine-callcode_with_stack_overflow]\ntest_subcall[fork_Prague-blockchain_test_engine-callcode_with_tstore_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test_engine-callcode_with_tstore_stack_underflow_2]\ntest_subcall[fork_Prague-blockchain_test_engine-callcode_with_tload_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test_engine-callcode_with_out_of_gas]\ntest_subcall[fork_Prague-blockchain_test_engine-callcode_with_out_of_gas_2]\ntest_subcall[fork_Prague-blockchain_test_engine-delegatecall_with_revert]\ntest_subcall[fork_Prague-blockchain_test_engine-delegatecall_with_invalid]\ntest_subcall[fork_Prague-blockchain_test_engine-delegatecall_with_stack_overflow]\ntest_subcall[fork_Prague-blockchain_test_engine-delegatecall_with_tstore_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test_engine-delegatecall_with_tstore_stack_underflow_2]\ntest_subcall[fork_Prague-blockchain_test_engine-delegatecall_with_tload_stack_underflow]\ntest_subcall[fork_Prague-blockchain_test_engine-delegatecall_with_out_of_gas]\ntest_subcall[fork_Prague-blockchain_test_engine-delegatecall_with_out_of_gas_2]\ntest_subcall[fork_Prague-state_test-call]\ntest_subcall[fork_Prague-state_test-staticcall_cant_call_tstore]\ntest_subcall[fork_Prague-state_test-staticcall_cant_call_tstore_with_stack_underflow]\ntest_subcall[fork_Prague-state_test-staticcalled_context_can_call_tload]\ntest_subcall[fork_Prague-state_test-callcode]\ntest_subcall[fork_Prague-state_test-delegatecall]\ntest_subcall[fork_Prague-state_test-call_with_revert]\ntest_subcall[fork_Prague-state_test-call_with_invalid]\ntest_subcall[fork_Prague-state_test-call_with_stack_overflow]\ntest_subcall[fork_Prague-state_test-call_with_tstore_stack_underflow]\ntest_subcall[fork_Prague-state_test-call_with_tstore_stack_underflow_2]\ntest_subcall[fork_Prague-state_test-call_with_tload_stack_underflow]\ntest_subcall[fork_Prague-state_test-call_with_out_of_gas]\ntest_subcall[fork_Prague-state_test-call_with_out_of_gas_2]\ntest_subcall[fork_Prague-state_test-callcode_with_revert]\ntest_subcall[fork_Prague-state_test-callcode_with_invalid]\ntest_subcall[fork_Prague-state_test-callcode_with_stack_overflow]\ntest_subcall[fork_Prague-state_test-callcode_with_tstore_stack_underflow]\ntest_subcall[fork_Prague-state_test-callcode_with_tstore_stack_underflow_2]\ntest_subcall[fork_Prague-state_test-callcode_with_tload_stack_underflow]\ntest_subcall[fork_Prague-state_test-callcode_with_out_of_gas]\ntest_subcall[fork_Prague-state_test-callcode_with_out_of_gas_2]\ntest_subcall[fork_Prague-state_test-delegatecall_with_revert]\ntest_subcall[fork_Prague-state_test-delegatecall_with_invalid]\ntest_subcall[fork_Prague-state_test-delegatecall_with_stack_overflow]\ntest_subcall[fork_Prague-state_test-delegatecall_with_tstore_stack_underflow]\ntest_subcall[fork_Prague-state_test-delegatecall_with_tstore_stack_underflow_2]\ntest_subcall[fork_Prague-state_test-delegatecall_with_tload_stack_underflow]\ntest_subcall[fork_Prague-state_test-delegatecall_with_out_of_gas]\ntest_subcall[fork_Prague-state_test-delegatecall_with_out_of_gas_2]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts/","title":"Test Tstorage Reentrancy Contexts","text":"

    Documentation for tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py\n
    Tests for EIP-1153: Transient Storage

    Test cases for TSTORE and TLOAD opcode calls in reentrancy contexts.

    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts/#tests.cancun.eip1153_tstore.test_tstorage_reentrancy_contexts.test_reentrant_call","title":"test_reentrant_call(state_test, pre, bytecode, expected_storage)","text":"

    Test transient storage in different reentrancy contexts.

    Source code in tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py
    @ReentrancyTestCases.parametrize()\ndef test_reentrant_call(\n    state_test: StateTestFiller, pre: Alloc, bytecode: Bytecode, expected_storage: Dict\n):\n    \"\"\"\n    Test transient storage in different reentrancy contexts.\n    \"\"\"\n    env = Environment()\n\n    callee_address = pre.deploy_contract(bytecode)\n\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        to=callee_address,\n        data=Hash(1),\n        gas_limit=1_000_000,\n    )\n\n    post = {callee_address: Account(code=bytecode, storage=expected_storage)}\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts/index/test_cases/","title":"Test Tstorage Reentrancy Contexts - Test Cases","text":"

    Test cases generated from tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py:

    test_reentrant_call[fork_Cancun-blockchain_test-tstore_in_reentrant_call]\ntest_reentrant_call[fork_Cancun-blockchain_test-tload_after_reentrant_tstore]\ntest_reentrant_call[fork_Cancun-blockchain_test-manipulate_in_reentrant_call]\ntest_reentrant_call[fork_Cancun-blockchain_test-tstore_in_call_then_tload_return_in_staticcall]\ntest_reentrant_call[fork_Cancun-blockchain_test-tstore_before_revert_has_no_effect]\ntest_reentrant_call[fork_Cancun-blockchain_test-revert_undoes_all]\ntest_reentrant_call[fork_Cancun-blockchain_test-revert_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Cancun-blockchain_test-tstore_before_invalid_has_no_effect]\ntest_reentrant_call[fork_Cancun-blockchain_test-invalid_undoes_all]\ntest_reentrant_call[fork_Cancun-blockchain_test-invalid_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Cancun-blockchain_test_engine-tstore_in_reentrant_call]\ntest_reentrant_call[fork_Cancun-blockchain_test_engine-tload_after_reentrant_tstore]\ntest_reentrant_call[fork_Cancun-blockchain_test_engine-manipulate_in_reentrant_call]\ntest_reentrant_call[fork_Cancun-blockchain_test_engine-tstore_in_call_then_tload_return_in_staticcall]\ntest_reentrant_call[fork_Cancun-blockchain_test_engine-tstore_before_revert_has_no_effect]\ntest_reentrant_call[fork_Cancun-blockchain_test_engine-revert_undoes_all]\ntest_reentrant_call[fork_Cancun-blockchain_test_engine-revert_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Cancun-blockchain_test_engine-tstore_before_invalid_has_no_effect]\ntest_reentrant_call[fork_Cancun-blockchain_test_engine-invalid_undoes_all]\ntest_reentrant_call[fork_Cancun-blockchain_test_engine-invalid_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Cancun-state_test-tstore_in_reentrant_call]\ntest_reentrant_call[fork_Cancun-state_test-tload_after_reentrant_tstore]\ntest_reentrant_call[fork_Cancun-state_test-manipulate_in_reentrant_call]\ntest_reentrant_call[fork_Cancun-state_test-tstore_in_call_then_tload_return_in_staticcall]\ntest_reentrant_call[fork_Cancun-state_test-tstore_before_revert_has_no_effect]\ntest_reentrant_call[fork_Cancun-state_test-revert_undoes_all]\ntest_reentrant_call[fork_Cancun-state_test-revert_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Cancun-state_test-tstore_before_invalid_has_no_effect]\ntest_reentrant_call[fork_Cancun-state_test-invalid_undoes_all]\ntest_reentrant_call[fork_Cancun-state_test-invalid_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Prague-blockchain_test-tstore_in_reentrant_call]\ntest_reentrant_call[fork_Prague-blockchain_test-tload_after_reentrant_tstore]\ntest_reentrant_call[fork_Prague-blockchain_test-manipulate_in_reentrant_call]\ntest_reentrant_call[fork_Prague-blockchain_test-tstore_in_call_then_tload_return_in_staticcall]\ntest_reentrant_call[fork_Prague-blockchain_test-tstore_before_revert_has_no_effect]\ntest_reentrant_call[fork_Prague-blockchain_test-revert_undoes_all]\ntest_reentrant_call[fork_Prague-blockchain_test-revert_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Prague-blockchain_test-tstore_before_invalid_has_no_effect]\ntest_reentrant_call[fork_Prague-blockchain_test-invalid_undoes_all]\ntest_reentrant_call[fork_Prague-blockchain_test-invalid_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Prague-blockchain_test_engine-tstore_in_reentrant_call]\ntest_reentrant_call[fork_Prague-blockchain_test_engine-tload_after_reentrant_tstore]\ntest_reentrant_call[fork_Prague-blockchain_test_engine-manipulate_in_reentrant_call]\ntest_reentrant_call[fork_Prague-blockchain_test_engine-tstore_in_call_then_tload_return_in_staticcall]\ntest_reentrant_call[fork_Prague-blockchain_test_engine-tstore_before_revert_has_no_effect]\ntest_reentrant_call[fork_Prague-blockchain_test_engine-revert_undoes_all]\ntest_reentrant_call[fork_Prague-blockchain_test_engine-revert_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Prague-blockchain_test_engine-tstore_before_invalid_has_no_effect]\ntest_reentrant_call[fork_Prague-blockchain_test_engine-invalid_undoes_all]\ntest_reentrant_call[fork_Prague-blockchain_test_engine-invalid_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Prague-state_test-tstore_in_reentrant_call]\ntest_reentrant_call[fork_Prague-state_test-tload_after_reentrant_tstore]\ntest_reentrant_call[fork_Prague-state_test-manipulate_in_reentrant_call]\ntest_reentrant_call[fork_Prague-state_test-tstore_in_call_then_tload_return_in_staticcall]\ntest_reentrant_call[fork_Prague-state_test-tstore_before_revert_has_no_effect]\ntest_reentrant_call[fork_Prague-state_test-revert_undoes_all]\ntest_reentrant_call[fork_Prague-state_test-revert_undoes_tstorage_after_successful_call]\ntest_reentrant_call[fork_Prague-state_test-tstore_before_invalid_has_no_effect]\ntest_reentrant_call[fork_Prague-state_test-invalid_undoes_all]\ntest_reentrant_call[fork_Prague-state_test-invalid_undoes_tstorage_after_successful_call]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_selfdestruct/","title":"Test Tstorage Selfdestruct","text":"

    Documentation for tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py\n
    Tests for EIP-1153: Transient Storage

    Test cases for TSTORE and TLOAD opcode calls in reentrancy after self-destruct, taking into account the changes in EIP-6780.

    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_selfdestruct/#tests.cancun.eip1153_tstore.test_tstorage_selfdestruct.test_reentrant_selfdestructing_call","title":"test_reentrant_selfdestructing_call(state_test, pre, pre_existing_contract, caller_bytecode, callee_bytecode, expected_storage)","text":"

    Test transient storage in different reentrancy contexts after selfdestructing.

    Source code in tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py
    @SelfDestructCases.parametrize()\ndef test_reentrant_selfdestructing_call(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    pre_existing_contract: bool,\n    caller_bytecode: Bytecode,\n    callee_bytecode: Bytecode,\n    expected_storage: Dict,\n):\n    \"\"\"\n    Test transient storage in different reentrancy contexts after selfdestructing.\n    \"\"\"\n    env = Environment()\n\n    caller_address = pre.deploy_contract(code=caller_bytecode)\n\n    data: Hash | Bytecode\n    if pre_existing_contract:\n        callee_address = pre.deploy_contract(code=callee_bytecode)\n        data = Hash(callee_address)\n    else:\n        callee_address = compute_create_address(address=caller_address, nonce=1)\n        data = Initcode(deploy_code=callee_bytecode)\n\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        to=caller_address,\n        gas_limit=1_000_000,\n        data=data,\n    )\n\n    expected_storage[0] = callee_address\n\n    post: Dict = {caller_address: Account(storage=expected_storage)}\n\n    if pre_existing_contract:\n        post[callee_address] = Account(code=callee_bytecode)\n    else:\n        post[callee_address] = Account.NONEXISTENT\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstorage_selfdestruct/index/test_cases/","title":"Test Tstorage Selfdestruct - Test Cases","text":"

    Test cases generated from tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py:

    test_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tload_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tload_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tload_after_inner_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tload_after_inner_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tstore_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tstore_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test_engine-tload_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test_engine-tload_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test_engine-tload_after_inner_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test_engine-tload_after_inner_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test_engine-tstore_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-blockchain_test_engine-tstore_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-state_test-tload_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-state_test-tload_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-state_test-tload_after_inner_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-state_test-tload_after_inner_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-state_test-tstore_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Cancun-state_test-tstore_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test-tload_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test-tload_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test-tload_after_inner_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test-tload_after_inner_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test-tstore_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test-tstore_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test_engine-tload_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test_engine-tload_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test_engine-tload_after_inner_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test_engine-tload_after_inner_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test_engine-tstore_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-blockchain_test_engine-tstore_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-state_test-tload_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-state_test-tload_after_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-state_test-tload_after_inner_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-state_test-tload_after_inner_selfdestruct_new_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-state_test-tstore_after_selfdestruct_pre_existing_contract]\ntest_reentrant_selfdestructing_call[fork_Prague-state_test-tstore_after_selfdestruct_new_contract]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstore_reentrancy/","title":"Test Tstore Reentrancy","text":"

    Documentation for tests/cancun/eip1153_tstore/test_tstore_reentrancy.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tstore_reentrancy.py\n

    Ethereum Transient Storage EIP Tests https://eips.ethereum.org/EIPS/eip-1153

    "},{"location":"tests/cancun/eip1153_tstore/test_tstore_reentrancy/#tests.cancun.eip1153_tstore.test_tstore_reentrancy.test_tstore_reentrancy","title":"test_tstore_reentrancy(state_test, pre, call_type, call_return, call_dest_type)","text":"

    Ported .json vectors:

    (06_tstoreInReentrancyCallFiller.yml) Reentrant calls access the same transient storage

    (07_tloadAfterReentrancyStoreFiller.yml) Successfully returned calls do not revert transient storage writes

    (08_revertUndoesTransientStoreFiller.yml) Revert undoes the transient storage writes from a call.

    (09_revertUndoesAllFiller.yml) Revert undoes all the transient storage writes to the same key from the failed call.

    (11_tstoreDelegateCallFiller.yml) delegatecall manipulates transient storage in the context of the current address.

    (13_tloadStaticCallFiller.yml) Transient storage cannot be manipulated in a static context, tstore reverts

    (20_oogUndoesTransientStoreInCallFiller.yml) Out of gas undoes the transient storage writes from a call.

    Source code in tests/cancun/eip1153_tstore/test_tstore_reentrancy.py
    @pytest.mark.valid_from(\"Cancun\")\n@pytest.mark.parametrize(\"call_type\", [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL])\n@pytest.mark.parametrize(\"call_return\", [Op.RETURN, Op.REVERT, Om.OOG])\n@pytest.mark.parametrize(\"call_dest_type\", [CallDestType.REENTRANCY, CallDestType.EXTERNAL_CALL])\ndef test_tstore_reentrancy(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    call_type: Op,\n    call_return: Op,\n    call_dest_type: CallDestType,\n):\n    \"\"\"\n    Ported .json vectors:\n\n    (06_tstoreInReentrancyCallFiller.yml)\n    Reentrant calls access the same transient storage\n\n    (07_tloadAfterReentrancyStoreFiller.yml)\n    Successfully returned calls do not revert transient storage writes\n\n    (08_revertUndoesTransientStoreFiller.yml)\n    Revert undoes the transient storage writes from a call.\n\n    (09_revertUndoesAllFiller.yml)\n    Revert undoes all the transient storage writes to the same key from the failed call.\n\n    (11_tstoreDelegateCallFiller.yml)\n    delegatecall manipulates transient storage in the context of the current address.\n\n    (13_tloadStaticCallFiller.yml)\n    Transient storage cannot be manipulated in a static context, tstore reverts\n\n    (20_oogUndoesTransientStoreInCallFiller.yml)\n    Out of gas undoes the transient storage writes from a call.\n    \"\"\"\n    tload_value_set_before_call = 80\n    tload_value_set_in_call = 90\n\n    # Storage cells\n    slot_tload_before_call = 0\n    slot_tload_in_subcall_result = 1\n    slot_tload_after_call = 2\n    slot_subcall_worked = 3\n    slot_tload_1_after_call = 4\n    slot_tstore_overwrite = 5\n    slot_code_worked = 6\n\n    # Function names\n    do_tstore = 1\n    do_reenter = 2\n    call_dest_address: Bytecode | Address\n    call_dest_address = Op.ADDRESS()\n\n    def make_call(call_type: Op) -> Bytecode:\n        if call_type == Op.DELEGATECALL or call_type == Op.STATICCALL:\n            return call_type(Op.GAS(), call_dest_address, 0, 32, 32, 32)\n        else:\n            return call_type(Op.GAS(), call_dest_address, 0, 0, 32, 32, 32)\n\n    subcall_code = (\n        Op.TSTORE(0, 89)\n        + Op.TSTORE(0, tload_value_set_in_call)\n        + Op.TSTORE(1, 11)\n        + Op.TSTORE(1, 12)\n        + Op.MSTORE(0, Op.TLOAD(0))\n        + call_return(0, 32)\n    )\n\n    address_code = pre.deploy_contract(\n        balance=0,\n        code=subcall_code,\n        storage={},\n    )\n    if call_dest_type == CallDestType.EXTERNAL_CALL:\n        call_dest_address = address_code\n\n    address_to = pre.deploy_contract(\n        balance=1_000_000_000_000_000_000,\n        code=Switch(\n            cases=[\n                Case(\n                    condition=Op.EQ(Op.CALLDATALOAD(0), do_tstore),\n                    action=subcall_code,\n                ),\n                Case(\n                    condition=Op.EQ(Op.CALLDATALOAD(0), do_reenter),\n                    action=Op.TSTORE(0, tload_value_set_before_call)\n                    + Op.SSTORE(slot_tload_before_call, Op.TLOAD(0))\n                    + Op.MSTORE(0, do_tstore)\n                    + Op.MSTORE(32, 0xFF)\n                    + Op.SSTORE(slot_subcall_worked, make_call(call_type))\n                    + Op.SSTORE(slot_tload_in_subcall_result, Op.MLOAD(32))\n                    + Op.SSTORE(slot_tload_after_call, Op.TLOAD(0))\n                    + Op.SSTORE(slot_tload_1_after_call, Op.TLOAD(1))\n                    + Op.TSTORE(0, 50)\n                    + Op.SSTORE(slot_tstore_overwrite, Op.TLOAD(0))\n                    + Op.SSTORE(slot_code_worked, 1),\n                ),\n            ],\n            default_action=None,\n        ),\n        storage={\n            slot_tload_before_call: 0xFF,\n            slot_tload_in_subcall_result: 0xFF,\n            slot_tload_after_call: 0xFF,\n            slot_subcall_worked: 0xFF,\n            slot_tload_1_after_call: 0xFF,\n            slot_tstore_overwrite: 0xFF,\n            slot_code_worked: 0xFF,\n        },\n    )\n\n    on_failing_calls = call_type == Op.STATICCALL or call_return in [Op.REVERT, Om.OOG]\n    on_successful_delegate_or_callcode = call_type in [\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n    ] and call_return not in [Op.REVERT, Om.OOG]\n\n    if call_dest_type == CallDestType.REENTRANCY:\n        post = {\n            address_to: Account(\n                storage={\n                    slot_code_worked: 1,\n                    slot_tload_before_call: tload_value_set_before_call,\n                    slot_tload_in_subcall_result: (\n                        # we fail to obtain in call result if it fails\n                        0xFF\n                        if call_type == Op.STATICCALL or call_return == Om.OOG\n                        else tload_value_set_in_call\n                    ),\n                    # reentrant tstore overrides value in upper level\n                    slot_tload_after_call: (\n                        tload_value_set_before_call\n                        if on_failing_calls\n                        else tload_value_set_in_call\n                    ),\n                    slot_tload_1_after_call: 0 if on_failing_calls else 12,\n                    slot_tstore_overwrite: 50,\n                    # tstore in static call not allowed\n                    slot_subcall_worked: 0 if on_failing_calls else 1,\n                }\n            )\n        }\n    else:\n        post = {\n            address_to: Account(\n                storage={\n                    slot_code_worked: 1,\n                    slot_tload_before_call: tload_value_set_before_call,\n                    slot_tload_in_subcall_result: (\n                        # we fail to obtain in call result if it fails\n                        0xFF\n                        if call_type == Op.STATICCALL or call_return == Om.OOG\n                        else tload_value_set_in_call\n                    ),\n                    # external tstore overrides value in upper level only in delegate and callcode\n                    slot_tload_after_call: (\n                        tload_value_set_in_call\n                        if on_successful_delegate_or_callcode\n                        else tload_value_set_before_call\n                    ),\n                    slot_tload_1_after_call: 12 if on_successful_delegate_or_callcode else 0,\n                    slot_tstore_overwrite: 50,\n                    # tstore in static call not allowed, reentrancy means external call here\n                    slot_subcall_worked: 0 if on_failing_calls else 1,\n                }\n            )\n        }\n\n    tx = Transaction(\n        sender=pre.fund_eoa(7_000_000_000_000_000_000),\n        to=address_to,\n        gas_price=10,\n        data=Hash(do_reenter),\n        gas_limit=5000000,\n        value=0,\n    )\n\n    state_test(env=Environment(), pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip1153_tstore/test_tstore_reentrancy/index/test_cases/","title":"Test Tstore Reentrancy - Test Cases","text":"

    Test cases generated from tests/cancun/eip1153_tstore/test_tstore_reentrancy.py

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstore_reentrancy.py:

    test_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Cancun-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-blockchain_test_engine-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.REENTRANCY-call_return_OOG-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_RETURN-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_REVERT-call_type_STATICCALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_CALLCODE]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_DELEGATECALL]\ntest_tstore_reentrancy[fork_Prague-state_test-call_dest_type_CallDestType.EXTERNAL_CALL-call_return_OOG-call_type_STATICCALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip1153_tstore/test_tstore_reentrancy.py\n
    "},{"location":"tests/cancun/eip4788_beacon_root/","title":"EIP-4788 Beacon Root","text":"

    Documentation for tests/cancun/eip4788_beacon_root.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4788_beacon_root\n

    Cross-client EIP-4788 Tests

    "},{"location":"tests/cancun/eip4788_beacon_root/spec/","title":"Spec","text":"

    Documentation for tests/cancun/eip4788_beacon_root/spec.py.

    Defines EIP-4788 specification constants and functions.

    "},{"location":"tests/cancun/eip4788_beacon_root/spec/#tests.cancun.eip4788_beacon_root.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-4788 specifications as defined at https://eips.ethereum.org/EIPS/eip-4788#specification

    Source code in tests/cancun/eip4788_beacon_root/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-4788 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-4788#specification\n    \"\"\"\n\n    BEACON_ROOTS_ADDRESS = 0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02\n    BEACON_ROOTS_CALL_GAS = 100_000\n    BEACON_ROOTS_DEPLOYER_ADDRESS = 0x0B799C86A49DEEB90402691F1041AA3AF2D3C875\n    HISTORY_BUFFER_LENGTH = 8_191\n    SYSTEM_ADDRESS = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE\n    FORK_TIMESTAMP = 15_000  # ShanghaiToCancun timestamp\n
    "},{"location":"tests/cancun/eip4788_beacon_root/spec/#tests.cancun.eip4788_beacon_root.spec.SpecHelpers","title":"SpecHelpers dataclass","text":"

    Helper functions closely related to the EIP-4788 specification.

    Source code in tests/cancun/eip4788_beacon_root/spec.py
    @dataclass(frozen=True)\nclass SpecHelpers:\n    \"\"\"\n    Helper functions closely related to the EIP-4788 specification.\n    \"\"\"\n\n    def timestamp_index(self, timestamp: int) -> int:\n        \"\"\"\n        Derive the timestamp index into the timestamp ring buffer.\n        \"\"\"\n        return timestamp % Spec.HISTORY_BUFFER_LENGTH\n\n    def root_index(self, timestamp: int) -> int:\n        \"\"\"\n        Derive the root index into the root ring buffer.\n        \"\"\"\n        return self.timestamp_index(timestamp) + Spec.HISTORY_BUFFER_LENGTH\n\n    @staticmethod\n    def expected_storage(\n        *,\n        beacon_root: bytes,\n        valid_call: bool,\n        valid_input: bool,\n    ) -> Storage:\n        \"\"\"\n        Derives the expected storage for a given beacon root contract call\n        dependent on:\n        - success or failure of the call\n        - validity of the timestamp input used within the call\n        \"\"\"\n        # By default assume the call is unsuccessful and all keys are zero\n        storage = Storage({k: 0 for k in range(4)})  # type: ignore\n        if valid_call and valid_input:\n            # beacon root contract call is successful\n            storage[0] = 1\n            storage[1] = beacon_root\n            storage[2] = 32\n            storage[3] = beacon_root\n\n        return storage\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/","title":"Test Beacon Root Contract","text":"

    Documentation for tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py\n
    Tests beacon block root for EIP-4788: Beacon block root in the EVM

    Test the exposed beacon chain root in the EVM for EIP-4788: Beacon block root in the EVM

    Adding a new test

    Add a function that is named test_<test_name> and takes at least the following arguments:

    • state_test
    • env
    • pre
    • tx
    • post
    • valid_call

    All other pytest.fixtures can be parametrized to generate new combinations and test cases.

    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_beacon_root_contract_calls","title":"test_beacon_root_contract_calls(blockchain_test, beacon_root, timestamp, pre, tx, post)","text":"

    Tests the beacon root contract call using various call contexts: - CALL - DELEGATECALL - CALLCODE - STATICCALL for different call gas amounts: - exact gas (valid call) - extra gas (valid call) - insufficient gas (invalid call)

    The expected result is that the contract call will be executed if the gas amount is met and return the correctparent_beacon_block_root. Otherwise the call will be invalid, and not be executed. This is highlighted within storage by storing the return value of each call context.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\n    \"call_gas, valid_call\",\n    [\n        pytest.param(Spec.BEACON_ROOTS_CALL_GAS, True),\n        pytest.param(int(Spec.BEACON_ROOTS_CALL_GAS / 100), False),\n    ],\n)\n@pytest.mark.parametrize(\n    \"call_type,call_value,valid_input\",\n    [\n        (Op.CALL, 1, True),\n        (Op.CALL, 0, True),\n        (Op.CALLCODE, 0, False),\n        (Op.DELEGATECALL, 0, False),\n        (Op.STATICCALL, 0, True),\n    ],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_beacon_root_contract_calls(\n    blockchain_test: BlockchainTestFiller,\n    beacon_root: bytes,\n    timestamp: int,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Tests the beacon root contract call using various call contexts:\n    - `CALL`\n    - `DELEGATECALL`\n    - `CALLCODE`\n    - `STATICCALL`\n    for different call gas amounts:\n    - exact gas (valid call)\n    - extra gas (valid call)\n    - insufficient gas (invalid call)\n\n    The expected result is that the contract call will be executed if the gas amount is met\n    and return the correct`parent_beacon_block_root`. Otherwise the call will be invalid, and not\n    be executed. This is highlighted within storage by storing the return value of each call\n    context.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        blocks=[Block(txs=[tx], parent_beacon_block_root=beacon_root, timestamp=timestamp)],\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_beacon_root_contract_timestamps","title":"test_beacon_root_contract_timestamps(blockchain_test, beacon_root, timestamp, pre, tx, post)","text":"

    Tests the beacon root contract call across for various valid and invalid timestamps.

    The expected result is that the contract call will return the correct parent_beacon_block_root for a valid input timestamp and return the zero'd 32 bytes value for an invalid input timestamp.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\n    \"timestamp, valid_input\",\n    [\n        (0x0C, True),  # twelve\n        (2**32, True),  # arbitrary\n        (2**64 - 2, True),  # near-max\n        (2**64 - 1, True),  # max\n        # TODO: Update t8n to un marshal > 64-bit int\n        # Exception: failed to evaluate: ERROR(10): failed un marshaling stdin\n        # (2**64, False),  # overflow\n        # Exception: failed to evaluate: ERROR(10): failed un marshaling stdin\n        # (2**64 + 1, False),  # overflow+1\n    ],\n)\n@pytest.mark.parametrize(\"auto_access_list\", [False, True])\n@pytest.mark.parametrize(\n    \"system_address_balance\",\n    [\n        pytest.param(0, id=\"empty_system_address\"),\n        pytest.param(1, id=\"one_wei_system_address\"),\n        pytest.param(int(1e18), id=\"one_eth_system_address\"),\n    ],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_beacon_root_contract_timestamps(\n    blockchain_test: BlockchainTestFiller,\n    beacon_root: bytes,\n    timestamp: int,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Tests the beacon root contract call across for various valid and invalid timestamps.\n\n    The expected result is that the contract call will return the correct\n    `parent_beacon_block_root` for a valid input timestamp and return the zero'd 32 bytes value\n    for an invalid input timestamp.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        blocks=[Block(txs=[tx], parent_beacon_block_root=beacon_root, timestamp=timestamp)],\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_calldata_lengths","title":"test_calldata_lengths(blockchain_test, beacon_root, timestamp, pre, tx, post)","text":"

    Tests the beacon root contract call using multiple invalid input lengths.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\n    \"tx_data\",\n    [\n        pytest.param(bytes(), id=\"empty_calldata\"),\n        pytest.param(int.to_bytes(12, length=1, byteorder=\"big\"), id=\"one_byte\"),\n        pytest.param(int.to_bytes(12, length=31, byteorder=\"big\"), id=\"31_bytes\"),\n        pytest.param(int.to_bytes(12, length=33, byteorder=\"big\"), id=\"33_bytes\"),\n        pytest.param(int.to_bytes(12, length=1024, byteorder=\"big\"), id=\"1024_bytes\"),\n    ],\n)\n@pytest.mark.parametrize(\"valid_call,valid_input\", [(False, False)])\n@pytest.mark.parametrize(\"timestamp\", [12])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_calldata_lengths(\n    blockchain_test: BlockchainTestFiller,\n    beacon_root: bytes,\n    timestamp: int,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Tests the beacon root contract call using multiple invalid input lengths.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        blocks=[Block(txs=[tx], parent_beacon_block_root=beacon_root, timestamp=timestamp)],\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_beacon_root_equal_to_timestamp","title":"test_beacon_root_equal_to_timestamp(blockchain_test, beacon_root, timestamp, pre, tx, post)","text":"

    Tests the beacon root contract call where the beacon root is equal to the timestamp.

    The expected result is that the contract call will return the parent_beacon_block_root, as all timestamps used are valid.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\n    \"beacon_root, timestamp\",\n    [\n        (12, 12),  # twelve\n        (2**32, 2**32),  # arbitrary\n        (2**64 - 2, 2**64 - 2),  # near-max\n        (2**64 - 1, 2**64 - 1),  # max\n    ],\n    indirect=[\"beacon_root\"],\n)\n@pytest.mark.parametrize(\"auto_access_list\", [False, True])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_beacon_root_equal_to_timestamp(\n    blockchain_test: BlockchainTestFiller,\n    beacon_root: bytes,\n    timestamp: int,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Tests the beacon root contract call where the beacon root is equal to the timestamp.\n\n    The expected result is that the contract call will return the `parent_beacon_block_root`,\n    as all timestamps used are valid.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        blocks=[Block(txs=[tx], parent_beacon_block_root=beacon_root, timestamp=timestamp)],\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_tx_to_beacon_root_contract","title":"test_tx_to_beacon_root_contract(blockchain_test, beacon_root, timestamp, pre, tx, post)","text":"

    Tests the beacon root contract using a transaction with different types and data lengths.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\"auto_access_list\", [False, True])\n@pytest.mark.parametrize(\"call_beacon_root_contract\", [True])\n@pytest.mark.with_all_tx_types\n@pytest.mark.valid_from(\"Cancun\")\ndef test_tx_to_beacon_root_contract(\n    blockchain_test: BlockchainTestFiller,\n    beacon_root: bytes,\n    timestamp: int,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Tests the beacon root contract using a transaction with different types and data lengths.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        blocks=[Block(txs=[tx], parent_beacon_block_root=beacon_root, timestamp=timestamp)],\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_invalid_beacon_root_calldata_value","title":"test_invalid_beacon_root_calldata_value(blockchain_test, beacon_root, timestamp, pre, tx, post)","text":"

    Tests the beacon root contract call using invalid input values: - zero calldata.

    Contract should revert.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\n    \"tx_data\",\n    [\n        pytest.param(int.to_bytes(0, length=32, byteorder=\"big\"), id=\"zero_calldata\"),\n    ],\n)\n@pytest.mark.parametrize(\"valid_call,valid_input\", [(False, False)])\n@pytest.mark.parametrize(\"timestamp\", [12])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_invalid_beacon_root_calldata_value(\n    blockchain_test: BlockchainTestFiller,\n    beacon_root: bytes,\n    timestamp: int,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Tests the beacon root contract call using invalid input values:\n    - zero calldata.\n\n    Contract should revert.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        blocks=[Block(txs=[tx], parent_beacon_block_root=beacon_root, timestamp=timestamp)],\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_beacon_root_selfdestruct","title":"test_beacon_root_selfdestruct(blockchain_test, beacon_root, timestamp, pre, tx, post)","text":"

    Tests that self destructing the beacon root address transfers actors balance correctly.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\"timestamp\", [12])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_beacon_root_selfdestruct(\n    blockchain_test: BlockchainTestFiller,\n    beacon_root: bytes,\n    timestamp: int,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Tests that self destructing the beacon root address transfers actors balance correctly.\n    \"\"\"\n    # self destruct actor\n    self_destruct_actor_address = pre.deploy_contract(\n        Op.SELFDESTRUCT(Spec.BEACON_ROOTS_ADDRESS),\n        balance=0xBA1,\n    )\n    # self destruct caller\n    self_destruct_caller_address = pre.deploy_contract(\n        Op.CALL(gas=100_000, address=self_destruct_actor_address)\n        + Op.SSTORE(0, Op.BALANCE(Spec.BEACON_ROOTS_ADDRESS))\n    )\n    post = {\n        self_destruct_caller_address: Account(\n            storage=Storage({0: 0xBA1}),  # type: ignore\n        )\n    }\n    blockchain_test(\n        pre=pre,\n        blocks=[\n            Block(\n                txs=[\n                    Transaction(\n                        sender=pre.fund_eoa(),\n                        to=self_destruct_caller_address,\n                        gas_limit=100_000,\n                    )\n                ]\n            )\n        ],\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_multi_block_beacon_root_timestamp_calls","title":"test_multi_block_beacon_root_timestamp_calls(blockchain_test, pre, timestamps, beacon_roots, block_count, call_gas, call_value)","text":"

    Tests multiple blocks where each block writes a timestamp to storage and contains one transaction that calls the beacon root contract multiple times.

    The blocks might overwrite the historical roots buffer, or not, depending on the timestamps, and whether they increment in multiples of Spec.HISTORY_BUFFER_LENGTH or not.

    By default, the beacon roots are the keccak of the block number.

    Each transaction checks the current timestamp and also all previous timestamps, and verifies that the beacon root is correct for all of them if the timestamp is supposed to be in the buffer, which might have been overwritten by a later block.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\n    \"timestamps\",\n    [\n        pytest.param(\n            count(\n                start=Spec.HISTORY_BUFFER_LENGTH - 5,\n                step=1,\n            ),\n            id=\"buffer_wraparound\",\n        ),\n        pytest.param(\n            count(\n                start=12,\n                step=Spec.HISTORY_BUFFER_LENGTH,\n            ),\n            id=\"buffer_wraparound_overwrite\",\n        ),\n        pytest.param(\n            count(\n                start=2**32,\n                step=Spec.HISTORY_BUFFER_LENGTH,\n            ),\n            id=\"buffer_wraparound_overwrite_high_timestamp\",\n        ),\n        pytest.param(\n            count(\n                start=5,\n                step=Spec.HISTORY_BUFFER_LENGTH - 1,\n            ),\n            id=\"buffer_wraparound_no_overwrite\",\n        ),\n        pytest.param(\n            count(\n                start=Spec.HISTORY_BUFFER_LENGTH - 3,\n                step=Spec.HISTORY_BUFFER_LENGTH + 1,\n            ),\n            id=\"buffer_wraparound_no_overwrite_2\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"block_count\", [10])  # All tests use 10 blocks\n@pytest.mark.valid_from(\"Cancun\")\ndef test_multi_block_beacon_root_timestamp_calls(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    timestamps: Iterator[int],\n    beacon_roots: Iterator[bytes],\n    block_count: int,\n    call_gas: int,\n    call_value: int,\n):\n    \"\"\"\n    Tests multiple blocks where each block writes a timestamp to storage and contains one\n    transaction that calls the beacon root contract multiple times.\n\n    The blocks might overwrite the historical roots buffer, or not, depending on the `timestamps`,\n    and whether they increment in multiples of `Spec.HISTORY_BUFFER_LENGTH` or not.\n\n    By default, the beacon roots are the keccak of the block number.\n\n    Each transaction checks the current timestamp and also all previous timestamps, and verifies\n    that the beacon root is correct for all of them if the timestamp is supposed to be in the\n    buffer, which might have been overwritten by a later block.\n    \"\"\"\n    blocks: List[Block] = []\n    post = {}\n\n    timestamps_storage: Dict[int, int] = {}\n    roots_storage: Dict[int, bytes] = {}\n\n    all_timestamps: List[int] = []\n\n    sender = pre.fund_eoa()\n\n    for timestamp, beacon_root, i in zip(timestamps, beacon_roots, range(block_count)):\n        timestamp_index = timestamp % Spec.HISTORY_BUFFER_LENGTH\n        timestamps_storage[timestamp_index] = timestamp\n        roots_storage[timestamp_index] = beacon_root\n\n        all_timestamps.append(timestamp)\n\n        withdraw_index = count(0)\n\n        current_call_account_code = Bytecode()\n        current_call_account_expected_storage = Storage()\n\n        # We are going to call the beacon roots contract once for every timestamp of the current\n        # and all previous blocks, and check that the returned beacon root is still correct only\n        # if it was not overwritten.\n        for t in all_timestamps:\n            current_call_account_code += Op.MSTORE(0, t)\n            call_valid = (\n                timestamp_index in timestamps_storage\n                and timestamps_storage[t % Spec.HISTORY_BUFFER_LENGTH] == t\n            )\n            current_call_account_code += Op.SSTORE(\n                current_call_account_expected_storage.store_next(0x01 if call_valid else 0x00),\n                Op.CALL(\n                    call_gas,\n                    Spec.BEACON_ROOTS_ADDRESS,\n                    call_value,\n                    0x00,\n                    0x20,\n                    0x20,\n                    0x20,\n                ),\n            )\n\n            current_call_account_code += Op.SSTORE(\n                current_call_account_expected_storage.store_next(\n                    roots_storage[t % Spec.HISTORY_BUFFER_LENGTH] if call_valid else 0x00\n                ),\n                Op.MLOAD(0x20),\n            )\n\n        current_call_account_address = pre.deploy_contract(current_call_account_code)\n\n        post[current_call_account_address] = Account(\n            storage=current_call_account_expected_storage,\n        )\n        blocks.append(\n            Block(\n                txs=[\n                    Transaction(\n                        sender=sender,\n                        to=current_call_account_address,\n                        data=Hash(timestamp),\n                        gas_limit=1_000_000,\n                    )\n                ],\n                parent_beacon_block_root=beacon_root,\n                timestamp=timestamp,\n                withdrawals=[\n                    # Also withdraw to the beacon root contract and the system address\n                    Withdrawal(\n                        address=Spec.BEACON_ROOTS_ADDRESS,\n                        amount=1,\n                        index=next(withdraw_index),\n                        validator_index=0,\n                    ),\n                    Withdrawal(\n                        address=Spec.SYSTEM_ADDRESS,\n                        amount=1,\n                        index=next(withdraw_index),\n                        validator_index=1,\n                    ),\n                ],\n            )\n        )\n\n    blockchain_test(\n        pre=pre,\n        blocks=blocks,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_beacon_root_transition","title":"test_beacon_root_transition(blockchain_test, pre, timestamps, beacon_roots, block_count, call_gas, call_value, fork)","text":"

    Tests the fork transition to cancun and verifies that blocks with timestamp lower than the transition timestamp do not contain beacon roots in the pre-deployed contract.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\n    \"timestamps\",\n    [pytest.param(count(start=1000, step=1000), id=\"fork_transition\")],\n)\n@pytest.mark.parametrize(\"block_count\", [20])\n@pytest.mark.valid_at_transition_to(\"Cancun\")\ndef test_beacon_root_transition(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    timestamps: Iterator[int],\n    beacon_roots: Iterator[bytes],\n    block_count: int,\n    call_gas: int,\n    call_value: int,\n    fork: Fork,\n):\n    \"\"\"\n    Tests the fork transition to cancun and verifies that blocks with timestamp lower than the\n    transition timestamp do not contain beacon roots in the pre-deployed contract.\n    \"\"\"\n    blocks: List[Block] = []\n    post = {}\n\n    timestamps_storage: Dict[int, int] = {}\n    roots_storage: Dict[int, bytes] = {}\n\n    all_timestamps: List[int] = []\n    timestamps_in_beacon_root_contract: List[int] = []\n\n    sender = pre.fund_eoa()\n\n    for timestamp, beacon_root, i in zip(timestamps, beacon_roots, range(block_count)):\n        timestamp_index = timestamp % Spec.HISTORY_BUFFER_LENGTH\n\n        transitioned = fork.header_beacon_root_required(i, timestamp)\n        if transitioned:\n            # We've transitioned, the current timestamp must contain a value in the contract\n            timestamps_in_beacon_root_contract.append(timestamp)\n            timestamps_storage[timestamp_index] = timestamp\n            roots_storage[timestamp_index] = beacon_root\n\n        all_timestamps.append(timestamp)\n\n        withdraw_index = count(0)\n\n        current_call_account_code = Bytecode()\n        current_call_account_expected_storage = Storage()\n\n        # We are going to call the beacon roots contract once for every timestamp of the current\n        # and all previous blocks, and check that the returned beacon root is correct only\n        # if it was after the transition timestamp.\n        for t in all_timestamps:\n            current_call_account_code += Op.MSTORE(0, t)\n            call_valid = (\n                t in timestamps_in_beacon_root_contract\n                and timestamp_index in timestamps_storage\n                and timestamps_storage[t % Spec.HISTORY_BUFFER_LENGTH] == t\n            )\n            current_call_account_code += Op.SSTORE(\n                current_call_account_expected_storage.store_next(0x01 if call_valid else 0x00),\n                Op.CALL(\n                    call_gas,\n                    Spec.BEACON_ROOTS_ADDRESS,\n                    call_value,\n                    0x00,\n                    0x20,\n                    0x20,\n                    0x20,\n                ),\n            )\n\n            current_call_account_code += Op.SSTORE(\n                current_call_account_expected_storage.store_next(\n                    roots_storage[t % Spec.HISTORY_BUFFER_LENGTH] if call_valid else 0x00\n                ),\n                Op.MLOAD(0x20),\n            )\n\n        current_call_account_address = pre.deploy_contract(current_call_account_code)\n        post[current_call_account_address] = Account(\n            storage=current_call_account_expected_storage,\n        )\n        blocks.append(\n            Block(\n                txs=[\n                    Transaction(\n                        sender=sender,\n                        to=current_call_account_address,\n                        data=Hash(timestamp),\n                        gas_limit=1_000_000,\n                    )\n                ],\n                parent_beacon_block_root=beacon_root if transitioned else None,\n                timestamp=timestamp,\n                withdrawals=[\n                    # Also withdraw to the beacon root contract and the system address\n                    Withdrawal(\n                        address=Spec.BEACON_ROOTS_ADDRESS,\n                        amount=1,\n                        index=next(withdraw_index),\n                        validator_index=0,\n                    ),\n                    Withdrawal(\n                        address=Spec.SYSTEM_ADDRESS,\n                        amount=1,\n                        index=next(withdraw_index),\n                        validator_index=1,\n                    ),\n                ],\n            )\n        )\n\n    blockchain_test(\n        pre=pre,\n        blocks=blocks,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_no_beacon_root_contract_at_transition","title":"test_no_beacon_root_contract_at_transition(blockchain_test, pre, beacon_roots, tx, timestamp, caller_address, fork)","text":"

    Tests the fork transition to cancun in the case where the beacon root pre-deploy was not deployed in time for the fork.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\"timestamp\", [15_000])\n@pytest.mark.valid_at_transition_to(\"Cancun\")\ndef test_no_beacon_root_contract_at_transition(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    beacon_roots: Iterator[bytes],\n    tx: Transaction,\n    timestamp: int,\n    caller_address: Address,\n    fork: Fork,\n):\n    \"\"\"\n    Tests the fork transition to cancun in the case where the beacon root pre-deploy was not\n    deployed in time for the fork.\n    \"\"\"\n    assert fork.header_beacon_root_required(1, timestamp)\n    blocks: List[Block] = [\n        Block(\n            txs=[tx],\n            parent_beacon_block_root=next(beacon_roots),\n            timestamp=timestamp,\n            withdrawals=[\n                # Also withdraw to the beacon root contract and the system address\n                Withdrawal(\n                    address=Spec.BEACON_ROOTS_ADDRESS,\n                    amount=1,\n                    index=0,\n                    validator_index=0,\n                ),\n                Withdrawal(\n                    address=Spec.SYSTEM_ADDRESS,\n                    amount=1,\n                    index=1,\n                    validator_index=1,\n                ),\n            ],\n        )\n    ]\n    pre[Spec.BEACON_ROOTS_ADDRESS] = Account(\n        code=b\"\",  # Remove the code that is automatically allocated on Cancun fork\n        nonce=0,\n        balance=0,\n    )\n    post = {\n        Spec.BEACON_ROOTS_ADDRESS: Account(\n            storage={\n                timestamp % Spec.HISTORY_BUFFER_LENGTH: 0,\n                (timestamp % Spec.HISTORY_BUFFER_LENGTH) + Spec.HISTORY_BUFFER_LENGTH: 0,\n            },\n            code=b\"\",\n            nonce=0,\n            balance=int(1e9),\n        ),\n        caller_address: Account(\n            storage={\n                0: 1\n            },  # Successful call because the contract is not there, but nothing else is stored\n        ),\n    }\n    blockchain_test(\n        pre=pre,\n        blocks=blocks,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/#tests.cancun.eip4788_beacon_root.test_beacon_root_contract.test_beacon_root_contract_deploy","title":"test_beacon_root_contract_deploy(blockchain_test, pre, beacon_root, tx, timestamp, post, fork)","text":"

    Tests the fork transition to cancun deploying the contract during Shanghai and verifying the code deployed and its functionality after Cancun.

    Source code in tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    @pytest.mark.parametrize(\n    \"timestamp\",\n    [\n        pytest.param(15_000, id=\"deploy_on_shanghai\"),\n        pytest.param(30_000, id=\"deploy_on_cancun\"),\n    ],\n)\n@pytest.mark.valid_at_transition_to(\"Cancun\")\ndef test_beacon_root_contract_deploy(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    beacon_root: bytes,\n    tx: Transaction,\n    timestamp: int,\n    post: Dict,\n    fork: Fork,\n):\n    \"\"\"\n    Tests the fork transition to cancun deploying the contract during Shanghai and verifying the\n    code deployed and its functionality after Cancun.\n    \"\"\"\n    assert fork.header_beacon_root_required(1, timestamp)\n    tx_gas_limit = 0x3D090\n    tx_gas_price = 0xE8D4A51000\n    deployer_required_balance = tx_gas_limit * tx_gas_price\n    deploy_tx = Transaction(\n        ty=0,\n        nonce=0,\n        to=None,\n        gas_limit=tx_gas_limit,\n        gas_price=tx_gas_price,\n        value=0,\n        data=bytes.fromhex(\n            \"60618060095f395ff33373fffffffffffffffffffffffffffffffffffffffe14604d576020361460\"\n            \"24575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f526020\"\n            \"5ff35b5f5ffd5b62001fff42064281555f359062001fff015500\"\n        ),\n        v=0x1B,\n        r=0x539,\n        s=0x1B9B6EB1F0,\n        protected=False,\n    ).with_signature_and_sender()\n    deployer_address = deploy_tx.sender\n    assert deployer_address is not None\n    assert Address(deployer_address) == Spec.BEACON_ROOTS_DEPLOYER_ADDRESS\n    blocks: List[Block] = []\n\n    beacon_root_contract_storage: Dict = {}\n    for i, current_timestamp in enumerate(range(timestamp // 2, timestamp + 1, timestamp // 2)):\n        if i == 0:\n            blocks.append(\n                Block(  # Deployment block\n                    txs=[deploy_tx],\n                    parent_beacon_block_root=(\n                        beacon_root\n                        if fork.header_beacon_root_required(1, current_timestamp)\n                        else None\n                    ),\n                    timestamp=timestamp // 2,\n                    withdrawals=[\n                        # Also withdraw to the beacon root contract and the system address\n                        Withdrawal(\n                            address=Spec.BEACON_ROOTS_ADDRESS,\n                            amount=1,\n                            index=0,\n                            validator_index=0,\n                        ),\n                        Withdrawal(\n                            address=Spec.SYSTEM_ADDRESS,\n                            amount=1,\n                            index=1,\n                            validator_index=1,\n                        ),\n                    ],\n                )\n            )\n            beacon_root_contract_storage[current_timestamp % Spec.HISTORY_BUFFER_LENGTH] = 0\n            beacon_root_contract_storage[\n                (current_timestamp % Spec.HISTORY_BUFFER_LENGTH) + Spec.HISTORY_BUFFER_LENGTH\n            ] = 0\n        elif i == 1:\n            blocks.append(\n                Block(  # Contract already deployed\n                    txs=[tx],\n                    parent_beacon_block_root=beacon_root,\n                    timestamp=timestamp,\n                    withdrawals=[\n                        # Also withdraw to the beacon root contract and the system address\n                        Withdrawal(\n                            address=Spec.BEACON_ROOTS_ADDRESS,\n                            amount=1,\n                            index=2,\n                            validator_index=0,\n                        ),\n                        Withdrawal(\n                            address=Spec.SYSTEM_ADDRESS,\n                            amount=1,\n                            index=3,\n                            validator_index=1,\n                        ),\n                    ],\n                ),\n            )\n            beacon_root_contract_storage[\n                current_timestamp % Spec.HISTORY_BUFFER_LENGTH\n            ] = current_timestamp\n            beacon_root_contract_storage[\n                (current_timestamp % Spec.HISTORY_BUFFER_LENGTH) + Spec.HISTORY_BUFFER_LENGTH\n            ] = beacon_root\n        else:\n            assert False, \"This test should only have two blocks\"\n\n    expected_code = fork.pre_allocation_blockchain()[Spec.BEACON_ROOTS_ADDRESS][\"code\"]\n    pre[Spec.BEACON_ROOTS_ADDRESS] = Account(\n        code=b\"\",  # Remove the code that is automatically allocated on Cancun fork\n        nonce=0,\n        balance=0,\n    )\n    pre[deployer_address] = Account(\n        balance=deployer_required_balance,\n    )\n\n    post[Spec.BEACON_ROOTS_ADDRESS] = Account(\n        storage=beacon_root_contract_storage,\n        code=expected_code,\n        nonce=1,\n        balance=int(2e9),\n    )\n    post[Spec.SYSTEM_ADDRESS] = Account(\n        storage={},\n        code=b\"\",\n        nonce=0,\n        balance=int(2e9),\n    )\n    post[deployer_address] = Account(\n        balance=175916000000000000,  # It doesn't consume all the balance :(\n        nonce=1,\n    )\n    blockchain_test(\n        pre=pre,\n        blocks=blocks,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4788_beacon_root/test_beacon_root_contract/index/test_cases/","title":"Test Beacon Root Contract - Test Cases","text":"

    Test cases generated from tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py

    Parametrized test cases generated from the test module tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py:

    test_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALL-call_value_1-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALL-call_value_1-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALL-call_value_0-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALL-call_value_0-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALLCODE-call_value_0-valid_input_False-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALLCODE-call_value_0-valid_input_False-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_DELEGATECALL-call_value_0-valid_input_False-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_DELEGATECALL-call_value_0-valid_input_False-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_STATICCALL-call_value_0-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_STATICCALL-call_value_0-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test_engine-call_type_CALL-call_value_1-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test_engine-call_type_CALL-call_value_1-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test_engine-call_type_CALL-call_value_0-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test_engine-call_type_CALL-call_value_0-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test_engine-call_type_CALLCODE-call_value_0-valid_input_False-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test_engine-call_type_CALLCODE-call_value_0-valid_input_False-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test_engine-call_type_DELEGATECALL-call_value_0-valid_input_False-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test_engine-call_type_DELEGATECALL-call_value_0-valid_input_False-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test_engine-call_type_STATICCALL-call_value_0-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Cancun-blockchain_test_engine-call_type_STATICCALL-call_value_0-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test-call_type_CALL-call_value_1-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test-call_type_CALL-call_value_1-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test-call_type_CALL-call_value_0-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test-call_type_CALL-call_value_0-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test-call_type_CALLCODE-call_value_0-valid_input_False-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test-call_type_CALLCODE-call_value_0-valid_input_False-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test-call_type_DELEGATECALL-call_value_0-valid_input_False-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test-call_type_DELEGATECALL-call_value_0-valid_input_False-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test-call_type_STATICCALL-call_value_0-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test-call_type_STATICCALL-call_value_0-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test_engine-call_type_CALL-call_value_1-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test_engine-call_type_CALL-call_value_1-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test_engine-call_type_CALL-call_value_0-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test_engine-call_type_CALL-call_value_0-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test_engine-call_type_CALLCODE-call_value_0-valid_input_False-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test_engine-call_type_CALLCODE-call_value_0-valid_input_False-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test_engine-call_type_DELEGATECALL-call_value_0-valid_input_False-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test_engine-call_type_DELEGATECALL-call_value_0-valid_input_False-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test_engine-call_type_STATICCALL-call_value_0-valid_input_True-call_gas_100000-valid_call_True]\ntest_beacon_root_contract_calls[fork_Prague-blockchain_test_engine-call_type_STATICCALL-call_value_0-valid_input_True-call_gas_1000-valid_call_False]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-empty_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-empty_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-empty_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-empty_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-empty_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-empty_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-empty_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-empty_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_wei_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_wei_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_wei_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_wei_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_wei_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_wei_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_wei_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_wei_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_eth_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_eth_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_eth_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_eth_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_eth_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_eth_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_eth_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Cancun-blockchain_test_engine-one_eth_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-empty_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-empty_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-empty_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-empty_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-empty_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-empty_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-empty_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-empty_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_wei_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_wei_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_wei_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_wei_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_wei_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_wei_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_wei_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_wei_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_eth_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_eth_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_eth_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_eth_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_eth_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_eth_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_eth_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test-one_eth_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-empty_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-empty_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-empty_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-empty_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-empty_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-empty_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-empty_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-empty_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_wei_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_wei_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_wei_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_wei_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_wei_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_wei_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_wei_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_wei_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_eth_system_address-auto_access_list_False-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_eth_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_eth_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_eth_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_eth_system_address-auto_access_list_True-timestamp_12-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_eth_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_eth_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]\ntest_beacon_root_contract_timestamps[fork_Prague-blockchain_test_engine-one_eth_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]\ntest_calldata_lengths[fork_Cancun-blockchain_test-timestamp_12-valid_call_False-valid_input_False-empty_calldata]\ntest_calldata_lengths[fork_Cancun-blockchain_test-timestamp_12-valid_call_False-valid_input_False-one_byte]\ntest_calldata_lengths[fork_Cancun-blockchain_test-timestamp_12-valid_call_False-valid_input_False-31_bytes]\ntest_calldata_lengths[fork_Cancun-blockchain_test-timestamp_12-valid_call_False-valid_input_False-33_bytes]\ntest_calldata_lengths[fork_Cancun-blockchain_test-timestamp_12-valid_call_False-valid_input_False-1024_bytes]\ntest_calldata_lengths[fork_Cancun-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-empty_calldata]\ntest_calldata_lengths[fork_Cancun-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-one_byte]\ntest_calldata_lengths[fork_Cancun-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-31_bytes]\ntest_calldata_lengths[fork_Cancun-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-33_bytes]\ntest_calldata_lengths[fork_Cancun-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-1024_bytes]\ntest_calldata_lengths[fork_Prague-blockchain_test-timestamp_12-valid_call_False-valid_input_False-empty_calldata]\ntest_calldata_lengths[fork_Prague-blockchain_test-timestamp_12-valid_call_False-valid_input_False-one_byte]\ntest_calldata_lengths[fork_Prague-blockchain_test-timestamp_12-valid_call_False-valid_input_False-31_bytes]\ntest_calldata_lengths[fork_Prague-blockchain_test-timestamp_12-valid_call_False-valid_input_False-33_bytes]\ntest_calldata_lengths[fork_Prague-blockchain_test-timestamp_12-valid_call_False-valid_input_False-1024_bytes]\ntest_calldata_lengths[fork_Prague-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-empty_calldata]\ntest_calldata_lengths[fork_Prague-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-one_byte]\ntest_calldata_lengths[fork_Prague-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-31_bytes]\ntest_calldata_lengths[fork_Prague-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-33_bytes]\ntest_calldata_lengths[fork_Prague-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-1024_bytes]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_False-beacon_root_12-timestamp_12]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_False-beacon_root_4294967296-timestamp_4294967296]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_False-beacon_root_18446744073709551614-timestamp_18446744073709551614]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_False-beacon_root_18446744073709551615-timestamp_18446744073709551615]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_True-beacon_root_12-timestamp_12]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_True-beacon_root_4294967296-timestamp_4294967296]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_True-beacon_root_18446744073709551614-timestamp_18446744073709551614]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_True-beacon_root_18446744073709551615-timestamp_18446744073709551615]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test_engine-auto_access_list_False-beacon_root_12-timestamp_12]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test_engine-auto_access_list_False-beacon_root_4294967296-timestamp_4294967296]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test_engine-auto_access_list_False-beacon_root_18446744073709551614-timestamp_18446744073709551614]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test_engine-auto_access_list_False-beacon_root_18446744073709551615-timestamp_18446744073709551615]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test_engine-auto_access_list_True-beacon_root_12-timestamp_12]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test_engine-auto_access_list_True-beacon_root_4294967296-timestamp_4294967296]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test_engine-auto_access_list_True-beacon_root_18446744073709551614-timestamp_18446744073709551614]\ntest_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test_engine-auto_access_list_True-beacon_root_18446744073709551615-timestamp_18446744073709551615]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test-auto_access_list_False-beacon_root_12-timestamp_12]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test-auto_access_list_False-beacon_root_4294967296-timestamp_4294967296]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test-auto_access_list_False-beacon_root_18446744073709551614-timestamp_18446744073709551614]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test-auto_access_list_False-beacon_root_18446744073709551615-timestamp_18446744073709551615]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test-auto_access_list_True-beacon_root_12-timestamp_12]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test-auto_access_list_True-beacon_root_4294967296-timestamp_4294967296]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test-auto_access_list_True-beacon_root_18446744073709551614-timestamp_18446744073709551614]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test-auto_access_list_True-beacon_root_18446744073709551615-timestamp_18446744073709551615]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test_engine-auto_access_list_False-beacon_root_12-timestamp_12]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test_engine-auto_access_list_False-beacon_root_4294967296-timestamp_4294967296]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test_engine-auto_access_list_False-beacon_root_18446744073709551614-timestamp_18446744073709551614]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test_engine-auto_access_list_False-beacon_root_18446744073709551615-timestamp_18446744073709551615]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test_engine-auto_access_list_True-beacon_root_12-timestamp_12]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test_engine-auto_access_list_True-beacon_root_4294967296-timestamp_4294967296]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test_engine-auto_access_list_True-beacon_root_18446744073709551614-timestamp_18446744073709551614]\ntest_beacon_root_equal_to_timestamp[fork_Prague-blockchain_test_engine-auto_access_list_True-beacon_root_18446744073709551615-timestamp_18446744073709551615]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_3-blockchain_test-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_3-blockchain_test-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_3-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_3-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_2-blockchain_test-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_2-blockchain_test-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_2-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_2-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_1-blockchain_test-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_1-blockchain_test-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_1-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_1-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_0-blockchain_test-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_0-blockchain_test-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_0-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Cancun-tx_type_0-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_3-blockchain_test-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_3-blockchain_test-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_3-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_3-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_2-blockchain_test-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_2-blockchain_test-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_2-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_2-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_1-blockchain_test-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_1-blockchain_test-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_1-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_1-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_0-blockchain_test-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_0-blockchain_test-call_beacon_root_contract_True-auto_access_list_True]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_0-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_False]\ntest_tx_to_beacon_root_contract[fork_Prague-tx_type_0-blockchain_test_engine-call_beacon_root_contract_True-auto_access_list_True]\ntest_invalid_beacon_root_calldata_value[fork_Cancun-blockchain_test-timestamp_12-valid_call_False-valid_input_False-zero_calldata]\ntest_invalid_beacon_root_calldata_value[fork_Cancun-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-zero_calldata]\ntest_invalid_beacon_root_calldata_value[fork_Prague-blockchain_test-timestamp_12-valid_call_False-valid_input_False-zero_calldata]\ntest_invalid_beacon_root_calldata_value[fork_Prague-blockchain_test_engine-timestamp_12-valid_call_False-valid_input_False-zero_calldata]\ntest_beacon_root_selfdestruct[fork_Cancun-blockchain_test-timestamp_12]\ntest_beacon_root_selfdestruct[fork_Cancun-blockchain_test_engine-timestamp_12]\ntest_beacon_root_selfdestruct[fork_Prague-blockchain_test-timestamp_12]\ntest_beacon_root_selfdestruct[fork_Prague-blockchain_test_engine-timestamp_12]\ntest_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test-block_count_10-buffer_wraparound]\ntest_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test-block_count_10-buffer_wraparound_overwrite]\ntest_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test-block_count_10-buffer_wraparound_overwrite_high_timestamp]\ntest_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test-block_count_10-buffer_wraparound_no_overwrite]\ntest_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test-block_count_10-buffer_wraparound_no_overwrite_2]\ntest_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test_engine-block_count_10-buffer_wraparound]\ntest_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test_engine-block_count_10-buffer_wraparound_overwrite]\ntest_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test_engine-block_count_10-buffer_wraparound_overwrite_high_timestamp]\ntest_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test_engine-block_count_10-buffer_wraparound_no_overwrite]\ntest_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test_engine-block_count_10-buffer_wraparound_no_overwrite_2]\ntest_multi_block_beacon_root_timestamp_calls[fork_Prague-blockchain_test-block_count_10-buffer_wraparound]\ntest_multi_block_beacon_root_timestamp_calls[fork_Prague-blockchain_test-block_count_10-buffer_wraparound_overwrite]\ntest_multi_block_beacon_root_timestamp_calls[fork_Prague-blockchain_test-block_count_10-buffer_wraparound_overwrite_high_timestamp]\ntest_multi_block_beacon_root_timestamp_calls[fork_Prague-blockchain_test-block_count_10-buffer_wraparound_no_overwrite]\ntest_multi_block_beacon_root_timestamp_calls[fork_Prague-blockchain_test-block_count_10-buffer_wraparound_no_overwrite_2]\ntest_multi_block_beacon_root_timestamp_calls[fork_Prague-blockchain_test_engine-block_count_10-buffer_wraparound]\ntest_multi_block_beacon_root_timestamp_calls[fork_Prague-blockchain_test_engine-block_count_10-buffer_wraparound_overwrite]\ntest_multi_block_beacon_root_timestamp_calls[fork_Prague-blockchain_test_engine-block_count_10-buffer_wraparound_overwrite_high_timestamp]\ntest_multi_block_beacon_root_timestamp_calls[fork_Prague-blockchain_test_engine-block_count_10-buffer_wraparound_no_overwrite]\ntest_multi_block_beacon_root_timestamp_calls[fork_Prague-blockchain_test_engine-block_count_10-buffer_wraparound_no_overwrite_2]\ntest_beacon_root_transition[fork_ShanghaiToCancunAtTime15k-blockchain_test-block_count_20-fork_transition]\ntest_beacon_root_transition[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-block_count_20-fork_transition]\ntest_no_beacon_root_contract_at_transition[fork_ShanghaiToCancunAtTime15k-blockchain_test-timestamp_15000]\ntest_no_beacon_root_contract_at_transition[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-timestamp_15000]\ntest_beacon_root_contract_deploy[fork_ShanghaiToCancunAtTime15k-blockchain_test-deploy_on_shanghai]\ntest_beacon_root_contract_deploy[fork_ShanghaiToCancunAtTime15k-blockchain_test-deploy_on_cancun]\ntest_beacon_root_contract_deploy[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-deploy_on_shanghai]\ntest_beacon_root_contract_deploy[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-deploy_on_cancun]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py\n
    "},{"location":"tests/cancun/eip4844_blobs/","title":"EIP-4844 Blobs","text":"

    Documentation for tests/cancun/eip4844_blobs.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs\n

    Cross-client EIP-4844 Tests

    "},{"location":"tests/cancun/eip4844_blobs/point_evaluation_vectors/README_./","title":"KZG Point Evaluation Test Vectors","text":"

    This directory contains test vectors for the KZG point evaluation algorithm that are loaded and used throughout different tests.

    Each file must contain a JSON list of objects, each with the following fields:

    • name: a string describing the test case
    • input: object containing commitment, proof, z and y
    • output: expected output of the evaluation, true, false or null.
    "},{"location":"tests/cancun/eip4844_blobs/point_evaluation_vectors/README_./#generating-the-test-vectors-used-in-v106-and-on","title":"Generating The Test Vectors (used in v1.0.6 and on)","text":"

    From execution-spec-tests release v1.0.6 and on, the point evaluation test vectors were generated using commit 63aa303c from the official-kzg consensus-specs branch.

    The test vectors were generated as following:

    1. In the consensus-specs repo:

      cd tests/generators/kzg_4844/\nrm -rf /tmp/kzg_4844_output\nmkdir /tmp/kzg_4844_output\npython -m main --output /tmp/kzg_4844_output\n
    2. In the execution-spec-tests repo:

      cd tests/cancun/4844_blobs/point_evaluation_vectors/\npip install -r requirements.txt\npython concat_kzg_vectors_to_json.py \\\n    --input /tmp/kzg_4844_output/general/deneb/kzg/verify_kzg_proof/kzg-mainnet/\n    --output go_kzg_4844_verify_kzg_proof.json\n
    "},{"location":"tests/cancun/eip4844_blobs/point_evaluation_vectors/README_./#previous-versions-of-the-test-vectors-used-up-to-v105","title":"Previous Versions of the Test Vectors (used up to v1.0.5)","text":"

    The test vectors up and including execution-spec-tests release v1.0.5 were: - go_kzg_4844_verify_kzg_proof.json: test vectors from the go-kzg-4844 repository.

    "},{"location":"tests/cancun/eip4844_blobs/spec/","title":"Spec","text":"

    Documentation for tests/cancun/eip4844_blobs/spec.py.

    Defines EIP-4844 specification constants and functions.

    "},{"location":"tests/cancun/eip4844_blobs/spec/#tests.cancun.eip4844_blobs.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-4844 specifications as defined at https://eips.ethereum.org/EIPS/eip-4844#parameters

    If the parameter is not currently used within the tests, it is commented out.

    Source code in tests/cancun/eip4844_blobs/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-4844 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-4844#parameters\n\n    If the parameter is not currently used within the tests, it is commented\n    out.\n    \"\"\"\n\n    BLOB_TX_TYPE = 0x03\n    FIELD_ELEMENTS_PER_BLOB = 4096\n    BLS_MODULUS = 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFF00000001\n    BLOB_COMMITMENT_VERSION_KZG = 1\n    POINT_EVALUATION_PRECOMPILE_ADDRESS = 10\n    POINT_EVALUATION_PRECOMPILE_GAS = 50_000\n    MAX_BLOB_GAS_PER_BLOCK = 786432\n    TARGET_BLOB_GAS_PER_BLOCK = 393216\n    MIN_BLOB_GASPRICE = 1\n    BLOB_GASPRICE_UPDATE_FRACTION = 3338477\n    # MAX_VERSIONED_HASHES_LIST_SIZE = 2**24\n    # MAX_CALLDATA_SIZE = 2**24\n    # MAX_ACCESS_LIST_SIZE = 2**24\n    # MAX_ACCESS_LIST_STORAGE_KEYS = 2**24\n    # MAX_TX_WRAP_COMMITMENTS = 2**12\n    # LIMIT_BLOBS_PER_TX = 2**12\n    GAS_PER_BLOB = 2**17\n    HASH_OPCODE_BYTE = 0x49\n    HASH_GAS_COST = 3\n\n    @classmethod\n    def kzg_to_versioned_hash(\n        cls,\n        kzg_commitment: bytes | int,  # 48 bytes\n        blob_commitment_version_kzg: Optional[bytes | int] = None,\n    ) -> bytes:\n        \"\"\"\n        Calculates the versioned hash for a given KZG commitment.\n        \"\"\"\n        if blob_commitment_version_kzg is None:\n            blob_commitment_version_kzg = cls.BLOB_COMMITMENT_VERSION_KZG\n        if isinstance(kzg_commitment, int):\n            kzg_commitment = kzg_commitment.to_bytes(48, \"big\")\n        if isinstance(blob_commitment_version_kzg, int):\n            blob_commitment_version_kzg = blob_commitment_version_kzg.to_bytes(1, \"big\")\n        return blob_commitment_version_kzg + sha256(kzg_commitment).digest()[1:]\n\n    @classmethod\n    def fake_exponential(cls, factor: int, numerator: int, denominator: int) -> int:\n        \"\"\"\n        Used to calculate the blob gas cost.\n        \"\"\"\n        i = 1\n        output = 0\n        numerator_accumulator = factor * denominator\n        while numerator_accumulator > 0:\n            output += numerator_accumulator\n            numerator_accumulator = (numerator_accumulator * numerator) // (denominator * i)\n            i += 1\n        return output // denominator\n\n    @classmethod\n    def calc_excess_blob_gas(cls, parent: BlockHeaderBlobGasFields) -> int:\n        \"\"\"\n        Calculate the excess blob gas for a block given the excess blob gas\n        and blob gas used from the parent block header.\n        \"\"\"\n        if parent.excess_blob_gas + parent.blob_gas_used < cls.TARGET_BLOB_GAS_PER_BLOCK:\n            return 0\n        else:\n            return parent.excess_blob_gas + parent.blob_gas_used - cls.TARGET_BLOB_GAS_PER_BLOCK\n\n    @classmethod\n    def get_total_blob_gas(cls, tx: Transaction) -> int:\n        \"\"\"\n        Calculate the total blob gas for a transaction.\n        \"\"\"\n        if tx.blob_versioned_hashes is None:\n            return 0\n        return cls.GAS_PER_BLOB * len(tx.blob_versioned_hashes)\n\n    @classmethod\n    def get_blob_gasprice(cls, *, excess_blob_gas: int) -> int:\n        \"\"\"\n        Calculate the blob gas price from the excess.\n        \"\"\"\n        return cls.fake_exponential(\n            cls.MIN_BLOB_GASPRICE,\n            excess_blob_gas,\n            cls.BLOB_GASPRICE_UPDATE_FRACTION,\n        )\n
    "},{"location":"tests/cancun/eip4844_blobs/spec/#tests.cancun.eip4844_blobs.spec.SpecHelpers","title":"SpecHelpers dataclass","text":"

    Define parameters and helper functions that are tightly coupled to the 4844 spec but not strictly part of it.

    Source code in tests/cancun/eip4844_blobs/spec.py
    @dataclass(frozen=True)\nclass SpecHelpers:\n    \"\"\"\n    Define parameters and helper functions that are tightly coupled to the 4844\n    spec but not strictly part of it.\n    \"\"\"\n\n    BYTES_PER_FIELD_ELEMENT = 32\n\n    @classmethod\n    def max_blobs_per_block(cls) -> int:  # MAX_BLOBS_PER_BLOCK =\n        \"\"\"\n        Returns the maximum number of blobs per block.\n        \"\"\"\n        return Spec.MAX_BLOB_GAS_PER_BLOCK // Spec.GAS_PER_BLOB\n\n    @classmethod\n    def target_blobs_per_block(cls) -> int:\n        \"\"\"\n        Returns the target number of blobs per block.\n        \"\"\"\n        return Spec.TARGET_BLOB_GAS_PER_BLOCK // Spec.GAS_PER_BLOB\n\n    @classmethod\n    def calc_excess_blob_gas_from_blob_count(\n        cls, parent_excess_blob_gas: int, parent_blob_count: int\n    ) -> int:\n        \"\"\"\n        Calculate the excess blob gas for a block given the parent excess blob gas\n        and the number of blobs in the block.\n        \"\"\"\n        parent_consumed_blob_gas = parent_blob_count * Spec.GAS_PER_BLOB\n        return Spec.calc_excess_blob_gas(\n            BlockHeaderBlobGasFields(parent_excess_blob_gas, parent_consumed_blob_gas)\n        )\n\n    @classmethod\n    def get_min_excess_blob_gas_for_blob_gas_price(cls, blob_gas_price: int) -> int:\n        \"\"\"\n        Gets the minimum required excess blob gas value to get a given blob gas cost in a block\n        \"\"\"\n        current_excess_blob_gas = 0\n        current_blob_gas_price = 1\n        while current_blob_gas_price < blob_gas_price:\n            current_excess_blob_gas += Spec.GAS_PER_BLOB\n            current_blob_gas_price = Spec.get_blob_gasprice(\n                excess_blob_gas=current_excess_blob_gas\n            )\n        return current_excess_blob_gas\n\n    @classmethod\n    def get_min_excess_blobs_for_blob_gas_price(cls, blob_gas_price: int) -> int:\n        \"\"\"\n        Gets the minimum required excess blobs to get a given blob gas cost in a block\n        \"\"\"\n        return cls.get_min_excess_blob_gas_for_blob_gas_price(blob_gas_price) // Spec.GAS_PER_BLOB\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/","title":"Test Blob Txs","text":"

    Documentation for tests/cancun/eip4844_blobs/test_blob_txs.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_blob_txs.py\n
    Tests blob type transactions for EIP-4844: Shard Blob Transactions

    Test blob type transactions for EIP-4844: Shard Blob Transactions.

    Adding a new test

    Add a function that is named test_<test_name> and takes at least the following arguments:

    • blockchain_test or state_test
    • pre
    • env
    • block or txs

    All other pytest.fixture fixtures can be parametrized to generate new combinations and test cases.

    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_valid_blob_tx_combinations","title":"test_valid_blob_tx_combinations(blockchain_test, pre, env, block)","text":"

    Test all valid blob combinations in a single block, assuming a given value of MAX_BLOBS_PER_BLOCK.

    This assumes a block can include from 1 and up to MAX_BLOBS_PER_BLOCK transactions where all transactions contain at least 1 blob, and the sum of all blobs in a block is at most MAX_BLOBS_PER_BLOCK.

    This test is parametrized with all valid blob transaction combinations for a given block, and therefore if value of MAX_BLOBS_PER_BLOCK changes, this test is automatically updated.

    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"blobs_per_tx\",\n    all_valid_blob_combinations(),\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_valid_blob_tx_combinations(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    env: Environment,\n    block: Block,\n):\n    \"\"\"\n    Test all valid blob combinations in a single block, assuming a given value of\n    `MAX_BLOBS_PER_BLOCK`.\n\n    This assumes a block can include from 1 and up to `MAX_BLOBS_PER_BLOCK` transactions where all\n    transactions contain at least 1 blob, and the sum of all blobs in a block is at\n    most `MAX_BLOBS_PER_BLOCK`.\n\n    This test is parametrized with all valid blob transaction combinations for a given block, and\n    therefore if value of `MAX_BLOBS_PER_BLOCK` changes, this test is automatically updated.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=[block],\n        genesis_environment=env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_invalid_tx_max_fee_per_blob_gas","title":"test_invalid_tx_max_fee_per_blob_gas(blockchain_test, pre, env, block, non_zero_blob_gas_used_genesis_block)","text":"

    Reject blocks with invalid blob txs due to:

    • tx max_fee_per_blob_gas is barely not enough
    • tx max_fee_per_blob_gas is zero
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"parent_excess_blobs,parent_blobs,tx_max_fee_per_blob_gas,tx_error\",\n    [\n        # tx max_blob_gas_cost of the transaction is not enough\n        pytest.param(\n            SpecHelpers.get_min_excess_blobs_for_blob_gas_price(2) - 1,  # blob gas price is 1\n            SpecHelpers.target_blobs_per_block() + 1,  # blob gas cost increases to 2\n            1,  # tx max_blob_gas_cost is 1\n            TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS,\n            id=\"insufficient_max_fee_per_blob_gas\",\n        ),\n        # tx max_blob_gas_cost of the transaction is zero, which is invalid\n        pytest.param(\n            0,  # blob gas price is 1\n            0,  # blob gas cost stays put at 1\n            0,  # tx max_blob_gas_cost is 0\n            TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS,\n            id=\"invalid_max_fee_per_blob_gas\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\n    \"account_balance_modifier\",\n    [1_000_000_000],\n)  # Extra balance to cover block blob gas cost\n@pytest.mark.valid_from(\"Cancun\")\ndef test_invalid_tx_max_fee_per_blob_gas(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    env: Environment,\n    block: Block,\n    non_zero_blob_gas_used_genesis_block: Optional[Block],\n):\n    \"\"\"\n    Reject blocks with invalid blob txs due to:\n\n    - tx max_fee_per_blob_gas is barely not enough\n    - tx max_fee_per_blob_gas is zero\n    \"\"\"\n    if non_zero_blob_gas_used_genesis_block is not None:\n        blocks = [non_zero_blob_gas_used_genesis_block, block]\n    else:\n        blocks = [block]\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_invalid_tx_max_fee_per_blob_gas_state","title":"test_invalid_tx_max_fee_per_blob_gas_state(state_test_only, state_env, pre, txs)","text":"

    Reject an invalid blob transaction due to:

    • tx max_fee_per_blob_gas is barely not enough
    • tx max_fee_per_blob_gas is zero
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"parent_excess_blobs,parent_blobs,tx_max_fee_per_blob_gas,tx_error\",\n    [\n        # tx max_blob_gas_cost of the transaction is not enough\n        pytest.param(\n            SpecHelpers.get_min_excess_blobs_for_blob_gas_price(2) - 1,  # blob gas price is 1\n            SpecHelpers.target_blobs_per_block() + 1,  # blob gas cost increases to 2\n            1,  # tx max_blob_gas_cost is 1\n            TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS,\n            id=\"insufficient_max_fee_per_blob_gas\",\n        ),\n        # tx max_blob_gas_cost of the transaction is zero, which is invalid\n        pytest.param(\n            0,  # blob gas price is 1\n            0,  # blob gas cost stays put at 1\n            0,  # tx max_blob_gas_cost is 0\n            TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS,\n            id=\"invalid_max_fee_per_blob_gas\",\n        ),\n    ],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_invalid_tx_max_fee_per_blob_gas_state(\n    state_test_only: StateTestFiller,\n    state_env: Environment,\n    pre: Alloc,\n    txs: List[Transaction],\n):\n    \"\"\"\n    Reject an invalid blob transaction due to:\n\n    - tx max_fee_per_blob_gas is barely not enough\n    - tx max_fee_per_blob_gas is zero\n    \"\"\"\n    assert len(txs) == 1\n    state_test_only(\n        pre=pre,\n        post={},\n        tx=txs[0],\n        env=state_env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_invalid_normal_gas","title":"test_invalid_normal_gas(state_test, state_env, pre, txs, header_verify, rlp_modifier)","text":"

    Reject an invalid blob transaction due to:

    • Sufficient max fee per blob gas, but insufficient max fee per gas
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"tx_max_fee_per_gas,tx_error\",\n    [\n        # max blob gas is ok, but max fee per gas is less than base fee per gas\n        (\n            6,\n            TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS,\n        ),\n    ],\n    ids=[\"insufficient_max_fee_per_gas\"],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_invalid_normal_gas(\n    state_test: StateTestFiller,\n    state_env: Environment,\n    pre: Alloc,\n    txs: List[Transaction],\n    header_verify: Optional[Header],\n    rlp_modifier: Optional[Header],\n):\n    \"\"\"\n    Reject an invalid blob transaction due to:\n\n    - Sufficient max fee per blob gas, but insufficient max fee per gas\n    \"\"\"\n    assert len(txs) == 1\n    state_test(\n        pre=pre,\n        post={},\n        tx=txs[0],\n        env=state_env,\n        blockchain_test_header_verify=header_verify,\n        blockchain_test_rlp_modifier=rlp_modifier,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_invalid_block_blob_count","title":"test_invalid_block_blob_count(blockchain_test, pre, env, block)","text":"

    Test all invalid blob combinations in a single block, where the sum of all blobs in a block is at MAX_BLOBS_PER_BLOCK + 1.

    This test is parametrized with all blob transaction combinations exceeding MAX_BLOBS_PER_BLOCK by one for a given block, and therefore if value of MAX_BLOBS_PER_BLOCK changes, this test is automatically updated.

    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"blobs_per_tx\",\n    invalid_blob_combinations(),\n)\n@pytest.mark.parametrize(\n    \"tx_error\", [TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED], ids=[\"\"]\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_invalid_block_blob_count(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    env: Environment,\n    block: Block,\n):\n    \"\"\"\n    Test all invalid blob combinations in a single block, where the sum of all blobs in a block is\n    at `MAX_BLOBS_PER_BLOCK + 1`.\n\n    This test is parametrized with all blob transaction combinations exceeding\n    `MAX_BLOBS_PER_BLOCK` by one for a given block, and\n    therefore if value of `MAX_BLOBS_PER_BLOCK` changes, this test is automatically updated.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=[block],\n        genesis_environment=env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_insufficient_balance_blob_tx","title":"test_insufficient_balance_blob_tx(state_test, state_env, pre, txs)","text":"

    Reject blocks where user cannot afford the blob gas specified (but max_fee_per_gas would be enough for current block), including:

    • Transactions with max fee equal or higher than current block base fee
    • Transactions with and without priority fee
    • Transactions with and without value
    • Transactions with and without calldata
    • Transactions with max fee per blob gas lower or higher than the priority fee
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"tx_access_list\",\n    [[], [AccessList(address=100, storage_keys=[100, 200])]],\n    ids=[\"no_access_list\", \"access_list\"],\n)\n@pytest.mark.parametrize(\"tx_max_fee_per_gas\", [7, 14])\n@pytest.mark.parametrize(\"tx_max_priority_fee_per_gas\", [0, 7])\n@pytest.mark.parametrize(\"tx_value\", [0, 1])\n@pytest.mark.parametrize(\n    \"tx_calldata\",\n    [b\"\", b\"\\x00\", b\"\\x01\"],\n    ids=[\"no_calldata\", \"single_zero_calldata\", \"single_one_calldata\"],\n)\n@pytest.mark.parametrize(\"tx_max_fee_per_blob_gas\", [1, 100, 10000])\n@pytest.mark.parametrize(\"account_balance_modifier\", [-1], ids=[\"exact_balance_minus_1\"])\n@pytest.mark.parametrize(\"tx_error\", [TransactionException.INSUFFICIENT_ACCOUNT_FUNDS], ids=[\"\"])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_insufficient_balance_blob_tx(\n    state_test: StateTestFiller,\n    state_env: Environment,\n    pre: Alloc,\n    txs: List[Transaction],\n):\n    \"\"\"\n    Reject blocks where user cannot afford the blob gas specified (but\n    max_fee_per_gas would be enough for current block), including:\n\n    - Transactions with max fee equal or higher than current block base fee\n    - Transactions with and without priority fee\n    - Transactions with and without value\n    - Transactions with and without calldata\n    - Transactions with max fee per blob gas lower or higher than the priority fee\n    \"\"\"\n    assert len(txs) == 1\n    state_test(\n        pre=pre,\n        post={},\n        tx=txs[0],\n        env=state_env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_sufficient_balance_blob_tx","title":"test_sufficient_balance_blob_tx(state_test, state_env, pre, txs)","text":"

    Check that transaction is accepted when user can exactly afford the blob gas specified (and max_fee_per_gas would be enough for current block), including:

    • Transactions with max fee equal or higher than current block base fee
    • Transactions with and without priority fee
    • Transactions with and without value
    • Transactions with and without calldata
    • Transactions with max fee per blob gas lower or higher than the priority fee
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"tx_access_list\",\n    [[], [AccessList(address=100, storage_keys=[100, 200])]],\n    ids=[\"no_access_list\", \"access_list\"],\n)\n@pytest.mark.parametrize(\"tx_max_fee_per_gas\", [7, 14])\n@pytest.mark.parametrize(\"tx_max_priority_fee_per_gas\", [0, 7])\n@pytest.mark.parametrize(\"tx_value\", [0, 1])\n@pytest.mark.parametrize(\n    \"tx_calldata\",\n    [b\"\", b\"\\x00\", b\"\\x01\"],\n    ids=[\"no_calldata\", \"single_zero_calldata\", \"single_one_calldata\"],\n)\n@pytest.mark.parametrize(\"tx_max_fee_per_blob_gas\", [1, 100, 10000])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_sufficient_balance_blob_tx(\n    state_test: StateTestFiller,\n    state_env: Environment,\n    pre: Alloc,\n    txs: List[Transaction],\n):\n    \"\"\"\n    Check that transaction is accepted when user can exactly afford the blob gas specified (and\n    max_fee_per_gas would be enough for current block), including:\n\n    - Transactions with max fee equal or higher than current block base fee\n    - Transactions with and without priority fee\n    - Transactions with and without value\n    - Transactions with and without calldata\n    - Transactions with max fee per blob gas lower or higher than the priority fee\n    \"\"\"\n    assert len(txs) == 1\n    state_test(\n        pre=pre,\n        post={},\n        tx=txs[0],\n        env=state_env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_sufficient_balance_blob_tx_pre_fund_tx","title":"test_sufficient_balance_blob_tx_pre_fund_tx(blockchain_test, total_account_minimum_balance, sender, env, pre, txs, header_verify)","text":"

    Check that transaction is accepted when user can exactly afford the blob gas specified (and max_fee_per_gas would be enough for current block) because a funding transaction is prepended in the same block, including:

    • Transactions with max fee equal or higher than current block base fee
    • Transactions with and without priority fee
    • Transactions with and without value
    • Transactions with and without calldata
    • Transactions with max fee per blob gas lower or higher than the priority fee
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"tx_access_list\",\n    [[], [AccessList(address=100, storage_keys=[100, 200])]],\n    ids=[\"no_access_list\", \"access_list\"],\n)\n@pytest.mark.parametrize(\"tx_max_fee_per_gas\", [7, 14])\n@pytest.mark.parametrize(\"tx_max_priority_fee_per_gas\", [0, 7])\n@pytest.mark.parametrize(\"tx_value\", [0, 1])\n@pytest.mark.parametrize(\n    \"tx_calldata\",\n    [b\"\", b\"\\x00\", b\"\\x01\"],\n    ids=[\"no_calldata\", \"single_zero_calldata\", \"single_one_calldata\"],\n)\n@pytest.mark.parametrize(\"tx_max_fee_per_blob_gas\", [1, 100, 10000])\n@pytest.mark.parametrize(\"sender_initial_balance\", [0])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_sufficient_balance_blob_tx_pre_fund_tx(\n    blockchain_test: BlockchainTestFiller,\n    total_account_minimum_balance: int,\n    sender: EOA,\n    env: Environment,\n    pre: Alloc,\n    txs: List[Transaction],\n    header_verify: Optional[Header],\n):\n    \"\"\"\n    Check that transaction is accepted when user can exactly afford the blob gas specified (and\n    max_fee_per_gas would be enough for current block) because a funding transaction is\n    prepended in the same block, including:\n\n    - Transactions with max fee equal or higher than current block base fee\n    - Transactions with and without priority fee\n    - Transactions with and without value\n    - Transactions with and without calldata\n    - Transactions with max fee per blob gas lower or higher than the priority fee\n    \"\"\"\n    pre_funding_sender = pre.fund_eoa(amount=(21_000 * 100) + total_account_minimum_balance)\n    txs = [\n        Transaction(\n            sender=pre_funding_sender,\n            to=sender,\n            value=total_account_minimum_balance,\n            gas_limit=21_000,\n        )\n    ] + txs\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=[\n            Block(\n                txs=txs,\n                header_verify=header_verify,\n            )\n        ],\n        genesis_environment=env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_blob_gas_subtraction_tx","title":"test_blob_gas_subtraction_tx(state_test, state_env, pre, sender_initial_balance, txs, destination_account, destination_account_balance, total_account_transactions_fee)","text":"

    Check that the blob gas fee for a transaction is subtracted from the sender balance before the transaction is executed, including:

    • Transactions with max fee equal or higher than current block base fee
    • Transactions with and without value
    • Transactions with and without calldata
    • Transactions with max fee per blob gas lower or higher than the priority fee
    • Transactions where an externally owned account sends funds to the sender mid execution
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"tx_access_list\",\n    [[], [AccessList(address=100, storage_keys=[100, 200])]],\n    ids=[\"no_access_list\", \"access_list\"],\n)\n@pytest.mark.parametrize(\"tx_max_fee_per_gas\", [7, 14])\n@pytest.mark.parametrize(\"tx_max_priority_fee_per_gas\", [0, 7])\n@pytest.mark.parametrize(\"tx_value\", [0, 1])\n@pytest.mark.parametrize(\n    \"tx_calldata\",\n    [b\"\", b\"\\x01\"],\n    ids=[\"no_calldata\", \"single_non_zero_byte_calldata\"],\n)\n@pytest.mark.parametrize(\"tx_max_fee_per_blob_gas\", [1, 100])\n@pytest.mark.parametrize(\n    \"tx_gas\", [500_000], ids=[\"\"]\n)  # Increase gas to account for contract code\n@pytest.mark.parametrize(\n    \"destination_account_balance\", [100], ids=[\"100_wei_mid_execution\"]\n)  # Amount sent by the contract to the sender mid execution\n@pytest.mark.parametrize(\n    \"destination_account_code\",\n    [\n        Op.SSTORE(0, Op.BALANCE(Op.ORIGIN))\n        + Op.CALL(Op.GAS, Op.ORIGIN, Op.SUB(Op.SELFBALANCE, Op.CALLVALUE), 0, 0, 0, 0)\n        + Op.SSTORE(1, Op.BALANCE(Op.ORIGIN))\n    ],\n    ids=[\"\"],\n)  # Amount sent by the contract to the sender mid execution\n@pytest.mark.valid_from(\"Cancun\")\ndef test_blob_gas_subtraction_tx(\n    state_test: StateTestFiller,\n    state_env: Environment,\n    pre: Alloc,\n    sender_initial_balance: int,\n    txs: List[Transaction],\n    destination_account: Address,\n    destination_account_balance: int,\n    total_account_transactions_fee: int,\n):\n    \"\"\"\n    Check that the blob gas fee for a transaction is subtracted from the sender balance before the\n    transaction is executed, including:\n\n    - Transactions with max fee equal or higher than current block base fee\n    - Transactions with and without value\n    - Transactions with and without calldata\n    - Transactions with max fee per blob gas lower or higher than the priority fee\n    - Transactions where an externally owned account sends funds to the sender mid execution\n    \"\"\"\n    assert len(txs) == 1\n    post = {\n        destination_account: Account(\n            storage={\n                0: sender_initial_balance - total_account_transactions_fee,\n                1: sender_initial_balance\n                - total_account_transactions_fee\n                + destination_account_balance,\n            }\n        )\n    }\n    state_test(\n        pre=pre,\n        post=post,\n        tx=txs[0],\n        env=state_env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_insufficient_balance_blob_tx_combinations","title":"test_insufficient_balance_blob_tx_combinations(blockchain_test, pre, env, block)","text":"

    Reject all valid blob transaction combinations in a block, but block is invalid due to:

    • The amount of blobs is correct but the user cannot afford the transaction total cost
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"blobs_per_tx\",\n    all_valid_blob_combinations(),\n)\n@pytest.mark.parametrize(\"account_balance_modifier\", [-1], ids=[\"exact_balance_minus_1\"])\n@pytest.mark.parametrize(\"tx_error\", [TransactionException.INSUFFICIENT_ACCOUNT_FUNDS], ids=[\"\"])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_insufficient_balance_blob_tx_combinations(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    env: Environment,\n    block: Block,\n):\n    \"\"\"\n    Reject all valid blob transaction combinations in a block, but block is invalid due to:\n\n    - The amount of blobs is correct but the user cannot afford the\n            transaction total cost\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=[block],\n        genesis_environment=env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_invalid_tx_blob_count","title":"test_invalid_tx_blob_count(state_test, state_env, pre, txs, header_verify, rlp_modifier)","text":"

    Reject blocks that include blob transactions with invalid blob counts:

    • blob count == 0 in type 3 transaction
    • blob count > MAX_BLOBS_PER_BLOCK in type 3 transaction
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"blobs_per_tx,tx_error\",\n    [\n        ([0], TransactionException.TYPE_3_TX_ZERO_BLOBS),\n        (\n            [SpecHelpers.max_blobs_per_block() + 1],\n            TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED,\n        ),\n    ],\n    ids=[\"too_few_blobs\", \"too_many_blobs\"],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_invalid_tx_blob_count(\n    state_test: StateTestFiller,\n    state_env: Environment,\n    pre: Alloc,\n    txs: List[Transaction],\n    header_verify: Optional[Header],\n    rlp_modifier: Optional[Header],\n):\n    \"\"\"\n    Reject blocks that include blob transactions with invalid blob counts:\n\n    - `blob count == 0` in type 3 transaction\n    - `blob count > MAX_BLOBS_PER_BLOCK` in type 3 transaction\n    \"\"\"\n    assert len(txs) == 1\n    state_test(\n        pre=pre,\n        post={},\n        tx=txs[0],\n        env=state_env,\n        blockchain_test_header_verify=header_verify,\n        blockchain_test_rlp_modifier=rlp_modifier,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_invalid_blob_hash_versioning_single_tx","title":"test_invalid_blob_hash_versioning_single_tx(state_test, state_env, pre, txs, header_verify, rlp_modifier)","text":"

    Reject blob transactions with invalid blob hash version, including:

    • Transaction with single blob with invalid version
    • Transaction with multiple blobs all with invalid version
    • Transaction with multiple blobs either with invalid version
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"blob_hashes_per_tx\",\n    [\n        [[Hash(1)]],\n        [[Hash(x) for x in range(2)]],\n        [add_kzg_version([Hash(1)], Spec.BLOB_COMMITMENT_VERSION_KZG) + [Hash(2)]],\n        [[Hash(1)] + add_kzg_version([Hash(2)], Spec.BLOB_COMMITMENT_VERSION_KZG)],\n    ],\n    ids=[\n        \"single_blob\",\n        \"multiple_blobs\",\n        \"multiple_blobs_single_bad_hash_1\",\n        \"multiple_blobs_single_bad_hash_2\",\n    ],\n)\n@pytest.mark.parametrize(\n    \"tx_error\", [TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH], ids=[\"\"]\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_invalid_blob_hash_versioning_single_tx(\n    state_test: StateTestFiller,\n    state_env: Environment,\n    pre: Alloc,\n    txs: List[Transaction],\n    header_verify: Optional[Header],\n    rlp_modifier: Optional[Header],\n):\n    \"\"\"\n    Reject blob transactions with invalid blob hash version, including:\n\n    - Transaction with single blob with invalid version\n    - Transaction with multiple blobs all with invalid version\n    - Transaction with multiple blobs either with invalid version\n    \"\"\"\n    assert len(txs) == 1\n    state_test(\n        pre=pre,\n        post={},\n        tx=txs[0],\n        env=state_env,\n        blockchain_test_header_verify=header_verify,\n        blockchain_test_rlp_modifier=rlp_modifier,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_invalid_blob_hash_versioning_multiple_txs","title":"test_invalid_blob_hash_versioning_multiple_txs(blockchain_test, pre, env, block)","text":"

    Reject blocks that include blob transactions with invalid blob hash version, including:

    • Multiple blob transactions with single blob all with invalid version
    • Multiple blob transactions with multiple blobs all with invalid version
    • Multiple blob transactions with multiple blobs only one with invalid version
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"blob_hashes_per_tx\",\n    [\n        [\n            add_kzg_version([Hash(1)], Spec.BLOB_COMMITMENT_VERSION_KZG),\n            [Hash(2)],\n        ],\n        [\n            add_kzg_version([Hash(1)], Spec.BLOB_COMMITMENT_VERSION_KZG),\n            [Hash(x) for x in range(1, 3)],\n        ],\n        [\n            add_kzg_version([Hash(1)], Spec.BLOB_COMMITMENT_VERSION_KZG),\n            [Hash(2)] + add_kzg_version([Hash(3)], Spec.BLOB_COMMITMENT_VERSION_KZG),\n        ],\n        [\n            add_kzg_version([Hash(1)], Spec.BLOB_COMMITMENT_VERSION_KZG),\n            add_kzg_version([Hash(2)], Spec.BLOB_COMMITMENT_VERSION_KZG),\n            [Hash(3)],\n        ],\n    ],\n    ids=[\n        \"single_blob\",\n        \"multiple_blobs\",\n        \"multiple_blobs_single_bad_hash_1\",\n        \"multiple_blobs_single_bad_hash_2\",\n    ],\n)\n@pytest.mark.parametrize(\n    \"tx_error\", [TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH], ids=[\"\"]\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_invalid_blob_hash_versioning_multiple_txs(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    env: Environment,\n    block: Block,\n):\n    \"\"\"\n    Reject blocks that include blob transactions with invalid blob hash\n    version, including:\n\n    - Multiple blob transactions with single blob all with invalid version\n    - Multiple blob transactions with multiple blobs all with invalid version\n    - Multiple blob transactions with multiple blobs only one with invalid version\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=[block],\n        genesis_environment=env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_invalid_blob_tx_contract_creation","title":"test_invalid_blob_tx_contract_creation(blockchain_test, pre, env, txs, header_verify)","text":"

    Reject blocks that include blob transactions that have nil to value (contract creating).

    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"tx_gas\", [500_000], ids=[\"\"]\n)  # Increase gas to account for contract creation\n@pytest.mark.valid_from(\"Cancun\")\ndef test_invalid_blob_tx_contract_creation(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    env: Environment,\n    txs: List[Transaction],\n    header_verify: Optional[Header],\n):\n    \"\"\"\n    Reject blocks that include blob transactions that have nil to value (contract creating).\n    \"\"\"\n    assert len(txs) == 1\n    assert txs[0].blob_versioned_hashes is not None and len(txs[0].blob_versioned_hashes) == 1\n    # Replace the transaction with a contract creating one, only in the RLP version\n    contract_creating_tx = txs[0].copy(to=None).with_signature_and_sender()\n    txs[0].rlp_override = contract_creating_tx.rlp\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=[\n            Block(\n                txs=txs,\n                exception=[\n                    BlockException.RLP_STRUCTURES_ENCODING,\n                    TransactionException.TYPE_3_TX_CONTRACT_CREATION,\n                ],\n                header_verify=header_verify,\n            )\n        ],\n        genesis_environment=env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_blob_tx_attribute_opcodes","title":"test_blob_tx_attribute_opcodes(state_test, pre, sender, tx_value, tx_gas, tx_calldata, tx_max_fee_per_gas, tx_max_fee_per_blob_gas, tx_max_priority_fee_per_gas, tx_access_list, blob_hashes_per_tx, opcode, state_env)","text":"

    Test opcodes that read transaction attributes work properly for blob type transactions:

    • ORIGIN
    • CALLER
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [Op.ORIGIN, Op.CALLER],\n    indirect=[\"opcode\"],\n)\n@pytest.mark.parametrize(\"tx_gas\", [500_000])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_blob_tx_attribute_opcodes(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    tx_value: int,\n    tx_gas: int,\n    tx_calldata: bytes,\n    tx_max_fee_per_gas: int,\n    tx_max_fee_per_blob_gas: int,\n    tx_max_priority_fee_per_gas: int,\n    tx_access_list: List[AccessList],\n    blob_hashes_per_tx: List[List[bytes]],\n    opcode: Tuple[Bytecode, Storage.StorageDictType],\n    state_env: Environment,\n):\n    \"\"\"\n    Test opcodes that read transaction attributes work properly for blob type transactions:\n\n    - ORIGIN\n    - CALLER\n    \"\"\"\n    code, storage = opcode\n    destination_account = pre.deploy_contract(code=code)\n    tx = Transaction(\n        ty=Spec.BLOB_TX_TYPE,\n        sender=sender,\n        to=destination_account,\n        value=tx_value,\n        gas_limit=tx_gas,\n        data=tx_calldata,\n        max_fee_per_gas=tx_max_fee_per_gas,\n        max_priority_fee_per_gas=tx_max_priority_fee_per_gas,\n        max_fee_per_blob_gas=tx_max_fee_per_blob_gas,\n        access_list=tx_access_list,\n        blob_versioned_hashes=blob_hashes_per_tx[0],\n    )\n    post = {\n        destination_account: Account(\n            storage=storage,\n        )\n    }\n    state_test(\n        pre=pre,\n        post=post,\n        tx=tx,\n        env=state_env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_blob_tx_attribute_value_opcode","title":"test_blob_tx_attribute_value_opcode(state_test, pre, sender, tx_value, tx_gas, tx_calldata, tx_max_fee_per_gas, tx_max_fee_per_blob_gas, tx_max_priority_fee_per_gas, tx_access_list, blob_hashes_per_tx, opcode, state_env)","text":"

    Test the VALUE opcode with different blob type transaction value amounts.

    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\"opcode\", [Op.CALLVALUE], indirect=[\"opcode\"])\n@pytest.mark.parametrize(\"tx_value\", [0, 1, int(1e18)])\n@pytest.mark.parametrize(\"tx_gas\", [500_000])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_blob_tx_attribute_value_opcode(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    tx_value: int,\n    tx_gas: int,\n    tx_calldata: bytes,\n    tx_max_fee_per_gas: int,\n    tx_max_fee_per_blob_gas: int,\n    tx_max_priority_fee_per_gas: int,\n    tx_access_list: List[AccessList],\n    blob_hashes_per_tx: List[List[bytes]],\n    opcode: Tuple[Bytecode, Storage.StorageDictType],\n    state_env: Environment,\n):\n    \"\"\"\n    Test the VALUE opcode with different blob type transaction value amounts.\n    \"\"\"\n    code, storage = opcode\n    destination_account = pre.deploy_contract(code=code)\n    tx = Transaction(\n        ty=Spec.BLOB_TX_TYPE,\n        sender=sender,\n        to=destination_account,\n        value=tx_value,\n        gas_limit=tx_gas,\n        data=tx_calldata,\n        max_fee_per_gas=tx_max_fee_per_gas,\n        max_priority_fee_per_gas=tx_max_priority_fee_per_gas,\n        max_fee_per_blob_gas=tx_max_fee_per_blob_gas,\n        access_list=tx_access_list,\n        blob_versioned_hashes=blob_hashes_per_tx[0],\n    )\n    post = {\n        destination_account: Account(\n            storage=storage,\n            balance=tx_value,\n        )\n    }\n    state_test(\n        pre=pre,\n        post=post,\n        tx=tx,\n        env=state_env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_blob_tx_attribute_calldata_opcodes","title":"test_blob_tx_attribute_calldata_opcodes(state_test, pre, sender, tx_value, tx_gas, tx_calldata, tx_max_fee_per_gas, tx_max_fee_per_blob_gas, tx_max_priority_fee_per_gas, tx_access_list, blob_hashes_per_tx, opcode, state_env)","text":"

    Test calldata related opcodes to verify their behavior is not affected by blobs:

    • CALLDATALOAD
    • CALLDATASIZE
    • CALLDATACOPY
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.CALLDATALOAD,\n        Op.CALLDATASIZE,\n        Op.CALLDATACOPY,\n    ],\n    indirect=True,\n)\n@pytest.mark.parametrize(\n    \"tx_calldata\",\n    [\n        b\"\",\n        b\"\\x01\",\n        b\"\\x00\\x01\" * 16,\n    ],\n    ids=[\"empty\", \"single_byte\", \"word\"],\n)\n@pytest.mark.parametrize(\"tx_gas\", [500_000])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_blob_tx_attribute_calldata_opcodes(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    tx_value: int,\n    tx_gas: int,\n    tx_calldata: bytes,\n    tx_max_fee_per_gas: int,\n    tx_max_fee_per_blob_gas: int,\n    tx_max_priority_fee_per_gas: int,\n    tx_access_list: List[AccessList],\n    blob_hashes_per_tx: List[List[bytes]],\n    opcode: Tuple[Bytecode, Storage.StorageDictType],\n    state_env: Environment,\n):\n    \"\"\"\n    Test calldata related opcodes to verify their behavior is not affected by blobs:\n\n    - CALLDATALOAD\n    - CALLDATASIZE\n    - CALLDATACOPY\n    \"\"\"\n    code, storage = opcode\n    destination_account = pre.deploy_contract(code=code)\n    tx = Transaction(\n        ty=Spec.BLOB_TX_TYPE,\n        sender=sender,\n        to=destination_account,\n        value=tx_value,\n        gas_limit=tx_gas,\n        data=tx_calldata,\n        max_fee_per_gas=tx_max_fee_per_gas,\n        max_priority_fee_per_gas=tx_max_priority_fee_per_gas,\n        max_fee_per_blob_gas=tx_max_fee_per_blob_gas,\n        access_list=tx_access_list,\n        blob_versioned_hashes=blob_hashes_per_tx[0],\n    )\n    post = {\n        destination_account: Account(\n            storage=storage,\n        )\n    }\n    state_test(\n        pre=pre,\n        post=post,\n        tx=tx,\n        env=state_env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_blob_tx_attribute_gasprice_opcode","title":"test_blob_tx_attribute_gasprice_opcode(state_test, pre, sender, tx_value, tx_gas, tx_calldata, tx_max_fee_per_gas, tx_max_fee_per_blob_gas, tx_max_priority_fee_per_gas, tx_access_list, blob_hashes_per_tx, opcode, state_env)","text":"

    Test GASPRICE opcode to sanity check that the blob gas fee does not affect its calculation:

    • No priority fee
    • Priority fee below data fee
    • Priority fee above data fee
    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\"tx_max_priority_fee_per_gas\", [0, 2])  # always below data fee\n@pytest.mark.parametrize(\"tx_max_fee_per_blob_gas\", [1, 3])  # normal and above priority fee\n@pytest.mark.parametrize(\"tx_max_fee_per_gas\", [100])  # always above priority fee\n@pytest.mark.parametrize(\"opcode\", [Op.GASPRICE], indirect=True)\n@pytest.mark.parametrize(\"tx_gas\", [500_000])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_blob_tx_attribute_gasprice_opcode(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    tx_value: int,\n    tx_gas: int,\n    tx_calldata: bytes,\n    tx_max_fee_per_gas: int,\n    tx_max_fee_per_blob_gas: int,\n    tx_max_priority_fee_per_gas: int,\n    tx_access_list: List[AccessList],\n    blob_hashes_per_tx: List[List[bytes]],\n    opcode: Tuple[Bytecode, Storage.StorageDictType],\n    state_env: Environment,\n):\n    \"\"\"\n    Test GASPRICE opcode to sanity check that the blob gas fee does not affect\n    its calculation:\n\n    - No priority fee\n    - Priority fee below data fee\n    - Priority fee above data fee\n    \"\"\"\n    code, storage = opcode\n    destination_account = pre.deploy_contract(code=code)\n    tx = Transaction(\n        ty=Spec.BLOB_TX_TYPE,\n        sender=sender,\n        to=destination_account,\n        value=tx_value,\n        gas_limit=tx_gas,\n        data=tx_calldata,\n        max_fee_per_gas=tx_max_fee_per_gas,\n        max_priority_fee_per_gas=tx_max_priority_fee_per_gas,\n        max_fee_per_blob_gas=tx_max_fee_per_blob_gas,\n        access_list=tx_access_list,\n        blob_versioned_hashes=blob_hashes_per_tx[0],\n    )\n    post = {\n        destination_account: Account(\n            storage=storage,\n        )\n    }\n    state_test(\n        pre=pre,\n        post=post,\n        tx=tx,\n        env=state_env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/#tests.cancun.eip4844_blobs.test_blob_txs.test_blob_type_tx_pre_fork","title":"test_blob_type_tx_pre_fork(state_test, pre, txs)","text":"

    Reject blocks with blob type transactions before Cancun fork.

    Blocks sent by NewPayloadV2 (Shanghai) that contain blob type transactions, furthermore blobs field within NewPayloadV2 method must be computed as INVALID, due to an invalid block hash.

    Source code in tests/cancun/eip4844_blobs/test_blob_txs.py
    @pytest.mark.parametrize(\n    [\n        \"blobs_per_tx\",\n        \"parent_excess_blobs\",\n        \"tx_max_fee_per_blob_gas\",\n        \"tx_error\",\n    ],\n    [\n        (\n            [0],\n            None,\n            1,\n            [TransactionException.TYPE_3_TX_PRE_FORK, TransactionException.TYPE_3_TX_ZERO_BLOBS],\n        ),\n        ([1], None, 1, TransactionException.TYPE_3_TX_PRE_FORK),\n    ],\n    ids=[\"no_blob_tx\", \"one_blob_tx\"],\n)\n@pytest.mark.valid_at_transition_to(\"Cancun\")\ndef test_blob_type_tx_pre_fork(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    txs: List[Transaction],\n):\n    \"\"\"\n    Reject blocks with blob type transactions before Cancun fork.\n\n    Blocks sent by NewPayloadV2 (Shanghai) that contain blob type transactions, furthermore blobs\n    field within NewPayloadV2 method must be computed as INVALID, due to an invalid block hash.\n    \"\"\"\n    assert len(txs) == 1\n    state_test(\n        pre=pre,\n        post={},\n        tx=txs[0],\n        env=Environment(),  # `env` fixture has blob fields\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs/index/test_cases/","title":"Test Blob Txs - Test Cases","text":"

    Test cases generated from tests/cancun/eip4844_blobs/test_blob_txs.py

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_blob_txs.py:

    test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 4)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 2, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 4)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 5)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 4)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(4,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(5,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(6,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 2, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(4, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 2, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3, 2, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(4, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(5, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(4, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1, 4)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 2, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 4)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1, 5)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2, 4)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(3, 3)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(1,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(3,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(4,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(5,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(6,)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(3, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2, 2, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(3, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(4, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2, 2, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(3, 2, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(2, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(3, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(4, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(5, 1)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(3, 2)]\ntest_valid_blob_tx_combinations[fork_Cancun-blockchain_test_engine-blobs_per_tx_(4, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 1, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1, 4)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 2, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 4)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1, 5)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2, 4)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(3, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(1,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(3,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(4,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(5,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(6,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(3, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2, 2, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(3, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(4, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2, 2, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(3, 2, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(2, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(3, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(4, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(5, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(3, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test-blobs_per_tx_(4, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 1, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1, 4)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 2, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2, 2, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 4)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1, 5)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2, 4)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(3, 3)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(1,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(3,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(4,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(5,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(6,)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2, 1, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(3, 1, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2, 2, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(3, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(4, 1, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2, 2, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(3, 2, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(2, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(3, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(4, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(5, 1)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(3, 2)]\ntest_valid_blob_tx_combinations[fork_Prague-blockchain_test_engine-blobs_per_tx_(4, 2)]\ntest_invalid_tx_max_fee_per_blob_gas[fork_Cancun-blockchain_test-account_balance_modifier_1000000000-insufficient_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas[fork_Cancun-blockchain_test-account_balance_modifier_1000000000-invalid_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas[fork_Cancun-blockchain_test_engine-account_balance_modifier_1000000000-insufficient_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas[fork_Cancun-blockchain_test_engine-account_balance_modifier_1000000000-invalid_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas[fork_Prague-blockchain_test-account_balance_modifier_1000000000-insufficient_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas[fork_Prague-blockchain_test-account_balance_modifier_1000000000-invalid_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas[fork_Prague-blockchain_test_engine-account_balance_modifier_1000000000-insufficient_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas[fork_Prague-blockchain_test_engine-account_balance_modifier_1000000000-invalid_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas_state[fork_Cancun-state_test-insufficient_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas_state[fork_Cancun-state_test-invalid_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas_state[fork_Prague-state_test-insufficient_max_fee_per_blob_gas]\ntest_invalid_tx_max_fee_per_blob_gas_state[fork_Prague-state_test-invalid_max_fee_per_blob_gas]\ntest_invalid_normal_gas[fork_Cancun-blockchain_test-insufficient_max_fee_per_gas]\ntest_invalid_normal_gas[fork_Cancun-blockchain_test_engine-insufficient_max_fee_per_gas]\ntest_invalid_normal_gas[fork_Cancun-state_test-insufficient_max_fee_per_gas]\ntest_invalid_normal_gas[fork_Prague-blockchain_test-insufficient_max_fee_per_gas]\ntest_invalid_normal_gas[fork_Prague-blockchain_test_engine-insufficient_max_fee_per_gas]\ntest_invalid_normal_gas[fork_Prague-state_test-insufficient_max_fee_per_gas]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 1, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 1, 1, 1, 2)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 1, 1, 3)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 1, 2, 2)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 1, 4)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 2, 3)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 2, 2, 2)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 5)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 2, 4)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 3, 3)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(2, 2, 3)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 6)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(2, 5)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(3, 4)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(7,)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(2, 1, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(3, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(2, 2, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(4, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(3, 2, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(2, 2, 2, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(5, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(4, 2, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(3, 3, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(3, 2, 2)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(6, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(5, 2)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(4, 3)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 1, 1, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 1, 1, 1, 1, 2)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 1, 1, 1, 3)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 1, 1, 2, 2)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 1, 1, 4)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 1, 2, 3)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 2, 2, 2)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 1, 5)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 2, 4)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 3, 3)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(2, 2, 3)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(1, 6)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(2, 5)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(3, 4)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(7,)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(2, 1, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(3, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(2, 2, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(4, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(3, 2, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(2, 2, 2, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(5, 1, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(4, 2, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(3, 3, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(3, 2, 2)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(6, 1)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(5, 2)]\ntest_invalid_block_blob_count[fork_Cancun-blockchain_test_engine--blobs_per_tx_(4, 3)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 1, 1, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 1, 1, 1, 1, 2)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 1, 1, 1, 3)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 1, 1, 2, 2)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 1, 1, 4)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 1, 2, 3)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 2, 2, 2)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 1, 5)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 2, 4)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 3, 3)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(2, 2, 3)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(1, 6)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(2, 5)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(3, 4)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(7,)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(2, 1, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(3, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(2, 2, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(4, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(3, 2, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(2, 2, 2, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(5, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(4, 2, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(3, 3, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(3, 2, 2)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(6, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(5, 2)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test--blobs_per_tx_(4, 3)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 1, 1, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 1, 1, 1, 1, 2)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 1, 1, 1, 3)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 1, 1, 2, 2)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 1, 1, 4)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 1, 2, 3)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 2, 2, 2)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 1, 5)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 2, 4)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 3, 3)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(2, 2, 3)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(1, 6)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(2, 5)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(3, 4)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(7,)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(2, 1, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(3, 1, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(2, 2, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(4, 1, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(3, 2, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(2, 2, 2, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(5, 1, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(4, 2, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(3, 3, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(3, 2, 2)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(6, 1)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(5, 2)]\ntest_invalid_block_blob_count[fork_Prague-blockchain_test_engine--blobs_per_tx_(4, 3)]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Cancun-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-blockchain_test_engine--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_insufficient_balance_blob_tx[fork_Prague-state_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Cancun-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-blockchain_test_engine-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx[fork_Prague-state_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_sufficient_balance_blob_tx_pre_fund_tx[fork_Prague-blockchain_test_engine-sender_initial_balance_0-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Cancun-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-blockchain_test_engine--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_1-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]\ntest_blob_gas_subtraction_tx[fork_Prague-state_test--100_wei_mid_execution--tx_max_fee_per_blob_gas_100-single_non_zero_byte_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 2, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 5)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(4,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(5,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(6,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 2, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(4, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(4, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(5, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(4, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 2, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 5)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(4,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(5,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(6,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 2, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(4, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(4, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(5, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(4, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 2, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 5)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(4,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(5,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(6,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 2, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(4, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(4, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(5, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test--exact_balance_minus_1-blobs_per_tx_(4, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 2, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1, 5)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 4)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 3)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(1,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(4,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(5,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(6,)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 1, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 1, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 2, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(4, 1, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(2, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(4, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(5, 1)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(3, 2)]\ntest_insufficient_balance_blob_tx_combinations[fork_Prague-blockchain_test_engine--exact_balance_minus_1-blobs_per_tx_(4, 2)]\ntest_invalid_tx_blob_count[fork_Cancun-blockchain_test-too_few_blobs]\ntest_invalid_tx_blob_count[fork_Cancun-blockchain_test-too_many_blobs]\ntest_invalid_tx_blob_count[fork_Cancun-blockchain_test_engine-too_few_blobs]\ntest_invalid_tx_blob_count[fork_Cancun-blockchain_test_engine-too_many_blobs]\ntest_invalid_tx_blob_count[fork_Cancun-state_test-too_few_blobs]\ntest_invalid_tx_blob_count[fork_Cancun-state_test-too_many_blobs]\ntest_invalid_tx_blob_count[fork_Prague-blockchain_test-too_few_blobs]\ntest_invalid_tx_blob_count[fork_Prague-blockchain_test-too_many_blobs]\ntest_invalid_tx_blob_count[fork_Prague-blockchain_test_engine-too_few_blobs]\ntest_invalid_tx_blob_count[fork_Prague-blockchain_test_engine-too_many_blobs]\ntest_invalid_tx_blob_count[fork_Prague-state_test-too_few_blobs]\ntest_invalid_tx_blob_count[fork_Prague-state_test-too_many_blobs]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-blockchain_test--single_blob]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-blockchain_test--multiple_blobs]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-blockchain_test--multiple_blobs_single_bad_hash_1]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-blockchain_test--multiple_blobs_single_bad_hash_2]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-blockchain_test_engine--single_blob]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-blockchain_test_engine--multiple_blobs]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-blockchain_test_engine--multiple_blobs_single_bad_hash_1]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-blockchain_test_engine--multiple_blobs_single_bad_hash_2]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-state_test--single_blob]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-state_test--multiple_blobs]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-state_test--multiple_blobs_single_bad_hash_1]\ntest_invalid_blob_hash_versioning_single_tx[fork_Cancun-state_test--multiple_blobs_single_bad_hash_2]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-blockchain_test--single_blob]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-blockchain_test--multiple_blobs]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-blockchain_test--multiple_blobs_single_bad_hash_1]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-blockchain_test--multiple_blobs_single_bad_hash_2]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-blockchain_test_engine--single_blob]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-blockchain_test_engine--multiple_blobs]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-blockchain_test_engine--multiple_blobs_single_bad_hash_1]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-blockchain_test_engine--multiple_blobs_single_bad_hash_2]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-state_test--single_blob]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-state_test--multiple_blobs]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-state_test--multiple_blobs_single_bad_hash_1]\ntest_invalid_blob_hash_versioning_single_tx[fork_Prague-state_test--multiple_blobs_single_bad_hash_2]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Cancun-blockchain_test--single_blob]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Cancun-blockchain_test--multiple_blobs]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Cancun-blockchain_test--multiple_blobs_single_bad_hash_1]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Cancun-blockchain_test--multiple_blobs_single_bad_hash_2]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Cancun-blockchain_test_engine--single_blob]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Cancun-blockchain_test_engine--multiple_blobs]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Cancun-blockchain_test_engine--multiple_blobs_single_bad_hash_1]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Cancun-blockchain_test_engine--multiple_blobs_single_bad_hash_2]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Prague-blockchain_test--single_blob]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Prague-blockchain_test--multiple_blobs]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Prague-blockchain_test--multiple_blobs_single_bad_hash_1]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Prague-blockchain_test--multiple_blobs_single_bad_hash_2]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Prague-blockchain_test_engine--single_blob]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Prague-blockchain_test_engine--multiple_blobs]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Prague-blockchain_test_engine--multiple_blobs_single_bad_hash_1]\ntest_invalid_blob_hash_versioning_multiple_txs[fork_Prague-blockchain_test_engine--multiple_blobs_single_bad_hash_2]\ntest_invalid_blob_tx_contract_creation[fork_Cancun-blockchain_test-]\ntest_invalid_blob_tx_contract_creation[fork_Cancun-blockchain_test_engine-]\ntest_invalid_blob_tx_contract_creation[fork_Prague-blockchain_test-]\ntest_invalid_blob_tx_contract_creation[fork_Prague-blockchain_test_engine-]\ntest_blob_tx_attribute_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-opcode_ORIGIN]\ntest_blob_tx_attribute_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-opcode_CALLER]\ntest_blob_tx_attribute_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-opcode_ORIGIN]\ntest_blob_tx_attribute_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-opcode_CALLER]\ntest_blob_tx_attribute_opcodes[fork_Cancun-state_test-tx_gas_500000-opcode_ORIGIN]\ntest_blob_tx_attribute_opcodes[fork_Cancun-state_test-tx_gas_500000-opcode_CALLER]\ntest_blob_tx_attribute_opcodes[fork_Prague-blockchain_test-tx_gas_500000-opcode_ORIGIN]\ntest_blob_tx_attribute_opcodes[fork_Prague-blockchain_test-tx_gas_500000-opcode_CALLER]\ntest_blob_tx_attribute_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-opcode_ORIGIN]\ntest_blob_tx_attribute_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-opcode_CALLER]\ntest_blob_tx_attribute_opcodes[fork_Prague-state_test-tx_gas_500000-opcode_ORIGIN]\ntest_blob_tx_attribute_opcodes[fork_Prague-state_test-tx_gas_500000-opcode_CALLER]\ntest_blob_tx_attribute_value_opcode[fork_Cancun-blockchain_test-tx_gas_500000-tx_value_0-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Cancun-blockchain_test-tx_gas_500000-tx_value_1-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Cancun-blockchain_test-tx_gas_500000-tx_value_1000000000000000000-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Cancun-blockchain_test_engine-tx_gas_500000-tx_value_0-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Cancun-blockchain_test_engine-tx_gas_500000-tx_value_1-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Cancun-blockchain_test_engine-tx_gas_500000-tx_value_1000000000000000000-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Cancun-state_test-tx_gas_500000-tx_value_0-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Cancun-state_test-tx_gas_500000-tx_value_1-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Cancun-state_test-tx_gas_500000-tx_value_1000000000000000000-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Prague-blockchain_test-tx_gas_500000-tx_value_0-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Prague-blockchain_test-tx_gas_500000-tx_value_1-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Prague-blockchain_test-tx_gas_500000-tx_value_1000000000000000000-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Prague-blockchain_test_engine-tx_gas_500000-tx_value_0-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Prague-blockchain_test_engine-tx_gas_500000-tx_value_1-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Prague-blockchain_test_engine-tx_gas_500000-tx_value_1000000000000000000-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Prague-state_test-tx_gas_500000-tx_value_0-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Prague-state_test-tx_gas_500000-tx_value_1-opcode_CALLVALUE]\ntest_blob_tx_attribute_value_opcode[fork_Prague-state_test-tx_gas_500000-tx_value_1000000000000000000-opcode_CALLVALUE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-empty-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-empty-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-empty-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-single_byte-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-single_byte-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-single_byte-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-word-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-word-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-word-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-empty-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-empty-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-empty-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-single_byte-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-single_byte-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-single_byte-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-word-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-word-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test_engine-tx_gas_500000-word-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-state_test-tx_gas_500000-empty-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-state_test-tx_gas_500000-empty-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-state_test-tx_gas_500000-empty-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-state_test-tx_gas_500000-single_byte-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-state_test-tx_gas_500000-single_byte-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-state_test-tx_gas_500000-single_byte-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-state_test-tx_gas_500000-word-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-state_test-tx_gas_500000-word-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Cancun-state_test-tx_gas_500000-word-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test-tx_gas_500000-empty-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test-tx_gas_500000-empty-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test-tx_gas_500000-empty-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test-tx_gas_500000-single_byte-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test-tx_gas_500000-single_byte-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test-tx_gas_500000-single_byte-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test-tx_gas_500000-word-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test-tx_gas_500000-word-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test-tx_gas_500000-word-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-empty-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-empty-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-empty-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-single_byte-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-single_byte-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-single_byte-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-word-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-word-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-blockchain_test_engine-tx_gas_500000-word-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-state_test-tx_gas_500000-empty-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-state_test-tx_gas_500000-empty-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-state_test-tx_gas_500000-empty-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-state_test-tx_gas_500000-single_byte-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-state_test-tx_gas_500000-single_byte-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-state_test-tx_gas_500000-single_byte-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-state_test-tx_gas_500000-word-opcode_CALLDATALOAD]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-state_test-tx_gas_500000-word-opcode_CALLDATASIZE]\ntest_blob_tx_attribute_calldata_opcodes[fork_Prague-state_test-tx_gas_500000-word-opcode_CALLDATACOPY]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-blockchain_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-blockchain_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-blockchain_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-blockchain_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-blockchain_test_engine-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-blockchain_test_engine-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-blockchain_test_engine-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-blockchain_test_engine-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-state_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-state_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-state_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Cancun-state_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-blockchain_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-blockchain_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-blockchain_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-blockchain_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-blockchain_test_engine-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-blockchain_test_engine-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-blockchain_test_engine-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-blockchain_test_engine-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-state_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-state_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_2]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-state_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_0]\ntest_blob_tx_attribute_gasprice_opcode[fork_Prague-state_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_2]\ntest_blob_type_tx_pre_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test-no_blob_tx]\ntest_blob_type_tx_pre_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test-one_blob_tx]\ntest_blob_type_tx_pre_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-no_blob_tx]\ntest_blob_type_tx_pre_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-one_blob_tx]\ntest_blob_type_tx_pre_fork[fork_ShanghaiToCancunAtTime15k-state_test-no_blob_tx]\ntest_blob_type_tx_pre_fork[fork_ShanghaiToCancunAtTime15k-state_test-one_blob_tx]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip4844_blobs/test_blob_txs.py\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs_full/","title":"Test Blob Txs Full","text":"

    Documentation for tests/cancun/eip4844_blobs/test_blob_txs_full.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_blob_txs_full.py\n
    Tests full blob type transactions for EIP-4844: Shard Blob Transactions

    Test full blob type transactions for EIP-4844: Shard Blob Transactions.

    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs_full/#tests.cancun.eip4844_blobs.test_blob_txs_full.test_reject_valid_full_blob_in_block_rlp","title":"test_reject_valid_full_blob_in_block_rlp(blockchain_test, pre, env, blocks)","text":"

    Test valid blob combinations where one or more txs in the block serialized version contain a full blob (network version) tx.

    Source code in tests/cancun/eip4844_blobs/test_blob_txs_full.py
    @pytest.mark.parametrize(\n    \"txs_blobs,txs_wrapped_blobs\",\n    [\n        (\n            [  # Txs\n                [  # Blobs per transaction\n                    Blob(\n                        blob=bytes(\n                            Spec.FIELD_ELEMENTS_PER_BLOB * SpecHelpers.BYTES_PER_FIELD_ELEMENT\n                        ),\n                        kzg_commitment=INF_POINT,\n                        kzg_proof=INF_POINT,\n                    ),\n                ]\n            ],\n            [True],\n        ),\n        (\n            [  # Txs\n                [  # Blobs per transaction\n                    Blob(\n                        blob=bytes(\n                            Spec.FIELD_ELEMENTS_PER_BLOB * SpecHelpers.BYTES_PER_FIELD_ELEMENT\n                        ),\n                        kzg_commitment=INF_POINT,\n                        kzg_proof=INF_POINT,\n                    )\n                ]\n                for _ in range(SpecHelpers.max_blobs_per_block())\n            ],\n            [True] + ([False] * (SpecHelpers.max_blobs_per_block() - 1)),\n        ),\n        (\n            [  # Txs\n                [  # Blobs per transaction\n                    Blob(\n                        blob=bytes(\n                            Spec.FIELD_ELEMENTS_PER_BLOB * SpecHelpers.BYTES_PER_FIELD_ELEMENT\n                        ),\n                        kzg_commitment=INF_POINT,\n                        kzg_proof=INF_POINT,\n                    )\n                ]\n                for _ in range(SpecHelpers.max_blobs_per_block())\n            ],\n            ([False] * (SpecHelpers.max_blobs_per_block() - 1)) + [True],\n        ),\n    ],\n    ids=[\n        \"one_full_blob_one_tx\",\n        \"one_full_blob_max_txs\",\n        \"one_full_blob_at_the_end_max_txs\",\n    ],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_reject_valid_full_blob_in_block_rlp(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    env: Environment,\n    blocks: List[Block],\n):\n    \"\"\"\n    Test valid blob combinations where one or more txs in the block\n    serialized version contain a full blob (network version) tx.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blob_txs_full/index/test_cases/","title":"Test Blob Txs Full - Test Cases","text":"

    Test cases generated from tests/cancun/eip4844_blobs/test_blob_txs_full.py

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_blob_txs_full.py:

    test_reject_valid_full_blob_in_block_rlp[fork_Cancun-blockchain_test-one_full_blob_one_tx]\ntest_reject_valid_full_blob_in_block_rlp[fork_Cancun-blockchain_test-one_full_blob_max_txs]\ntest_reject_valid_full_blob_in_block_rlp[fork_Cancun-blockchain_test-one_full_blob_at_the_end_max_txs]\ntest_reject_valid_full_blob_in_block_rlp[fork_Cancun-blockchain_test_engine-one_full_blob_one_tx]\ntest_reject_valid_full_blob_in_block_rlp[fork_Cancun-blockchain_test_engine-one_full_blob_max_txs]\ntest_reject_valid_full_blob_in_block_rlp[fork_Cancun-blockchain_test_engine-one_full_blob_at_the_end_max_txs]\ntest_reject_valid_full_blob_in_block_rlp[fork_Prague-blockchain_test-one_full_blob_one_tx]\ntest_reject_valid_full_blob_in_block_rlp[fork_Prague-blockchain_test-one_full_blob_max_txs]\ntest_reject_valid_full_blob_in_block_rlp[fork_Prague-blockchain_test-one_full_blob_at_the_end_max_txs]\ntest_reject_valid_full_blob_in_block_rlp[fork_Prague-blockchain_test_engine-one_full_blob_one_tx]\ntest_reject_valid_full_blob_in_block_rlp[fork_Prague-blockchain_test_engine-one_full_blob_max_txs]\ntest_reject_valid_full_blob_in_block_rlp[fork_Prague-blockchain_test_engine-one_full_blob_at_the_end_max_txs]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip4844_blobs/test_blob_txs_full.py\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blobhash_opcode/","title":"Test Blobhash Opcode","text":"

    Documentation for tests/cancun/eip4844_blobs/test_blobhash_opcode.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_blobhash_opcode.py\n
    Tests BLOBHASH opcode in EIP-4844: Shard Blob Transactions

    Test cases for the BLOBHASH opcode in EIP-4844: Shard Blob Transactions.

    Adding a new test

    Add a function that is named test_<test_name> and takes at least the following arguments:

    • blockchain_test
    • pre
    • tx
    • post

    Additional custom pytest.fixture fixtures can be added and parametrized for new test cases.

    There is no specific structure to follow within this test module.

    "},{"location":"tests/cancun/eip4844_blobs/test_blobhash_opcode/#tests.cancun.eip4844_blobs.test_blobhash_opcode.test_blobhash_gas_cost","title":"test_blobhash_gas_cost(pre, tx_type, blobhash_index, state_test)","text":"

    Tests BLOBHASH opcode gas cost using a variety of indexes.

    Asserts that the gas consumption of the BLOBHASH opcode is correct by ensuring it matches HASH_OPCODE_GAS = 3. Includes both valid and invalid random index sizes from the range [0, 2**256-1], for tx types 2 and 3.

    Source code in tests/cancun/eip4844_blobs/test_blobhash_opcode.py
    @pytest.mark.parametrize(\"blobhash_index\", blobhash_index_values)\n@pytest.mark.with_all_tx_types\ndef test_blobhash_gas_cost(\n    pre: Alloc,\n    tx_type: int,\n    blobhash_index: int,\n    state_test: StateTestFiller,\n):\n    \"\"\"\n    Tests `BLOBHASH` opcode gas cost using a variety of indexes.\n\n    Asserts that the gas consumption of the `BLOBHASH` opcode is correct by ensuring\n    it matches `HASH_OPCODE_GAS = 3`. Includes both valid and invalid random\n    index sizes from the range `[0, 2**256-1]`, for tx types 2 and 3.\n    \"\"\"\n    gas_measure_code = CodeGasMeasure(\n        code=Op.BLOBHASH(blobhash_index),\n        overhead_cost=3,\n        extra_stack_items=1,\n    )\n\n    address = pre.deploy_contract(gas_measure_code)\n    sender = pre.fund_eoa()\n\n    tx = Transaction(\n        ty=tx_type,\n        sender=sender,\n        to=address,\n        data=Hash(0),\n        gas_limit=3_000_000,\n        gas_price=10 if tx_type < 2 else None,\n        access_list=[] if tx_type >= 1 else None,\n        max_fee_per_gas=10 if tx_type >= 2 else None,\n        max_priority_fee_per_gas=10 if tx_type >= 2 else None,\n        max_fee_per_blob_gas=10 if tx_type == 3 else None,\n        blob_versioned_hashes=random_blob_hashes[0 : SpecHelpers.target_blobs_per_block()]\n        if tx_type == 3\n        else None,\n    )\n    post = {address: Account(storage={0: Spec.HASH_GAS_COST})}\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blobhash_opcode/#tests.cancun.eip4844_blobs.test_blobhash_opcode.test_blobhash_scenarios","title":"test_blobhash_scenarios(pre, scenario, blockchain_test)","text":"

    Tests that the BLOBHASH opcode returns the correct versioned hash for various valid indexes.

    Covers various scenarios with random blob_versioned_hash values within the valid range [0, 2**256-1].

    Source code in tests/cancun/eip4844_blobs/test_blobhash_opcode.py
    @pytest.mark.parametrize(\n    \"scenario\",\n    [\n        \"single_valid\",\n        \"repeated_valid\",\n        \"valid_invalid\",\n        \"varied_valid\",\n    ],\n)\ndef test_blobhash_scenarios(\n    pre: Alloc,\n    scenario: str,\n    blockchain_test: BlockchainTestFiller,\n):\n    \"\"\"\n    Tests that the `BLOBHASH` opcode returns the correct versioned hash for\n    various valid indexes.\n\n    Covers various scenarios with random `blob_versioned_hash` values within\n    the valid range `[0, 2**256-1]`.\n    \"\"\"\n    TOTAL_BLOCKS = 5\n    b_hashes_list = BlobhashScenario.create_blob_hashes_list(length=TOTAL_BLOCKS)\n    blobhash_calls = BlobhashScenario.generate_blobhash_bytecode(scenario)\n    sender = pre.fund_eoa()\n\n    blocks: List[Block] = []\n    post = {}\n    for i in range(TOTAL_BLOCKS):\n        address = pre.deploy_contract(blobhash_calls)\n        blocks.append(\n            Block(\n                txs=[\n                    Transaction(\n                        ty=Spec.BLOB_TX_TYPE,\n                        sender=sender,\n                        to=address,\n                        data=Hash(0),\n                        gas_limit=3_000_000,\n                        access_list=[],\n                        max_fee_per_gas=10,\n                        max_priority_fee_per_gas=10,\n                        max_fee_per_blob_gas=10,\n                        blob_versioned_hashes=b_hashes_list[i],\n                    )\n                ]\n            )\n        )\n        post[address] = Account(\n            storage={\n                index: b_hashes_list[i][index]\n                for index in range(SpecHelpers.max_blobs_per_block())\n            }\n        )\n    blockchain_test(\n        pre=pre,\n        blocks=blocks,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blobhash_opcode/#tests.cancun.eip4844_blobs.test_blobhash_opcode.test_blobhash_invalid_blob_index","title":"test_blobhash_invalid_blob_index(pre, blockchain_test, scenario)","text":"

    Tests that the BLOBHASH opcode returns a zeroed bytes32 value for invalid indexes.

    Includes cases where the index is negative (index < 0) or exceeds the maximum number of blob_versioned_hash values stored: (index >= len(tx.message.blob_versioned_hashes)).

    It confirms that the returned value is a zeroed bytes32 for each case.

    Source code in tests/cancun/eip4844_blobs/test_blobhash_opcode.py
    @pytest.mark.parametrize(\n    \"scenario\",\n    [\n        \"invalid_calls\",\n    ],\n)\ndef test_blobhash_invalid_blob_index(\n    pre: Alloc,\n    blockchain_test: BlockchainTestFiller,\n    scenario,\n):\n    \"\"\"\n    Tests that the `BLOBHASH` opcode returns a zeroed `bytes32` value for invalid\n    indexes.\n\n    Includes cases where the index is negative (`index < 0`) or\n    exceeds the maximum number of `blob_versioned_hash` values stored:\n    (`index >= len(tx.message.blob_versioned_hashes)`).\n\n    It confirms that the returned value is a zeroed `bytes32` for each case.\n    \"\"\"\n    TOTAL_BLOCKS = 5\n    blobhash_calls = BlobhashScenario.generate_blobhash_bytecode(scenario)\n    sender = pre.fund_eoa()\n    blocks: List[Block] = []\n    post = {}\n    for i in range(TOTAL_BLOCKS):\n        address = pre.deploy_contract(blobhash_calls)\n        blob_per_block = (i % SpecHelpers.max_blobs_per_block()) + 1\n        blobs = [random_blob_hashes[blob] for blob in range(blob_per_block)]\n        blocks.append(\n            Block(\n                txs=[\n                    Transaction(\n                        ty=Spec.BLOB_TX_TYPE,\n                        sender=sender,\n                        to=address,\n                        gas_limit=3_000_000,\n                        data=Hash(0),\n                        access_list=[],\n                        max_fee_per_gas=10,\n                        max_priority_fee_per_gas=10,\n                        max_fee_per_blob_gas=10,\n                        blob_versioned_hashes=blobs,\n                    )\n                ]\n            )\n        )\n        post[address] = Account(\n            storage={\n                index: (0 if index < 0 or index >= blob_per_block else blobs[index])\n                for index in range(\n                    -TOTAL_BLOCKS,\n                    blob_per_block + (TOTAL_BLOCKS - (i % SpecHelpers.max_blobs_per_block())),\n                )\n            }\n        )\n    blockchain_test(\n        pre=pre,\n        blocks=blocks,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blobhash_opcode/#tests.cancun.eip4844_blobs.test_blobhash_opcode.test_blobhash_multiple_txs_in_block","title":"test_blobhash_multiple_txs_in_block(pre, blockchain_test)","text":"

    Tests that the BLOBHASH opcode returns the appropriate values when there is more than 1 blob tx type within a block (for tx types 2 and 3).

    Scenarios involve tx type 3 followed by tx type 2 running the same code within a block, including the opposite.

    Source code in tests/cancun/eip4844_blobs/test_blobhash_opcode.py
    def test_blobhash_multiple_txs_in_block(\n    pre: Alloc,\n    blockchain_test: BlockchainTestFiller,\n):\n    \"\"\"\n    Tests that the `BLOBHASH` opcode returns the appropriate values when there\n    is more than 1 blob tx type within a block (for tx types 2 and 3).\n\n    Scenarios involve tx type 3 followed by tx type 2 running the same code\n    within a block, including the opposite.\n    \"\"\"\n    blobhash_bytecode = BlobhashScenario.generate_blobhash_bytecode(\"single_valid\")\n    addresses = [pre.deploy_contract(blobhash_bytecode) for _ in range(4)]\n    sender = pre.fund_eoa()\n\n    def blob_tx(address: Address, type: int):\n        return Transaction(\n            ty=type,\n            sender=sender,\n            to=address,\n            data=Hash(0),\n            gas_limit=3_000_000,\n            gas_price=10 if type < 2 else None,\n            access_list=[] if type >= 1 else None,\n            max_fee_per_gas=10,\n            max_priority_fee_per_gas=10,\n            max_fee_per_blob_gas=10 if type >= 3 else None,\n            blob_versioned_hashes=random_blob_hashes[0 : SpecHelpers.max_blobs_per_block()]\n            if type >= 3\n            else None,\n        )\n\n    blocks = [\n        Block(\n            txs=[\n                blob_tx(address=addresses[0], type=3),\n                blob_tx(address=addresses[0], type=2),\n            ]\n        ),\n        Block(\n            txs=[\n                blob_tx(address=addresses[1], type=2),\n                blob_tx(address=addresses[1], type=3),\n            ]\n        ),\n        Block(\n            txs=[\n                blob_tx(address=addresses[2], type=2),\n                blob_tx(address=addresses[3], type=3),\n            ],\n        ),\n    ]\n    post = {\n        Address(address): Account(\n            storage={i: random_blob_hashes[i] for i in range(SpecHelpers.max_blobs_per_block())}\n        )\n        if address in (addresses[1], addresses[3])\n        else Account(storage={i: 0 for i in range(SpecHelpers.max_blobs_per_block())})\n        for address in addresses\n    }\n    blockchain_test(\n        pre=pre,\n        blocks=blocks,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blobhash_opcode/index/test_cases/","title":"Test Blobhash Opcode - Test Cases","text":"

    Test cases generated from tests/cancun/eip4844_blobs/test_blobhash_opcode.py

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_blobhash_opcode.py:

    test_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test_engine-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test_engine-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test_engine-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test_engine-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test_engine-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test_engine-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test_engine-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-state_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-state_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-state_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-state_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-state_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-state_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_3-state_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test_engine-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test_engine-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test_engine-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test_engine-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test_engine-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test_engine-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-blockchain_test_engine-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-state_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-state_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-state_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-state_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-state_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-state_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_2-state_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test_engine-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test_engine-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test_engine-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test_engine-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test_engine-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test_engine-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-blockchain_test_engine-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-state_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-state_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-state_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-state_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-state_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-state_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_1-state_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test_engine-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test_engine-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test_engine-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test_engine-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test_engine-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test_engine-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-blockchain_test_engine-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-state_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-state_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-state_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-state_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-state_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-state_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Cancun-tx_type_0-state_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test_engine-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test_engine-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test_engine-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test_engine-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test_engine-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test_engine-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-blockchain_test_engine-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-state_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-state_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-state_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-state_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-state_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-state_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_3-state_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test_engine-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test_engine-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test_engine-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test_engine-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test_engine-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test_engine-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-blockchain_test_engine-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-state_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-state_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-state_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-state_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-state_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-state_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_2-state_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test_engine-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test_engine-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test_engine-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test_engine-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test_engine-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test_engine-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-blockchain_test_engine-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-state_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-state_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-state_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-state_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-state_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-state_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_1-state_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test_engine-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test_engine-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test_engine-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test_engine-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test_engine-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test_engine-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-blockchain_test_engine-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-state_test-blobhash_index_0]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-state_test-blobhash_index_1]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-state_test-blobhash_index_2]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-state_test-blobhash_index_3]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-state_test-blobhash_index_4]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-state_test-blobhash_index_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_blobhash_gas_cost[fork_Prague-tx_type_0-state_test-blobhash_index_72901072107898194510616918724280211781393090952923809435170590639787343028527]\ntest_blobhash_scenarios[fork_Cancun-blockchain_test-scenario_single_valid]\ntest_blobhash_scenarios[fork_Cancun-blockchain_test-scenario_repeated_valid]\ntest_blobhash_scenarios[fork_Cancun-blockchain_test-scenario_valid_invalid]\ntest_blobhash_scenarios[fork_Cancun-blockchain_test-scenario_varied_valid]\ntest_blobhash_scenarios[fork_Cancun-blockchain_test_engine-scenario_single_valid]\ntest_blobhash_scenarios[fork_Cancun-blockchain_test_engine-scenario_repeated_valid]\ntest_blobhash_scenarios[fork_Cancun-blockchain_test_engine-scenario_valid_invalid]\ntest_blobhash_scenarios[fork_Cancun-blockchain_test_engine-scenario_varied_valid]\ntest_blobhash_scenarios[fork_Prague-blockchain_test-scenario_single_valid]\ntest_blobhash_scenarios[fork_Prague-blockchain_test-scenario_repeated_valid]\ntest_blobhash_scenarios[fork_Prague-blockchain_test-scenario_valid_invalid]\ntest_blobhash_scenarios[fork_Prague-blockchain_test-scenario_varied_valid]\ntest_blobhash_scenarios[fork_Prague-blockchain_test_engine-scenario_single_valid]\ntest_blobhash_scenarios[fork_Prague-blockchain_test_engine-scenario_repeated_valid]\ntest_blobhash_scenarios[fork_Prague-blockchain_test_engine-scenario_valid_invalid]\ntest_blobhash_scenarios[fork_Prague-blockchain_test_engine-scenario_varied_valid]\ntest_blobhash_invalid_blob_index[fork_Cancun-blockchain_test-scenario_invalid_calls]\ntest_blobhash_invalid_blob_index[fork_Cancun-blockchain_test_engine-scenario_invalid_calls]\ntest_blobhash_invalid_blob_index[fork_Prague-blockchain_test-scenario_invalid_calls]\ntest_blobhash_invalid_blob_index[fork_Prague-blockchain_test_engine-scenario_invalid_calls]\ntest_blobhash_multiple_txs_in_block[fork_Cancun-blockchain_test]\ntest_blobhash_multiple_txs_in_block[fork_Cancun-blockchain_test_engine]\ntest_blobhash_multiple_txs_in_block[fork_Prague-blockchain_test]\ntest_blobhash_multiple_txs_in_block[fork_Prague-blockchain_test_engine]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip4844_blobs/test_blobhash_opcode.py\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts/","title":"Test Blobhash Opcode Contexts","text":"

    Documentation for tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py\n
    Tests BLOBHASH opcode in EIP-4844: Shard Blob Transactions

    Test case for BLOBHASH opcode calls across different contexts in EIP-4844: Shard Blob Transactions.

    "},{"location":"tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts/#tests.cancun.eip4844_blobs.test_blobhash_opcode_contexts.test_blobhash_opcode_contexts","title":"test_blobhash_opcode_contexts(opcode_context, blockchain_test)","text":"

    Tests that the BLOBHASH opcode functions correctly when called in different contexts including:

    • BLOBHASH opcode on the top level of the call stack.
    • BLOBHASH opcode on the max value.
    • BLOBHASH opcode on CALL, DELEGATECALL, STATICCALL, and CALLCODE.
    • BLOBHASH opcode on Initcode.
    • BLOBHASH opcode on CREATE and CREATE2.
    • BLOBHASH opcode on transaction types 0, 1 and 2.
    Source code in tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py
    @pytest.mark.compile_yul_with(\"Shanghai\")\ndef test_blobhash_opcode_contexts(opcode_context, blockchain_test: BlockchainTestFiller):\n    \"\"\"\n    Tests that the `BLOBHASH` opcode functions correctly when called in different\n    contexts including:\n\n    - `BLOBHASH` opcode on the top level of the call stack.\n    - `BLOBHASH` opcode on the max value.\n    - `BLOBHASH` opcode on `CALL`, `DELEGATECALL`, `STATICCALL`, and `CALLCODE`.\n    - `BLOBHASH` opcode on Initcode.\n    - `BLOBHASH` opcode on `CREATE` and `CREATE2`.\n    - `BLOBHASH` opcode on transaction types 0, 1 and 2.\n    \"\"\"\n    blockchain_test(\n        pre=opcode_context.get(\"pre\"),\n        blocks=[Block(txs=[opcode_context.get(\"tx\")])],\n        post=opcode_context.get(\"post\"),\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts/index/test_cases/","title":"Test Blobhash Opcode Contexts - Test Cases","text":"

    Test cases generated from tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py:

    test_blobhash_opcode_contexts[opcode_context_on_top_level_call_stack-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_top_level_call_stack-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_top_level_call_stack-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_top_level_call_stack-fork_Prague-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_max_value-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_max_value-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_max_value-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_max_value-fork_Prague-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_CALL-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_CALL-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_CALL-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_CALL-fork_Prague-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_DELEGATECALL-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_DELEGATECALL-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_DELEGATECALL-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_DELEGATECALL-fork_Prague-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_STATICCALL-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_STATICCALL-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_STATICCALL-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_STATICCALL-fork_Prague-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_CALLCODE-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_CALLCODE-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_CALLCODE-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_CALLCODE-fork_Prague-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_CREATE-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_CREATE-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_CREATE-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_CREATE-fork_Prague-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_CREATE2-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_CREATE2-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_CREATE2-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_CREATE2-fork_Prague-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_type_2_tx-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_type_2_tx-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_type_2_tx-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_type_2_tx-fork_Prague-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_type_1_tx-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_type_1_tx-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_type_1_tx-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_type_1_tx-fork_Prague-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_type_0_tx-fork_Cancun-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_type_0_tx-fork_Cancun-blockchain_test_engine]\ntest_blobhash_opcode_contexts[opcode_context_on_type_0_tx-fork_Prague-blockchain_test]\ntest_blobhash_opcode_contexts[opcode_context_on_type_0_tx-fork_Prague-blockchain_test_engine]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/","title":"Test Excess Blob Gas","text":"

    Documentation for tests/cancun/eip4844_blobs/test_excess_blob_gas.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_excess_blob_gas.py\n
    Tests excessBlobGas and blobGasUsed block fields for EIP-4844: Shard Blob Transactions

    Test excessBlobGas and blobGasUsed block fields for EIP-4844: Shard Blob Transactions.

    Adding a new test

    Add a function that is named test_<test_name> and takes at least the following arguments:

    • blockchain_test
    • env
    • pre
    • blocks
    • post
    • correct_excess_blob_gas

    The following arguments need to be parametrized or the test will not be generated:

    • new_blobs

    All other pytest.fixture fixtures can be parametrized to generate new combinations and test cases.

    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_correct_excess_blob_gas_calculation","title":"test_correct_excess_blob_gas_calculation(blockchain_test, env, pre, blocks, post, correct_excess_blob_gas)","text":"

    Test calculation of the excessBlobGas increase/decrease across multiple blocks with and without blobs:

    • With parent block containing [0, MAX_BLOBS_PER_BLOCK] blobs
    • With parent block containing [0, TARGET_BLOBS_PER_BLOCK] equivalent value of excess blob gas
    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\"parent_blobs\", range(0, SpecHelpers.max_blobs_per_block() + 1))\n@pytest.mark.parametrize(\"parent_excess_blobs\", range(0, SpecHelpers.target_blobs_per_block() + 1))\n@pytest.mark.parametrize(\"new_blobs\", [1])\ndef test_correct_excess_blob_gas_calculation(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    post: Mapping[Address, Account],\n    correct_excess_blob_gas: int,\n):\n    \"\"\"\n    Test calculation of the `excessBlobGas` increase/decrease across\n    multiple blocks with and without blobs:\n\n    - With parent block containing `[0, MAX_BLOBS_PER_BLOCK]` blobs\n    - With parent block containing `[0, TARGET_BLOBS_PER_BLOCK]` equivalent value of excess blob gas\n    \"\"\"  # noqa: E501\n    blockchain_test(\n        pre=pre,\n        post=post,\n        blocks=blocks,\n        genesis_environment=env,\n        tag=f\"expected_excess_blob_gas:{hex(correct_excess_blob_gas)}\",\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_correct_increasing_blob_gas_costs","title":"test_correct_increasing_blob_gas_costs(blockchain_test, env, pre, blocks, post, correct_excess_blob_gas)","text":"

    Test calculation of the excessBlobGas and blob gas tx costs at value points where the cost increases to interesting amounts:

    • At the first blob gas cost increase (1 to 2)
    • At total transaction data cost increase to > 2^32
    • At blob gas wei cost increase to > 2^32
    • At total transaction data cost increase to > 2^64
    • At blob gas wei cost increase to > 2^64
    • At blob gas wei cost increase of around current total Ether supply
    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\n    \"parent_excess_blobs\",\n    [g - 1 for g in BLOB_GAS_COST_INCREASES],\n)\n@pytest.mark.parametrize(\"parent_blobs\", [SpecHelpers.target_blobs_per_block() + 1])\n@pytest.mark.parametrize(\"new_blobs\", [1])\ndef test_correct_increasing_blob_gas_costs(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    post: Mapping[Address, Account],\n    correct_excess_blob_gas: int,\n):\n    \"\"\"\n    Test calculation of the `excessBlobGas` and blob gas tx costs at\n    value points where the cost increases to interesting amounts:\n\n    - At the first blob gas cost increase (1 to 2)\n    - At total transaction data cost increase to `> 2^32`\n    - At blob gas wei cost increase to `> 2^32`\n    - At total transaction data cost increase to `> 2^64`\n    - At blob gas wei cost increase to `> 2^64`\n    - At blob gas wei cost increase of around current total Ether supply\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        post=post,\n        blocks=blocks,\n        genesis_environment=env,\n        tag=f\"expected_excess_blob_gas:{hex(correct_excess_blob_gas)}\",\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_correct_decreasing_blob_gas_costs","title":"test_correct_decreasing_blob_gas_costs(blockchain_test, env, pre, blocks, post, correct_excess_blob_gas)","text":"

    Test calculation of the excessBlobGas and blob gas tx costs at value points where the cost decreases to interesting amounts.

    See test_correct_increasing_blob_gas_costs.

    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\n    \"parent_excess_blobs\",\n    [g for g in BLOB_GAS_COST_INCREASES],\n)\n@pytest.mark.parametrize(\"parent_blobs\", [SpecHelpers.target_blobs_per_block() - 1])\n@pytest.mark.parametrize(\"new_blobs\", [1])\ndef test_correct_decreasing_blob_gas_costs(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    post: Mapping[Address, Account],\n    correct_excess_blob_gas: int,\n):\n    \"\"\"\n    Test calculation of the `excessBlobGas` and blob gas tx costs at\n    value points where the cost decreases to interesting amounts.\n\n    See test_correct_increasing_blob_gas_costs.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        post=post,\n        blocks=blocks,\n        genesis_environment=env,\n        tag=f\"expected_excess_blob_gas:{hex(correct_excess_blob_gas)}\",\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_invalid_zero_excess_blob_gas_in_header","title":"test_invalid_zero_excess_blob_gas_in_header(blockchain_test, env, pre, blocks, correct_excess_blob_gas, header_excess_blob_gas)","text":"

    Test rejection of blocks where the excessBlobGas in the header drops to zero in a block with or without data blobs, but the excess blobs in the parent are greater than target.

    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\"header_excess_blob_gas\", [0])\n@pytest.mark.parametrize(\"new_blobs\", [0, 1])\n@pytest.mark.parametrize(\"parent_blobs\", range(0, SpecHelpers.max_blobs_per_block() + 1))\ndef test_invalid_zero_excess_blob_gas_in_header(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    correct_excess_blob_gas: int,\n    header_excess_blob_gas: Optional[int],\n):\n    \"\"\"\n    Test rejection of blocks where the `excessBlobGas` in the header drops to\n    zero in a block with or without data blobs, but the excess blobs in the parent are\n    greater than target.\n    \"\"\"\n    if header_excess_blob_gas is None:\n        raise Exception(\"test case is badly formatted\")\n\n    if header_excess_blob_gas == correct_excess_blob_gas:\n        raise Exception(\"invalid test case\")\n\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n        tag=\"-\".join(\n            [\n                f\"correct:{hex(correct_excess_blob_gas)}\",\n                f\"header:{hex(header_excess_blob_gas)}\",\n            ]\n        ),\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_invalid_blob_gas_used_in_header","title":"test_invalid_blob_gas_used_in_header(blockchain_test, env, pre, blocks, new_blobs, header_blob_gas_used)","text":"

    Test rejection of blocks where the blobGasUsed in the header is invalid:

    • blobGasUsed is not equal to the number of data blobs in the block
    • blobGasUsed is the max uint64 value
    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\n    \"new_blobs,header_blob_gas_used\",\n    all_invalid_blob_gas_used_combinations(),\n)\n@pytest.mark.parametrize(\"parent_blobs\", [0])\ndef test_invalid_blob_gas_used_in_header(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    new_blobs: int,\n    header_blob_gas_used: Optional[int],\n):\n    \"\"\"\n    Test rejection of blocks where the `blobGasUsed` in the header is invalid:\n\n    - `blobGasUsed` is not equal to the number of data blobs in the block\n    - `blobGasUsed` is the max uint64 value\n    \"\"\"\n    if header_blob_gas_used is None:\n        raise Exception(\"test case is badly formatted\")\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n        tag=\"-\".join(\n            [\n                f\"correct:{hex(new_blobs * Spec.GAS_PER_BLOB)}\",\n                f\"header:{hex(header_blob_gas_used)}\",\n            ]\n        ),\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_invalid_excess_blob_gas_above_target_change","title":"test_invalid_excess_blob_gas_above_target_change(blockchain_test, env, pre, blocks, correct_excess_blob_gas, header_excess_blob_gas)","text":"

    Test rejection of blocks where the excessBlobGas

    • decreases more than TARGET_BLOB_GAS_PER_BLOCK in a single block with zero blobs
    • increases more than TARGET_BLOB_GAS_PER_BLOCK in a single block with max blobs
    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\n    \"header_excess_blobs_delta,parent_blobs\",\n    [\n        (-1, 0),\n        (+1, SpecHelpers.max_blobs_per_block()),\n    ],\n    ids=[\"zero_blobs_decrease_more_than_expected\", \"max_blobs_increase_more_than_expected\"],\n)\n@pytest.mark.parametrize(\"new_blobs\", [1])\ndef test_invalid_excess_blob_gas_above_target_change(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    correct_excess_blob_gas: int,\n    header_excess_blob_gas: Optional[int],\n):\n    \"\"\"\n    Test rejection of blocks where the `excessBlobGas`\n\n    - decreases more than `TARGET_BLOB_GAS_PER_BLOCK` in a single block with zero blobs\n    - increases more than `TARGET_BLOB_GAS_PER_BLOCK` in a single block with max blobs\n    \"\"\"\n    if header_excess_blob_gas is None:\n        raise Exception(\"test case is badly formatted\")\n\n    if header_excess_blob_gas == correct_excess_blob_gas:\n        raise Exception(\"invalid test case\")\n\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n        tag=\"-\".join(\n            [\n                f\"correct:{hex(correct_excess_blob_gas)}\",\n                f\"header:{hex(header_excess_blob_gas)}\",\n            ]\n        ),\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_invalid_static_excess_blob_gas","title":"test_invalid_static_excess_blob_gas(blockchain_test, env, pre, blocks, correct_excess_blob_gas, parent_excess_blob_gas)","text":"

    Test rejection of blocks where the excessBlobGas remains unchanged but the parent blobs included are not TARGET_BLOBS_PER_BLOCK.

    Test is parametrized to MAX_BLOBS_PER_BLOCK and TARGET_BLOBS_PER_BLOCK.

    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\n    \"parent_blobs\",\n    [\n        b\n        for b in range(0, SpecHelpers.max_blobs_per_block() + 1)\n        if b != SpecHelpers.target_blobs_per_block()\n    ],\n)\n@pytest.mark.parametrize(\"parent_excess_blobs\", [1, SpecHelpers.target_blobs_per_block()])\n@pytest.mark.parametrize(\"new_blobs\", [1])\ndef test_invalid_static_excess_blob_gas(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    correct_excess_blob_gas: int,\n    parent_excess_blob_gas: int,\n):\n    \"\"\"\n    Test rejection of blocks where the `excessBlobGas` remains unchanged\n    but the parent blobs included are not `TARGET_BLOBS_PER_BLOCK`.\n\n    Test is parametrized to `MAX_BLOBS_PER_BLOCK` and `TARGET_BLOBS_PER_BLOCK`.\n    \"\"\"\n    blocks[-1].rlp_modifier = Header(excess_blob_gas=parent_excess_blob_gas)\n    blocks[-1].header_verify = None\n    blocks[-1].exception = BlockException.INCORRECT_EXCESS_BLOB_GAS\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n        tag=\"-\".join(\n            [\n                f\"correct:{hex(correct_excess_blob_gas)}\",\n                f\"header:{hex(parent_excess_blob_gas)}\",\n            ]\n        ),\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_invalid_excess_blob_gas_target_blobs_increase_from_zero","title":"test_invalid_excess_blob_gas_target_blobs_increase_from_zero(blockchain_test, env, pre, blocks, correct_excess_blob_gas, header_excess_blob_gas)","text":"

    Test rejection of blocks where the excessBlobGas increases from zero, even when the included blobs are on or below target.

    Test is parametrized according to [0, TARGET_BLOBS_PER_BLOCK new blobs.

    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\"header_excess_blobs_delta\", range(1, SpecHelpers.max_blobs_per_block()))\n@pytest.mark.parametrize(\"parent_blobs\", range(0, SpecHelpers.target_blobs_per_block() + 1))\n@pytest.mark.parametrize(\"parent_excess_blobs\", [0])  # Start at 0\n@pytest.mark.parametrize(\"new_blobs\", [1])\ndef test_invalid_excess_blob_gas_target_blobs_increase_from_zero(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    correct_excess_blob_gas: int,\n    header_excess_blob_gas: Optional[int],\n):\n    \"\"\"\n    Test rejection of blocks where the `excessBlobGas` increases from zero,\n    even when the included blobs are on or below target.\n\n    Test is parametrized according to `[0, TARGET_BLOBS_PER_BLOCK` new blobs.\n    \"\"\"\n    if header_excess_blob_gas is None:\n        raise Exception(\"test case is badly formatted\")\n\n    if header_excess_blob_gas == correct_excess_blob_gas:\n        raise Exception(\"invalid test case\")\n\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n        tag=\"-\".join(\n            [\n                f\"correct:{hex(correct_excess_blob_gas)}\",\n                f\"header:{hex(header_excess_blob_gas)}\",\n            ]\n        ),\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target","title":"test_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target(blockchain_test, env, pre, blocks, correct_excess_blob_gas, header_excess_blob_gas)","text":"

    Test rejection of blocks where the excessBlobGas does not increase from zero, even when the included blobs is above target.

    Test is parametrized to [TARGET_BLOBS_PER_BLOCK+1, MAX_BLOBS_PER_BLOCK] new blobs.

    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\"header_excess_blob_gas\", [0])\n@pytest.mark.parametrize(\n    \"parent_blobs\",\n    range(SpecHelpers.target_blobs_per_block() + 1, SpecHelpers.max_blobs_per_block() + 1),\n)\n@pytest.mark.parametrize(\"parent_excess_blobs\", [0])  # Start at 0\n@pytest.mark.parametrize(\"new_blobs\", [1])\ndef test_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    correct_excess_blob_gas: int,\n    header_excess_blob_gas: Optional[int],\n):\n    \"\"\"\n    Test rejection of blocks where the `excessBlobGas` does not increase from\n    zero, even when the included blobs is above target.\n\n    Test is parametrized to `[TARGET_BLOBS_PER_BLOCK+1, MAX_BLOBS_PER_BLOCK]` new blobs.\n    \"\"\"\n    if header_excess_blob_gas is None:\n        raise Exception(\"test case is badly formatted\")\n\n    if header_excess_blob_gas == correct_excess_blob_gas:\n        raise Exception(\"invalid test case\")\n\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n        tag=\"-\".join(\n            [\n                f\"correct:{hex(correct_excess_blob_gas)}\",\n                f\"header:{hex(header_excess_blob_gas)}\",\n            ]\n        ),\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_invalid_excess_blob_gas_change","title":"test_invalid_excess_blob_gas_change(blockchain_test, env, pre, blocks, correct_excess_blob_gas, header_excess_blob_gas)","text":"

    Test rejection of blocks where the excessBlobGas changes to an invalid value.

    Given a parent block containing [0, MAX_BLOBS_PER_BLOCK] blobs, test an invalid excessBlobGas value by changing it by [-TARGET_BLOBS_PER_BLOCK, TARGET_BLOBS_PER_BLOCK] from the correct value.

    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\n    \"parent_blobs,header_excess_blobs_delta\",\n    itertools.product(\n        # parent_blobs\n        range(0, SpecHelpers.max_blobs_per_block() + 1),\n        # header_excess_blobs_delta (from correct value)\n        [\n            x\n            for x in range(\n                -SpecHelpers.target_blobs_per_block(), SpecHelpers.target_blobs_per_block() + 1\n            )\n            if x != 0\n        ],\n    ),\n)\n@pytest.mark.parametrize(\"new_blobs\", [1])\ndef test_invalid_excess_blob_gas_change(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    correct_excess_blob_gas: int,\n    header_excess_blob_gas: Optional[int],\n):\n    \"\"\"\n    Test rejection of blocks where the `excessBlobGas` changes to an invalid\n    value.\n\n    Given a parent block containing `[0, MAX_BLOBS_PER_BLOCK]` blobs, test an invalid\n    `excessBlobGas` value by changing it by `[-TARGET_BLOBS_PER_BLOCK, TARGET_BLOBS_PER_BLOCK]`\n    from the correct value.\n    \"\"\"\n    if header_excess_blob_gas is None:\n        raise Exception(\"test case is badly formatted\")\n\n    if header_excess_blob_gas == correct_excess_blob_gas:\n        raise Exception(\"invalid test case\")\n\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n        tag=\"-\".join(\n            [\n                f\"correct:{hex(correct_excess_blob_gas)}\",\n                f\"header:{hex(header_excess_blob_gas)}\",\n            ]\n        ),\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_invalid_negative_excess_blob_gas","title":"test_invalid_negative_excess_blob_gas(blockchain_test, env, pre, blocks, correct_excess_blob_gas, header_excess_blob_gas)","text":"

    Test rejection of blocks where the excessBlobGas changes to the two's complement equivalent of the negative value after subtracting target blobs.

    Reasoning is that the excessBlobGas is a uint64, so it cannot be negative, and we test for a potential underflow here.

    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\n    \"header_excess_blob_gas\",\n    [(2**64 + (x * Spec.GAS_PER_BLOB)) for x in range(-SpecHelpers.target_blobs_per_block(), 0)],\n)\n@pytest.mark.parametrize(\"parent_blobs\", range(SpecHelpers.target_blobs_per_block()))\n@pytest.mark.parametrize(\"new_blobs\", [1])\n@pytest.mark.parametrize(\"parent_excess_blobs\", range(SpecHelpers.target_blobs_per_block()))\ndef test_invalid_negative_excess_blob_gas(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    correct_excess_blob_gas: int,\n    header_excess_blob_gas: Optional[int],\n):\n    \"\"\"\n    Test rejection of blocks where the `excessBlobGas` changes to the two's\n    complement equivalent of the negative value after subtracting target blobs.\n\n    Reasoning is that the `excessBlobGas` is a `uint64`, so it cannot be negative, and\n    we test for a potential underflow here.\n    \"\"\"\n    if header_excess_blob_gas is None:\n        raise Exception(\"test case is badly formatted\")\n\n    if header_excess_blob_gas == correct_excess_blob_gas:\n        raise Exception(\"invalid test case\")\n\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n        tag=\"-\".join(\n            [\n                f\"correct:{hex(correct_excess_blob_gas)}\",\n                f\"header:{hex(header_excess_blob_gas)}\",\n            ]\n        ),\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/#tests.cancun.eip4844_blobs.test_excess_blob_gas.test_invalid_non_multiple_excess_blob_gas","title":"test_invalid_non_multiple_excess_blob_gas(blockchain_test, env, pre, blocks, correct_excess_blob_gas, header_excess_blob_gas)","text":"

    Test rejection of blocks where the excessBlobGas changes to a value that is not a multiple of Spec.GAS_PER_BLOB`:

    • Parent block contains TARGET_BLOBS_PER_BLOCK + 1 blobs, but excessBlobGas is off by \u00b11
    • Parent block contains TARGET_BLOBS_PER_BLOCK - 1 blobs, but excessBlobGas is off by \u00b11
    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    @pytest.mark.parametrize(\n    \"parent_blobs,header_excess_blob_gas_delta\",\n    [\n        (SpecHelpers.target_blobs_per_block() + 1, 1),\n        (SpecHelpers.target_blobs_per_block() + 1, Spec.GAS_PER_BLOB - 1),\n        (SpecHelpers.target_blobs_per_block() - 1, -1),\n        (SpecHelpers.target_blobs_per_block() - 1, -(Spec.GAS_PER_BLOB - 1)),\n    ],\n)\n@pytest.mark.parametrize(\"new_blobs\", [1])\n@pytest.mark.parametrize(\"parent_excess_blobs\", [SpecHelpers.target_blobs_per_block() + 1])\ndef test_invalid_non_multiple_excess_blob_gas(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    blocks: List[Block],\n    correct_excess_blob_gas: int,\n    header_excess_blob_gas: Optional[int],\n):\n    \"\"\"\n    Test rejection of blocks where the `excessBlobGas` changes to a value that\n    is not a multiple of Spec.GAS_PER_BLOB`:\n\n    - Parent block contains `TARGET_BLOBS_PER_BLOCK + 1` blobs, but `excessBlobGas` is off by +/-1\n    - Parent block contains `TARGET_BLOBS_PER_BLOCK - 1` blobs, but `excessBlobGas` is off by +/-1\n    \"\"\"\n    if header_excess_blob_gas is None:\n        raise Exception(\"test case is badly formatted\")\n\n    if header_excess_blob_gas == correct_excess_blob_gas:\n        raise Exception(\"invalid test case\")\n\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=blocks,\n        genesis_environment=env,\n        tag=\"-\".join(\n            [\n                f\"correct:{hex(correct_excess_blob_gas)}\",\n                f\"header:{hex(header_excess_blob_gas)}\",\n            ]\n        ),\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas/index/test_cases/","title":"Test Excess Blob Gas - Test Cases","text":"

    Test cases generated from tests/cancun/eip4844_blobs/test_excess_blob_gas.py

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_excess_blob_gas.py:

    test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_2-parent_blobs_6]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_0]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_1]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_2]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_3]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_4]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_5]\ntest_correct_excess_blob_gas_calculation[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_6]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_17]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_264]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_564]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_829]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_1129]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_1229]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_17]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_264]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_564]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_829]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_1129]\ntest_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_1229]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_17]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_264]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_564]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_829]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_1129]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_1229]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_17]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_264]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_564]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_829]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_1129]\ntest_correct_increasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-parent_excess_blobs_1229]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_18]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_265]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_565]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_830]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_1130]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_1230]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_18]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_265]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_565]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_830]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_1130]\ntest_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_1230]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_18]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_265]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_565]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_830]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_1130]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_1230]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_18]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_265]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_565]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_830]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_1130]\ntest_correct_decreasing_blob_gas_costs[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-parent_excess_blobs_1230]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_1-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_1-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_2-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_2-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_3-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_3-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_4-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_4-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_5-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_5-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_6-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_6-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_1-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_1-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_2-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_2-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_3-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_3-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_4-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_4-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_5-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_5-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_6-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_6-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_1-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_1-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_2-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_2-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_3-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_3-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_4-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_4-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_5-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_5-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_6-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test-parent_blobs_6-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_1-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_1-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_2-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_2-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_3-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_3-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_4-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_4-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_5-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_5-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_6-new_blobs_0-header_excess_blob_gas_0]\ntest_invalid_zero_excess_blob_gas_in_header[fork_Prague-blockchain_test_engine-parent_blobs_6-new_blobs_1-header_excess_blob_gas_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_0-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_1-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_2-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_3-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_4-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_786432]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_5-header_blob_gas_used_18446744073709551615]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_0]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_131072]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_262144]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_393216]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_524288]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_655360]\ntest_invalid_blob_gas_used_in_header[fork_Prague-blockchain_test_engine-parent_blobs_0-new_blobs_6-header_blob_gas_used_18446744073709551615]\ntest_invalid_excess_blob_gas_above_target_change[fork_Cancun-blockchain_test-new_blobs_1-zero_blobs_decrease_more_than_expected]\ntest_invalid_excess_blob_gas_above_target_change[fork_Cancun-blockchain_test-new_blobs_1-max_blobs_increase_more_than_expected]\ntest_invalid_excess_blob_gas_above_target_change[fork_Cancun-blockchain_test_engine-new_blobs_1-zero_blobs_decrease_more_than_expected]\ntest_invalid_excess_blob_gas_above_target_change[fork_Cancun-blockchain_test_engine-new_blobs_1-max_blobs_increase_more_than_expected]\ntest_invalid_excess_blob_gas_above_target_change[fork_Prague-blockchain_test-new_blobs_1-zero_blobs_decrease_more_than_expected]\ntest_invalid_excess_blob_gas_above_target_change[fork_Prague-blockchain_test-new_blobs_1-max_blobs_increase_more_than_expected]\ntest_invalid_excess_blob_gas_above_target_change[fork_Prague-blockchain_test_engine-new_blobs_1-zero_blobs_decrease_more_than_expected]\ntest_invalid_excess_blob_gas_above_target_change[fork_Prague-blockchain_test_engine-new_blobs_1-max_blobs_increase_more_than_expected]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_0]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_1]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_2]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_4]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_5]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_6]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_0]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_1]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_2]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_4]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_5]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_6]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_0]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_1]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_2]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_4]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_5]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_6]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_0]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_1]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_2]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_4]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_5]\ntest_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_6]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_0]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_1]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_2]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_4]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_5]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_6]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_0]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_1]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_2]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_4]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_5]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_6]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_0]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_1]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_2]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_4]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_5]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_1-parent_blobs_6]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_0]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_1]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_2]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_4]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_5]\ntest_invalid_static_excess_blob_gas[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_3-parent_blobs_6]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_5]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_4]\ntest_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_5]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_4-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_5-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_6-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_4-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_5-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_6-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_4-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_5-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Prague-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_6-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_4-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_5-header_excess_blob_gas_0]\ntest_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Prague-blockchain_test_engine-new_blobs_1-parent_excess_blobs_0-parent_blobs_6-header_excess_blob_gas_0]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-3]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_1]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_2]\ntest_invalid_excess_blob_gas_change[fork_Prague-blockchain_test_engine-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_3]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]\ntest_invalid_negative_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]\ntest_invalid_non_multiple_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_4-new_blobs_1-parent_blobs_4-header_excess_blob_gas_delta_1]\ntest_invalid_non_multiple_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_4-new_blobs_1-parent_blobs_4-header_excess_blob_gas_delta_131071]\ntest_invalid_non_multiple_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_4-new_blobs_1-parent_blobs_2-header_excess_blob_gas_delta_-1]\ntest_invalid_non_multiple_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_4-new_blobs_1-parent_blobs_2-header_excess_blob_gas_delta_-131071]\ntest_invalid_non_multiple_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_4-new_blobs_1-parent_blobs_4-header_excess_blob_gas_delta_1]\ntest_invalid_non_multiple_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_4-new_blobs_1-parent_blobs_4-header_excess_blob_gas_delta_131071]\ntest_invalid_non_multiple_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_4-new_blobs_1-parent_blobs_2-header_excess_blob_gas_delta_-1]\ntest_invalid_non_multiple_excess_blob_gas[fork_Cancun-blockchain_test_engine-parent_excess_blobs_4-new_blobs_1-parent_blobs_2-header_excess_blob_gas_delta_-131071]\ntest_invalid_non_multiple_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_4-new_blobs_1-parent_blobs_4-header_excess_blob_gas_delta_1]\ntest_invalid_non_multiple_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_4-new_blobs_1-parent_blobs_4-header_excess_blob_gas_delta_131071]\ntest_invalid_non_multiple_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_4-new_blobs_1-parent_blobs_2-header_excess_blob_gas_delta_-1]\ntest_invalid_non_multiple_excess_blob_gas[fork_Prague-blockchain_test-parent_excess_blobs_4-new_blobs_1-parent_blobs_2-header_excess_blob_gas_delta_-131071]\ntest_invalid_non_multiple_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_4-new_blobs_1-parent_blobs_4-header_excess_blob_gas_delta_1]\ntest_invalid_non_multiple_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_4-new_blobs_1-parent_blobs_4-header_excess_blob_gas_delta_131071]\ntest_invalid_non_multiple_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_4-new_blobs_1-parent_blobs_2-header_excess_blob_gas_delta_-1]\ntest_invalid_non_multiple_excess_blob_gas[fork_Prague-blockchain_test_engine-parent_excess_blobs_4-new_blobs_1-parent_blobs_2-header_excess_blob_gas_delta_-131071]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip4844_blobs/test_excess_blob_gas.py\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition/","title":"Test Excess Blob Gas Fork Transition","text":"

    Documentation for tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py\n
    Tests excessBlobGas and blobGasUsed block fields for EIP-4844: Shard Blob Transactions at fork transition.

    Test excessBlobGas and blobGasUsed block fields for EIP-4844: Shard Blob Transactions at fork transition.

    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition/#tests.cancun.eip4844_blobs.test_excess_blob_gas_fork_transition.test_invalid_pre_fork_block_with_blob_fields","title":"test_invalid_pre_fork_block_with_blob_fields(blockchain_test, env, pre, pre_fork_blocks, excess_blob_gas_present, blob_gas_used_present)","text":"

    Test block rejection when excessBlobGas and/or blobGasUsed fields are present on a pre-fork block.

    Blocks sent by NewPayloadV2 (Shanghai) that contain excessBlobGas and blobGasUsed fields must be rejected with the appropriate EngineAPIError.InvalidParams error error.

    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py
    @pytest.mark.parametrize(\n    \"excess_blob_gas_present,blob_gas_used_present\",\n    [\n        (True, False),\n        (False, True),\n        (True, True),\n    ],\n)\ndef test_invalid_pre_fork_block_with_blob_fields(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    pre_fork_blocks: List[Block],\n    excess_blob_gas_present: bool,\n    blob_gas_used_present: bool,\n):\n    \"\"\"\n    Test block rejection when `excessBlobGas` and/or `blobGasUsed` fields are present on a pre-fork\n    block.\n\n    Blocks sent by NewPayloadV2 (Shanghai) that contain `excessBlobGas` and `blobGasUsed` fields\n    must be rejected with the appropriate `EngineAPIError.InvalidParams` error error.\n    \"\"\"\n    header_modifier = Header(\n        excess_blob_gas=0 if excess_blob_gas_present else None,\n        blob_gas_used=0 if blob_gas_used_present else None,\n    )\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=pre_fork_blocks[:-1]\n        + [\n            Block(\n                timestamp=(FORK_TIMESTAMP - 1),\n                rlp_modifier=header_modifier,\n                exception=BlockException.INCORRECT_BLOCK_FORMAT,\n                engine_api_error_code=EngineAPIError.InvalidParams,\n            )\n        ],\n        genesis_environment=env,\n        tag=\"invalid_pre_fork_blob_fields\",\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition/#tests.cancun.eip4844_blobs.test_excess_blob_gas_fork_transition.test_invalid_post_fork_block_without_blob_fields","title":"test_invalid_post_fork_block_without_blob_fields(blockchain_test, env, pre, pre_fork_blocks, excess_blob_gas_missing, blob_gas_used_missing)","text":"

    Test block rejection when excessBlobGas and/or blobGasUsed fields are missing on a post-fork block.

    Blocks sent by NewPayloadV3 (Cancun) without excessBlobGas and blobGasUsed fields must be rejected with the appropriate EngineAPIError.InvalidParams error.

    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py
    @pytest.mark.parametrize(\n    \"excess_blob_gas_missing,blob_gas_used_missing\",\n    [\n        (True, False),\n        (False, True),\n        (True, True),\n    ],\n)\ndef test_invalid_post_fork_block_without_blob_fields(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    pre_fork_blocks: List[Block],\n    excess_blob_gas_missing: bool,\n    blob_gas_used_missing: bool,\n):\n    \"\"\"\n    Test block rejection when `excessBlobGas` and/or `blobGasUsed` fields are missing on a\n    post-fork block.\n\n    Blocks sent by NewPayloadV3 (Cancun) without `excessBlobGas` and `blobGasUsed` fields must be\n    rejected with the appropriate `EngineAPIError.InvalidParams` error.\n    \"\"\"\n    header_modifier = Header()\n    if excess_blob_gas_missing:\n        header_modifier.excess_blob_gas = Header.REMOVE_FIELD\n    if blob_gas_used_missing:\n        header_modifier.blob_gas_used = Header.REMOVE_FIELD\n    blockchain_test(\n        pre=pre,\n        post={},\n        blocks=pre_fork_blocks\n        + [\n            Block(\n                timestamp=FORK_TIMESTAMP,\n                rlp_modifier=header_modifier,\n                exception=BlockException.INCORRECT_BLOCK_FORMAT,\n                engine_api_error_code=EngineAPIError.InvalidParams,\n            )\n        ],\n        genesis_environment=env,\n        tag=\"blob_fields_missing_post_fork\",\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition/#tests.cancun.eip4844_blobs.test_excess_blob_gas_fork_transition.test_fork_transition_excess_blob_gas","title":"test_fork_transition_excess_blob_gas(blockchain_test, env, pre, pre_fork_blocks, post_fork_blocks, post)","text":"

    Test excessBlobGas calculation in the header when the fork is activated.

    Also produce enough blocks to test the blob gas price increase when the block is full with SpecHelpers.max_blobs_per_block() blobs.

    Source code in tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py
    @pytest.mark.parametrize(\n    \"post_fork_block_count,blob_count_per_block\",\n    [\n        (\n            SpecHelpers.get_min_excess_blobs_for_blob_gas_price(2)\n            // (SpecHelpers.max_blobs_per_block() - SpecHelpers.target_blobs_per_block())\n            + 2,\n            SpecHelpers.max_blobs_per_block(),\n        ),\n        (10, 0),\n        (10, SpecHelpers.target_blobs_per_block()),\n    ],\n    ids=[\"max_blobs\", \"no_blobs\", \"target_blobs\"],\n)\ndef test_fork_transition_excess_blob_gas(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Mapping[Address, Account],\n    pre_fork_blocks: List[Block],\n    post_fork_blocks: List[Block],\n    post: Mapping[Address, Account],\n):\n    \"\"\"\n    Test `excessBlobGas` calculation in the header when the fork is activated.\n\n    Also produce enough blocks to test the blob gas price increase when the block is full with\n    `SpecHelpers.max_blobs_per_block()` blobs.\n    \"\"\"\n    blockchain_test(\n        pre=pre,\n        post=post,\n        blocks=pre_fork_blocks + post_fork_blocks,\n        genesis_environment=env,\n        tag=\"correct_initial_blob_gas_calc\",\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition/index/test_cases/","title":"Test Excess Blob Gas Fork Transition - Test Cases","text":"

    Test cases generated from tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py:

    test_invalid_pre_fork_block_with_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_present_True-blob_gas_used_present_False]\ntest_invalid_pre_fork_block_with_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_present_False-blob_gas_used_present_True]\ntest_invalid_pre_fork_block_with_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_present_True-blob_gas_used_present_True]\ntest_invalid_pre_fork_block_with_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-excess_blob_gas_present_True-blob_gas_used_present_False]\ntest_invalid_pre_fork_block_with_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-excess_blob_gas_present_False-blob_gas_used_present_True]\ntest_invalid_pre_fork_block_with_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-excess_blob_gas_present_True-blob_gas_used_present_True]\ntest_invalid_post_fork_block_without_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_missing_True-blob_gas_used_missing_False]\ntest_invalid_post_fork_block_without_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_missing_False-blob_gas_used_missing_True]\ntest_invalid_post_fork_block_without_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_missing_True-blob_gas_used_missing_True]\ntest_invalid_post_fork_block_without_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-excess_blob_gas_missing_True-blob_gas_used_missing_False]\ntest_invalid_post_fork_block_without_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-excess_blob_gas_missing_False-blob_gas_used_missing_True]\ntest_invalid_post_fork_block_without_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-excess_blob_gas_missing_True-blob_gas_used_missing_True]\ntest_fork_transition_excess_blob_gas[fork_ShanghaiToCancunAtTime15k-blockchain_test-max_blobs]\ntest_fork_transition_excess_blob_gas[fork_ShanghaiToCancunAtTime15k-blockchain_test-no_blobs]\ntest_fork_transition_excess_blob_gas[fork_ShanghaiToCancunAtTime15k-blockchain_test-target_blobs]\ntest_fork_transition_excess_blob_gas[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-max_blobs]\ntest_fork_transition_excess_blob_gas[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-no_blobs]\ntest_fork_transition_excess_blob_gas[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-target_blobs]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py\n
    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile/","title":"Test Point Evaluation Precompile","text":"

    Documentation for tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py\n
    Tests point evaluation precompile for EIP-4844: Shard Blob Transactions

    Test point evaluation precompile for EIP-4844: Shard Blob Transactions.

    Adding a new test

    Add a function that is named test_<test_name> and takes at least the following arguments:

    • blockchain_test | state_test
    • pre
    • tx
    • post

    The following arguments need to be parametrized or the test will not be generated:

    • versioned_hash
    • kzg_commitment
    • z
    • y
    • kzg_proof
    • result

    These values correspond to a single call of the precompile, and result refers to whether the call should succeed or fail.

    All other pytest.fixture fixtures can be parametrized to generate new combinations and test cases.

    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile/#tests.cancun.eip4844_blobs.test_point_evaluation_precompile.test_valid_inputs","title":"test_valid_inputs(state_test, pre, tx, post)","text":"

    Test valid sanity precompile calls that are expected to succeed.

    • kzg_commitment and kzg_proof are set to values such that p(z)==0 for all values of z, hence y is tested to be zero, and call to be successful.
    Source code in tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py
    @pytest.mark.parametrize(\n    \"z,y,kzg_commitment,kzg_proof,versioned_hash\",\n    [\n        pytest.param(Spec.BLS_MODULUS - 1, 0, INF_POINT, INF_POINT, None, id=\"in_bounds_z\"),\n    ],\n)\n@pytest.mark.parametrize(\"result\", [Result.SUCCESS])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_valid_inputs(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Test valid sanity precompile calls that are expected to succeed.\n\n    - `kzg_commitment` and `kzg_proof` are set to values such that `p(z)==0` for all values of `z`,\n    hence `y` is tested to be zero, and call to be successful.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile/#tests.cancun.eip4844_blobs.test_point_evaluation_precompile.test_invalid_inputs","title":"test_invalid_inputs(state_test, pre, tx, post)","text":"

    Test invalid precompile calls:

    • Out of bounds inputs z and y
    • Correct proof, commitment, z and y, but incorrect lengths
    • Null inputs
    • Zero inputs
    • Correct proof, commitment, z and y, but incorrect version versioned hash
    Source code in tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py
    @pytest.mark.parametrize(\n    \"z,y,kzg_commitment,kzg_proof,versioned_hash\",\n    [\n        (Spec.BLS_MODULUS, 0, INF_POINT, INF_POINT, None),\n        (0, Spec.BLS_MODULUS, INF_POINT, INF_POINT, None),\n        (Z, 0, INF_POINT, INF_POINT[:-1], None),\n        (Z, 0, INF_POINT, INF_POINT[0:1], None),\n        (Z, 0, INF_POINT, INF_POINT + bytes([0]), None),\n        (Z, 0, INF_POINT, INF_POINT + bytes([0] * 1023), None),\n        (bytes(), bytes(), bytes(), bytes(), bytes()),\n        (0, 0, 0, 0, 0),\n        (0, 0, 0, 0, None),\n        (Z, 0, INF_POINT, INF_POINT, Spec.kzg_to_versioned_hash(0xC0 << 376, 0x00)),\n        (Z, 0, INF_POINT, INF_POINT, Spec.kzg_to_versioned_hash(0xC0 << 376, 0x02)),\n        (Z, 0, INF_POINT, INF_POINT, Spec.kzg_to_versioned_hash(0xC0 << 376, 0xFF)),\n    ],\n    ids=[\n        \"out_of_bounds_z\",\n        \"out_of_bounds_y\",\n        \"correct_proof_1_input_too_short\",\n        \"correct_proof_1_input_too_short_2\",\n        \"correct_proof_1_input_too_long\",\n        \"correct_proof_1_input_extra_long\",\n        \"null_inputs\",\n        \"zeros_inputs\",\n        \"zeros_inputs_correct_versioned_hash\",\n        \"correct_proof_1_incorrect_versioned_hash_version_0x00\",\n        \"correct_proof_1_incorrect_versioned_hash_version_0x02\",\n        \"correct_proof_1_incorrect_versioned_hash_version_0xff\",\n    ],\n)\n@pytest.mark.parametrize(\"result\", [Result.FAILURE])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_invalid_inputs(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Test invalid precompile calls:\n\n    - Out of bounds inputs `z` and `y`\n    - Correct proof, commitment, z and y, but incorrect lengths\n    - Null inputs\n    - Zero inputs\n    - Correct proof, commitment, z and y, but incorrect version versioned hash\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile/#tests.cancun.eip4844_blobs.test_point_evaluation_precompile.test_external_vectors","title":"test_external_vectors(state_test, pre, tx, post)","text":"

    Test precompile calls using external test vectors compiled from different sources:

    • go_kzg_4844_verify_kzg_proof.json: test vectors from the go-kzg-4844 repository.
    Source code in tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py
    @pytest.mark.parametrize(\n    \"z,y,kzg_commitment,kzg_proof,result\",\n    all_external_vectors(),\n)\n@pytest.mark.parametrize(\"versioned_hash\", [None])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_external_vectors(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Test precompile calls using external test vectors compiled from different sources:\n\n    - `go_kzg_4844_verify_kzg_proof.json`: test vectors from the\n    [go-kzg-4844](https://github.com/crate-crypto/go-kzg-4844) repository.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile/#tests.cancun.eip4844_blobs.test_point_evaluation_precompile.test_call_opcode_types","title":"test_call_opcode_types(state_test, pre, tx, post)","text":"

    Test calling the Point Evaluation Precompile with different call types, gas and parameter configuration:

    • Using CALL, DELEGATECALL, CALLCODE and STATICCALL.
    • Using correct and incorrect proofs
    • Using barely insufficient gas
    Source code in tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py
    @pytest.mark.parametrize(\n    \"call_gas,y,result\",\n    [\n        (Spec.POINT_EVALUATION_PRECOMPILE_GAS, 0, Result.SUCCESS),\n        (Spec.POINT_EVALUATION_PRECOMPILE_GAS, 1, Result.FAILURE),\n        (Spec.POINT_EVALUATION_PRECOMPILE_GAS - 1, 0, Result.OUT_OF_GAS),\n    ],\n    ids=[\"correct\", \"incorrect\", \"insufficient_gas\"],\n)\n@pytest.mark.with_all_call_opcodes\n@pytest.mark.parametrize(\n    \"z,kzg_commitment,kzg_proof,versioned_hash\",\n    [[Z, INF_POINT, INF_POINT, None]],\n    ids=[\"\"],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_call_opcode_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Test calling the Point Evaluation Precompile with different call types, gas\n    and parameter configuration:\n\n    - Using CALL, DELEGATECALL, CALLCODE and STATICCALL.\n    - Using correct and incorrect proofs\n    - Using barely insufficient gas\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile/#tests.cancun.eip4844_blobs.test_point_evaluation_precompile.test_tx_entry_point","title":"test_tx_entry_point(state_test, precompile_input, call_gas, pre, proof_correct)","text":"

    Test calling the Point Evaluation Precompile directly as transaction entry point, and measure the gas consumption.

    • Using gas_limit with exact necessary gas, insufficient gas and extra gas.
    • Using correct and incorrect proofs
    Source code in tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py
    @pytest.mark.parametrize(\n    \"call_gas\",\n    [\n        (Spec.POINT_EVALUATION_PRECOMPILE_GAS),\n        (Spec.POINT_EVALUATION_PRECOMPILE_GAS + 1),\n        (Spec.POINT_EVALUATION_PRECOMPILE_GAS - 1),\n    ],\n    ids=[\"exact_gas\", \"extra_gas\", \"insufficient_gas\"],\n)\n@pytest.mark.parametrize(\n    \"z,y,kzg_commitment,kzg_proof,versioned_hash,proof_correct\",\n    [\n        [Z, 0, INF_POINT, INF_POINT, None, True],\n        [Z, 1, INF_POINT, INF_POINT, None, False],\n    ],\n    ids=[\"correct_proof\", \"incorrect_proof\"],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_tx_entry_point(\n    state_test: StateTestFiller,\n    precompile_input: bytes,\n    call_gas: int,\n    pre: Alloc,\n    proof_correct: bool,\n):\n    \"\"\"\n    Test calling the Point Evaluation Precompile directly as\n    transaction entry point, and measure the gas consumption.\n\n    - Using `gas_limit` with exact necessary gas, insufficient gas and extra gas.\n    - Using correct and incorrect proofs\n    \"\"\"\n    start_balance = 10**18\n    sender = pre.fund_eoa(amount=start_balance)\n\n    # Gas is appended the intrinsic gas cost of the transaction\n    intrinsic_gas_cost = 21_000 + eip_2028_transaction_data_cost(precompile_input)\n\n    # Consumed gas will only be the precompile gas if the proof is correct and\n    # the call gas is sufficient.\n    # Otherwise, the call gas will be consumed in full.\n    consumed_gas = (\n        Spec.POINT_EVALUATION_PRECOMPILE_GAS\n        if call_gas >= Spec.POINT_EVALUATION_PRECOMPILE_GAS and proof_correct\n        else call_gas\n    ) + intrinsic_gas_cost\n\n    fee_per_gas = 7\n\n    tx = Transaction(\n        sender=sender,\n        data=precompile_input,\n        to=Address(Spec.POINT_EVALUATION_PRECOMPILE_ADDRESS),\n        gas_limit=call_gas + intrinsic_gas_cost,\n        gas_price=fee_per_gas,\n    )\n\n    post = {\n        sender: Account(\n            nonce=1,\n            balance=start_balance - (consumed_gas * fee_per_gas),\n        )\n    }\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile/#tests.cancun.eip4844_blobs.test_point_evaluation_precompile.test_precompile_before_fork","title":"test_precompile_before_fork(state_test, pre, tx, precompile_caller_address)","text":"

    Test calling the Point Evaluation Precompile before the appropriate fork.

    Source code in tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py
    @pytest.mark.parametrize(\n    \"z,y,kzg_commitment,kzg_proof,versioned_hash\",\n    [[Z, 0, INF_POINT, INF_POINT, None]],\n    ids=[\"correct_proof\"],\n)\n@pytest.mark.parametrize(\"precompile_caller_storage\", [{}], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_caller_balance\", [1], ids=[\"\"])\n@pytest.mark.parametrize(\n    \"precompile_caller_code\",\n    [\n        Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n        + Op.SSTORE(\n            Op.NUMBER,\n            Op.CALL(\n                address=Spec.POINT_EVALUATION_PRECOMPILE_ADDRESS,\n                value=1,\n                args_size=Op.CALLDATASIZE,\n            ),\n        )\n    ],\n    ids=[\"\"],\n)\n@pytest.mark.valid_at_transition_to(\"Cancun\")\ndef test_precompile_before_fork(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    tx: Transaction,\n    precompile_caller_address: Address,\n):\n    \"\"\"\n    Test calling the Point Evaluation Precompile before the appropriate fork.\n    \"\"\"\n    post = {\n        precompile_caller_address: Account(\n            storage={1: 1},\n            # The call succeeds because precompile is not there yet\n        ),\n        Address(Spec.POINT_EVALUATION_PRECOMPILE_ADDRESS): Account(\n            balance=1,\n        ),\n    }\n\n    state_test(\n        pre=pre,\n        env=Environment(timestamp=7_500),\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile/#tests.cancun.eip4844_blobs.test_point_evaluation_precompile.test_precompile_during_fork","title":"test_precompile_during_fork(blockchain_test, pre, precompile_caller_address, precompile_input, sender)","text":"

    Test calling the Point Evaluation Precompile before the appropriate fork.

    Source code in tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py
    @pytest.mark.parametrize(\n    \"z,y,kzg_commitment,kzg_proof,versioned_hash\",\n    [[Z, 0, INF_POINT, INF_POINT, None]],\n    ids=[\"correct_proof\"],\n)\n@pytest.mark.parametrize(\"precompile_caller_storage\", [{}], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_caller_balance\", [len(PRE_FORK_BLOCK_RANGE)], ids=[\"\"])\n@pytest.mark.parametrize(\n    \"precompile_caller_code\",\n    [\n        Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n        + Op.SSTORE(\n            Op.NUMBER,\n            Op.CALL(\n                address=Spec.POINT_EVALUATION_PRECOMPILE_ADDRESS,\n                value=1,\n                args_size=Op.CALLDATASIZE,\n            ),\n        )\n    ],\n    ids=[\"\"],\n)\n@pytest.mark.valid_at_transition_to(\"Cancun\")\ndef test_precompile_during_fork(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    precompile_caller_address: Address,\n    precompile_input: bytes,\n    sender: EOA,\n):\n    \"\"\"\n    Test calling the Point Evaluation Precompile before the appropriate fork.\n    \"\"\"\n    # Blocks before fork\n    blocks = [\n        Block(\n            timestamp=t,\n            txs=[\n                Transaction(\n                    sender=sender,\n                    data=precompile_input,\n                    to=precompile_caller_address,\n                    gas_limit=Spec.POINT_EVALUATION_PRECOMPILE_GAS * 100,\n                )\n            ],\n        )\n        for t in PRE_FORK_BLOCK_RANGE\n    ]\n    # Block after fork\n    blocks += [\n        Block(\n            timestamp=FORK_TIMESTAMP,\n            txs=[\n                Transaction(\n                    sender=sender,\n                    data=precompile_input,\n                    to=precompile_caller_address,\n                    gas_limit=Spec.POINT_EVALUATION_PRECOMPILE_GAS * 100,\n                )\n            ],\n        )\n    ]\n\n    post = {\n        precompile_caller_address: Account(\n            storage={b: 1 for b in range(1, len(PRE_FORK_BLOCK_RANGE) + 1)},\n            # Only the call in the last block's tx fails; storage 0 by default.\n        ),\n        Address(Spec.POINT_EVALUATION_PRECOMPILE_ADDRESS): Account(\n            balance=len(PRE_FORK_BLOCK_RANGE),\n        ),\n    }\n\n    blockchain_test(\n        pre=pre,\n        post=post,\n        blocks=blocks,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile/index/test_cases/","title":"Test Point Evaluation Precompile - Test Cases","text":"

    Test cases generated from tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py:

    test_valid_inputs[fork_Cancun-blockchain_test-result_Result.SUCCESS-in_bounds_z]\ntest_valid_inputs[fork_Cancun-blockchain_test_engine-result_Result.SUCCESS-in_bounds_z]\ntest_valid_inputs[fork_Cancun-state_test-result_Result.SUCCESS-in_bounds_z]\ntest_valid_inputs[fork_Prague-blockchain_test-result_Result.SUCCESS-in_bounds_z]\ntest_valid_inputs[fork_Prague-blockchain_test_engine-result_Result.SUCCESS-in_bounds_z]\ntest_valid_inputs[fork_Prague-state_test-result_Result.SUCCESS-in_bounds_z]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-out_of_bounds_z]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-out_of_bounds_y]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-correct_proof_1_input_too_short]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-correct_proof_1_input_too_short_2]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-correct_proof_1_input_too_long]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-correct_proof_1_input_extra_long]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-null_inputs]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-zeros_inputs]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-zeros_inputs_correct_versioned_hash]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x00]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x02]\ntest_invalid_inputs[fork_Cancun-blockchain_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0xff]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-out_of_bounds_z]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-out_of_bounds_y]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_input_too_short]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_input_too_short_2]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_input_too_long]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_input_extra_long]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-null_inputs]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-zeros_inputs]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-zeros_inputs_correct_versioned_hash]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x00]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x02]\ntest_invalid_inputs[fork_Cancun-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0xff]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-out_of_bounds_z]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-out_of_bounds_y]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-correct_proof_1_input_too_short]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-correct_proof_1_input_too_short_2]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-correct_proof_1_input_too_long]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-correct_proof_1_input_extra_long]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-null_inputs]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-zeros_inputs]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-zeros_inputs_correct_versioned_hash]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x00]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x02]\ntest_invalid_inputs[fork_Cancun-state_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0xff]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-out_of_bounds_z]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-out_of_bounds_y]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-correct_proof_1_input_too_short]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-correct_proof_1_input_too_short_2]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-correct_proof_1_input_too_long]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-correct_proof_1_input_extra_long]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-null_inputs]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-zeros_inputs]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-zeros_inputs_correct_versioned_hash]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x00]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x02]\ntest_invalid_inputs[fork_Prague-blockchain_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0xff]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-out_of_bounds_z]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-out_of_bounds_y]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_input_too_short]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_input_too_short_2]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_input_too_long]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_input_extra_long]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-null_inputs]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-zeros_inputs]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-zeros_inputs_correct_versioned_hash]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x00]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x02]\ntest_invalid_inputs[fork_Prague-blockchain_test_engine-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0xff]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-out_of_bounds_z]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-out_of_bounds_y]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-correct_proof_1_input_too_short]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-correct_proof_1_input_too_short_2]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-correct_proof_1_input_too_long]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-correct_proof_1_input_extra_long]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-null_inputs]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-zeros_inputs]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-zeros_inputs_correct_versioned_hash]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x00]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0x02]\ntest_invalid_inputs[fork_Prague-state_test-result_Result.FAILURE-correct_proof_1_incorrect_versioned_hash_version_0xff]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_26b753dec0560daa]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_31ebd010e6098750]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3208425794224c3f]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_420f2a187ce77035]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_585454b31673dd62]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b24f8997145435c]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_af669445747d2585]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_cae5d3491190b777]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_d736268229bd87ec]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_05c1f3685f3393f0]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_177b58dc7a46b08f]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_395cf6d697d1a743]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_585454b31673dd62]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_a0be66af9a97ea52]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_02e696ada7d4631d]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3208425794224c3f]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_ffa6e97b97146517]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_26b753dec0560daa]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_31ebd010e6098750]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3208425794224c3f]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_420f2a187ce77035]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_585454b31673dd62]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b24f8997145435c]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af669445747d2585]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_cae5d3491190b777]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d736268229bd87ec]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_392169c16a2e5ef6]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c1e8b38219e3e12]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c87ec986c2656c2]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_420f2a187ce77035]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_83e53423a2dd93fe]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_ed6b180ec759bcf6]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_1b44e341d56c757d]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_32afa9561a4b3b91]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_3e55802a5ed3c757]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_1b44e341d56c757d]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_32afa9561a4b3b91]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_3e55802a5ed3c757]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_35d08d612aad2197]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_4aa6def8c35c9097]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_4e51cef08a61606f]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_b358a2e763727b70]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_eb0601fec84cc5e9]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_35d08d612aad2197]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_4aa6def8c35c9097]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_4e51cef08a61606f]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_b358a2e763727b70]\ntest_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_eb0601fec84cc5e9]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_26b753dec0560daa]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_31ebd010e6098750]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_3208425794224c3f]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_420f2a187ce77035]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_585454b31673dd62]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b24f8997145435c]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_af669445747d2585]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_cae5d3491190b777]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_d736268229bd87ec]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_05c1f3685f3393f0]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_177b58dc7a46b08f]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_395cf6d697d1a743]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_585454b31673dd62]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_a0be66af9a97ea52]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_02e696ada7d4631d]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3208425794224c3f]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_ffa6e97b97146517]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_26b753dec0560daa]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_31ebd010e6098750]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3208425794224c3f]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_420f2a187ce77035]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_585454b31673dd62]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b24f8997145435c]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af669445747d2585]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_cae5d3491190b777]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d736268229bd87ec]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_392169c16a2e5ef6]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c1e8b38219e3e12]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c87ec986c2656c2]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_420f2a187ce77035]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_83e53423a2dd93fe]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_ed6b180ec759bcf6]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_1b44e341d56c757d]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_32afa9561a4b3b91]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_3e55802a5ed3c757]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_proof_1b44e341d56c757d]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_proof_32afa9561a4b3b91]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_proof_3e55802a5ed3c757]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_proof_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_35d08d612aad2197]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_4aa6def8c35c9097]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_4e51cef08a61606f]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_b358a2e763727b70]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_eb0601fec84cc5e9]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_35d08d612aad2197]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_4aa6def8c35c9097]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_4e51cef08a61606f]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_b358a2e763727b70]\ntest_external_vectors[fork_Cancun-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_eb0601fec84cc5e9]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_26b753dec0560daa]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_31ebd010e6098750]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3208425794224c3f]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_420f2a187ce77035]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_585454b31673dd62]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b24f8997145435c]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_af669445747d2585]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_cae5d3491190b777]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_d736268229bd87ec]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_05c1f3685f3393f0]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_177b58dc7a46b08f]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_395cf6d697d1a743]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_585454b31673dd62]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_a0be66af9a97ea52]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_02e696ada7d4631d]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3208425794224c3f]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_ffa6e97b97146517]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_26b753dec0560daa]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_31ebd010e6098750]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3208425794224c3f]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_420f2a187ce77035]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_585454b31673dd62]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b24f8997145435c]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af669445747d2585]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_cae5d3491190b777]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d736268229bd87ec]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_392169c16a2e5ef6]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c1e8b38219e3e12]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c87ec986c2656c2]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_420f2a187ce77035]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_83e53423a2dd93fe]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_ed6b180ec759bcf6]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_1b44e341d56c757d]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_32afa9561a4b3b91]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_3e55802a5ed3c757]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_1b44e341d56c757d]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_32afa9561a4b3b91]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_3e55802a5ed3c757]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_35d08d612aad2197]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_4aa6def8c35c9097]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_4e51cef08a61606f]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_b358a2e763727b70]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_eb0601fec84cc5e9]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_35d08d612aad2197]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_4aa6def8c35c9097]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_4e51cef08a61606f]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_b358a2e763727b70]\ntest_external_vectors[fork_Cancun-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_eb0601fec84cc5e9]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_26b753dec0560daa]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_31ebd010e6098750]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3208425794224c3f]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_420f2a187ce77035]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_585454b31673dd62]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b24f8997145435c]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_af669445747d2585]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_cae5d3491190b777]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_d736268229bd87ec]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_05c1f3685f3393f0]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_177b58dc7a46b08f]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_395cf6d697d1a743]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_585454b31673dd62]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_a0be66af9a97ea52]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_02e696ada7d4631d]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3208425794224c3f]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_ffa6e97b97146517]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_26b753dec0560daa]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_31ebd010e6098750]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3208425794224c3f]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_420f2a187ce77035]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_585454b31673dd62]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b24f8997145435c]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af669445747d2585]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_cae5d3491190b777]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d736268229bd87ec]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_392169c16a2e5ef6]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c1e8b38219e3e12]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c87ec986c2656c2]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_420f2a187ce77035]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_83e53423a2dd93fe]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_ed6b180ec759bcf6]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_1b44e341d56c757d]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_32afa9561a4b3b91]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_3e55802a5ed3c757]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_1b44e341d56c757d]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_32afa9561a4b3b91]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_3e55802a5ed3c757]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_35d08d612aad2197]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_4aa6def8c35c9097]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_4e51cef08a61606f]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_b358a2e763727b70]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_eb0601fec84cc5e9]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_35d08d612aad2197]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_4aa6def8c35c9097]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_4e51cef08a61606f]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_b358a2e763727b70]\ntest_external_vectors[fork_Prague-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_eb0601fec84cc5e9]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_26b753dec0560daa]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_31ebd010e6098750]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_3208425794224c3f]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_420f2a187ce77035]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_585454b31673dd62]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b24f8997145435c]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_af669445747d2585]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_cae5d3491190b777]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_d736268229bd87ec]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_05c1f3685f3393f0]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_177b58dc7a46b08f]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_395cf6d697d1a743]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_585454b31673dd62]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_a0be66af9a97ea52]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_02e696ada7d4631d]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3208425794224c3f]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_ffa6e97b97146517]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_26b753dec0560daa]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_31ebd010e6098750]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3208425794224c3f]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_420f2a187ce77035]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_585454b31673dd62]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b24f8997145435c]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af669445747d2585]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_cae5d3491190b777]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d736268229bd87ec]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_392169c16a2e5ef6]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c1e8b38219e3e12]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c87ec986c2656c2]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_420f2a187ce77035]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_83e53423a2dd93fe]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_ed6b180ec759bcf6]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_1b44e341d56c757d]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_32afa9561a4b3b91]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_3e55802a5ed3c757]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_proof_1b44e341d56c757d]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_proof_32afa9561a4b3b91]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_proof_3e55802a5ed3c757]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_proof_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_35d08d612aad2197]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_4aa6def8c35c9097]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_4e51cef08a61606f]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_b358a2e763727b70]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_y_eb0601fec84cc5e9]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_35d08d612aad2197]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_4aa6def8c35c9097]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_4e51cef08a61606f]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_b358a2e763727b70]\ntest_external_vectors[fork_Prague-blockchain_test_engine-versioned_hash_None-verify_kzg_proof_case_invalid_z_eb0601fec84cc5e9]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_26b753dec0560daa]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_31ebd010e6098750]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3208425794224c3f]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_420f2a187ce77035]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_585454b31673dd62]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b24f8997145435c]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_af669445747d2585]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_cae5d3491190b777]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_d736268229bd87ec]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_05c1f3685f3393f0]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_177b58dc7a46b08f]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_395cf6d697d1a743]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_585454b31673dd62]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_a0be66af9a97ea52]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_02e696ada7d4631d]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3208425794224c3f]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_ffa6e97b97146517]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_02e696ada7d4631d]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_05c1f3685f3393f0]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_08f9e2f1cb3d39db]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_0cf79b17cb5f4ea2]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_177b58dc7a46b08f]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_1ce8e4f69d5df899]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_26b753dec0560daa]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_2b76dc9e3abf42f3]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_31ebd010e6098750]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3208425794224c3f]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_36817bfd67de97a8]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_392169c16a2e5ef6]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_395cf6d697d1a743]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3ac8dc31e9aa6a70]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c1e8b38219e3e12]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c87ec986c2656c2]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3cd183d0bab85fb7]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_420f2a187ce77035]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_444b73ff54a19b44]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_53a9bdf4f75196da]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_585454b31673dd62]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_7db4f140a955dd1a]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_83e53423a2dd93fe]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b24f8997145435c]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b754afb690c47e1]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_a0be66af9a97ea52]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af669445747d2585]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af8b75f664ed7d43]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6cb6698327d9835]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6ec3736f9ff2c62]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_becf2e1641bbd4e6]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c3d4322ec17fe7cd]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c5e1490d672d026d]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_cae5d3491190b777]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d0992bc0387790a4]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d736268229bd87ec]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_e68d7111a2364a49]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ed6b180ec759bcf6]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f0ed3dc11cdeb130]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f47eb9fc139f6bfd]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f7f44e1e864aa967]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ffa6e97b97146517]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_392169c16a2e5ef6]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c1e8b38219e3e12]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c87ec986c2656c2]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_420f2a187ce77035]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_83e53423a2dd93fe]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_ed6b180ec759bcf6]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_1b44e341d56c757d]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_32afa9561a4b3b91]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_3e55802a5ed3c757]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_1b44e341d56c757d]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_32afa9561a4b3b91]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_3e55802a5ed3c757]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_e9d3e9ec16fbc15f]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_35d08d612aad2197]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_4aa6def8c35c9097]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_4e51cef08a61606f]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_b358a2e763727b70]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_eb0601fec84cc5e9]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_35d08d612aad2197]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_4aa6def8c35c9097]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_4e51cef08a61606f]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_64b9ff2b8f7dddee]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_b358a2e763727b70]\ntest_external_vectors[fork_Prague-state_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_eb0601fec84cc5e9]\ntest_call_opcode_types[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-state_test--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-state_test--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-state_test--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine--insufficient_gas]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test--correct]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test--incorrect]\ntest_call_opcode_types[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine--insufficient_gas]\ntest_call_opcode_types[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test--correct]\ntest_call_opcode_types[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test--incorrect]\ntest_call_opcode_types[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test--insufficient_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test-correct_proof-exact_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test-correct_proof-extra_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test-correct_proof-insufficient_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test-incorrect_proof-exact_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test-incorrect_proof-extra_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test-incorrect_proof-insufficient_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test_engine-correct_proof-exact_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test_engine-correct_proof-extra_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test_engine-correct_proof-insufficient_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test_engine-incorrect_proof-exact_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test_engine-incorrect_proof-extra_gas]\ntest_tx_entry_point[fork_Cancun-blockchain_test_engine-incorrect_proof-insufficient_gas]\ntest_tx_entry_point[fork_Cancun-state_test-correct_proof-exact_gas]\ntest_tx_entry_point[fork_Cancun-state_test-correct_proof-extra_gas]\ntest_tx_entry_point[fork_Cancun-state_test-correct_proof-insufficient_gas]\ntest_tx_entry_point[fork_Cancun-state_test-incorrect_proof-exact_gas]\ntest_tx_entry_point[fork_Cancun-state_test-incorrect_proof-extra_gas]\ntest_tx_entry_point[fork_Cancun-state_test-incorrect_proof-insufficient_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test-correct_proof-exact_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test-correct_proof-extra_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test-correct_proof-insufficient_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test-incorrect_proof-exact_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test-incorrect_proof-extra_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test-incorrect_proof-insufficient_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test_engine-correct_proof-exact_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test_engine-correct_proof-extra_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test_engine-correct_proof-insufficient_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test_engine-incorrect_proof-exact_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test_engine-incorrect_proof-extra_gas]\ntest_tx_entry_point[fork_Prague-blockchain_test_engine-incorrect_proof-insufficient_gas]\ntest_tx_entry_point[fork_Prague-state_test-correct_proof-exact_gas]\ntest_tx_entry_point[fork_Prague-state_test-correct_proof-extra_gas]\ntest_tx_entry_point[fork_Prague-state_test-correct_proof-insufficient_gas]\ntest_tx_entry_point[fork_Prague-state_test-incorrect_proof-exact_gas]\ntest_tx_entry_point[fork_Prague-state_test-incorrect_proof-extra_gas]\ntest_tx_entry_point[fork_Prague-state_test-incorrect_proof-insufficient_gas]\ntest_precompile_before_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test----correct_proof]\ntest_precompile_before_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine----correct_proof]\ntest_precompile_before_fork[fork_ShanghaiToCancunAtTime15k-state_test----correct_proof]\ntest_precompile_during_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test----correct_proof]\ntest_precompile_during_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine----correct_proof]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py\n
    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas/","title":"Test Point Evaluation Precompile Gas","text":"

    Documentation for tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py\n
    Tests gas usage on point evaluation precompile for EIP-4844: Shard Blob Transactions

    Test gas usage on point evaluation precompile for EIP-4844: Shard Blob Transactions.

    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas/#tests.cancun.eip4844_blobs.test_point_evaluation_precompile_gas.test_point_evaluation_precompile_gas_usage","title":"test_point_evaluation_precompile_gas_usage(state_test, pre, tx, post)","text":"

    Test point evaluation precompile gas usage under different call contexts and gas limits:

    • Test using all call types (CALL, DELEGATECALL, CALLCODE, STATICCALL)
    • Test using different gas limits (exact gas, insufficient gas, extra gas)
    • Test using correct and incorrect proofs
    Source code in tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py
    @pytest.mark.parametrize(\n    \"call_type\",\n    [Op.CALL, Op.DELEGATECALL, Op.CALLCODE, Op.STATICCALL],\n)\n@pytest.mark.parametrize(\n    \"call_gas\",\n    [\n        Spec.POINT_EVALUATION_PRECOMPILE_GAS,\n        Spec.POINT_EVALUATION_PRECOMPILE_GAS - 1,\n        Spec.POINT_EVALUATION_PRECOMPILE_GAS + 1,\n    ],\n    ids=[\"exact_gas\", \"insufficient_gas\", \"extra_gas\"],\n)\n@pytest.mark.parametrize(\"proof\", [\"correct\", \"incorrect\"])\n@pytest.mark.valid_from(\"Cancun\")\ndef test_point_evaluation_precompile_gas_usage(\n    state_test: StateTestFiller,\n    pre: Dict,\n    tx: Transaction,\n    post: Dict,\n):\n    \"\"\"\n    Test point evaluation precompile gas usage under different call contexts and gas limits:\n\n    - Test using all call types (CALL, DELEGATECALL, CALLCODE, STATICCALL)\n    - Test using different gas limits (exact gas, insufficient gas, extra gas)\n    - Test using correct and incorrect proofs\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas/index/test_cases/","title":"Test Point Evaluation Precompile Gas - Test Cases","text":"

    Test cases generated from tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py:

    test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_correct-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test_engine-proof_incorrect-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_correct-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Cancun-state_test-proof_incorrect-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_correct-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test-proof_incorrect-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_correct-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-blockchain_test_engine-proof_incorrect-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_correct-extra_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-exact_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-exact_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-exact_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-exact_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-insufficient_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-insufficient_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-insufficient_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-insufficient_gas-call_type_STATICCALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-extra_gas-call_type_CALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-extra_gas-call_type_DELEGATECALL]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-extra_gas-call_type_CALLCODE]\ntest_point_evaluation_precompile_gas_usage[fork_Prague-state_test-proof_incorrect-extra_gas-call_type_STATICCALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py\n
    "},{"location":"tests/cancun/eip5656_mcopy/","title":"EIP-5656 Mcopy","text":"

    Documentation for tests/cancun/eip5656_mcopy.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip5656_mcopy\n

    Cross-client EIP-5656 Tests

    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy/","title":"Test Mcopy","text":"

    Documentation for tests/cancun/eip5656_mcopy/test_mcopy.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip5656_mcopy/test_mcopy.py\n
    Tests EIP-5656: MCOPY - Memory copying instruction

    Test copy operations of EIP-5656: MCOPY - Memory copying instruction

    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy/#tests.cancun.eip5656_mcopy.test_mcopy.test_valid_mcopy_operations","title":"test_valid_mcopy_operations(state_test, pre, post, tx)","text":"Perform MCOPY operations using different offsets and lengths
    • Zero inputs
    • Memory rewrites (copy from and to the same location)
    • Memory overwrites (copy from and to different locations)
    • Memory extensions (copy to a location that is out of bounds)
    • Memory clear (copy from a location that is out of bounds)
    Source code in tests/cancun/eip5656_mcopy/test_mcopy.py
    @pytest.mark.parametrize(\n    \"dest,src,length\",\n    [\n        (0x00, 0x00, 0x00),\n        (2**256 - 1, 0x00, 0x00),\n        (0x00, 0x00, 0x01),\n        (0x00, 0x00, 0x20),\n        (0x01, 0x00, 0x01),\n        (0x01, 0x00, 0x20),\n        (0x11, 0x11, 0x01),\n        (0x11, 0x11, 0x20),\n        (0x11, 0x11, 0x40),\n        (0x10, 0x00, 0x40),\n        (0x00, 0x10, 0x40),\n        (0x0F, 0x10, 0x40),\n        (0x100, 0x01, 0x01),\n        (0x100, 0x01, 0x20),\n        (0x100, 0x01, 0x1F),\n        (0x100, 0x01, 0x21),\n        (0x00, 0x00, 0x100),\n        (0x100, 0x00, 0x100),\n        (0x200, 0x00, 0x100),\n        (0x00, 0x100, 0x100),\n        (0x100, 0x100, 0x01),\n    ],\n    ids=[\n        \"zero_inputs\",\n        \"zero_length_out_of_bounds_destination\",\n        \"single_byte_rewrite\",\n        \"full_word_rewrite\",\n        \"single_byte_forward_overwrite\",\n        \"full_word_forward_overwrite\",\n        \"mid_word_single_byte_rewrite\",\n        \"mid_word_single_word_rewrite\",\n        \"mid_word_multi_word_rewrite\",\n        \"two_words_forward_overwrite\",\n        \"two_words_backward_overwrite\",\n        \"two_words_backward_overwrite_single_byte_offset\",\n        \"single_byte_memory_extension\",\n        \"single_word_memory_extension\",\n        \"single_word_minus_one_byte_memory_extension\",\n        \"single_word_plus_one_byte_memory_extension\",\n        \"full_memory_rewrite\",\n        \"full_memory_copy\",\n        \"full_memory_copy_offset\",\n        \"full_memory_clean\",\n        \"out_of_bounds_memory_extension\",\n    ],\n)\n@pytest.mark.with_all_evm_code_types\n@pytest.mark.valid_from(\"Cancun\")\ndef test_valid_mcopy_operations(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: Mapping[str, Account],\n    tx: Transaction,\n):\n    \"\"\"\n    Perform MCOPY operations using different offsets and lengths:\n      - Zero inputs\n      - Memory rewrites (copy from and to the same location)\n      - Memory overwrites (copy from and to different locations)\n      - Memory extensions (copy to a location that is out of bounds)\n      - Memory clear (copy from a location that is out of bounds)\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy/#tests.cancun.eip5656_mcopy.test_mcopy.test_mcopy_on_empty_memory","title":"test_mcopy_on_empty_memory(state_test, pre, post, tx)","text":"

    Perform MCOPY operations on an empty memory, using different offsets and lengths.

    Source code in tests/cancun/eip5656_mcopy/test_mcopy.py
    @pytest.mark.parametrize(\"dest\", [0x00, 0x20])\n@pytest.mark.parametrize(\"src\", [0x00, 0x20])\n@pytest.mark.parametrize(\"length\", [0x00, 0x01])\n@pytest.mark.parametrize(\"initial_memory\", [bytes()], ids=[\"empty_memory\"])\n@pytest.mark.with_all_evm_code_types\n@pytest.mark.valid_from(\"Cancun\")\ndef test_mcopy_on_empty_memory(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: Mapping[str, Account],\n    tx: Transaction,\n):\n    \"\"\"\n    Perform MCOPY operations on an empty memory, using different offsets and lengths.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy/index/test_cases/","title":"Test Mcopy - Test Cases","text":"

    Test cases generated from tests/cancun/eip5656_mcopy/test_mcopy.py

    Parametrized test cases generated from the test module tests/cancun/eip5656_mcopy/test_mcopy.py:

    test_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-zero_inputs]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-zero_length_out_of_bounds_destination]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-full_word_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-single_byte_forward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-full_word_forward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-mid_word_single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-mid_word_single_word_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-mid_word_multi_word_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-two_words_forward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-two_words_backward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-two_words_backward_overwrite_single_byte_offset]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-single_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-single_word_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-single_word_minus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-single_word_plus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-full_memory_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-full_memory_copy]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-full_memory_copy_offset]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-full_memory_clean]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-out_of_bounds_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-zero_inputs]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-zero_length_out_of_bounds_destination]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-full_word_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-single_byte_forward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-full_word_forward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-mid_word_single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-mid_word_single_word_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-mid_word_multi_word_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-two_words_forward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-two_words_backward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-two_words_backward_overwrite_single_byte_offset]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-single_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-single_word_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-single_word_minus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-single_word_plus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-full_memory_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-full_memory_copy]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-full_memory_copy_offset]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-full_memory_clean]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-out_of_bounds_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-zero_inputs]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-zero_length_out_of_bounds_destination]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-full_word_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-single_byte_forward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-full_word_forward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-mid_word_single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-mid_word_single_word_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-mid_word_multi_word_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-two_words_forward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-two_words_backward_overwrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-two_words_backward_overwrite_single_byte_offset]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-single_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-single_word_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-single_word_minus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-single_word_plus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-full_memory_rewrite]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-full_memory_copy]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-full_memory_copy_offset]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-full_memory_clean]\ntest_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-state_test-out_of_bounds_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-zero_inputs]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-zero_length_out_of_bounds_destination]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-full_word_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-single_byte_forward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-full_word_forward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-mid_word_single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-mid_word_single_word_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-mid_word_multi_word_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-two_words_forward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-two_words_backward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-two_words_backward_overwrite_single_byte_offset]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-single_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-single_word_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-single_word_minus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-single_word_plus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-full_memory_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-full_memory_copy]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-full_memory_copy_offset]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-full_memory_clean]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test-out_of_bounds_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-zero_inputs]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-zero_length_out_of_bounds_destination]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-full_word_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-single_byte_forward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-full_word_forward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-mid_word_single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-mid_word_single_word_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-mid_word_multi_word_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-two_words_forward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-two_words_backward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-two_words_backward_overwrite_single_byte_offset]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-single_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-single_word_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-single_word_minus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-single_word_plus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-full_memory_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-full_memory_copy]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-full_memory_copy_offset]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-full_memory_clean]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-out_of_bounds_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-zero_inputs]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-zero_length_out_of_bounds_destination]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-full_word_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-single_byte_forward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-full_word_forward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-mid_word_single_byte_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-mid_word_single_word_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-mid_word_multi_word_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-two_words_forward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-two_words_backward_overwrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-two_words_backward_overwrite_single_byte_offset]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-single_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-single_word_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-single_word_minus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-single_word_plus_one_byte_memory_extension]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-full_memory_rewrite]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-full_memory_copy]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-full_memory_copy_offset]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-full_memory_clean]\ntest_valid_mcopy_operations[fork_Prague-evm_code_type_LEGACY-state_test-out_of_bounds_memory_extension]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test-empty_memory-length_0-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test-empty_memory-length_0-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test-empty_memory-length_0-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test-empty_memory-length_0-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test-empty_memory-length_1-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test-empty_memory-length_1-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test-empty_memory-length_1-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test-empty_memory-length_1-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_0-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_0-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_0-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_0-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_1-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_1-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_1-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_1-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-state_test-empty_memory-length_0-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-state_test-empty_memory-length_0-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-state_test-empty_memory-length_0-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-state_test-empty_memory-length_0-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-state_test-empty_memory-length_1-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-state_test-empty_memory-length_1-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-state_test-empty_memory-length_1-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Cancun-evm_code_type_LEGACY-state_test-empty_memory-length_1-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test-empty_memory-length_0-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test-empty_memory-length_0-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test-empty_memory-length_0-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test-empty_memory-length_0-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test-empty_memory-length_1-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test-empty_memory-length_1-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test-empty_memory-length_1-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test-empty_memory-length_1-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_0-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_0-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_0-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_0-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_1-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_1-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_1-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-empty_memory-length_1-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-state_test-empty_memory-length_0-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-state_test-empty_memory-length_0-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-state_test-empty_memory-length_0-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-state_test-empty_memory-length_0-src_32-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-state_test-empty_memory-length_1-src_0-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-state_test-empty_memory-length_1-src_0-dest_32]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-state_test-empty_memory-length_1-src_32-dest_0]\ntest_mcopy_on_empty_memory[fork_Prague-evm_code_type_LEGACY-state_test-empty_memory-length_1-src_32-dest_32]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip5656_mcopy/test_mcopy.py\n
    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy_contexts/","title":"Test Mcopy Contexts","text":"

    Documentation for tests/cancun/eip5656_mcopy/test_mcopy_contexts.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip5656_mcopy/test_mcopy_contexts.py\n
    Tests EIP-5656: MCOPY - Memory copying instruction

    Test memory copy under different call contexts EIP-5656: MCOPY - Memory copying instruction

    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy_contexts/#tests.cancun.eip5656_mcopy.test_mcopy_contexts.test_no_memory_corruption_on_upper_call_stack_levels","title":"test_no_memory_corruption_on_upper_call_stack_levels(state_test, pre, post, tx)","text":"

    Perform a subcall with any of the following opcodes, which uses MCOPY during its execution, and verify that the caller's memory is unaffected

    Source code in tests/cancun/eip5656_mcopy/test_mcopy_contexts.py
    @pytest.mark.with_all_call_opcodes\n@pytest.mark.valid_from(\"Cancun\")\ndef test_no_memory_corruption_on_upper_call_stack_levels(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: Mapping[str, Account],\n    tx: Transaction,\n):\n    \"\"\"\n    Perform a subcall with any of the following opcodes, which uses MCOPY during its execution,\n    and verify that the caller's memory is unaffected\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy_contexts/#tests.cancun.eip5656_mcopy.test_mcopy_contexts.test_no_memory_corruption_on_upper_create_stack_levels","title":"test_no_memory_corruption_on_upper_create_stack_levels(state_test, pre, post, tx)","text":"

    Perform a subcall with any of the following opcodes, which uses MCOPY during its execution, and verify that the caller's memory is unaffected: - CREATE - CREATE2

    TODO: [EOF] Add EOFCREATE opcode

    Source code in tests/cancun/eip5656_mcopy/test_mcopy_contexts.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.CREATE,\n        Op.CREATE2,\n    ],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_no_memory_corruption_on_upper_create_stack_levels(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: Mapping[str, Account],\n    tx: Transaction,\n):\n    \"\"\"\n    Perform a subcall with any of the following opcodes, which uses MCOPY during its execution,\n    and verify that the caller's memory is unaffected:\n      - `CREATE`\n      - `CREATE2`\n\n    TODO: [EOF] Add EOFCREATE opcode\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy_contexts/index/test_cases/","title":"Test Mcopy Contexts - Test Cases","text":"

    Test cases generated from tests/cancun/eip5656_mcopy/test_mcopy_contexts.py

    Parametrized test cases generated from the test module tests/cancun/eip5656_mcopy/test_mcopy_contexts.py:

    test_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine]\ntest_no_memory_corruption_on_upper_call_stack_levels[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Cancun-blockchain_test-call_opcode_CREATE]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Cancun-blockchain_test-call_opcode_CREATE2]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Cancun-blockchain_test_engine-call_opcode_CREATE]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Cancun-blockchain_test_engine-call_opcode_CREATE2]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Cancun-state_test-call_opcode_CREATE]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Cancun-state_test-call_opcode_CREATE2]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Prague-blockchain_test-call_opcode_CREATE]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Prague-blockchain_test-call_opcode_CREATE2]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Prague-blockchain_test_engine-call_opcode_CREATE]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Prague-blockchain_test_engine-call_opcode_CREATE2]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Prague-state_test-call_opcode_CREATE]\ntest_no_memory_corruption_on_upper_create_stack_levels[fork_Prague-state_test-call_opcode_CREATE2]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip5656_mcopy/test_mcopy_contexts.py\n
    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion/","title":"Test Mcopy Memory Expansion","text":"

    Documentation for tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py\n
    Tests EIP-5656: MCOPY - Memory copying instruction

    Test copy operations of EIP-5656: MCOPY - Memory copying instruction that produce a memory expansion, and potentially an out-of-gas error.

    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion/#tests.cancun.eip5656_mcopy.test_mcopy_memory_expansion.test_mcopy_memory_expansion","title":"test_mcopy_memory_expansion(state_test, env, pre, post, tx)","text":"

    Perform MCOPY operations that expand the memory, and verify the gas it costs to do so.

    Source code in tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py
    @pytest.mark.parametrize(\n    \"dest,src,length\",\n    [\n        (0x00, 0x00, 0x01),\n        (0x100, 0x00, 0x01),\n        (0x1F, 0x00, 0x01),\n        (0x20, 0x00, 0x01),\n        (0x1000, 0x00, 0x01),\n        (0x1000, 0x00, 0x40),\n        (0x00, 0x00, 0x00),\n        (2**256 - 1, 0x00, 0x00),\n        (0x00, 2**256 - 1, 0x00),\n        (2**256 - 1, 2**256 - 1, 0x00),\n    ],\n    ids=[\n        \"single_byte_expansion\",\n        \"single_byte_expansion_2\",\n        \"single_byte_expansion_word_boundary\",\n        \"single_byte_expansion_word_boundary_2\",\n        \"multi_word_expansion\",\n        \"multi_word_expansion_2\",\n        \"zero_length_expansion\",\n        \"huge_dest_zero_length\",\n        \"huge_src_zero_length\",\n        \"huge_dest_huge_src_zero_length\",\n    ],\n)\n@pytest.mark.parametrize(\"successful\", [True, False])\n@pytest.mark.parametrize(\n    \"initial_memory\",\n    [\n        bytes(range(0x00, 0x100)),\n        bytes(),\n    ],\n    ids=[\n        \"from_existent_memory\",\n        \"from_empty_memory\",\n    ],\n)\n@pytest.mark.with_all_evm_code_types\n@pytest.mark.valid_from(\"Cancun\")\ndef test_mcopy_memory_expansion(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    post: Mapping[str, Account],\n    tx: Transaction,\n):\n    \"\"\"\n    Perform MCOPY operations that expand the memory, and verify the gas it costs to do so.\n    \"\"\"\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion/#tests.cancun.eip5656_mcopy.test_mcopy_memory_expansion.test_mcopy_huge_memory_expansion","title":"test_mcopy_huge_memory_expansion(state_test, env, pre, post, tx)","text":"

    Perform MCOPY operations that expand the memory by huge amounts, and verify that it correctly runs out of gas.

    Source code in tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py
    @pytest.mark.parametrize(\n    \"dest,src,length\",\n    [\n        (2**256 - 1, 0x00, 0x01),\n        (2**256 - 2, 0x00, 0x01),\n        (2**255 - 1, 0x00, 0x01),\n        (0x00, 2**256 - 1, 0x01),\n        (0x00, 2**256 - 2, 0x01),\n        (0x00, 2**255 - 1, 0x01),\n        (0x00, 0x00, 2**256 - 1),\n        (0x00, 0x00, 2**256 - 2),\n        (0x00, 0x00, 2**255 - 1),\n    ],\n    ids=[\n        \"max_dest_single_byte_expansion\",\n        \"max_dest_minus_one_single_byte_expansion\",\n        \"half_max_dest_single_byte_expansion\",\n        \"max_src_single_byte_expansion\",\n        \"max_src_minus_one_single_byte_expansion\",\n        \"half_max_src_single_byte_expansion\",\n        \"max_length_expansion\",\n        \"max_length_minus_one_expansion\",\n        \"half_max_length_expansion\",\n    ],\n)\n@pytest.mark.parametrize(\n    \"call_exact_cost\",\n    [2**128 - 1],\n    ids=[\"\"],\n)  # Limit subcall gas, otherwise it would be impossibly large\n@pytest.mark.parametrize(\"successful\", [False])\n@pytest.mark.parametrize(\n    \"initial_memory\",\n    [\n        bytes(range(0x00, 0x100)),\n        bytes(),\n    ],\n    ids=[\n        \"from_existent_memory\",\n        \"from_empty_memory\",\n    ],\n)\n@pytest.mark.with_all_evm_code_types\n@pytest.mark.valid_from(\"Cancun\")\ndef test_mcopy_huge_memory_expansion(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Mapping[str, Account],\n    post: Mapping[str, Account],\n    tx: Transaction,\n):\n    \"\"\"\n    Perform MCOPY operations that expand the memory by huge amounts, and verify that it correctly\n    runs out of gas.\n    \"\"\"\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion/index/test_cases/","title":"Test Mcopy Memory Expansion - Test Cases","text":"

    Test cases generated from tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py

    Parametrized test cases generated from the test module tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py:

    test_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-single_byte_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-multi_word_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-zero_length_expansion]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-huge_src_zero_length]\ntest_mcopy_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Cancun-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test-from_empty_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_existent_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-from_empty_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_existent_memory-successful_False--half_max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_src_minus_one_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--half_max_src_single_byte_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_length_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_mcopy_huge_memory_expansion[fork_Prague-evm_code_type_LEGACY-state_test-from_empty_memory-successful_False--half_max_length_expansion]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/","title":"EIP-6780 Selfdestruct","text":"

    Documentation for tests/cancun/eip6780_selfdestruct.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip6780_selfdestruct\n

    Tests for EIP-6780: SELFDESTRUCT only in same transaction.

    "},{"location":"tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision/","title":"Test Dynamic Create2 Selfdestruct Collision","text":"

    Documentation for tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py\n

    Suicide scenario requested test #381

    "},{"location":"tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision/#tests.cancun.eip6780_selfdestruct.test_dynamic_create2_selfdestruct_collision.test_dynamic_create2_selfdestruct_collision","title":"test_dynamic_create2_selfdestruct_collision(env, fork, create2_dest_already_in_state, call_create2_contract_in_between, call_create2_contract_at_the_end, state_test)","text":"

    Dynamic Create2->Suicide->Create2 collision scenario:

    Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys, then on a different call, in the same tx, perform a self-destruct. Then: a) on the same tx, attempt to recreate the contract <=== Covered in this test 1) and create2 contract already in the state 2) and create2 contract is not in the state b) on a different tx, attempt to recreate the contract Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys, then in a different tx, perform a self-destruct. Then: a) on the same tx, attempt to recreate the contract b) on a different tx, attempt to recreate the contract Verify that the test case described in https://wiki.hyperledger.org/pages/viewpage.action?pageId=117440824 is covered

    Source code in tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py
    @pytest.mark.valid_from(\"Paris\")\n@pytest.mark.parametrize(\n    \"create2_dest_already_in_state\",\n    (True, False),\n)\n@pytest.mark.parametrize(\n    \"call_create2_contract_in_between,call_create2_contract_at_the_end\",\n    [\n        (True, True),\n        (True, False),\n        (False, True),\n    ],\n)\ndef test_dynamic_create2_selfdestruct_collision(\n    env: Environment,\n    fork: Fork,\n    create2_dest_already_in_state: bool,\n    call_create2_contract_in_between: bool,\n    call_create2_contract_at_the_end: bool,\n    state_test: StateTestFiller,\n):\n    \"\"\"Dynamic Create2->Suicide->Create2 collision scenario:\n\n    Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys,\n    then on a different call, in the same tx, perform a self-destruct.\n    Then:\n        a) on the same tx, attempt to recreate the contract   <=== Covered in this test\n            1) and create2 contract already in the state\n            2) and create2 contract is not in the state\n        b) on a different tx, attempt to recreate the contract\n    Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys,\n    then in a different tx, perform a self-destruct.\n    Then:\n        a) on the same tx, attempt to recreate the contract\n        b) on a different tx, attempt to recreate the contract\n    Verify that the test case described\n    in https://wiki.hyperledger.org/pages/viewpage.action?pageId=117440824 is covered\n    \"\"\"\n    assert call_create2_contract_in_between or call_create2_contract_at_the_end, \"invalid test\"\n\n    # Storage locations\n    create2_constructor_worked = 1\n    first_create2_result = 2\n    second_create2_result = 3\n    code_worked = 4\n\n    # Pre-Existing Addresses\n    address_zero = Address(0x00)\n    address_to = Address(0x0600)\n    address_code = Address(0x0601)\n    address_create2_storage = Address(0x0512)\n    sendall_destination = Address(0x03E8)\n\n    # CREATE2 Initcode\n    create2_salt = 1\n    deploy_code = Op.SELFDESTRUCT(sendall_destination)\n    initcode = Initcode(\n        deploy_code=deploy_code,\n        initcode_prefix=Op.SSTORE(create2_constructor_worked, 1)\n        + Op.CALL(Op.GAS(), address_create2_storage, 0, 0, 0, 0, 0),\n    )\n\n    # Created addresses\n    create2_address = compute_create2_address(address_code, create2_salt, initcode)\n    call_address_in_between = create2_address if call_create2_contract_in_between else address_zero\n    call_address_in_the_end = create2_address if call_create2_contract_at_the_end else address_zero\n\n    # Values\n    pre_existing_create2_balance = 1\n    first_create2_value = 10\n    first_call_value = 100\n    second_create2_value = 1000\n    second_call_value = 10000\n\n    pre = {\n        address_to: Account(\n            balance=100000000,\n            nonce=0,\n            code=Op.JUMPDEST()\n            # Make a subcall that do CREATE2 and returns its the result\n            + Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n            + Op.CALL(100000, address_code, first_create2_value, 0, Op.CALLDATASIZE(), 0, 32)\n            + Op.SSTORE(\n                first_create2_result,\n                Op.MLOAD(0),\n            )\n            # In case the create2 didn't work, flush account balance\n            + Op.CALL(100000, address_code, 0, 0, 0, 0, 0)\n            # Call to the created account to trigger selfdestruct\n            + Op.CALL(100000, call_address_in_between, first_call_value, 0, 0, 0, 0)\n            # Make a subcall that do CREATE2 collision and returns its address as the result\n            + Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n            + Op.CALL(100000, address_code, second_create2_value, 0, Op.CALLDATASIZE(), 0, 32)\n            + Op.SSTORE(\n                second_create2_result,\n                Op.MLOAD(0),\n            )\n            # Call to the created account to trigger selfdestruct\n            + Op.CALL(100000, call_address_in_the_end, second_call_value, 0, 0, 0, 0)\n            + Op.SSTORE(code_worked, 1),\n            storage={first_create2_result: 0xFF, second_create2_result: 0xFF},\n        ),\n        address_code: Account(\n            balance=0,\n            nonce=0,\n            code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n            + Op.MSTORE(\n                0,\n                Op.CREATE2(Op.SELFBALANCE(), 0, Op.CALLDATASIZE(), create2_salt),\n            )\n            + Op.RETURN(0, 32),\n            storage={},\n        ),\n        address_create2_storage: Account(\n            balance=7000000000000000000,\n            nonce=0,\n            code=Op.SSTORE(1, 1),\n            storage={},\n        ),\n        TestAddress: Account(\n            balance=7000000000000000000,\n            nonce=0,\n            code=\"0x\",\n            storage={},\n        ),\n    }\n\n    if create2_dest_already_in_state:\n        # Create2 address already in the state, e.g. deployed in a previous block\n        pre[create2_address] = Account(\n            balance=pre_existing_create2_balance,\n            nonce=1,\n            code=deploy_code,\n            storage={},\n        )\n\n    post: Dict[Address, Union[Account, object]] = {}\n\n    # Create2 address only exists if it was pre-existing and after cancun\n    post[create2_address] = (\n        Account(balance=0, nonce=1, code=deploy_code, storage={create2_constructor_worked: 0x00})\n        if create2_dest_already_in_state and fork >= Cancun\n        else Account.NONEXISTENT\n    )\n\n    # Create2 initcode is only executed if the contract did not already exist\n    post[address_create2_storage] = Account(\n        storage={create2_constructor_worked: int(not create2_dest_already_in_state)}\n    )\n\n    # Entry code that makes the calls to the create2 contract creator\n    post[address_to] = Account(\n        storage={\n            code_worked: 0x01,\n            # First create2 only works if the contract was not preexisting\n            first_create2_result: 0x00 if create2_dest_already_in_state else create2_address,\n            # Second create2 must never work\n            second_create2_result: 0x00,\n        }\n    )\n\n    # Calculate the destination account expected balance for the selfdestruct/sendall calls\n    sendall_destination_balance = (\n        pre_existing_create2_balance if create2_dest_already_in_state else first_create2_value\n    )\n\n    if call_create2_contract_in_between:\n        sendall_destination_balance += first_call_value\n\n    if call_create2_contract_at_the_end:\n        sendall_destination_balance += second_call_value\n\n    post[sendall_destination] = Account(balance=sendall_destination_balance)\n\n    tx = Transaction(\n        ty=0x0,\n        chain_id=0x0,\n        nonce=0,\n        to=address_to,\n        gas_price=10,\n        protected=False,\n        data=initcode,\n        gas_limit=5000000,\n        value=0,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision/#tests.cancun.eip6780_selfdestruct.test_dynamic_create2_selfdestruct_collision.test_dynamic_create2_selfdestruct_collision_two_different_transactions","title":"test_dynamic_create2_selfdestruct_collision_two_different_transactions(env, fork, create2_dest_already_in_state, call_create2_contract_at_the_end, blockchain_test)","text":"

    Dynamic Create2->Suicide->Create2 collision scenario:

    Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys, then on a different call, in the same tx, perform a self-destruct. Then: a) on the same tx, attempt to recreate the contract 1) and create2 contract already in the state 2) and create2 contract is not in the state b) on a different tx, attempt to recreate the contract <=== Covered in this test Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys, then in a different tx, perform a self-destruct. Then: a) on the same tx, attempt to recreate the contract b) on a different tx, attempt to recreate the contract Verify that the test case described in https://wiki.hyperledger.org/pages/viewpage.action?pageId=117440824 is covered

    Source code in tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py
    @pytest.mark.valid_from(\"Paris\")\n@pytest.mark.parametrize(\n    \"create2_dest_already_in_state\",\n    (True, False),\n)\n@pytest.mark.parametrize(\n    \"call_create2_contract_at_the_end\",\n    (True, False),\n)\ndef test_dynamic_create2_selfdestruct_collision_two_different_transactions(\n    env: Environment,\n    fork: Fork,\n    create2_dest_already_in_state: bool,\n    call_create2_contract_at_the_end: bool,\n    blockchain_test: BlockchainTestFiller,\n):\n    \"\"\"Dynamic Create2->Suicide->Create2 collision scenario:\n\n    Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys,\n    then on a different call, in the same tx, perform a self-destruct.\n    Then:\n        a) on the same tx, attempt to recreate the contract\n            1) and create2 contract already in the state\n            2) and create2 contract is not in the state\n        b) on a different tx, attempt to recreate the contract <=== Covered in this test\n    Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys,\n    then in a different tx, perform a self-destruct.\n    Then:\n        a) on the same tx, attempt to recreate the contract\n        b) on a different tx, attempt to recreate the contract\n    Verify that the test case described\n    in https://wiki.hyperledger.org/pages/viewpage.action?pageId=117440824 is covered\n    \"\"\"\n    # assert call_create2_contract_at_the_end, \"invalid test\"\n\n    # Storage locations\n    create2_constructor_worked = 1\n    first_create2_result = 2\n    second_create2_result = 3\n    code_worked = 4\n\n    # Pre-Existing Addresses\n    address_zero = Address(0x00)\n    address_to = Address(0x0600)\n    address_to_second = Address(0x0700)\n    address_code = Address(0x0601)\n    address_create2_storage = Address(0x0512)\n    sendall_destination = Address(0x03E8)\n\n    # CREATE2 Initcode\n    create2_salt = 1\n    deploy_code = Op.SELFDESTRUCT(sendall_destination)\n    initcode = Initcode(\n        deploy_code=deploy_code,\n        initcode_prefix=Op.SSTORE(create2_constructor_worked, 1)\n        + Op.CALL(Op.GAS(), address_create2_storage, 0, 0, 0, 0, 0),\n    )\n\n    # Created addresses\n    create2_address = compute_create2_address(address_code, create2_salt, initcode)\n    call_address_in_the_end = create2_address if call_create2_contract_at_the_end else address_zero\n\n    # Values\n    pre_existing_create2_balance = 1\n    first_create2_value = 10\n    first_call_value = 100\n    second_create2_value = 1000\n    second_call_value = 10000\n\n    pre = {\n        address_to: Account(\n            balance=100000000,\n            nonce=0,\n            code=Op.JUMPDEST()\n            # Make a subcall that do CREATE2 and returns its the result\n            + Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n            + Op.CALL(100000, address_code, first_create2_value, 0, Op.CALLDATASIZE(), 0, 32)\n            + Op.SSTORE(\n                first_create2_result,\n                Op.MLOAD(0),\n            )\n            # In case the create2 didn't work, flush account balance\n            + Op.CALL(100000, address_code, 0, 0, 0, 0, 0)\n            # Call to the created account to trigger selfdestruct\n            + Op.CALL(100000, create2_address, first_call_value, 0, 0, 0, 0)\n            + Op.SSTORE(code_worked, 1),\n            storage={first_create2_result: 0xFF},\n        ),\n        address_to_second: Account(\n            balance=100000000,\n            nonce=0,\n            code=Op.JUMPDEST()\n            # Make a subcall that do CREATE2 collision and returns its address as the result\n            + Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n            + Op.CALL(100000, address_code, second_create2_value, 0, Op.CALLDATASIZE(), 0, 32)\n            + Op.SSTORE(\n                second_create2_result,\n                Op.MLOAD(0),\n            )\n            # Call to the created account to trigger selfdestruct\n            + Op.CALL(200000, call_address_in_the_end, second_call_value, 0, 0, 0, 0)\n            + Op.SSTORE(code_worked, 1),\n            storage={second_create2_result: 0xFF},\n        ),\n        address_code: Account(\n            balance=0,\n            nonce=0,\n            code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n            + Op.MSTORE(\n                0,\n                Op.CREATE2(Op.SELFBALANCE(), 0, Op.CALLDATASIZE(), create2_salt),\n            )\n            + Op.RETURN(0, 32),\n            storage={},\n        ),\n        address_create2_storage: Account(\n            balance=7000000000000000000,\n            nonce=0,\n            code=Op.SSTORE(1, 1),\n            storage={},\n        ),\n        TestAddress: Account(\n            balance=7000000000000000000,\n            nonce=0,\n            code=\"0x\",\n            storage={},\n        ),\n    }\n\n    if create2_dest_already_in_state:\n        # Create2 address already in the state, e.g. deployed in a previous block\n        pre[create2_address] = Account(\n            balance=pre_existing_create2_balance,\n            nonce=1,\n            code=deploy_code,\n            storage={},\n        )\n\n    post: Dict[Address, Union[Account, object]] = {}\n\n    # Create2 address only exists if it was pre-existing and after cancun\n    post[create2_address] = (\n        Account(balance=0, nonce=1, code=deploy_code, storage={create2_constructor_worked: 0x00})\n        if create2_dest_already_in_state and fork >= Cancun\n        else (\n            Account.NONEXISTENT\n            if call_create2_contract_at_the_end\n            else Account(balance=1000, nonce=1, code=deploy_code)\n        )\n    )\n\n    # after Cancun Create2 initcode is only executed if the contract did not already exist\n    # and before it will always be executed as the first tx deletes the account\n    post[address_create2_storage] = Account(\n        storage={\n            create2_constructor_worked: int(fork < Cancun or not create2_dest_already_in_state)\n        }\n    )\n\n    # Entry code that makes the calls to the create2 contract creator\n    post[address_to] = Account(\n        storage={\n            code_worked: 0x01,\n            # First create2 only works if the contract was not preexisting\n            first_create2_result: 0x00 if create2_dest_already_in_state else create2_address,\n        }\n    )\n    post[address_to_second] = Account(\n        storage={\n            code_worked: 0x01,\n            # Second create2 will not collide before Cancun as the first tx calls selfdestruct\n            # After cancun it will collide only if create2_dest_already_in_state otherwise the\n            # first tx creates and deletes it\n            second_create2_result: (\n                (0x00 if create2_dest_already_in_state else create2_address)\n                if fork >= Cancun\n                else create2_address\n            ),\n        }\n    )\n\n    # Calculate the destination account expected balance for the selfdestruct/sendall calls\n    sendall_destination_balance = 0\n\n    if create2_dest_already_in_state:\n        sendall_destination_balance += pre_existing_create2_balance\n        if fork >= Cancun:\n            # first create2 fails, but first calls ok. the account is not removed on cancun\n            # therefore with the second create2 it is not successful\n            sendall_destination_balance += first_call_value\n        else:\n            # first create2 fails, first calls totally removes the account\n            # in the second transaction second create2 is successful\n            sendall_destination_balance += first_call_value\n            if call_create2_contract_at_the_end:\n                sendall_destination_balance += second_create2_value\n    else:\n        # if no account in the state, first create2 successful, first call successful and removes\n        # because it is removed in the next transaction second create2 successful\n        sendall_destination_balance = first_create2_value + first_call_value\n        if call_create2_contract_at_the_end:\n            sendall_destination_balance += second_create2_value\n\n    if call_create2_contract_at_the_end:\n        sendall_destination_balance += second_call_value\n\n    post[sendall_destination] = Account(balance=sendall_destination_balance)\n\n    nonce = count()\n\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post=post,\n        blocks=[\n            Block(\n                txs=[\n                    Transaction(\n                        ty=0x0,\n                        chain_id=0x0,\n                        nonce=next(nonce),\n                        to=address_to,\n                        gas_price=10,\n                        protected=False,\n                        data=initcode,\n                        gas_limit=5000000,\n                        value=0,\n                    ),\n                    Transaction(\n                        ty=0x0,\n                        chain_id=0x0,\n                        nonce=next(nonce),\n                        to=address_to_second,\n                        gas_price=10,\n                        protected=False,\n                        data=initcode,\n                        gas_limit=5000000,\n                        value=0,\n                    ),\n                ]\n            )\n        ],\n    )\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision/#tests.cancun.eip6780_selfdestruct.test_dynamic_create2_selfdestruct_collision.test_dynamic_create2_selfdestruct_collision_multi_tx","title":"test_dynamic_create2_selfdestruct_collision_multi_tx(fork, selfdestruct_on_first_tx, recreate_on_first_tx, blockchain_test)","text":"

    Dynamic Create2->Suicide->Create2 collision scenario over multiple transactions:

    Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys, then on a different call, in the same or different tx but same block, perform a self-destruct. Then: a) on the same tx, attempt to recreate the contract b) on a different tx, attempt to recreate the contract Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys, then in a different tx, perform a self-destruct. Then: a) on the same tx, attempt to recreate the contract <=== Covered in this test b) on a different tx, attempt to recreate the contract <=== Covered in this test Verify that the test case described in https://wiki.hyperledger.org/pages/viewpage.action?pageId=117440824 is covered

    Source code in tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py
    @pytest.mark.valid_from(\"Paris\")\n@pytest.mark.parametrize(\n    \"selfdestruct_on_first_tx,recreate_on_first_tx\",\n    [\n        (False, False),\n        (True, False),\n        (True, True),\n    ],\n)\ndef test_dynamic_create2_selfdestruct_collision_multi_tx(\n    fork: Fork,\n    selfdestruct_on_first_tx: bool,\n    recreate_on_first_tx: bool,\n    blockchain_test: BlockchainTestFiller,\n):\n    \"\"\"Dynamic Create2->Suicide->Create2 collision scenario over multiple transactions:\n\n    Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys,\n    then on a different call, in the same or different tx but same block, perform a self-destruct.\n    Then:\n        a) on the same tx, attempt to recreate the contract\n        b) on a different tx, attempt to recreate the contract\n    Perform a CREATE2, make sure that the initcode sets at least a couple of storage keys,\n    then in a different tx, perform a self-destruct.\n    Then:\n        a) on the same tx, attempt to recreate the contract       <=== Covered in this test\n        b) on a different tx, attempt to recreate the contract    <=== Covered in this test\n    Verify that the test case described\n    in https://wiki.hyperledger.org/pages/viewpage.action?pageId=117440824 is covered\n    \"\"\"\n    if recreate_on_first_tx:\n        assert selfdestruct_on_first_tx, \"invalid test\"\n\n    # Storage locations\n    create2_constructor_worked = 1\n    first_create2_result = 2\n    second_create2_result = 3\n    part_1_worked = 4\n    part_2_worked = 5\n\n    # Pre-Existing Addresses\n    address_to = Address(0x0600)\n    address_code = Address(0x0601)\n    address_create2_storage = Address(0x0512)\n    sendall_destination = Address(0x03E8)\n\n    # CREATE2 Initcode\n    create2_salt = 1\n    deploy_code = Op.SELFDESTRUCT(sendall_destination)\n    initcode = Initcode(\n        deploy_code=deploy_code,\n        initcode_prefix=Op.SSTORE(create2_constructor_worked, 1)\n        + Op.CALL(Op.GAS(), address_create2_storage, 0, 0, 0, 0, 0),\n    )\n\n    # Created addresses\n    create2_address = compute_create2_address(address_code, create2_salt, initcode)\n\n    # Values\n    first_create2_value = 3\n    first_call_value = 5\n    second_create2_value = 7\n    second_call_value = 11\n\n    # Code is divided in two transactions part of the same block\n    first_tx_code = Bytecode()\n    second_tx_code = Bytecode()\n\n    first_tx_code += (\n        Op.JUMPDEST()\n        # Make a subcall that do CREATE2 and returns its the result\n        + Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n        + Op.CALL(100000, address_code, first_create2_value, 0, Op.CALLDATASIZE(), 0, 32)\n        + Op.SSTORE(\n            first_create2_result,\n            Op.MLOAD(0),\n        )\n    )\n\n    if selfdestruct_on_first_tx:\n        first_tx_code += (\n            # Call to the created account to trigger selfdestruct\n            Op.CALL(100000, create2_address, first_call_value, 0, 0, 0, 0)\n        )\n    else:\n        second_tx_code += (\n            # Call to the created account to trigger selfdestruct\n            Op.CALL(100000, create2_address, first_call_value, 0, 0, 0, 0)\n        )\n\n    if recreate_on_first_tx:\n        first_tx_code += (\n            # Make a subcall that do CREATE2 collision and returns its address as the result\n            Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n            + Op.CALL(100000, address_code, second_create2_value, 0, Op.CALLDATASIZE(), 0, 32)\n            + Op.SSTORE(\n                second_create2_result,\n                Op.MLOAD(0),\n            )\n        )\n\n    else:\n        second_tx_code += (\n            # Make a subcall that do CREATE2 collision and returns its address as the result\n            Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n            + Op.CALL(100000, address_code, second_create2_value, 0, Op.CALLDATASIZE(), 0, 32)\n            + Op.SSTORE(\n                second_create2_result,\n                Op.MLOAD(0),\n            )\n        )\n\n    # Second tx code always calls the create2 contract at the end\n    second_tx_code += Op.CALL(100000, create2_address, second_call_value, 0, 0, 0, 0)\n\n    first_tx_code += Op.SSTORE(part_1_worked, 1)\n    second_tx_code += Op.SSTORE(part_2_worked, 1)\n\n    pre = {\n        address_to: Account(\n            balance=100000000,\n            nonce=0,\n            code=Conditional(\n                # Depending on the tx, execute the first or second tx code\n                condition=Op.EQ(Op.SLOAD(part_1_worked), 0),\n                if_true=first_tx_code,\n                if_false=second_tx_code,\n            ),\n            storage={first_create2_result: 0xFF, second_create2_result: 0xFF},\n        ),\n        address_code: Account(\n            balance=0,\n            nonce=0,\n            code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE())\n            + Op.MSTORE(\n                0,\n                Op.CREATE2(Op.SELFBALANCE(), 0, Op.CALLDATASIZE(), create2_salt),\n            )\n            + Op.RETURN(0, 32),\n            storage={},\n        ),\n        address_create2_storage: Account(\n            balance=7000000000000000000,\n            nonce=0,\n            code=Op.SSTORE(1, 1),\n            storage={},\n        ),\n        TestAddress: Account(\n            balance=7000000000000000000,\n            nonce=0,\n            code=\"0x\",\n            storage={},\n        ),\n    }\n\n    post: Dict[Address, Union[Account, object]] = {}\n\n    # Create2 address only exists if it was pre-existing and after cancun\n    account_will_exist_with_code = not selfdestruct_on_first_tx and fork >= Cancun\n    # If the contract is self-destructed and we also attempt to recreate it on the first tx,\n    # the second call on the second tx will only place balance in the account\n    account_will_exist_with_balance = selfdestruct_on_first_tx and recreate_on_first_tx\n\n    post[create2_address] = (\n        Account(balance=0, nonce=1, code=deploy_code, storage={create2_constructor_worked: 0x01})\n        if account_will_exist_with_code\n        else (\n            Account(balance=second_call_value, nonce=0)\n            if account_will_exist_with_balance\n            else Account.NONEXISTENT\n        )\n    )\n\n    # Create2 initcode saves storage unconditionally\n    post[address_create2_storage] = Account(storage={create2_constructor_worked: 0x01})\n\n    # Entry code that makes the calls to the create2 contract creator\n    post[address_to] = Account(\n        storage={\n            part_1_worked: 0x01,\n            part_2_worked: 0x01,\n            # First create2 always works\n            first_create2_result: create2_address,\n            # Second create2 only works if we successfully self-destructed on the first tx\n            second_create2_result: (\n                create2_address if selfdestruct_on_first_tx and not recreate_on_first_tx else 0x00\n            ),\n        }\n    )\n\n    # Calculate the destination account expected balance for the selfdestruct/sendall calls\n    sendall_destination_balance = first_create2_value + first_call_value\n\n    if not account_will_exist_with_balance:\n        sendall_destination_balance += second_call_value\n\n    if selfdestruct_on_first_tx and not recreate_on_first_tx:\n        sendall_destination_balance += second_create2_value\n\n    post[sendall_destination] = Account(balance=sendall_destination_balance)\n\n    nonce = count()\n\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post=post,\n        blocks=[\n            Block(\n                txs=[\n                    Transaction(\n                        ty=0x0,\n                        chain_id=0x0,\n                        nonce=next(nonce),\n                        to=address_to,\n                        gas_price=10,\n                        protected=False,\n                        data=initcode,\n                        gas_limit=5000000,\n                        value=0,\n                    ),\n                    Transaction(\n                        ty=0x0,\n                        chain_id=0x0,\n                        nonce=next(nonce),\n                        to=address_to,\n                        gas_price=10,\n                        protected=False,\n                        data=initcode,\n                        gas_limit=5000000,\n                        value=0,\n                    ),\n                ]\n            )\n        ],\n    )\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision/index/test_cases/","title":"Test Dynamic Create2 Selfdestruct Collision - Test Cases","text":"

    Test cases generated from tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py

    Parametrized test cases generated from the test module tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py:

    test_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test_engine-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test_engine-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-state_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Paris-state_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test_engine-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test_engine-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-state_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Shanghai-state_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test_engine-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test_engine-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-state_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Cancun-state_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test_engine-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test_engine-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-blockchain_test_engine-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-state_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-state_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision[fork_Prague-state_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Paris-blockchain_test-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Paris-blockchain_test-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Paris-blockchain_test-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Paris-blockchain_test-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Paris-blockchain_test_engine-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Paris-blockchain_test_engine-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Paris-blockchain_test_engine-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Paris-blockchain_test_engine-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Shanghai-blockchain_test-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Shanghai-blockchain_test-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Shanghai-blockchain_test-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Shanghai-blockchain_test-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Shanghai-blockchain_test_engine-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Shanghai-blockchain_test_engine-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Shanghai-blockchain_test_engine-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Shanghai-blockchain_test_engine-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Cancun-blockchain_test-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Cancun-blockchain_test-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Cancun-blockchain_test-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Cancun-blockchain_test-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Cancun-blockchain_test_engine-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Cancun-blockchain_test_engine-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Cancun-blockchain_test_engine-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Cancun-blockchain_test_engine-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Prague-blockchain_test-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Prague-blockchain_test-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Prague-blockchain_test-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Prague-blockchain_test-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Prague-blockchain_test_engine-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Prague-blockchain_test_engine-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Prague-blockchain_test_engine-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]\ntest_dynamic_create2_selfdestruct_collision_two_different_transactions[fork_Prague-blockchain_test_engine-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Paris-blockchain_test-selfdestruct_on_first_tx_False-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Paris-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Paris-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_True]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Paris-blockchain_test_engine-selfdestruct_on_first_tx_False-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Paris-blockchain_test_engine-selfdestruct_on_first_tx_True-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Paris-blockchain_test_engine-selfdestruct_on_first_tx_True-recreate_on_first_tx_True]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Shanghai-blockchain_test-selfdestruct_on_first_tx_False-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Shanghai-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Shanghai-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_True]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_on_first_tx_False-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_on_first_tx_True-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_on_first_tx_True-recreate_on_first_tx_True]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Cancun-blockchain_test-selfdestruct_on_first_tx_False-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Cancun-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Cancun-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_True]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Cancun-blockchain_test_engine-selfdestruct_on_first_tx_False-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Cancun-blockchain_test_engine-selfdestruct_on_first_tx_True-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Cancun-blockchain_test_engine-selfdestruct_on_first_tx_True-recreate_on_first_tx_True]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Prague-blockchain_test-selfdestruct_on_first_tx_False-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Prague-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Prague-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_True]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Prague-blockchain_test_engine-selfdestruct_on_first_tx_False-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Prague-blockchain_test_engine-selfdestruct_on_first_tx_True-recreate_on_first_tx_False]\ntest_dynamic_create2_selfdestruct_collision_multi_tx[fork_Prague-blockchain_test_engine-selfdestruct_on_first_tx_True-recreate_on_first_tx_True]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert/","title":"Test Reentrancy Selfdestruct Revert","text":"

    Documentation for tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py\n

    Suicide scenario requested test tests#1325

    "},{"location":"tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert/#tests.cancun.eip6780_selfdestruct.test_reentrancy_selfdestruct_revert.test_reentrancy_selfdestruct_revert","title":"test_reentrancy_selfdestruct_revert(env, fork, first_suicide, second_suicide, state_test)","text":"

    Suicide reentrancy scenario:

    Call|Callcode|Delegatecall the contract S. S self destructs. Call the revert proxy contract R. R Calls|Callcode|Delegatecall S. S self destructs (for the second time). R reverts (including the effects of the second selfdestruct). It is expected the S is self destructed after the transaction.

    Source code in tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py
    @pytest.mark.valid_from(\"Paris\")\n@pytest.mark.parametrize(\"first_suicide\", [Op.CALL, Op.CALLCODE, Op.DELEGATECALL])\n@pytest.mark.parametrize(\"second_suicide\", [Op.CALL, Op.CALLCODE, Op.DELEGATECALL])\ndef test_reentrancy_selfdestruct_revert(\n    env: Environment,\n    fork: Fork,\n    first_suicide: Op,\n    second_suicide: Op,\n    state_test: StateTestFiller,\n):\n    \"\"\"\n    Suicide reentrancy scenario:\n\n    Call|Callcode|Delegatecall the contract S.\n    S self destructs.\n    Call the revert proxy contract R.\n    R Calls|Callcode|Delegatecall S.\n    S self destructs (for the second time).\n    R reverts (including the effects of the second selfdestruct).\n    It is expected the S is self destructed after the transaction.\n    \"\"\"\n    address_to = TestAddress2\n    address_s = Address(0x1000000000000000000000000000000000000001)\n    address_r = Address(0x1000000000000000000000000000000000000002)\n    suicide_d = Address(0x03E8)\n\n    def construct_call_s(call_type: Op, money: int):\n        if call_type in [Op.CALLCODE, Op.CALL]:\n            return call_type(Op.GAS, address_s, money, 0, 0, 0, 0)\n        else:\n            return call_type(Op.GAS, address_s, money, 0, 0, 0)\n\n    pre = {\n        address_to: Account(\n            balance=1000000000000000000,\n            nonce=0,\n            code=Op.SSTORE(1, construct_call_s(first_suicide, 0))\n            + Op.SSTORE(2, Op.CALL(Op.GAS, address_r, 0, 0, 0, 0, 0))\n            + Op.RETURNDATACOPY(0, 0, Op.RETURNDATASIZE())\n            + Op.SSTORE(3, Op.MLOAD(0)),\n            storage={0x01: 0x0100, 0x02: 0x0100, 0x03: 0x0100},\n        ),\n        address_s: Account(\n            balance=3000000000000000000,\n            nonce=0,\n            code=Op.SELFDESTRUCT(1000),\n            storage={},\n        ),\n        address_r: Account(\n            balance=5000000000000000000,\n            nonce=0,\n            # Send money when calling it suicide second time to make sure the funds not transferred\n            code=Op.MSTORE(0, Op.ADD(15, construct_call_s(second_suicide, 100)))\n            + Op.REVERT(0, 32),\n            storage={},\n        ),\n        TestAddress: Account(\n            balance=7000000000000000000,\n            nonce=0,\n            code=\"0x\",\n            storage={},\n        ),\n    }\n\n    post = {\n        # Second caller unchanged as call gets reverted\n        address_r: Account(balance=5000000000000000000, storage={}),\n    }\n\n    if first_suicide in [Op.CALLCODE, Op.DELEGATECALL]:\n        if fork >= Cancun:\n            # On Cancun even callcode/delegatecall does not remove the account, so the value remain\n            post[address_to] = Account(\n                storage={\n                    0x01: 0x01,  # First call to contract S->suicide success\n                    0x02: 0x00,  # Second call to contract S->suicide reverted\n                    0x03: 16,  # Reverted value to check that revert really worked\n                },\n            )\n        else:\n            # Callcode executed first suicide from sender. sender is deleted\n            post[address_to] = Account.NONEXISTENT  # type: ignore\n\n        # Original suicide account remains in state\n        post[address_s] = Account(balance=3000000000000000000, storage={})\n        # Suicide destination\n        post[suicide_d] = Account(\n            balance=1000000000000000000,\n        )\n\n    # On Cancun suicide no longer destroys the account from state, just cleans the balance\n    if first_suicide in [Op.CALL]:\n        post[address_to] = Account(\n            storage={\n                0x01: 0x01,  # First call to contract S->suicide success\n                0x02: 0x00,  # Second call to contract S->suicide reverted\n                0x03: 16,  # Reverted value to check that revert really worked\n            },\n        )\n        if fork >= Cancun:\n            # On Cancun suicide does not remove the account, just sends the balance\n            post[address_s] = Account(balance=0, code=\"0x6103e8ff\", storage={})\n        else:\n            post[address_s] = Account.NONEXISTENT  # type: ignore\n\n        # Suicide destination\n        post[suicide_d] = Account(\n            balance=3000000000000000000,\n        )\n\n    tx = Transaction(\n        ty=0x0,\n        chain_id=0x0,\n        nonce=0,\n        to=address_to,\n        gas_price=10,\n        protected=False,\n        data=\"\",\n        gas_limit=500000,\n        value=0,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert/index/test_cases/","title":"Test Reentrancy Selfdestruct Revert - Test Cases","text":"

    Test cases generated from tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py

    Parametrized test cases generated from the test module tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py:

    test_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test_engine-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test_engine-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test_engine-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-state_test-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-state_test-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Paris-state_test-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-state_test-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-state_test-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Paris-state_test-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-state_test-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Paris-state_test-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Paris-state_test-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test_engine-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test_engine-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test_engine-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-state_test-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-state_test-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-state_test-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-state_test-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-state_test-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-state_test-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-state_test-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-state_test-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Shanghai-state_test-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test_engine-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test_engine-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test_engine-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-state_test-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-state_test-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-state_test-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-state_test-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-state_test-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-state_test-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-state_test-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-state_test-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Cancun-state_test-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test_engine-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test_engine-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test_engine-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test_engine-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Prague-blockchain_test_engine-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-state_test-second_suicide_CALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-state_test-second_suicide_CALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Prague-state_test-second_suicide_CALL-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-state_test-second_suicide_CALLCODE-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-state_test-second_suicide_CALLCODE-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Prague-state_test-second_suicide_CALLCODE-first_suicide_DELEGATECALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-state_test-second_suicide_DELEGATECALL-first_suicide_CALL]\ntest_reentrancy_selfdestruct_revert[fork_Prague-state_test-second_suicide_DELEGATECALL-first_suicide_CALLCODE]\ntest_reentrancy_selfdestruct_revert[fork_Prague-state_test-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/","title":"Test Selfdestruct","text":"

    Documentation for tests/cancun/eip6780_selfdestruct/test_selfdestruct.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip6780_selfdestruct/test_selfdestruct.py\n
    Tests EIP-6780: SELFDESTRUCT only in same transaction

    Tests for EIP-6780: SELFDESTRUCT only in same transaction.

    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/#tests.cancun.eip6780_selfdestruct.test_selfdestruct.test_create_selfdestruct_same_tx","title":"test_create_selfdestruct_same_tx(state_test, env, pre, sender, selfdestruct_code, sendall_recipient_addresses, create_opcode, call_times, selfdestruct_contract_initial_balance)","text":"

    Use CREATE or CREATE2 to create a self-destructing contract, and call it in the same transaction.

    Behavior should be the same before and after EIP-6780.

    Test using
    • Different send-all recipient addresses: single, multiple, including self
    • Different initial balances for the self-destructing contract
    • Different opcodes: CREATE, CREATE2
    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
    @pytest.mark.parametrize(\"create_opcode\", [Op.CREATE, Op.CREATE2])\n@pytest.mark.parametrize(\n    \"call_times,sendall_recipient_addresses\",\n    [\n        pytest.param(\n            1,\n            [PRE_DEPLOY_CONTRACT_1],\n            id=\"single_call\",\n        ),\n        pytest.param(\n            1,\n            [SELF_ADDRESS],\n            id=\"single_call_self\",\n        ),\n        pytest.param(\n            2,\n            [PRE_DEPLOY_CONTRACT_1],\n            id=\"multiple_calls_single_sendall_recipient\",\n        ),\n        pytest.param(\n            2,\n            [SELF_ADDRESS],\n            id=\"multiple_calls_single_self_recipient\",\n        ),\n        pytest.param(\n            3,\n            [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3],\n            id=\"multiple_calls_multiple_sendall_recipients\",\n        ),\n        pytest.param(\n            3,\n            [SELF_ADDRESS, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3],\n            id=\"multiple_calls_multiple_sendall_recipients_including_self\",\n        ),\n        pytest.param(\n            3,\n            [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, SELF_ADDRESS],\n            id=\"multiple_calls_multiple_sendall_recipients_including_self_last\",\n        ),\n        pytest.param(\n            6,\n            [SELF_ADDRESS, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3],\n            id=\"multiple_calls_multiple_repeating_sendall_recipients_including_self\",\n        ),\n        pytest.param(\n            6,\n            [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, SELF_ADDRESS],\n            id=\"multiple_calls_multiple_repeating_sendall_recipients_including_self_last\",\n        ),\n    ],\n    indirect=[\"sendall_recipient_addresses\"],\n)\n@pytest.mark.parametrize(\"selfdestruct_contract_initial_balance\", [0, 100_000])\n@pytest.mark.valid_from(\"Shanghai\")\ndef test_create_selfdestruct_same_tx(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    sender: EOA,\n    selfdestruct_code: Bytecode,\n    sendall_recipient_addresses: List[Address],\n    create_opcode: Op,\n    call_times: int,\n    selfdestruct_contract_initial_balance: int,\n):\n    \"\"\"\n    Use CREATE or CREATE2 to create a self-destructing contract, and call it in the same\n    transaction.\n\n    Behavior should be the same before and after EIP-6780.\n\n    Test using:\n        - Different send-all recipient addresses: single, multiple, including self\n        - Different initial balances for the self-destructing contract\n        - Different opcodes: CREATE, CREATE2\n    \"\"\"\n    selfdestruct_contract_initcode = Initcode(deploy_code=selfdestruct_code)\n    initcode_copy_from_address = pre.deploy_contract(selfdestruct_contract_initcode)\n    # Our entry point is an initcode that in turn creates a self-destructing contract\n    entry_code_storage = Storage()\n\n    # Bytecode used to create the contract, can be CREATE or CREATE2\n    create_bytecode = create_opcode(size=len(selfdestruct_contract_initcode))\n    selfdestruct_contract_address = compute_create_address(\n        address=compute_create_address(address=sender, nonce=0),\n        nonce=1,\n        initcode=selfdestruct_contract_initcode,\n        opcode=create_opcode,\n    )\n    for i in range(len(sendall_recipient_addresses)):\n        if sendall_recipient_addresses[i] == SELF_ADDRESS:\n            sendall_recipient_addresses[i] = selfdestruct_contract_address\n    if selfdestruct_contract_initial_balance > 0:\n        pre.fund_address(selfdestruct_contract_address, selfdestruct_contract_initial_balance)\n\n    # Create a dict to record the expected final balances\n    sendall_final_balances = dict(\n        zip(sendall_recipient_addresses, [0] * len(sendall_recipient_addresses))\n    )\n    selfdestruct_contract_current_balance = selfdestruct_contract_initial_balance\n\n    # Entry code that will be executed, creates the contract and then calls it in the same tx\n    entry_code = (\n        # Initcode is already deployed at `initcode_copy_from_address`, so just copy it\n        Op.EXTCODECOPY(\n            initcode_copy_from_address,\n            0,\n            0,\n            len(selfdestruct_contract_initcode),\n        )\n        # And we store the created address for verification purposes\n        + Op.SSTORE(\n            entry_code_storage.store_next(selfdestruct_contract_address),\n            create_bytecode,\n        )\n    )\n\n    # Store the EXTCODE* properties of the created address\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(len(selfdestruct_code)),\n        Op.EXTCODESIZE(selfdestruct_contract_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(selfdestruct_code.keccak256()),\n        Op.EXTCODEHASH(selfdestruct_contract_address),\n    )\n\n    # Call the self-destructing contract multiple times as required, increasing the wei sent each\n    # time\n    entry_code_balance = 0\n    for i, sendall_recipient in zip(range(call_times), cycle(sendall_recipient_addresses)):\n        entry_code += Op.MSTORE(0, sendall_recipient)\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(1),\n            Op.CALL(\n                Op.GASLIMIT,  # Gas\n                selfdestruct_contract_address,  # Address\n                i,  # Value\n                0,\n                32,\n                0,\n                0,\n            ),\n        )\n        entry_code_balance += i\n        selfdestruct_contract_current_balance += i\n\n        # Balance is always sent to other contracts\n        if sendall_recipient != selfdestruct_contract_address:\n            sendall_final_balances[sendall_recipient] += selfdestruct_contract_current_balance\n\n        # Self-destructing contract must always have zero balance after the call because the\n        # self-destruct always happens in the same transaction in this test\n        selfdestruct_contract_current_balance = 0\n\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(0),\n            Op.BALANCE(selfdestruct_contract_address),\n        )\n\n    # Check the EXTCODE* properties of the self-destructing contract again\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(len(selfdestruct_code)),\n        Op.EXTCODESIZE(selfdestruct_contract_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(selfdestruct_code.keccak256()),\n        Op.EXTCODEHASH(selfdestruct_contract_address),\n    )\n\n    # Lastly return zero so the entry point contract is created and we can retain the stored\n    # values for verification.\n    entry_code += Op.RETURN(max(len(selfdestruct_contract_initcode), 32), 1)\n\n    tx = Transaction(\n        value=entry_code_balance,\n        data=entry_code,\n        sender=sender,\n        to=None,\n        gas_limit=500_000,\n    )\n\n    entry_code_address = tx.created_contract\n\n    post: Dict[Address, Account] = {\n        entry_code_address: Account(\n            storage=entry_code_storage,\n        ),\n    }\n\n    # Check the balances of the sendall recipients\n    for address, balance in sendall_final_balances.items():\n        post[address] = Account(balance=balance, storage={0: 1})\n\n    post[selfdestruct_contract_address] = Account.NONEXISTENT  # type: ignore\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/#tests.cancun.eip6780_selfdestruct.test_selfdestruct.test_self_destructing_initcode","title":"test_self_destructing_initcode(state_test, env, pre, sender, selfdestruct_code, sendall_recipient_addresses, create_opcode, call_times, selfdestruct_contract_initial_balance)","text":"

    Test that a contract can self-destruct in its initcode.

    Behavior is the same before and after EIP-6780.

    Test using
    • Different initial balances for the self-destructing contract
    • Different opcodes: CREATE, CREATE2
    • Different number of calls to the self-destructing contract in the same tx
    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
    @pytest.mark.parametrize(\"create_opcode\", [Op.CREATE, Op.CREATE2])\n@pytest.mark.parametrize(\"call_times\", [0, 1])\n@pytest.mark.parametrize(\"selfdestruct_contract_initial_balance\", [0, 100_000])\n@pytest.mark.valid_from(\"Shanghai\")\ndef test_self_destructing_initcode(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    sender: EOA,\n    selfdestruct_code: Bytecode,\n    sendall_recipient_addresses: List[Address],\n    create_opcode: Op,\n    call_times: int,  # Number of times to call the self-destructing contract in the same tx\n    selfdestruct_contract_initial_balance: int,\n):\n    \"\"\"\n    Test that a contract can self-destruct in its initcode.\n\n    Behavior is the same before and after EIP-6780.\n\n    Test using:\n        - Different initial balances for the self-destructing contract\n        - Different opcodes: CREATE, CREATE2\n        - Different number of calls to the self-destructing contract in the same tx\n    \"\"\"\n    initcode_copy_from_address = pre.deploy_contract(selfdestruct_code)\n    # Our entry point is an initcode that in turn creates a self-destructing contract\n    entry_code_storage = Storage()\n    sendall_amount = 0\n\n    # Bytecode used to create the contract, can be CREATE or CREATE2\n    create_bytecode = create_opcode(size=len(selfdestruct_code))\n\n    selfdestruct_contract_address = compute_create_address(\n        address=compute_create_address(address=sender, nonce=0),\n        nonce=1,\n        initcode=selfdestruct_code,\n        opcode=create_opcode,\n    )\n\n    # Entry code that will be executed, creates the contract and then calls it in the same tx\n    entry_code = (\n        # Initcode is already deployed at `initcode_copy_from_address`, so just copy it\n        Op.EXTCODECOPY(\n            initcode_copy_from_address,\n            0,\n            0,\n            len(selfdestruct_code),\n        )\n        # And we store the created address for verification purposes\n        + Op.SSTORE(\n            entry_code_storage.store_next(selfdestruct_contract_address),\n            create_bytecode,\n        )\n    )\n\n    # Store the EXTCODE* properties of the created address\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(0),\n        Op.EXTCODESIZE(selfdestruct_contract_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(Bytecode().keccak256()),\n        Op.EXTCODEHASH(selfdestruct_contract_address),\n    )\n\n    # Call the self-destructing contract multiple times as required, increasing the wei sent each\n    # time\n    entry_code_balance = 0\n    for i in range(call_times):\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(1),\n            Op.CALL(\n                Op.GASLIMIT,  # Gas\n                selfdestruct_contract_address,  # Address\n                i,  # Value\n                0,\n                0,\n                0,\n                0,\n            ),\n        )\n        entry_code_balance += i\n\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(0),\n            Op.BALANCE(selfdestruct_contract_address),\n        )\n\n    # Lastly return zero so the entry point contract is created and we can retain the stored\n    # values for verification.\n    entry_code += Op.RETURN(max(len(selfdestruct_code), 32), 1)\n\n    if selfdestruct_contract_initial_balance > 0:\n        # Address where the contract is created already had some balance,\n        # which must be included in the send-all operation\n        sendall_amount += selfdestruct_contract_initial_balance\n        pre.fund_address(selfdestruct_contract_address, selfdestruct_contract_initial_balance)\n\n    tx = Transaction(\n        value=entry_code_balance,\n        data=entry_code,\n        sender=sender,\n        to=None,\n        gas_limit=500_000,\n    )\n\n    entry_code_address = tx.created_contract\n\n    post: Dict[Address, Account] = {\n        entry_code_address: Account(\n            storage=entry_code_storage,\n        ),\n        selfdestruct_contract_address: Account.NONEXISTENT,  # type: ignore\n        sendall_recipient_addresses[0]: Account(balance=sendall_amount, storage={0: 1}),\n    }\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/#tests.cancun.eip6780_selfdestruct.test_selfdestruct.test_self_destructing_initcode_create_tx","title":"test_self_destructing_initcode_create_tx(state_test, env, pre, sender, tx_value, selfdestruct_code, sendall_recipient_addresses, selfdestruct_contract_initial_balance)","text":"

    Use a Create Transaction to execute a self-destructing initcode.

    Behavior should be the same before and after EIP-6780.

    Test using
    • Different initial balances for the self-destructing contract
    • Different transaction value amounts
    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
    @pytest.mark.parametrize(\"tx_value\", [0, 100_000])\n@pytest.mark.parametrize(\"selfdestruct_contract_initial_balance\", [0, 100_000])\n@pytest.mark.valid_from(\"Shanghai\")\ndef test_self_destructing_initcode_create_tx(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    sender: EOA,\n    tx_value: int,\n    selfdestruct_code: Bytecode,\n    sendall_recipient_addresses: List[Address],\n    selfdestruct_contract_initial_balance: int,\n):\n    \"\"\"\n    Use a Create Transaction to execute a self-destructing initcode.\n\n    Behavior should be the same before and after EIP-6780.\n\n    Test using:\n        - Different initial balances for the self-destructing contract\n        - Different transaction value amounts\n    \"\"\"\n    tx = Transaction(\n        sender=sender,\n        value=tx_value,\n        data=selfdestruct_code,\n        to=None,\n        gas_limit=500_000,\n    )\n    selfdestruct_contract_address = tx.created_contract\n    pre.fund_address(selfdestruct_contract_address, selfdestruct_contract_initial_balance)\n\n    # Our entry point is an initcode that in turn creates a self-destructing contract\n    sendall_amount = selfdestruct_contract_initial_balance + tx_value\n\n    post: Dict[Address, Account] = {\n        selfdestruct_contract_address: Account.NONEXISTENT,  # type: ignore\n        sendall_recipient_addresses[0]: Account(balance=sendall_amount, storage={0: 1}),\n    }\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/#tests.cancun.eip6780_selfdestruct.test_selfdestruct.test_recreate_self_destructed_contract_different_txs","title":"test_recreate_self_destructed_contract_different_txs(blockchain_test, env, pre, sender, selfdestruct_code, selfdestruct_contract_initial_balance, sendall_recipient_addresses, create_opcode, recreate_times, call_times)","text":"

    Test that a contract can be recreated after it has self-destructed, over the lapse of multiple transactions.

    Behavior should be the same before and after EIP-6780.

    Test using
    • Different initial balances for the self-destructing contract
    • Contract creating opcodes that are not CREATE
    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
    @pytest.mark.parametrize(\"create_opcode\", [Op.CREATE2])  # Can only recreate using CREATE2\n@pytest.mark.parametrize(\n    \"sendall_recipient_addresses\",\n    [\n        pytest.param(\n            [PRE_DEPLOY_CONTRACT_1],\n            id=\"selfdestruct_other_address\",\n        ),\n        pytest.param(\n            [SELF_ADDRESS],\n            id=\"selfdestruct_to_self\",\n        ),\n    ],\n    indirect=[\"sendall_recipient_addresses\"],\n)\n@pytest.mark.parametrize(\"selfdestruct_contract_initial_balance\", [0, 100_000])\n@pytest.mark.parametrize(\"recreate_times\", [1])\n@pytest.mark.parametrize(\"call_times\", [1])\n@pytest.mark.valid_from(\"Shanghai\")\ndef test_recreate_self_destructed_contract_different_txs(\n    blockchain_test: BlockchainTestFiller,\n    env: Environment,\n    pre: Alloc,\n    sender: EOA,\n    selfdestruct_code: Bytecode,\n    selfdestruct_contract_initial_balance: int,\n    sendall_recipient_addresses: List[Address],\n    create_opcode: Op,\n    recreate_times: int,  # Number of times to recreate the contract in different transactions\n    call_times: int,  # Number of times to call the self-destructing contract in the same tx\n):\n    \"\"\"\n    Test that a contract can be recreated after it has self-destructed, over the lapse\n    of multiple transactions.\n\n    Behavior should be the same before and after EIP-6780.\n\n    Test using:\n        - Different initial balances for the self-destructing contract\n        - Contract creating opcodes that are not CREATE\n    \"\"\"\n    selfdestruct_contract_initcode = Initcode(deploy_code=selfdestruct_code)\n    initcode_copy_from_address = pre.deploy_contract(selfdestruct_contract_initcode)\n    entry_code_storage = Storage()\n    sendall_amount = selfdestruct_contract_initial_balance\n\n    # Bytecode used to create the contract\n    assert create_opcode != Op.CREATE, \"cannot recreate contract using CREATE opcode\"\n    create_bytecode = create_opcode(size=len(selfdestruct_contract_initcode))\n\n    # Entry code that will be executed, creates the contract and then calls it\n    entry_code = (\n        # Initcode is already deployed at initcode_copy_from_address, so just copy it\n        Op.EXTCODECOPY(\n            initcode_copy_from_address,\n            0,\n            0,\n            len(selfdestruct_contract_initcode),\n        )\n        + Op.MSTORE(0, create_bytecode)\n        + Op.SSTORE(\n            Op.CALLDATALOAD(0),\n            Op.MLOAD(0),\n        )\n    )\n\n    for i in range(call_times):\n        entry_code += Op.CALL(\n            Op.GASLIMIT,\n            Op.MLOAD(0),\n            i,\n            0,\n            0,\n            0,\n            0,\n        )\n        sendall_amount += i\n\n    entry_code += Op.STOP\n\n    entry_code_address = pre.deploy_contract(code=entry_code)\n    selfdestruct_contract_address = compute_create_address(\n        address=entry_code_address, initcode=selfdestruct_contract_initcode, opcode=create_opcode\n    )\n    pre.fund_address(selfdestruct_contract_address, selfdestruct_contract_initial_balance)\n    for i in range(len(sendall_recipient_addresses)):\n        if sendall_recipient_addresses[i] == SELF_ADDRESS:\n            sendall_recipient_addresses[i] = selfdestruct_contract_address\n\n    txs: List[Transaction] = []\n    for i in range(recreate_times + 1):\n        txs.append(\n            Transaction(\n                data=Hash(i),\n                sender=sender,\n                to=entry_code_address,\n                gas_limit=500_000,\n            )\n        )\n        entry_code_storage[i] = selfdestruct_contract_address\n\n    post: Dict[Address, Account] = {\n        entry_code_address: Account(\n            storage=entry_code_storage,\n        ),\n        selfdestruct_contract_address: Account.NONEXISTENT,  # type: ignore\n    }\n    if sendall_recipient_addresses[0] != selfdestruct_contract_address:\n        post[sendall_recipient_addresses[0]] = Account(balance=sendall_amount, storage={0: 1})\n\n    blockchain_test(genesis_environment=env, pre=pre, post=post, blocks=[Block(txs=txs)])\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/#tests.cancun.eip6780_selfdestruct.test_selfdestruct.test_selfdestruct_pre_existing","title":"test_selfdestruct_pre_existing(state_test, eip_enabled, env, pre, sender, selfdestruct_code, selfdestruct_contract_initial_balance, sendall_recipient_addresses, call_times)","text":"

    Test calling a previously created account that contains a selfdestruct, and verify its balance is sent to the destination address.

    After EIP-6780, the balance should be sent to the send-all recipient address, similar to the behavior before the EIP, but the account is not deleted.

    Test using
    • Different send-all recipient addresses: single, multiple, including self
    • Different initial balances for the self-destructing contract
    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
    @pytest.mark.parametrize(\n    \"call_times,sendall_recipient_addresses\",\n    [\n        pytest.param(\n            1,\n            [PRE_DEPLOY_CONTRACT_1],\n            id=\"single_call\",\n        ),\n        pytest.param(\n            1,\n            [SELF_ADDRESS],\n            id=\"single_call_self\",\n        ),\n        pytest.param(\n            2,\n            [PRE_DEPLOY_CONTRACT_1],\n            id=\"multiple_calls_single_sendall_recipient\",\n        ),\n        pytest.param(\n            2,\n            [SELF_ADDRESS],\n            id=\"multiple_calls_single_self_recipient\",\n        ),\n        pytest.param(\n            3,\n            [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3],\n            id=\"multiple_calls_multiple_sendall_recipients\",\n        ),\n        pytest.param(\n            3,\n            [SELF_ADDRESS, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3],\n            id=\"multiple_calls_multiple_sendall_recipients_including_self\",\n        ),\n        pytest.param(\n            3,\n            [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, SELF_ADDRESS],\n            id=\"multiple_calls_multiple_sendall_recipients_including_self_last\",\n        ),\n        pytest.param(\n            6,\n            [SELF_ADDRESS, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3],\n            id=\"multiple_calls_multiple_repeating_sendall_recipients_including_self\",\n        ),\n        pytest.param(\n            6,\n            [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, SELF_ADDRESS],\n            id=\"multiple_calls_multiple_repeating_sendall_recipients_including_self_last\",\n        ),\n    ],\n    indirect=[\"sendall_recipient_addresses\"],\n)\n@pytest.mark.parametrize(\"selfdestruct_contract_initial_balance\", [0, 100_000])\n@pytest.mark.valid_from(\"Shanghai\")\ndef test_selfdestruct_pre_existing(\n    state_test: StateTestFiller,\n    eip_enabled: bool,\n    env: Environment,\n    pre: Alloc,\n    sender: EOA,\n    selfdestruct_code: Bytecode,\n    selfdestruct_contract_initial_balance: int,\n    sendall_recipient_addresses: List[Address],\n    call_times: int,\n):\n    \"\"\"\n    Test calling a previously created account that contains a selfdestruct, and verify its balance\n    is sent to the destination address.\n\n    After EIP-6780, the balance should be sent to the send-all recipient address, similar to\n    the behavior before the EIP, but the account is not deleted.\n\n    Test using:\n        - Different send-all recipient addresses: single, multiple, including self\n        - Different initial balances for the self-destructing contract\n    \"\"\"\n    selfdestruct_contract_address = pre.deploy_contract(selfdestruct_code)\n    entry_code_storage = Storage()\n\n    for i in range(len(sendall_recipient_addresses)):\n        if sendall_recipient_addresses[i] == SELF_ADDRESS:\n            sendall_recipient_addresses[i] = selfdestruct_contract_address\n    if selfdestruct_contract_initial_balance > 0:\n        pre.fund_address(selfdestruct_contract_address, selfdestruct_contract_initial_balance)\n\n    # Create a dict to record the expected final balances\n    sendall_final_balances = dict(\n        zip(sendall_recipient_addresses, [0] * len(sendall_recipient_addresses))\n    )\n    selfdestruct_contract_current_balance = selfdestruct_contract_initial_balance\n\n    # Entry code in this case will simply call the pre-existing self-destructing contract,\n    # as many times as required\n    entry_code = Bytecode()\n\n    # Call the self-destructing contract multiple times as required, increasing the wei sent each\n    # time\n    entry_code_balance = 0\n    for i, sendall_recipient in zip(range(call_times), cycle(sendall_recipient_addresses)):\n        entry_code += Op.MSTORE(0, sendall_recipient)\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(1),\n            Op.CALL(\n                Op.GASLIMIT,  # Gas\n                selfdestruct_contract_address,  # Address\n                i,  # Value\n                0,\n                32,\n                0,\n                0,\n            ),\n        )\n        entry_code_balance += i\n        selfdestruct_contract_current_balance += i\n\n        # Balance is always sent to other contracts\n        if sendall_recipient != selfdestruct_contract_address:\n            sendall_final_balances[sendall_recipient] += selfdestruct_contract_current_balance\n\n        # Balance is only kept by the self-destructing contract if we are sending to self and the\n        # EIP is activated, otherwise the balance is destroyed\n        if sendall_recipient != selfdestruct_contract_address or not eip_enabled:\n            selfdestruct_contract_current_balance = 0\n\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(selfdestruct_contract_current_balance),\n            Op.BALANCE(selfdestruct_contract_address),\n        )\n\n    # Check the EXTCODE* properties of the self-destructing contract\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(len(selfdestruct_code)),\n        Op.EXTCODESIZE(selfdestruct_contract_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(selfdestruct_code.keccak256()),\n        Op.EXTCODEHASH(selfdestruct_contract_address),\n    )\n\n    # Lastly return zero so the entry point contract is created and we can retain the stored\n    # values for verification.\n    entry_code += Op.RETURN(32, 1)\n\n    tx = Transaction(\n        value=entry_code_balance,\n        data=entry_code,\n        sender=sender,\n        to=None,\n        gas_limit=500_000,\n    )\n\n    entry_code_address = tx.created_contract\n\n    post: Dict[Address, Account] = {\n        entry_code_address: Account(\n            storage=entry_code_storage,\n        ),\n    }\n\n    # Check the balances of the sendall recipients\n    for address, balance in sendall_final_balances.items():\n        if address != selfdestruct_contract_address:\n            post[address] = Account(balance=balance, storage={0: 1})\n\n    if eip_enabled:\n        balance = selfdestruct_contract_current_balance\n        post[selfdestruct_contract_address] = Account(\n            balance=balance,\n            storage={0: call_times},\n        )\n    else:\n        post[selfdestruct_contract_address] = Account.NONEXISTENT  # type: ignore\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/#tests.cancun.eip6780_selfdestruct.test_selfdestruct.test_selfdestruct_created_same_block_different_tx","title":"test_selfdestruct_created_same_block_different_tx(blockchain_test, eip_enabled, env, pre, sender, selfdestruct_contract_initial_balance, sendall_recipient_addresses, call_times)","text":"

    Test that if an account created in the same block that contains a selfdestruct is called, its balance is sent to the send-all address, but the account is not deleted.

    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
    @pytest.mark.parametrize(\"selfdestruct_contract_initial_balance\", [0, 1])\n@pytest.mark.parametrize(\"call_times\", [1, 10])\n@pytest.mark.valid_from(\"Shanghai\")\ndef test_selfdestruct_created_same_block_different_tx(\n    blockchain_test: BlockchainTestFiller,\n    eip_enabled: bool,\n    env: Environment,\n    pre: Alloc,\n    sender: EOA,\n    selfdestruct_contract_initial_balance: int,\n    sendall_recipient_addresses: List[Address],\n    call_times: int,\n):\n    \"\"\"\n    Test that if an account created in the same block that contains a selfdestruct is\n    called, its balance is sent to the send-all address, but the account is not deleted.\n    \"\"\"\n    selfdestruct_code = selfdestruct_code_preset(\n        sendall_recipient_addresses=sendall_recipient_addresses,\n    )\n    selfdestruct_contract_initcode = Initcode(deploy_code=selfdestruct_code)\n    selfdestruct_contract_address = compute_create_address(address=sender, nonce=0)\n    entry_code_address = compute_create_address(address=sender, nonce=1)\n    entry_code_storage = Storage()\n    sendall_amount = selfdestruct_contract_initial_balance\n    entry_code = Bytecode()\n\n    # Entry code in this case will simply call the pre-existing self-destructing contract,\n    # as many times as required\n\n    # Call the self-destructing contract multiple times as required, increasing the wei sent each\n    # time\n    entry_code_balance = 0\n    for i in range(call_times):\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(1),\n            Op.CALL(\n                Op.GASLIMIT,  # Gas\n                selfdestruct_contract_address,  # Address\n                i,  # Value\n                0,\n                0,\n                0,\n                0,\n            ),\n        )\n        entry_code_balance += i\n        sendall_amount += i\n\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(0),\n            Op.BALANCE(selfdestruct_contract_address),\n        )\n\n    # Check the EXTCODE* properties of the self-destructing contract\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(len(selfdestruct_code)),\n        Op.EXTCODESIZE(selfdestruct_contract_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(selfdestruct_code.keccak256()),\n        Op.EXTCODEHASH(selfdestruct_contract_address),\n    )\n\n    # Lastly return zero so the entry point contract is created and we can retain the stored\n    # values for verification.\n    entry_code += Op.RETURN(32, 1)\n\n    post: Dict[Address, Account] = {\n        entry_code_address: Account(\n            storage=entry_code_storage,\n        ),\n        sendall_recipient_addresses[0]: Account(balance=sendall_amount, storage={0: 1}),\n    }\n\n    if eip_enabled:\n        post[selfdestruct_contract_address] = Account(balance=0, storage={0: call_times})\n    else:\n        post[selfdestruct_contract_address] = Account.NONEXISTENT  # type: ignore\n\n    txs = [\n        Transaction(\n            value=selfdestruct_contract_initial_balance,\n            data=selfdestruct_contract_initcode,\n            sender=sender,\n            to=None,\n            gas_limit=500_000,\n        ),\n        Transaction(\n            value=entry_code_balance,\n            data=entry_code,\n            sender=sender,\n            to=None,\n            gas_limit=500_000,\n        ),\n    ]\n\n    blockchain_test(genesis_environment=env, pre=pre, post=post, blocks=[Block(txs=txs)])\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/#tests.cancun.eip6780_selfdestruct.test_selfdestruct.test_calling_from_new_contract_to_pre_existing_contract","title":"test_calling_from_new_contract_to_pre_existing_contract(state_test, env, pre, sender, sendall_recipient_addresses, create_opcode, call_opcode, call_times, selfdestruct_contract_initial_balance)","text":"

    Test that if an account created in the current transaction delegate-call a previously created account that executes self-destruct, the calling account is deleted.

    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
    @pytest.mark.parametrize(\"call_times\", [1])\n@pytest.mark.parametrize(\"selfdestruct_contract_initial_balance\", [0, 1])\n@pytest.mark.parametrize(\"call_opcode\", [Op.DELEGATECALL, Op.CALLCODE])\n@pytest.mark.parametrize(\"create_opcode\", [Op.CREATE])\n@pytest.mark.valid_from(\"Shanghai\")\ndef test_calling_from_new_contract_to_pre_existing_contract(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    sender: EOA,\n    sendall_recipient_addresses: List[Address],\n    create_opcode: Op,\n    call_opcode: Op,\n    call_times: int,\n    selfdestruct_contract_initial_balance: int,\n):\n    \"\"\"\n    Test that if an account created in the current transaction delegate-call a previously created\n    account that executes self-destruct, the calling account is deleted.\n    \"\"\"\n    pre_existing_selfdestruct_address = pre.deploy_contract(\n        selfdestruct_code_preset(\n            sendall_recipient_addresses=sendall_recipient_addresses,\n        ),\n    )\n    # Our entry point is an initcode that in turn creates a self-destructing contract\n    entry_code_storage = Storage()\n    sendall_amount = 0\n\n    entry_code_address = compute_create_address(address=sender, nonce=0)\n    selfdestruct_contract_address = compute_create_address(address=entry_code_address, nonce=1)\n\n    pre.fund_address(selfdestruct_contract_address, selfdestruct_contract_initial_balance)\n\n    # self-destructing call\n    selfdestruct_code = call_opcode(address=pre_existing_selfdestruct_address)\n    selfdestruct_contract_initcode = Initcode(deploy_code=selfdestruct_code)\n    initcode_copy_from_address = pre.deploy_contract(selfdestruct_contract_initcode)\n\n    # Bytecode used to create the contract, can be CREATE or CREATE2\n    create_bytecode = create_opcode(size=len(selfdestruct_contract_initcode))\n\n    # Entry code that will be executed, creates the contract and then calls it in the same tx\n    entry_code = (\n        # Initcode is already deployed at `initcode_copy_from_address`, so just copy it\n        Op.EXTCODECOPY(\n            initcode_copy_from_address,\n            0,\n            0,\n            len(selfdestruct_contract_initcode),\n        )\n        # And we store the created address for verification purposes\n        + Op.SSTORE(\n            entry_code_storage.store_next(selfdestruct_contract_address),\n            create_bytecode,\n        )\n    )\n\n    # Store the EXTCODE* properties of the created address\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(len(selfdestruct_code)),\n        Op.EXTCODESIZE(selfdestruct_contract_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(selfdestruct_code.keccak256()),\n        Op.EXTCODEHASH(selfdestruct_contract_address),\n    )\n\n    # Call the self-destructing contract multiple times as required, increasing the wei sent each\n    # time\n    entry_code_balance = 0\n    for i in range(call_times):\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(1),\n            Op.CALL(\n                Op.GASLIMIT,  # Gas\n                selfdestruct_contract_address,  # Address\n                i,  # Value\n                0,\n                0,\n                0,\n                0,\n            ),\n        )\n        entry_code_balance += i\n        sendall_amount += i\n\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(0),\n            Op.BALANCE(selfdestruct_contract_address),\n        )\n\n    # Check the EXTCODE* properties of the self-destructing contract again\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(len(selfdestruct_code)),\n        Op.EXTCODESIZE(selfdestruct_contract_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(selfdestruct_code.keccak256()),\n        Op.EXTCODEHASH(selfdestruct_contract_address),\n    )\n\n    # Lastly return zero so the entry point contract is created and we can retain the stored\n    # values for verification.\n    entry_code += Op.RETURN(max(len(selfdestruct_contract_initcode), 32), 1)\n\n    if selfdestruct_contract_initial_balance > 0:\n        # Address where the contract is created already had some balance,\n        # which must be included in the send-all operation\n        sendall_amount += selfdestruct_contract_initial_balance\n\n    post: Dict[Address, Account] = {\n        entry_code_address: Account(\n            storage=entry_code_storage,\n        ),\n        selfdestruct_contract_address: Account.NONEXISTENT,  # type: ignore\n        sendall_recipient_addresses[0]: Account(balance=sendall_amount, storage={0: 1}),\n    }\n\n    tx = Transaction(\n        value=entry_code_balance,\n        data=entry_code,\n        sender=sender,\n        to=None,\n        gas_limit=500_000,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/#tests.cancun.eip6780_selfdestruct.test_selfdestruct.test_calling_from_pre_existing_contract_to_new_contract","title":"test_calling_from_pre_existing_contract_to_new_contract(state_test, eip_enabled, env, pre, sender, selfdestruct_code, sendall_recipient_addresses, call_opcode, create_opcode, call_times, selfdestruct_contract_initial_balance, pre_existing_contract_initial_balance)","text":"

    Test that if an account created in the current transaction contains a self-destruct and is delegate-called by an account created before the current transaction, the calling account is not deleted.

    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
    @pytest.mark.parametrize(\"create_opcode\", [Op.CREATE, Op.CREATE2])\n@pytest.mark.parametrize(\"call_opcode\", [Op.DELEGATECALL, Op.CALLCODE])\n@pytest.mark.parametrize(\"call_times\", [1])\n@pytest.mark.parametrize(\"selfdestruct_contract_initial_balance\", [0, 1])\n@pytest.mark.parametrize(\"pre_existing_contract_initial_balance\", [0, 1])\n@pytest.mark.valid_from(\"Shanghai\")\ndef test_calling_from_pre_existing_contract_to_new_contract(\n    state_test: StateTestFiller,\n    eip_enabled: bool,\n    env: Environment,\n    pre: Alloc,\n    sender: EOA,\n    selfdestruct_code: Bytecode,\n    sendall_recipient_addresses: List[Address],\n    call_opcode: Op,\n    create_opcode: Op,\n    call_times: int,\n    selfdestruct_contract_initial_balance: int,\n    pre_existing_contract_initial_balance: int,\n):\n    \"\"\"\n    Test that if an account created in the current transaction contains a self-destruct and is\n    delegate-called by an account created before the current transaction, the calling account\n    is not deleted.\n    \"\"\"\n    selfdestruct_contract_initcode = Initcode(deploy_code=selfdestruct_code)\n    initcode_copy_from_address = pre.deploy_contract(\n        selfdestruct_contract_initcode,\n    )\n\n    selfdestruct_contract_address = compute_create_address(\n        address=compute_create_address(address=sender, nonce=0),\n        nonce=1,\n        salt=0,\n        initcode=selfdestruct_contract_initcode,\n        opcode=create_opcode,\n    )\n\n    # Add the contract that delegate calls to the newly created contract\n    caller_code = Op.SSTORE(1, Op.ADD(Op.SLOAD(1), 1)) + call_opcode(\n        address=selfdestruct_contract_address\n    )\n    caller_address = pre.deploy_contract(\n        caller_code,\n        balance=pre_existing_contract_initial_balance,\n    )\n\n    # Our entry point is an initcode that in turn creates a self-destructing contract\n    entry_code_storage = Storage()\n    sendall_amount = pre_existing_contract_initial_balance\n\n    # Entry code that will be executed, creates the contract and then calls it in the same tx\n    entry_code = (\n        # Initcode is already deployed at `initcode_copy_from_address`, so just copy it\n        Op.EXTCODECOPY(\n            initcode_copy_from_address,\n            0,\n            0,\n            len(selfdestruct_contract_initcode),\n        )\n        # And we store the created address for verification purposes\n        + Op.SSTORE(\n            entry_code_storage.store_next(selfdestruct_contract_address),\n            create_opcode(\n                value=selfdestruct_contract_initial_balance,\n                size=len(selfdestruct_contract_initcode),\n            ),\n        )\n    )\n\n    # Store the EXTCODE* properties of the pre-existing address\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(len(caller_code)),\n        Op.EXTCODESIZE(caller_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(caller_code.keccak256()),\n        Op.EXTCODEHASH(caller_address),\n    )\n\n    # Now instead of calling the newly created contract directly, we delegate call to it\n    # from a pre-existing contract, and the contract must not self-destruct\n    entry_code_balance = selfdestruct_contract_initial_balance\n    for i in range(call_times):\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(1),\n            Op.CALL(\n                Op.GASLIMIT,  # Gas\n                caller_address,  # Address\n                i,  # Value\n                0,\n                0,\n                0,\n                0,\n            ),\n        )\n        entry_code_balance += i\n        sendall_amount += i\n\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(0),\n            Op.BALANCE(caller_address),\n        )\n\n    # Check the EXTCODE* properties of the pre-existing address again\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(len(caller_code)),\n        Op.EXTCODESIZE(caller_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(caller_code.keccak256()),\n        Op.EXTCODEHASH(caller_address),\n    )\n\n    # Lastly return zero so the entry point contract is created and we can retain the stored\n    # values for verification.\n    entry_code += Op.RETURN(max(len(selfdestruct_contract_initcode), 32), 1)\n\n    tx = Transaction(\n        value=entry_code_balance,\n        data=entry_code,\n        sender=sender,\n        to=None,\n        gas_limit=500_000,\n    )\n\n    entry_code_address = tx.created_contract\n\n    post: Dict[Address, Account] = {\n        entry_code_address: Account(\n            storage=entry_code_storage,\n        ),\n        sendall_recipient_addresses[0]: Account(balance=sendall_amount, storage={0: 1}),\n    }\n\n    if eip_enabled:\n        post[caller_address] = Account(\n            storage={\n                0: call_times,\n                1: call_times,\n            },\n            balance=0,\n        )\n    else:\n        post[caller_address] = Account.NONEXISTENT  # type: ignore\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/#tests.cancun.eip6780_selfdestruct.test_selfdestruct.test_create_selfdestruct_same_tx_increased_nonce","title":"test_create_selfdestruct_same_tx_increased_nonce(state_test, env, pre, sender, selfdestruct_code, sendall_recipient_addresses, create_opcode, call_times, selfdestruct_contract_initial_balance)","text":"

    Verify that a contract can self-destruct if it was created in the same transaction, even when its nonce has been increased due to contract creation.

    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
    @pytest.mark.parametrize(\"create_opcode\", [Op.CREATE, Op.CREATE2])\n@pytest.mark.parametrize(\"selfdestruct_contract_initial_balance\", [0, 100_000])\n@pytest.mark.parametrize(\n    \"call_times,sendall_recipient_addresses\",\n    [\n        pytest.param(1, [PRE_DEPLOY_CONTRACT_1], id=\"single_call\"),\n        pytest.param(5, [PRE_DEPLOY_CONTRACT_1], id=\"multiple_calls_single beneficiary\"),\n    ],\n    indirect=[\"sendall_recipient_addresses\"],\n)\n@pytest.mark.valid_from(\"Shanghai\")\ndef test_create_selfdestruct_same_tx_increased_nonce(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    sender: EOA,\n    selfdestruct_code: Bytecode,\n    sendall_recipient_addresses: List[Address],\n    create_opcode: Op,\n    call_times: int,\n    selfdestruct_contract_initial_balance: int,\n):\n    \"\"\"\n    Verify that a contract can self-destruct if it was created in the same transaction, even when\n    its nonce has been increased due to contract creation.\n    \"\"\"\n    initcode = Op.RETURN(0, 1)\n    selfdestruct_pre_bytecode = Op.MSTORE(0, Op.PUSH32(bytes(initcode))) + Op.POP(\n        Op.CREATE(offset=32 - len(initcode), size=len(initcode))\n    )\n    selfdestruct_code = selfdestruct_pre_bytecode + selfdestruct_code\n    selfdestruct_contract_initcode = Initcode(deploy_code=selfdestruct_code)\n    initcode_copy_from_address = pre.deploy_contract(selfdestruct_contract_initcode)\n\n    selfdestruct_contract_address = compute_create_address(\n        address=compute_create_address(address=sender, nonce=0),\n        nonce=1,\n        initcode=selfdestruct_contract_initcode,\n        opcode=create_opcode,\n    )\n    if selfdestruct_contract_initial_balance > 0:\n        pre.fund_address(selfdestruct_contract_address, selfdestruct_contract_initial_balance)\n    # Our entry point is an initcode that in turn creates a self-destructing contract\n    entry_code_storage = Storage()\n\n    # Create a dict to record the expected final balances\n    sendall_final_balances = dict(\n        zip(sendall_recipient_addresses, [0] * len(sendall_recipient_addresses))\n    )\n    selfdestruct_contract_current_balance = selfdestruct_contract_initial_balance\n\n    # Bytecode used to create the contract, can be CREATE or CREATE2\n    create_bytecode = create_opcode(size=len(selfdestruct_contract_initcode))\n\n    # Entry code that will be executed, creates the contract and then calls it in the same tx\n    entry_code = (\n        # Initcode is already deployed at `initcode_copy_from_address`, so just copy it\n        Op.EXTCODECOPY(\n            initcode_copy_from_address,\n            0,\n            0,\n            len(selfdestruct_contract_initcode),\n        )\n        # And we store the created address for verification purposes\n        + Op.SSTORE(\n            entry_code_storage.store_next(selfdestruct_contract_address),\n            create_bytecode,\n        )\n    )\n\n    # Store the EXTCODE* properties of the created address\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(len(selfdestruct_code)),\n        Op.EXTCODESIZE(selfdestruct_contract_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(selfdestruct_code.keccak256()),\n        Op.EXTCODEHASH(selfdestruct_contract_address),\n    )\n\n    # Call the self-destructing contract multiple times as required, increasing the wei sent each\n    # time\n    entry_code_balance = 0\n    for i, sendall_recipient in zip(range(call_times), cycle(sendall_recipient_addresses)):\n        entry_code += Op.MSTORE(0, sendall_recipient)\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(1),\n            Op.CALL(\n                Op.GASLIMIT,  # Gas\n                selfdestruct_contract_address,  # Address\n                i,  # Value\n                0,\n                32,\n                0,\n                0,\n            ),\n        )\n        entry_code_balance += i\n        selfdestruct_contract_current_balance += i\n\n        # Balance is always sent to other contracts\n        if sendall_recipient != selfdestruct_contract_address:\n            sendall_final_balances[sendall_recipient] += selfdestruct_contract_current_balance\n\n        # Self-destructing contract must always have zero balance after the call because the\n        # self-destruct always happens in the same transaction in this test\n        selfdestruct_contract_current_balance = 0\n\n        entry_code += Op.SSTORE(\n            entry_code_storage.store_next(0),\n            Op.BALANCE(selfdestruct_contract_address),\n        )\n\n    # Check the EXTCODE* properties of the self-destructing contract again\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(len(selfdestruct_code)),\n        Op.EXTCODESIZE(selfdestruct_contract_address),\n    )\n\n    entry_code += Op.SSTORE(\n        entry_code_storage.store_next(selfdestruct_code.keccak256()),\n        Op.EXTCODEHASH(selfdestruct_contract_address),\n    )\n\n    # Lastly return zero so the entry point contract is created and we can retain the stored\n    # values for verification.\n    entry_code += Op.RETURN(max(len(selfdestruct_contract_initcode), 32), 1)\n\n    tx = Transaction(\n        value=entry_code_balance,\n        data=entry_code,\n        sender=sender,\n        to=None,\n        gas_limit=1_000_000,\n    )\n\n    entry_code_address = tx.created_contract\n\n    post: Dict[Address, Account] = {\n        entry_code_address: Account(\n            code=\"0x00\",\n            storage=entry_code_storage,\n        ),\n        initcode_copy_from_address: Account(\n            code=selfdestruct_contract_initcode,\n        ),\n    }\n\n    # Check the balances of the sendall recipients\n    for address, balance in sendall_final_balances.items():\n        post[address] = Account(balance=balance, storage={0: 1})\n\n    # Check the new contracts created from the self-destructing contract were correctly created.\n    for address in [\n        compute_create_address(address=selfdestruct_contract_address, nonce=i + 1)\n        for i in range(call_times)\n    ]:\n        post[address] = Account(\n            code=b\"\\x00\",\n        )\n\n    post[selfdestruct_contract_address] = Account.NONEXISTENT  # type: ignore\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct/index/test_cases/","title":"Test Selfdestruct - Test Cases","text":"

    Test cases generated from tests/cancun/eip6780_selfdestruct/test_selfdestruct.py

    Parametrized test cases generated from the test module tests/cancun/eip6780_selfdestruct/test_selfdestruct.py:

    test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE2]\ntest_self_destructing_initcode[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE]\ntest_self_destructing_initcode[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE2]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-tx_value_100000]\ntest_self_destructing_initcode_create_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-tx_value_0]\ntest_self_destructing_initcode_create_tx[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-tx_value_100000]\ntest_recreate_self_destructed_contract_different_txs[fork_Shanghai-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Shanghai-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Shanghai-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Shanghai-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Shanghai-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Shanghai-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Shanghai-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Shanghai-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Cancun-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Cancun-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Cancun-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Cancun-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Cancun-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Cancun-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Cancun-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Cancun-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Prague-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Prague-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Prague-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Prague-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Prague-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Prague-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_to_self-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Prague-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_other_address-create_opcode_CREATE2]\ntest_recreate_self_destructed_contract_different_txs[fork_Prague-blockchain_test_engine-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_to_self-create_opcode_CREATE2]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-single_call]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-single_call_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-single_call]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-single_call_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-single_call]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-single_call]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-single_call_self]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-single_call]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-single_call_self]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-single_call]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-single_call_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-single_call_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-blockchain_test_engine-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-single_call]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-single_call_self]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-single_call]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-single_call_self]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self]\ntest_selfdestruct_pre_existing[fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last]\ntest_selfdestruct_created_same_block_different_tx[fork_Shanghai-blockchain_test-call_times_1-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Shanghai-blockchain_test-call_times_1-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Shanghai-blockchain_test-call_times_10-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Shanghai-blockchain_test-call_times_10-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Shanghai-blockchain_test_engine-call_times_1-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Shanghai-blockchain_test_engine-call_times_1-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Shanghai-blockchain_test_engine-call_times_10-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Shanghai-blockchain_test_engine-call_times_10-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Cancun-blockchain_test-call_times_1-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Cancun-blockchain_test-call_times_1-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Cancun-blockchain_test-call_times_10-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Cancun-blockchain_test-call_times_10-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Cancun-blockchain_test_engine-call_times_1-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Cancun-blockchain_test_engine-call_times_1-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Cancun-blockchain_test_engine-call_times_10-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Cancun-blockchain_test_engine-call_times_10-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Prague-blockchain_test-call_times_1-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Prague-blockchain_test-call_times_1-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Prague-blockchain_test-call_times_10-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Prague-blockchain_test-call_times_10-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Prague-blockchain_test_engine-call_times_1-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Prague-blockchain_test_engine-call_times_1-selfdestruct_contract_initial_balance_1]\ntest_selfdestruct_created_same_block_different_tx[fork_Prague-blockchain_test_engine-call_times_10-selfdestruct_contract_initial_balance_0]\ntest_selfdestruct_created_same_block_different_tx[fork_Prague-blockchain_test_engine-call_times_10-selfdestruct_contract_initial_balance_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-blockchain_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-blockchain_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-blockchain_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-blockchain_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-blockchain_test_engine-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-blockchain_test_engine-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-blockchain_test_engine-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-blockchain_test_engine-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-state_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-state_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-state_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Shanghai-state_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-blockchain_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-blockchain_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-blockchain_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-blockchain_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-blockchain_test_engine-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-blockchain_test_engine-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-blockchain_test_engine-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-blockchain_test_engine-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-state_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-state_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-state_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Cancun-state_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-blockchain_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-blockchain_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-blockchain_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-blockchain_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-state_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-state_test-create_opcode_CREATE-call_opcode_DELEGATECALL-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-state_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_0-call_times_1]\ntest_calling_from_new_contract_to_pre_existing_contract[fork_Prague-state_test-create_opcode_CREATE-call_opcode_CALLCODE-selfdestruct_contract_initial_balance_1-call_times_1]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Shanghai-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Cancun-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-blockchain_test_engine-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_0-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]\ntest_calling_from_pre_existing_contract_to_new_contract[fork_Prague-state_test-pre_existing_contract_initial_balance_1-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-state_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-state_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-state_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-state_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Shanghai-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-state_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-state_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-state_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-state_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Cancun-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test_engine-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-blockchain_test_engine-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-state_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-state_test-single_call-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-state_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-state_test-single_call-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_0-create_opcode_CREATE2]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE]\ntest_create_selfdestruct_same_tx_increased_nonce[fork_Prague-state_test-multiple_calls_single beneficiary-selfdestruct_contract_initial_balance_100000-create_opcode_CREATE2]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip6780_selfdestruct/test_selfdestruct.py\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert/","title":"Test Selfdestruct Revert","text":"

    Documentation for tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py\n

    tests for selfdestruct interaction with revert

    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert/#tests.cancun.eip6780_selfdestruct.test_selfdestruct_revert.test_selfdestruct_created_in_same_tx_with_revert","title":"test_selfdestruct_created_in_same_tx_with_revert(state_test, env, pre, entry_code_address, selfdestruct_on_outer_call, selfdestruct_with_transfer_contract_code, selfdestruct_with_transfer_contract_initcode, selfdestruct_with_transfer_contract_address, selfdestruct_recipient_address, selfdestruct_with_transfer_initcode_copy_from_address, recursive_revert_contract_address, recursive_revert_contract_code)","text":"Given

    Contract A which has methods to receive balance and selfdestruct, and was created in current tx

    Test the following call sequence: Transfer value to A and call A.selfdestruct. Recurse into a new call from transfers value to A, calls A.selfdestruct, and reverts.

    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py
    @pytest.mark.parametrize(\n    \"selfdestruct_on_outer_call\",\n    [0, 1, 2],\n    ids=[\n        \"no_outer_selfdestruct\",\n        \"outer_selfdestruct_before_inner_call\",\n        \"outer_selfdestruct_after_inner_call\",\n    ],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_selfdestruct_created_in_same_tx_with_revert(  # noqa SC200\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Dict[Address, Account],\n    entry_code_address: Address,\n    selfdestruct_on_outer_call: int,\n    selfdestruct_with_transfer_contract_code: Bytecode,\n    selfdestruct_with_transfer_contract_initcode: Bytecode,\n    selfdestruct_with_transfer_contract_address: Address,\n    selfdestruct_recipient_address: Address,\n    selfdestruct_with_transfer_initcode_copy_from_address: Address,\n    recursive_revert_contract_address: Address,\n    recursive_revert_contract_code: Bytecode,\n):\n    \"\"\"\n    Given:\n        Contract A which has methods to receive balance and selfdestruct, and was created in current tx\n    Test the following call sequence:\n         Transfer value to A and call A.selfdestruct.\n         Recurse into a new call from transfers value to A, calls A.selfdestruct, and reverts.\n    \"\"\"  # noqa: E501\n    entry_code = Op.EXTCODECOPY(\n        selfdestruct_with_transfer_initcode_copy_from_address,\n        0,\n        0,\n        len(bytes(selfdestruct_with_transfer_contract_initcode)),\n    )\n\n    entry_code += Op.SSTORE(\n        0,\n        Op.CREATE(\n            0, 0, len(bytes(selfdestruct_with_transfer_contract_initcode))  # Value  # Offset\n        ),\n    )\n\n    entry_code += Op.CALL(\n        Op.GASLIMIT(),\n        recursive_revert_contract_address,\n        0,  # value\n        0,  # arg offset\n        0,  # arg length\n        0,  # ret offset\n        0,  # ret length\n    )\n\n    post: Dict[Address, Account] = {\n        entry_code_address: Account(\n            code=\"0x\",\n            storage=Storage(\n                {\n                    0: selfdestruct_with_transfer_contract_address,  # type: ignore\n                }\n            ),\n        ),\n        selfdestruct_with_transfer_initcode_copy_from_address: Account(\n            code=selfdestruct_with_transfer_contract_initcode,\n        ),\n        recursive_revert_contract_address: Account(\n            code=recursive_revert_contract_code,\n            storage=Storage({1: 1}),  # type: ignore\n        ),\n    }\n\n    if selfdestruct_on_outer_call > 0:\n        post[selfdestruct_with_transfer_contract_address] = Account.NONEXISTENT  # type: ignore\n        post[selfdestruct_recipient_address] = Account(\n            balance=1 if selfdestruct_on_outer_call == 1 else 2,\n        )\n    else:\n        post[selfdestruct_with_transfer_contract_address] = Account(\n            balance=1,\n            code=selfdestruct_with_transfer_contract_code,\n            storage=Storage(\n                {\n                    # 2 value transfers (1 in outer call, 1 in reverted inner call)\n                    0: 1,  # type: ignore\n                    # 1 selfdestruct in reverted inner call\n                    1: 0,  # type: ignore\n                }\n            ),\n        )\n        post[selfdestruct_recipient_address] = Account.NONEXISTENT  # type: ignore\n\n    nonce = count()\n    tx = Transaction(\n        ty=0x0,\n        value=0,\n        data=entry_code,\n        chain_id=0x0,\n        nonce=next(nonce),\n        to=None,\n        gas_limit=100_000_000,\n        gas_price=10,\n        protected=False,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert/#tests.cancun.eip6780_selfdestruct.test_selfdestruct_revert.test_selfdestruct_not_created_in_same_tx_with_revert","title":"test_selfdestruct_not_created_in_same_tx_with_revert(state_test, env, entry_code_address, selfdestruct_on_outer_call, selfdestruct_with_transfer_contract_code, selfdestruct_with_transfer_contract_address, selfdestruct_recipient_address, recursive_revert_contract_address, recursive_revert_contract_code)","text":"

    Same test as selfdestruct_created_in_same_tx_with_revert except selfdestructable contract is pre-existing

    Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py
    @pytest.mark.parametrize(\n    \"selfdestruct_on_outer_call\",\n    [0, 1, 2],\n    ids=[\n        \"no_outer_selfdestruct\",\n        \"outer_selfdestruct_before_inner_call\",\n        \"outer_selfdestruct_after_inner_call\",\n    ],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_selfdestruct_not_created_in_same_tx_with_revert(\n    state_test: StateTestFiller,\n    env: Environment,\n    entry_code_address: Address,\n    selfdestruct_on_outer_call: int,\n    selfdestruct_with_transfer_contract_code: Bytecode,\n    selfdestruct_with_transfer_contract_address: Address,\n    selfdestruct_recipient_address: Address,\n    recursive_revert_contract_address: Address,\n    recursive_revert_contract_code: Bytecode,\n):\n    \"\"\"\n    Same test as selfdestruct_created_in_same_tx_with_revert except selfdestructable contract\n    is pre-existing\n    \"\"\"\n    entry_code = Op.CALL(\n        Op.GASLIMIT(),\n        recursive_revert_contract_address,\n        0,  # value\n        0,  # arg offset\n        0,  # arg length\n        0,  # ret offset\n        0,  # ret length\n    )\n\n    pre: Dict[Address, Account] = {\n        TestAddress: Account(balance=100_000_000_000_000_000_000),\n        selfdestruct_with_transfer_contract_address: Account(\n            code=selfdestruct_with_transfer_contract_code\n        ),\n        recursive_revert_contract_address: Account(\n            code=bytes(recursive_revert_contract_code), balance=2\n        ),\n    }\n\n    post: Dict[Address, Account] = {\n        entry_code_address: Account(code=\"0x\"),\n    }\n\n    if selfdestruct_on_outer_call > 0:\n        post[selfdestruct_with_transfer_contract_address] = Account(\n            balance=1 if selfdestruct_on_outer_call == 1 else 0,\n            code=selfdestruct_with_transfer_contract_code,\n            storage=Storage(\n                {\n                    # 2 value transfers: 1 in outer call, 1 in reverted inner call\n                    0: 1,  # type: ignore\n                    # 1 selfdestruct in reverted inner call\n                    1: 1,  # type: ignore\n                }\n            ),\n        )\n        post[selfdestruct_recipient_address] = Account(\n            balance=1 if selfdestruct_on_outer_call == 1 else 2\n        )\n    else:\n        post[selfdestruct_with_transfer_contract_address] = Account(\n            balance=1,\n            code=selfdestruct_with_transfer_contract_code,\n            storage=Storage(\n                {\n                    # 2 value transfers: 1 in outer call, 1 in reverted inner call\n                    0: 1,  # type: ignore\n                    # 2 selfdestructs: 1 in outer call, 1 in reverted inner call # noqa SC100\n                    1: 0,  # type: ignore\n                }\n            ),\n        )\n        post[selfdestruct_recipient_address] = Account.NONEXISTENT  # type: ignore\n\n    nonce = count()\n    tx = Transaction(\n        ty=0x0,\n        value=0,\n        data=entry_code,\n        chain_id=0x0,\n        nonce=next(nonce),\n        to=None,\n        gas_limit=100_000_000,\n        gas_price=10,\n        protected=False,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert/index/test_cases/","title":"Test Selfdestruct Revert - Test Cases","text":"

    Test cases generated from tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py

    Parametrized test cases generated from the test module tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py:

    test_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-no_outer_selfdestruct]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-blockchain_test_engine-no_outer_selfdestruct]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-blockchain_test_engine-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-blockchain_test_engine-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-state_test-no_outer_selfdestruct]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-state_test-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-state_test-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Prague-blockchain_test-no_outer_selfdestruct]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Prague-blockchain_test-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Prague-blockchain_test-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Prague-blockchain_test_engine-no_outer_selfdestruct]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Prague-blockchain_test_engine-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Prague-blockchain_test_engine-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Prague-state_test-no_outer_selfdestruct]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Prague-state_test-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_created_in_same_tx_with_revert[fork_Prague-state_test-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-no_outer_selfdestruct]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-blockchain_test_engine-no_outer_selfdestruct]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-blockchain_test_engine-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-blockchain_test_engine-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-state_test-no_outer_selfdestruct]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-state_test-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-state_test-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Prague-blockchain_test-no_outer_selfdestruct]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Prague-blockchain_test-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Prague-blockchain_test-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Prague-blockchain_test_engine-no_outer_selfdestruct]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Prague-blockchain_test_engine-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Prague-blockchain_test_engine-outer_selfdestruct_after_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Prague-state_test-no_outer_selfdestruct]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Prague-state_test-outer_selfdestruct_before_inner_call]\ntest_selfdestruct_not_created_in_same_tx_with_revert[fork_Prague-state_test-outer_selfdestruct_after_inner_call]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py\n
    "},{"location":"tests/cancun/eip7516_blobgasfee/","title":"EIP-7516 Blobgasfee","text":"

    Documentation for tests/cancun/eip7516_blobgasfee.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip7516_blobgasfee\n

    Tests for EIP-7516: BLOBBASEFEE opcode

    "},{"location":"tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/","title":"Test Blobgasfee Opcode","text":"

    Documentation for tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py\n
    Tests EIP-7516: BLOBBASEFEE opcode

    Test BLOBGASFEE opcode EIP-7516: BLOBBASEFEE opcode

    "},{"location":"tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/#tests.cancun.eip7516_blobgasfee.test_blobgasfee_opcode.test_blobbasefee_stack_overflow","title":"test_blobbasefee_stack_overflow(state_test, pre, caller_address, callee_address, tx, call_fails)","text":"

    Tests that the BLOBBASEFEE opcode produces a stack overflow by using it repeatedly.

    Source code in tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py
    @pytest.mark.parametrize(\n    \"callee_code,call_fails\",\n    [\n        pytest.param(Op.BLOBBASEFEE * 1024, False, id=\"no_stack_overflow\"),\n        pytest.param(Op.BLOBBASEFEE * 1025, True, id=\"stack_overflow\"),\n    ],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_blobbasefee_stack_overflow(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    caller_address: Address,\n    callee_address: Address,\n    tx: Transaction,\n    call_fails: bool,\n):\n    \"\"\"\n    Tests that the BLOBBASEFEE opcode produces a stack overflow by using it repeatedly.\n    \"\"\"\n    post = {\n        caller_address: Account(\n            storage={1: 0 if call_fails else 1},\n        ),\n        callee_address: Account(\n            balance=0,\n        ),\n    }\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/#tests.cancun.eip7516_blobgasfee.test_blobgasfee_opcode.test_blobbasefee_out_of_gas","title":"test_blobbasefee_out_of_gas(state_test, pre, caller_address, callee_address, tx, call_fails)","text":"

    Tests that the BLOBBASEFEE opcode fails with insufficient gas.

    Source code in tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py
    @pytest.mark.parametrize(\n    \"call_gas,call_fails\",\n    [\n        pytest.param(BLOBBASEFEE_GAS, False, id=\"enough_gas\"),\n        pytest.param(BLOBBASEFEE_GAS - 1, True, id=\"out_of_gas\"),\n    ],\n)\n@pytest.mark.valid_from(\"Cancun\")\ndef test_blobbasefee_out_of_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    caller_address: Address,\n    callee_address: Address,\n    tx: Transaction,\n    call_fails: bool,\n):\n    \"\"\"\n    Tests that the BLOBBASEFEE opcode fails with insufficient gas.\n    \"\"\"\n    post = {\n        caller_address: Account(\n            storage={1: 0 if call_fails else 1},\n        ),\n        callee_address: Account(\n            balance=0,\n        ),\n    }\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/#tests.cancun.eip7516_blobgasfee.test_blobgasfee_opcode.test_blobbasefee_before_fork","title":"test_blobbasefee_before_fork(state_test, pre, caller_address, callee_address, tx)","text":"

    Tests that the BLOBBASEFEE opcode results on exception when called before the fork.

    Source code in tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py
    @pytest.mark.parametrize(\"caller_pre_storage\", [{1: 1}], ids=[\"\"])\n@pytest.mark.valid_at_transition_to(\"Cancun\")\ndef test_blobbasefee_before_fork(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    caller_address: Address,\n    callee_address: Address,\n    tx: Transaction,\n):\n    \"\"\"\n    Tests that the BLOBBASEFEE opcode results on exception when called before the fork.\n    \"\"\"\n    # Fork happens at timestamp 15_000\n    timestamp = 7_500\n    post = {\n        caller_address: Account(\n            storage={1: 0},\n        ),\n        callee_address: Account(\n            balance=0,\n        ),\n    }\n    state_test(\n        env=Environment(\n            timestamp=timestamp,\n        ),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/#tests.cancun.eip7516_blobgasfee.test_blobgasfee_opcode.test_blobbasefee_during_fork","title":"test_blobbasefee_during_fork(blockchain_test, pre, caller_address, callee_address, tx)","text":"

    Tests that the BLOBBASEFEE opcode results on exception when called before the fork and succeeds when called after the fork.

    Source code in tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py
    @pytest.mark.parametrize(\n    \"caller_pre_storage\",\n    [{block_number: 0xFF for block_number, _ in enumerate(timestamps, start=1)}],\n    ids=[\"\"],\n)\n@pytest.mark.valid_at_transition_to(\"Cancun\")\ndef test_blobbasefee_during_fork(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    caller_address: Address,\n    callee_address: Address,\n    tx: Transaction,\n):\n    \"\"\"\n    Tests that the BLOBBASEFEE opcode results on exception when called before the fork and\n    succeeds when called after the fork.\n    \"\"\"\n    code_caller_post_storage = Storage()\n\n    nonce = count(0)\n\n    blocks = []\n\n    for block_number, timestamp in enumerate(timestamps, start=1):\n        blocks.append(\n            Block(\n                txs=[tx.with_nonce(next(nonce))],\n                timestamp=timestamp,\n            ),\n        )\n        # pre-set storage just to make sure we detect the change\n        code_caller_post_storage[block_number] = 0 if timestamp < 15_000 else 1\n\n    post = {\n        caller_address: Account(\n            storage=code_caller_post_storage,\n        ),\n        callee_address: Account(\n            balance=0,\n        ),\n    }\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        blocks=blocks,\n        post=post,\n    )\n
    "},{"location":"tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/index/test_cases/","title":"Test Blobgasfee Opcode - Test Cases","text":"

    Test cases generated from tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py

    Parametrized test cases generated from the test module tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py:

    test_blobbasefee_stack_overflow[fork_Cancun-blockchain_test-no_stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Cancun-blockchain_test-stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Cancun-blockchain_test_engine-no_stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Cancun-blockchain_test_engine-stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Cancun-state_test-no_stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Cancun-state_test-stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Prague-blockchain_test-no_stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Prague-blockchain_test-stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Prague-blockchain_test_engine-no_stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Prague-blockchain_test_engine-stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Prague-state_test-no_stack_overflow]\ntest_blobbasefee_stack_overflow[fork_Prague-state_test-stack_overflow]\ntest_blobbasefee_out_of_gas[fork_Cancun-blockchain_test-enough_gas]\ntest_blobbasefee_out_of_gas[fork_Cancun-blockchain_test-out_of_gas]\ntest_blobbasefee_out_of_gas[fork_Cancun-blockchain_test_engine-enough_gas]\ntest_blobbasefee_out_of_gas[fork_Cancun-blockchain_test_engine-out_of_gas]\ntest_blobbasefee_out_of_gas[fork_Cancun-state_test-enough_gas]\ntest_blobbasefee_out_of_gas[fork_Cancun-state_test-out_of_gas]\ntest_blobbasefee_out_of_gas[fork_Prague-blockchain_test-enough_gas]\ntest_blobbasefee_out_of_gas[fork_Prague-blockchain_test-out_of_gas]\ntest_blobbasefee_out_of_gas[fork_Prague-blockchain_test_engine-enough_gas]\ntest_blobbasefee_out_of_gas[fork_Prague-blockchain_test_engine-out_of_gas]\ntest_blobbasefee_out_of_gas[fork_Prague-state_test-enough_gas]\ntest_blobbasefee_out_of_gas[fork_Prague-state_test-out_of_gas]\ntest_blobbasefee_before_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test-]\ntest_blobbasefee_before_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-]\ntest_blobbasefee_before_fork[fork_ShanghaiToCancunAtTime15k-state_test-]\ntest_blobbasefee_during_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test-]\ntest_blobbasefee_during_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test_engine-]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py\n
    "},{"location":"tests/constantinople/","title":"Constantinople","text":"

    Documentation for tests/constantinople.

    Generate fixtures for these test cases with:

    fill -v tests/constantinople\n

    Test cases for EVM functionality introduced in Constantinople.

    "},{"location":"tests/constantinople/eip1014_create2/","title":"EIP-1014 Create2","text":"

    Documentation for tests/constantinople/eip1014_create2.

    Generate fixtures for these test cases with:

    fill -v tests/constantinople/eip1014_create2\n

    abstract: Test EIP-1014: Skinny CREATE2

    Tests for  [EIP-1014: Skinny CREATE2](https://eips.ethereum.org/EIPS/eip-1014).\n
    "},{"location":"tests/constantinople/eip1014_create2/spec/","title":"Spec","text":"

    Documentation for tests/constantinople/eip1014_create2/spec.py.

    Defines EIP-1014 specification constants and functions.

    "},{"location":"tests/constantinople/eip1014_create2/spec/#tests.constantinople.eip1014_create2.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-1014 specifications as defined at https://eips.ethereum.org/EIPS/eip-1014

    Source code in tests/constantinople/eip1014_create2/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-1014 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-1014\n    \"\"\"\n
    "},{"location":"tests/constantinople/eip1014_create2/test_create_returndata/","title":"Test Create Returndata","text":"

    Documentation for tests/constantinople/eip1014_create2/test_create_returndata.py.

    Generate fixtures for these test cases with:

    fill -v tests/constantinople/eip1014_create2/test_create_returndata.py\n

    Return data management around create2 Port call_outsize_then_create2_successful_then_returndatasizeFiller.json test Port call_then_create2_successful_then_returndatasizeFiller.json test

    "},{"location":"tests/constantinople/eip1014_create2/test_create_returndata/#tests.constantinople.eip1014_create2.test_create_returndata.test_create2_return_data","title":"test_create2_return_data(call_return_size, create_type, return_type, return_type_in_create, pre, state_test)","text":"

    Validate that create2 return data does not interfere with previously existing memory

    Source code in tests/constantinople/eip1014_create2/test_create_returndata.py
    @pytest.mark.valid_from(\"Istanbul\")\n@pytest.mark.parametrize(\"call_return_size\", [35, 32, 0])\n@pytest.mark.parametrize(\"create_type\", [Op.CREATE, Op.CREATE2])\n@pytest.mark.parametrize(\"return_type\", [Op.RETURN, Op.REVERT])\n@pytest.mark.parametrize(\"return_type_in_create\", [Op.RETURN, Op.REVERT])\ndef test_create2_return_data(\n    call_return_size: int,\n    create_type: Op,\n    return_type: Op,\n    return_type_in_create: Op,\n    pre: Alloc,\n    state_test: StateTestFiller,\n):\n    \"\"\"\n    Validate that create2 return data does not interfere with previously existing memory\n    \"\"\"\n    # Storage vars\n    slot_returndatasize_before_create = 0\n    slot_returndatasize_after_create = 1\n    slot_return_data_hash_before_create = 2\n    slot_return_data_hash_after_create = 3\n    slot_code_worked = 4\n    slot_returndatacopy_before_create = 5\n    slot_returndatacopy_before_create_2 = 6\n    slot_returndatacopy_after_create = 7\n    slot_begin_memory_after_create = 8\n\n    # CREATE2 Initcode\n    create2_salt = 1\n    return_data_in_create = 0xFFFAFB\n    initcode = Op.MSTORE(0, return_data_in_create) + return_type_in_create(0, 32)\n    call_return_data_value = 0x1122334455667788991011121314151617181920212223242526272829303132\n    expected_call_return_data = int.to_bytes(call_return_data_value, 32, byteorder=\"big\").ljust(\n        call_return_size, b\"\\0\"\n    )[0:call_return_size]\n    expected_returndatacopy = expected_call_return_data[0:32]\n    empty_data = b\"\"\n\n    address_call = pre.deploy_contract(\n        code=Op.MSTORE(0, call_return_data_value)\n        + Op.MSTORE(32, 0xFFFFFFFF)\n        + return_type(0, call_return_size),\n        storage={},\n    )\n    address_to = pre.deploy_contract(\n        balance=100_000_000,\n        code=Op.JUMPDEST()\n        + Op.MSTORE(0x100, Op.CALLDATALOAD(0))\n        + Op.CALL(0x0900000000, address_call, 0, 0, 0, 0, call_return_size)\n        #\n        #\n        + Op.SSTORE(slot_returndatasize_before_create, Op.RETURNDATASIZE())\n        + Op.RETURNDATACOPY(0x200, 0, call_return_size)\n        + Op.SSTORE(slot_returndatacopy_before_create, Op.MLOAD(0x200))\n        + Op.SSTORE(slot_returndatacopy_before_create_2, Op.MLOAD(0x220))\n        + Op.SSTORE(slot_return_data_hash_before_create, Op.SHA3(0, call_return_size))\n        #\n        #\n        + create_type(offset=0x100, size=Op.CALLDATASIZE(), salt=create2_salt)\n        + Op.SSTORE(slot_returndatasize_after_create, Op.RETURNDATASIZE())\n        + Op.RETURNDATACOPY(0x300, 0, Op.RETURNDATASIZE())\n        + Op.SSTORE(slot_returndatacopy_after_create, Op.MLOAD(0x300))\n        + Op.SSTORE(slot_return_data_hash_after_create, Op.SHA3(0x300, Op.RETURNDATASIZE()))\n        + Op.SSTORE(slot_begin_memory_after_create, Op.MLOAD(0))\n        + Op.SSTORE(slot_code_worked, 1)\n        + Op.STOP(),\n        storage={\n            slot_returndatasize_before_create: 0xFF,\n            slot_returndatasize_after_create: 0xFF,\n            slot_return_data_hash_before_create: 0xFF,\n            slot_return_data_hash_after_create: 0xFF,\n            slot_returndatacopy_before_create: 0xFF,\n            slot_returndatacopy_before_create_2: 0xFF,\n            slot_begin_memory_after_create: 0xFF,\n            slot_begin_memory_after_create: 0xFF,\n        },\n    )\n\n    post = {\n        address_to: Account(\n            storage={\n                slot_code_worked: 1,\n                slot_returndatacopy_before_create: expected_returndatacopy,\n                slot_returndatacopy_before_create_2: 0,\n                #\n                # the actual bytes returned by returndatacopy opcode after create\n                slot_returndatacopy_after_create: return_data_in_create\n                if return_type_in_create == Op.REVERT\n                else 0,\n                slot_returndatasize_before_create: call_return_size,\n                #\n                # return datasize value after create\n                slot_returndatasize_after_create: 0x20\n                if return_type_in_create == Op.REVERT\n                else 0,\n                #\n                slot_return_data_hash_before_create: keccak256(expected_call_return_data),\n                slot_return_data_hash_after_create: keccak256(empty_data)\n                if return_type_in_create == Op.RETURN\n                else keccak256(int.to_bytes(return_data_in_create, 32, byteorder=\"big\")),\n                #\n                # check that create 2 didn't mess up with initial memory space declared for return\n                slot_begin_memory_after_create: expected_returndatacopy,\n            }  # type: ignore\n        )\n    }\n\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        to=address_to,\n        protected=False,\n        data=initcode,\n        gas_limit=0x0A00000000,\n        value=0,\n    )  # type: ignore\n\n    state_test(env=Environment(), pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/constantinople/eip1014_create2/test_create_returndata/index/test_cases/","title":"Test Create Returndata - Test Cases","text":"

    Test cases generated from tests/constantinople/eip1014_create2/test_create_returndata.py

    Parametrized test cases generated from the test module tests/constantinople/eip1014_create2/test_create_returndata.py:

    test_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Istanbul-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Berlin-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Berlin-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_London-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_London-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Paris-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Shanghai-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Cancun-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-blockchain_test_engine-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_RETURN-return_type_REVERT-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_RETURN-create_type_CREATE2-call_return_size_0]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_35]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_32]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE-call_return_size_0]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_35]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_32]\ntest_create2_return_data[fork_Prague-state_test-return_type_in_create_REVERT-return_type_REVERT-create_type_CREATE2-call_return_size_0]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/constantinople/eip1014_create2/test_create_returndata.py\n
    "},{"location":"tests/constantinople/eip1014_create2/test_recreate/","title":"Test Recreate","text":"

    Documentation for tests/constantinople/eip1014_create2/test_recreate.py.

    Generate fixtures for these test cases with:

    fill -v tests/constantinople/eip1014_create2/test_recreate.py\n

    Test Account Self-destruction and Re-creation

    "},{"location":"tests/constantinople/eip1014_create2/test_recreate/#tests.constantinople.eip1014_create2.test_recreate.test_recreate","title":"test_recreate(blockchain_test, pre, fork, recreate_on_separate_block)","text":"

    Test that the storage is cleared when a contract is first destructed then re-created using CREATE2.

    Source code in tests/constantinople/eip1014_create2/test_recreate.py
    @pytest.mark.parametrize(\"recreate_on_separate_block\", [True, False])\n@pytest.mark.valid_from(\"Constantinople\")\n@pytest.mark.valid_until(\"Shanghai\")\ndef test_recreate(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    fork: Fork,\n    recreate_on_separate_block: bool,\n):\n    \"\"\"\n    Test that the storage is cleared when a contract is first destructed then re-created using\n    CREATE2.\n    \"\"\"\n    env = Environment()\n\n    creator_contract_code = Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.CREATE2(\n        0, 0, Op.CALLDATASIZE, 0\n    )\n    creator_address = pre.deploy_contract(creator_contract_code)\n    sender = pre.fund_eoa()\n\n    deploy_code = Yul(\n        \"\"\"\n        {\n            switch callvalue()\n            case 0 {\n                selfdestruct(0)\n            }\n            default {\n                sstore(0, callvalue())\n            }\n        }\n        \"\"\",\n        fork=fork,\n    )\n\n    initcode = Initcode(deploy_code=deploy_code)\n\n    create_tx = Transaction(\n        gas_limit=100000000,\n        to=creator_address,\n        data=initcode,\n        sender=sender,\n    )\n\n    created_contract_address = compute_create2_address(\n        address=creator_address, salt=0, initcode=initcode\n    )\n\n    set_storage_tx = Transaction(\n        gas_limit=100000000,\n        to=created_contract_address,\n        value=1,\n        sender=sender,\n    )\n\n    blocks = [Block(txs=[create_tx, set_storage_tx])]\n\n    destruct_tx = Transaction(\n        gas_limit=100000000,\n        to=created_contract_address,\n        value=0,\n        sender=sender,\n    )\n\n    balance = 1\n    send_funds_tx = Transaction(\n        gas_limit=100000000,\n        to=created_contract_address,\n        value=balance,\n        sender=sender,\n    )\n\n    re_create_tx = Transaction(\n        gas_limit=100000000,\n        to=creator_address,\n        data=initcode,\n        sender=sender,\n    )\n\n    if recreate_on_separate_block:\n        blocks.append(Block(txs=[destruct_tx, send_funds_tx]))\n        blocks.append(Block(txs=[re_create_tx]))\n    else:\n        blocks.append(Block(txs=[destruct_tx, send_funds_tx, re_create_tx]))\n\n    post = {\n        created_contract_address: Account(\n            nonce=1,\n            balance=balance,\n            code=deploy_code,\n            storage={},\n        ),\n    }\n\n    blockchain_test(genesis_environment=env, pre=pre, post=post, blocks=blocks)\n
    "},{"location":"tests/constantinople/eip1014_create2/test_recreate/index/test_cases/","title":"Test Recreate - Test Cases","text":"

    Test cases generated from tests/constantinople/eip1014_create2/test_recreate.py

    Parametrized test cases generated from the test module tests/constantinople/eip1014_create2/test_recreate.py:

    test_recreate[fork_Constantinople-blockchain_test-recreate_on_separate_block_True]\ntest_recreate[fork_Constantinople-blockchain_test-recreate_on_separate_block_False]\ntest_recreate[fork_ConstantinopleFix-blockchain_test-recreate_on_separate_block_True]\ntest_recreate[fork_ConstantinopleFix-blockchain_test-recreate_on_separate_block_False]\ntest_recreate[fork_Istanbul-blockchain_test-recreate_on_separate_block_True]\ntest_recreate[fork_Istanbul-blockchain_test-recreate_on_separate_block_False]\ntest_recreate[fork_Berlin-blockchain_test-recreate_on_separate_block_True]\ntest_recreate[fork_Berlin-blockchain_test-recreate_on_separate_block_False]\ntest_recreate[fork_London-blockchain_test-recreate_on_separate_block_True]\ntest_recreate[fork_London-blockchain_test-recreate_on_separate_block_False]\ntest_recreate[fork_Paris-blockchain_test-recreate_on_separate_block_True]\ntest_recreate[fork_Paris-blockchain_test-recreate_on_separate_block_False]\ntest_recreate[fork_Paris-blockchain_test_engine-recreate_on_separate_block_True]\ntest_recreate[fork_Paris-blockchain_test_engine-recreate_on_separate_block_False]\ntest_recreate[fork_Shanghai-blockchain_test-recreate_on_separate_block_True]\ntest_recreate[fork_Shanghai-blockchain_test-recreate_on_separate_block_False]\ntest_recreate[fork_Shanghai-blockchain_test_engine-recreate_on_separate_block_True]\ntest_recreate[fork_Shanghai-blockchain_test_engine-recreate_on_separate_block_False]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/constantinople/eip1014_create2/test_recreate.py\n
    "},{"location":"tests/frontier/","title":"Frontier","text":"

    Documentation for tests/frontier.

    Generate fixtures for these test cases with:

    fill -v tests/frontier\n

    Test cases for EVM functionality introduced in Frontier.

    "},{"location":"tests/frontier/opcodes/","title":"Opcodes","text":"

    Documentation for tests/frontier/opcodes.

    Generate fixtures for these test cases with:

    fill -v tests/frontier/opcodes\n

    Test for opcodes introduced in Frontier.

    "},{"location":"tests/frontier/opcodes/test_all_opcodes/","title":"Test All Opcodes","text":"

    Documentation for tests/frontier/opcodes/test_all_opcodes.py.

    Generate fixtures for these test cases with:

    fill -v tests/frontier/opcodes/test_all_opcodes.py\n

    Call every possible opcode and test that the subcall is successful if the opcode is supported by the fork supports and fails otherwise.

    "},{"location":"tests/frontier/opcodes/test_all_opcodes/#tests.frontier.opcodes.test_all_opcodes.test_all_opcodes","title":"test_all_opcodes(state_test, pre, fork)","text":"

    Test each possible opcode on the fork with a single contract that calls each opcode in succession. Check that each subcall passes if the opcode is supported and fails otherwise.

    Source code in tests/frontier/opcodes/test_all_opcodes.py
    @pytest.mark.valid_from(\"Frontier\")\ndef test_all_opcodes(state_test: StateTestFiller, pre: Alloc, fork: Fork):\n    \"\"\"\n    Test each possible opcode on the fork with a single contract that\n    calls each opcode in succession. Check that each subcall passes\n    if the opcode is supported and fails otherwise.\n    \"\"\"\n    code_worked = 1000\n\n    code_contract: Dict[Opcode, Address] = {}\n    for opcode in sorted(set(Op) | set(UndefinedOpcodes)):\n        code_contract[opcode] = pre.deploy_contract(\n            balance=10,\n            code=prepare_stack(opcode) + opcode + prepare_suffix(opcode),\n            storage={},\n        )\n\n    # EVM code to make the call and store the result\n    contract_address = pre.deploy_contract(\n        code=sum(\n            Op.SSTORE(\n                Op.PUSH1(opcode.int()),\n                Op.CALL(1_000_000, opcode_address, 0, 0, 0, 0, 0),\n            )\n            for opcode, opcode_address in code_contract.items()\n        )\n        + Op.SSTORE(code_worked, 1)\n        + Op.STOP,\n    )\n\n    post = {\n        contract_address: Account(\n            storage={**{opcode.int(): 1 for opcode in fork.valid_opcodes()}, code_worked: 1}\n        ),\n    }\n\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        gas_limit=500_000_000,\n        to=contract_address,\n        data=b\"\",\n        value=0,\n        protected=False,\n    )\n\n    state_test(env=Environment(), pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/frontier/opcodes/test_all_opcodes/#tests.frontier.opcodes.test_all_opcodes.test_cover_revert","title":"test_cover_revert(state_test, pre)","text":"

    Cover state revert from original tests for the coverage script

    Source code in tests/frontier/opcodes/test_all_opcodes.py
    @pytest.mark.valid_from(\"Cancun\")\ndef test_cover_revert(state_test: StateTestFiller, pre: Alloc):\n    \"\"\"Cover state revert from original tests for the coverage script\"\"\"\n    tx = Transaction(\n        sender=pre.fund_eoa(),\n        gas_limit=1_000_000,\n        data=Op.SSTORE(1, 1) + Op.REVERT,\n        to=b\"\",\n        value=0,\n        protected=False,\n    )\n\n    state_test(env=Environment(), pre=pre, post={}, tx=tx)\n
    "},{"location":"tests/frontier/opcodes/test_all_opcodes/index/test_cases/","title":"Test All Opcodes - Test Cases","text":"

    Test cases generated from tests/frontier/opcodes/test_all_opcodes.py

    Parametrized test cases generated from the test module tests/frontier/opcodes/test_all_opcodes.py:

    test_all_opcodes[fork_Frontier-blockchain_test]\ntest_all_opcodes[fork_Frontier-state_test]\ntest_all_opcodes[fork_Homestead-blockchain_test]\ntest_all_opcodes[fork_Homestead-state_test]\ntest_all_opcodes[fork_Byzantium-blockchain_test]\ntest_all_opcodes[fork_Byzantium-state_test]\ntest_all_opcodes[fork_Constantinople-blockchain_test]\ntest_all_opcodes[fork_Constantinople-state_test]\ntest_all_opcodes[fork_ConstantinopleFix-blockchain_test]\ntest_all_opcodes[fork_ConstantinopleFix-state_test]\ntest_all_opcodes[fork_Istanbul-blockchain_test]\ntest_all_opcodes[fork_Istanbul-state_test]\ntest_all_opcodes[fork_Berlin-blockchain_test]\ntest_all_opcodes[fork_Berlin-state_test]\ntest_all_opcodes[fork_London-blockchain_test]\ntest_all_opcodes[fork_London-state_test]\ntest_all_opcodes[fork_Paris-blockchain_test]\ntest_all_opcodes[fork_Paris-blockchain_test_engine]\ntest_all_opcodes[fork_Paris-state_test]\ntest_all_opcodes[fork_Shanghai-blockchain_test]\ntest_all_opcodes[fork_Shanghai-blockchain_test_engine]\ntest_all_opcodes[fork_Shanghai-state_test]\ntest_all_opcodes[fork_Cancun-blockchain_test]\ntest_all_opcodes[fork_Cancun-blockchain_test_engine]\ntest_all_opcodes[fork_Cancun-state_test]\ntest_all_opcodes[fork_Prague-blockchain_test]\ntest_all_opcodes[fork_Prague-blockchain_test_engine]\ntest_all_opcodes[fork_Prague-state_test]\ntest_cover_revert[fork_Cancun-blockchain_test]\ntest_cover_revert[fork_Cancun-blockchain_test_engine]\ntest_cover_revert[fork_Cancun-state_test]\ntest_cover_revert[fork_Prague-blockchain_test]\ntest_cover_revert[fork_Prague-blockchain_test_engine]\ntest_cover_revert[fork_Prague-state_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/frontier/opcodes/test_all_opcodes.py\n
    "},{"location":"tests/frontier/opcodes/test_call_and_callcode_gas_calculation/","title":"Test Call And Callcode Gas Calculation","text":"

    Documentation for tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py.

    Generate fixtures for these test cases with:

    fill -v tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py\n
    Tests the nested CALL/CALLCODE opcode gas consumption with a positive value transfer.

    This test is designed to investigate an issue identified in EthereumJS, as reported in: ethereumjs/ethereumjs-monorepo#3194.

    The issue pertains to the incorrect gas calculation for CALL/CALLCODE operations with a positive value transfer, due to the pre-addition of the gas stipend (2300) to the currently available gas instead of adding it to the new call frame. This bug was specific to the case where insufficient gas was provided for the CALL/CALLCODE operation. Due to the pre-addition of the stipend to the currently available gas, the case for insufficient gas was not properly failing with an out-of-gas error.

    Test setup: Given two smart contract accounts, 0x0A (caller) and 0x0B (callee): 1) An arbitrary transaction calls into the contract 0x0A. 2) Contract 0x0A executes a CALL to contract 0x0B with a specific gas limit (X). 3) Contract 0x0B then attempts a CALL/CALLCODE to a non-existent contract 0x0C, with a positive value transfer (activating the gas stipend). 4) If the gas X provided by contract 0x0A to 0x0B is sufficient, contract 0x0B will push 0x01 onto the stack after returning to the call frame in 0x0A. Otherwise, it should push 0x00, indicating the insufficiency of gas X (for the bug in EthereumJS, the CALL/CALLCODE operation would return 0x01 due to the pre-addition of the gas stipend). 5) The resulting stack value is saved into contract 0x0A's storage, allowing us to verify whether the provided gas was sufficient or insufficient.

    "},{"location":"tests/frontier/opcodes/test_call_and_callcode_gas_calculation/#tests.frontier.opcodes.test_call_and_callcode_gas_calculation.test_value_transfer_gas_calculation","title":"test_value_transfer_gas_calculation(state_test, pre, caller_tx, post)","text":"

    Tests the nested CALL/CALLCODE opcode gas consumption with a positive value transfer.

    Source code in tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py
    @pytest.mark.parametrize(\n    \"callee_opcode, caller_gas_limit, is_sufficient_gas\",\n    [\n        (Op.CALL, CALL_SUFFICIENT_GAS, True),\n        (Op.CALL, CALL_SUFFICIENT_GAS - 1, False),\n        (Op.CALLCODE, CALLCODE_SUFFICIENT_GAS, True),\n        (Op.CALLCODE, CALLCODE_SUFFICIENT_GAS - 1, False),\n    ],\n)\n@pytest.mark.valid_from(\"London\")\n@pytest.mark.valid_until(\"Shanghai\")\ndef test_value_transfer_gas_calculation(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    caller_tx: Transaction,\n    post: Dict[str, Account],\n):\n    \"\"\"\n    Tests the nested CALL/CALLCODE opcode gas consumption with a positive value transfer.\n    \"\"\"\n    state_test(env=Environment(), pre=pre, post=post, tx=caller_tx)\n
    "},{"location":"tests/frontier/opcodes/test_call_and_callcode_gas_calculation/index/test_cases/","title":"Test Call And Callcode Gas Calculation - Test Cases","text":"

    Test cases generated from tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py

    Parametrized test cases generated from the test module tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py:

    test_value_transfer_gas_calculation[fork_London-blockchain_test-callee_opcode_CALL-caller_gas_limit_36620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_London-blockchain_test-callee_opcode_CALL-caller_gas_limit_36619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_London-blockchain_test-callee_opcode_CALLCODE-caller_gas_limit_11620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_London-blockchain_test-callee_opcode_CALLCODE-caller_gas_limit_11619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_London-state_test-callee_opcode_CALL-caller_gas_limit_36620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_London-state_test-callee_opcode_CALL-caller_gas_limit_36619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_London-state_test-callee_opcode_CALLCODE-caller_gas_limit_11620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_London-state_test-callee_opcode_CALLCODE-caller_gas_limit_11619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Paris-blockchain_test-callee_opcode_CALL-caller_gas_limit_36620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Paris-blockchain_test-callee_opcode_CALL-caller_gas_limit_36619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Paris-blockchain_test-callee_opcode_CALLCODE-caller_gas_limit_11620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Paris-blockchain_test-callee_opcode_CALLCODE-caller_gas_limit_11619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Paris-blockchain_test_engine-callee_opcode_CALL-caller_gas_limit_36620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Paris-blockchain_test_engine-callee_opcode_CALL-caller_gas_limit_36619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Paris-blockchain_test_engine-callee_opcode_CALLCODE-caller_gas_limit_11620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Paris-blockchain_test_engine-callee_opcode_CALLCODE-caller_gas_limit_11619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Paris-state_test-callee_opcode_CALL-caller_gas_limit_36620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Paris-state_test-callee_opcode_CALL-caller_gas_limit_36619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Paris-state_test-callee_opcode_CALLCODE-caller_gas_limit_11620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Paris-state_test-callee_opcode_CALLCODE-caller_gas_limit_11619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Shanghai-blockchain_test-callee_opcode_CALL-caller_gas_limit_36620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Shanghai-blockchain_test-callee_opcode_CALL-caller_gas_limit_36619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Shanghai-blockchain_test-callee_opcode_CALLCODE-caller_gas_limit_11620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Shanghai-blockchain_test-callee_opcode_CALLCODE-caller_gas_limit_11619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Shanghai-blockchain_test_engine-callee_opcode_CALL-caller_gas_limit_36620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Shanghai-blockchain_test_engine-callee_opcode_CALL-caller_gas_limit_36619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Shanghai-blockchain_test_engine-callee_opcode_CALLCODE-caller_gas_limit_11620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Shanghai-blockchain_test_engine-callee_opcode_CALLCODE-caller_gas_limit_11619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Shanghai-state_test-callee_opcode_CALL-caller_gas_limit_36620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Shanghai-state_test-callee_opcode_CALL-caller_gas_limit_36619-is_sufficient_gas_False]\ntest_value_transfer_gas_calculation[fork_Shanghai-state_test-callee_opcode_CALLCODE-caller_gas_limit_11620-is_sufficient_gas_True]\ntest_value_transfer_gas_calculation[fork_Shanghai-state_test-callee_opcode_CALLCODE-caller_gas_limit_11619-is_sufficient_gas_False]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py\n
    "},{"location":"tests/frontier/opcodes/test_dup/","title":"Test DUP","text":"

    Documentation for tests/frontier/opcodes/test_dup.py.

    Generate fixtures for these test cases with:

    fill -v tests/frontier/opcodes/test_dup.py\n
    Test DUP

    Test the DUP opcodes.

    "},{"location":"tests/frontier/opcodes/test_dup/#tests.frontier.opcodes.test_dup.test_dup","title":"test_dup(state_test, fork, dup_opcode, pre)","text":"

    Test the DUP1-DUP16 opcodes.

    note: Test case ported from:

    - [ethereum/tests/GeneralStateTests/VMTests/vmTests/dup.json](https://github.com/ethereum/tests/blob/develop/GeneralStateTests/VMTests/vmTests/dup.json)\nby Ori Pomerantz.\n
    Source code in tests/frontier/opcodes/test_dup.py
    @pytest.mark.parametrize(\n    \"dup_opcode\",\n    [\n        Op.DUP1,\n        Op.DUP2,\n        Op.DUP3,\n        Op.DUP4,\n        Op.DUP5,\n        Op.DUP6,\n        Op.DUP7,\n        Op.DUP8,\n        Op.DUP9,\n        Op.DUP10,\n        Op.DUP11,\n        Op.DUP12,\n        Op.DUP13,\n        Op.DUP14,\n        Op.DUP15,\n        Op.DUP16,\n    ],\n    ids=lambda op: str(op),\n)\n@pytest.mark.with_all_evm_code_types\ndef test_dup(\n    state_test: StateTestFiller,\n    fork: str,\n    dup_opcode: Op,\n    pre: Alloc,\n):\n    \"\"\"\n    Test the DUP1-DUP16 opcodes.\n\n    note: Test case ported from:\n\n        - [ethereum/tests/GeneralStateTests/VMTests/vmTests/dup.json](https://github.com/ethereum/tests/blob/develop/GeneralStateTests/VMTests/vmTests/dup.json)\n        by Ori Pomerantz.\n    \"\"\"  # noqa: E501\n    env = Environment()\n    sender = pre.fund_eoa()\n    post = {}\n\n    # Push 0x00 - 0x10 onto the stack\n    account_code = sum(Op.PUSH1(i) for i in range(0x11))\n\n    # Use the DUP opcode\n    account_code += dup_opcode\n\n    # Save each stack value into different keys in storage\n    account_code += sum(Op.PUSH1(i) + Op.SSTORE for i in range(0x11))\n\n    account = pre.deploy_contract(account_code)\n\n    tx = Transaction(\n        ty=0x0,\n        nonce=0,\n        to=account,\n        gas_limit=500000,\n        gas_price=10,\n        protected=False if fork in [Frontier, Homestead] else True,\n        data=\"\",\n        sender=sender,\n    )\n\n    \"\"\"\n    Storage will be structured as follows:\n\n    0x00: 0x10-0x01 (Depending on DUP opcode)\n    0x01: 0x10\n    0x02: 0x0F\n    0x03: 0x0E\n    0x04: 0x0D\n    0x05: 0x0C\n    0x06: 0x0B\n    0x07: 0x0A\n    0x08: 0x09\n    0x09: 0x08\n    0x0A: 0x07\n    0x0B: 0x06\n    0x0C: 0x05\n    0x0D: 0x04\n    0x0E: 0x03\n    0x0F: 0x02\n    0x10: 0x01\n\n    DUP1 copies the first element of the stack (0x10).\n    DUP16 copies the 16th element of the stack (0x01).\n    \"\"\"\n    s: Storage.StorageDictType = dict(zip(range(1, 17), range(16, 0, -1)))\n    s[0] = 16 - (dup_opcode.int() - 0x80)\n\n    post[account] = Account(storage=s)\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/frontier/opcodes/test_dup/index/test_cases/","title":"Test DUP - Test Cases","text":"

    Test cases generated from tests/frontier/opcodes/test_dup.py

    Parametrized test cases generated from the test module tests/frontier/opcodes/test_dup.py:

    test_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_Frontier-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_Homestead-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_Byzantium-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_Constantinople-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_ConstantinopleFix-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_Istanbul-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_Berlin-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_London-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_London-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP1]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP2]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP3]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP4]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP5]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP6]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP7]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP8]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP9]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP10]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP11]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP12]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP13]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP14]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP15]\ntest_dup[fork_Paris-evm_code_type_LEGACY-blockchain_test_engine-DUP16]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_Paris-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP1]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP2]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP3]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP4]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP5]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP6]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP7]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP8]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP9]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP10]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP11]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP12]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP13]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP14]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP15]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-blockchain_test_engine-DUP16]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_Shanghai-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP1]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP2]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP3]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP4]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP5]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP6]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP7]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP8]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP9]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP10]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP11]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP12]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP13]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP14]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP15]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-blockchain_test_engine-DUP16]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_Cancun-evm_code_type_LEGACY-state_test-DUP16]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP1]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP2]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP3]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP4]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP5]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP6]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP7]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP8]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP9]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP10]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP11]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP12]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP13]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP14]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP15]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test-DUP16]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP1]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP2]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP3]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP4]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP5]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP6]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP7]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP8]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP9]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP10]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP11]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP12]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP13]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP14]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP15]\ntest_dup[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-DUP16]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP1]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP2]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP3]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP4]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP5]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP6]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP7]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP8]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP9]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP10]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP11]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP12]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP13]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP14]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP15]\ntest_dup[fork_Prague-evm_code_type_LEGACY-state_test-DUP16]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/frontier/opcodes/test_dup.py\n
    "},{"location":"tests/frontier/opcodes/test_selfdestruct/","title":"Test Selfdestruct","text":"

    Documentation for tests/frontier/opcodes/test_selfdestruct.py.

    Generate fixtures for these test cases with:

    fill -v tests/frontier/opcodes/test_selfdestruct.py\n

    Test the SELFDESTRUCT opcode.

    "},{"location":"tests/frontier/opcodes/test_selfdestruct/#tests.frontier.opcodes.test_selfdestruct.test_double_kill","title":"test_double_kill(blockchain_test, pre)","text":"

    Test that when two transactions attempt to destruct a contract, the second transaction actually resurrects the contract as an empty account (prior to Spurious Dragon).

    Source code in tests/frontier/opcodes/test_selfdestruct.py
    @pytest.mark.valid_from(\"Frontier\")\n@pytest.mark.valid_until(\"Homestead\")\ndef test_double_kill(blockchain_test: BlockchainTestFiller, pre: Alloc):\n    \"\"\"\n    Test that when two transactions attempt to destruct a contract,\n    the second transaction actually resurrects the contract as an empty account (prior to Spurious\n    Dragon).\n    \"\"\"\n    env = Environment()\n    sender = pre.fund_eoa()\n\n    deploy_code = Op.SELFDESTRUCT(Op.ADDRESS)\n\n    initcode = Initcode(deploy_code=deploy_code)\n\n    create_tx = Transaction(\n        gas_limit=100000000,\n        protected=False,\n        to=None,\n        data=initcode,\n        sender=sender,\n    )\n\n    block_1 = Block(txs=[create_tx])\n\n    first_kill = Transaction(\n        gas_limit=100000000,\n        protected=False,\n        to=create_tx.created_contract,\n        sender=sender,\n    )\n\n    second_kill = Transaction(\n        gas_limit=100000000,\n        protected=False,\n        to=create_tx.created_contract,\n        sender=sender,\n    )\n\n    block_2 = Block(txs=[first_kill, second_kill])\n\n    post = {\n        create_tx.created_contract: Account(\n            nonce=0,\n            balance=0,\n            code=b\"\",\n            storage={},\n        ),\n    }\n\n    blockchain_test(genesis_environment=env, pre=pre, post=post, blocks=[block_1, block_2])\n
    "},{"location":"tests/frontier/opcodes/test_selfdestruct/index/test_cases/","title":"Test Selfdestruct - Test Cases","text":"

    Test cases generated from tests/frontier/opcodes/test_selfdestruct.py

    Parametrized test cases generated from the test module tests/frontier/opcodes/test_selfdestruct.py:

    test_double_kill[fork_Frontier-blockchain_test]\ntest_double_kill[fork_Homestead-blockchain_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/frontier/opcodes/test_selfdestruct.py\n
    "},{"location":"tests/homestead/","title":"Homestead","text":"

    Documentation for tests/homestead.

    Generate fixtures for these test cases with:

    fill -v tests/homestead\n

    Test cases for EVM functionality introduced in Homestead.

    "},{"location":"tests/homestead/coverage/","title":"Coverage","text":"

    Documentation for tests/homestead/coverage.

    Generate fixtures for these test cases with:

    fill -v tests/homestead/coverage\n

    Tests that fill coverage gaps when porting over from ethereum/tests.

    "},{"location":"tests/homestead/coverage/test_coverage/","title":"Test Coverage","text":"

    Documentation for tests/homestead/coverage/test_coverage.py.

    Generate fixtures for these test cases with:

    fill -v tests/homestead/coverage/test_coverage.py\n

    Tests that address coverage gaps that result from updating ethereum/tests into EEST tests.

    "},{"location":"tests/homestead/coverage/test_coverage/#tests.homestead.coverage.test_coverage.test_coverage","title":"test_coverage(state_test, pre, fork)","text":"

    This test covers gaps that result from transforming Yul code into ethereum_test_tools.vm.opcode.Opcodes bytecode.

    E.g. Yul tends to optimize stack items by using SWAP1 and DUP1 opcodes, which are not regularly used in python code.

    Modify this test to cover more Yul code if required in the future.

    Source code in tests/homestead/coverage/test_coverage.py
    @pytest.mark.valid_from(\"Homestead\")\ndef test_coverage(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    fork: Fork,\n):\n    \"\"\"\n    This test covers gaps that result from transforming Yul code into\n    `ethereum_test_tools.vm.opcode.Opcodes` bytecode.\n\n    E.g. Yul tends to optimize stack items by using `SWAP1` and `DUP1` opcodes, which are not\n    regularly used in python code.\n\n    Modify this test to cover more Yul code if required in the future.\n    \"\"\"\n    missed_coverage = pre.deploy_contract(\n        balance=0,\n        code=Op.SHL(0x0000000000000000000000000000000000000000000000000000000000000001, 0x00)\n        + Op.SHR(0x0000000000000000000000000000000000000000000000000000000000000001, 0x00)\n        + Op.PUSH1(0x0A)\n        + Op.PUSH1(0x0B)\n        + Op.PUSH1(0x0C)\n        + Op.PUSH1(0x0D)\n        + Op.PUSH1(0x0E)\n        + Op.SWAP1()\n        + Op.DUP1()\n        + Op.DUP2()\n        + Op.PUSH0()\n        + Op.PUSH2(0x0102)\n        + Op.PUSH3(0x010203)\n        + Op.PUSH4(0x01020304)\n        + Op.POP(0x01)\n        # lllc tests insert codecopy when using lll(seq())\n        + Op.CODECOPY(0, 16, 4),\n        storage={},\n    )\n    address_to = pre.deploy_contract(\n        balance=1_000_000_000_000_000_000,\n        code=Op.MSTORE(0, Op.CALL(Op.GAS, missed_coverage, 0, 0, 0, 0, 0)) + Op.RETURN(0, 32),\n    )\n\n    if fork >= Cancun:\n        tx = Transaction(\n            sender=pre.fund_eoa(7_000_000_000_000_000_000),\n            gas_limit=100000,\n            to=address_to,\n            data=b\"\",\n            value=0,\n            protected=False,\n            access_list=[],\n            max_fee_per_gas=10,\n            max_priority_fee_per_gas=5,\n        )\n    else:\n        tx = Transaction(\n            sender=pre.fund_eoa(7_000_000_000_000_000_000),\n            gas_limit=100000,\n            to=address_to,\n            data=b\"\",\n            value=0,\n            protected=False,\n        )\n\n    state_test(env=Environment(), pre=pre, post={}, tx=tx)\n
    "},{"location":"tests/homestead/coverage/test_coverage/index/test_cases/","title":"Test Coverage - Test Cases","text":"

    Test cases generated from tests/homestead/coverage/test_coverage.py

    Parametrized test cases generated from the test module tests/homestead/coverage/test_coverage.py:

    test_coverage[fork_Homestead-blockchain_test]\ntest_coverage[fork_Homestead-state_test]\ntest_coverage[fork_Byzantium-blockchain_test]\ntest_coverage[fork_Byzantium-state_test]\ntest_coverage[fork_Constantinople-blockchain_test]\ntest_coverage[fork_Constantinople-state_test]\ntest_coverage[fork_ConstantinopleFix-blockchain_test]\ntest_coverage[fork_ConstantinopleFix-state_test]\ntest_coverage[fork_Istanbul-blockchain_test]\ntest_coverage[fork_Istanbul-state_test]\ntest_coverage[fork_Berlin-blockchain_test]\ntest_coverage[fork_Berlin-state_test]\ntest_coverage[fork_London-blockchain_test]\ntest_coverage[fork_London-state_test]\ntest_coverage[fork_Paris-blockchain_test]\ntest_coverage[fork_Paris-blockchain_test_engine]\ntest_coverage[fork_Paris-state_test]\ntest_coverage[fork_Shanghai-blockchain_test]\ntest_coverage[fork_Shanghai-blockchain_test_engine]\ntest_coverage[fork_Shanghai-state_test]\ntest_coverage[fork_Cancun-blockchain_test]\ntest_coverage[fork_Cancun-blockchain_test_engine]\ntest_coverage[fork_Cancun-state_test]\ntest_coverage[fork_Prague-blockchain_test]\ntest_coverage[fork_Prague-blockchain_test_engine]\ntest_coverage[fork_Prague-state_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/homestead/coverage/test_coverage.py\n
    "},{"location":"tests/homestead/yul/","title":"Yul","text":"

    Documentation for tests/homestead/yul.

    Generate fixtures for these test cases with:

    fill -v tests/homestead/yul\n

    Tests using Yul source for contracts.

    "},{"location":"tests/homestead/yul/test_yul_example/","title":"Test Yul Example","text":"

    Documentation for tests/homestead/yul/test_yul_example.py.

    Generate fixtures for these test cases with:

    fill -v tests/homestead/yul/test_yul_example.py\n

    Test Yul Source Code Examples

    "},{"location":"tests/homestead/yul/test_yul_example/#tests.homestead.yul.test_yul_example.test_yul","title":"test_yul(state_test, pre, yul, fork)","text":"

    Test YUL compiled bytecode.

    Source code in tests/homestead/yul/test_yul_example.py
    @pytest.mark.valid_from(\"Homestead\")\ndef test_yul(state_test: StateTestFiller, pre: Alloc, yul: YulCompiler, fork: Fork):\n    \"\"\"\n    Test YUL compiled bytecode.\n    \"\"\"\n    env = Environment()\n\n    contract_address = pre.deploy_contract(\n        code=yul(\n            \"\"\"\n            {\n                function f(a, b) -> c {\n                    c := add(a, b)\n                }\n\n                sstore(0, f(1, 2))\n                return(0, 32)\n            }\n            \"\"\"\n        ),\n        balance=0x0BA1A9CE0BA1A9CE,\n    )\n    sender = pre.fund_eoa(amount=0x0BA1A9CE0BA1A9CE)\n\n    tx = Transaction(\n        ty=0x0,\n        chain_id=0x01,\n        sender=sender,\n        to=contract_address,\n        gas_limit=500000,\n        gas_price=10,\n        protected=False if fork in [Frontier, Homestead] else True,\n    )\n\n    post = {\n        contract_address: Account(\n            storage={\n                0x00: 0x03,\n            },\n        ),\n    }\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/homestead/yul/test_yul_example/index/test_cases/","title":"Test Yul Example - Test Cases","text":"

    Test cases generated from tests/homestead/yul/test_yul_example.py

    Parametrized test cases generated from the test module tests/homestead/yul/test_yul_example.py:

    test_yul[fork_Homestead-blockchain_test]\ntest_yul[fork_Homestead-state_test]\ntest_yul[fork_Byzantium-blockchain_test]\ntest_yul[fork_Byzantium-state_test]\ntest_yul[fork_Constantinople-blockchain_test]\ntest_yul[fork_Constantinople-state_test]\ntest_yul[fork_ConstantinopleFix-blockchain_test]\ntest_yul[fork_ConstantinopleFix-state_test]\ntest_yul[fork_Istanbul-blockchain_test]\ntest_yul[fork_Istanbul-state_test]\ntest_yul[fork_Berlin-blockchain_test]\ntest_yul[fork_Berlin-state_test]\ntest_yul[fork_London-blockchain_test]\ntest_yul[fork_London-state_test]\ntest_yul[fork_Paris-blockchain_test]\ntest_yul[fork_Paris-blockchain_test_engine]\ntest_yul[fork_Paris-state_test]\ntest_yul[fork_Shanghai-blockchain_test]\ntest_yul[fork_Shanghai-blockchain_test_engine]\ntest_yul[fork_Shanghai-state_test]\ntest_yul[fork_Cancun-blockchain_test]\ntest_yul[fork_Cancun-blockchain_test_engine]\ntest_yul[fork_Cancun-state_test]\ntest_yul[fork_Prague-blockchain_test]\ntest_yul[fork_Prague-blockchain_test_engine]\ntest_yul[fork_Prague-state_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/homestead/yul/test_yul_example.py\n
    "},{"location":"tests/istanbul/","title":"Istanbul","text":"

    Documentation for tests/istanbul.

    Generate fixtures for these test cases with:

    fill -v tests/istanbul\n

    Test cases for EVM functionality introduced in Istanbul.

    "},{"location":"tests/istanbul/eip1344_chainid/","title":"EIP-1344 CHAINID","text":"

    Documentation for tests/istanbul/eip1344_chainid.

    Generate fixtures for these test cases with:

    fill -v tests/istanbul/eip1344_chainid\n
    Tests EIP-1344: ChainID Opcode

    Test cases for EIP-1344: ChainID Opcode.

    "},{"location":"tests/istanbul/eip1344_chainid/test_chainid/","title":"Test CHAINID","text":"

    Documentation for tests/istanbul/eip1344_chainid/test_chainid.py.

    Generate fixtures for these test cases with:

    fill -v tests/istanbul/eip1344_chainid/test_chainid.py\n
    Tests EIP-1344: CHAINID opcode

    Test cases for EIP-1344: CHAINID opcode.

    "},{"location":"tests/istanbul/eip1344_chainid/test_chainid/#tests.istanbul.eip1344_chainid.test_chainid.test_chainid","title":"test_chainid(state_test, pre)","text":"

    Test CHAINID opcode.

    Source code in tests/istanbul/eip1344_chainid/test_chainid.py
    @pytest.mark.valid_from(\"Istanbul\")\ndef test_chainid(state_test: StateTestFiller, pre: Alloc):\n    \"\"\"\n    Test CHAINID opcode.\n    \"\"\"\n    env = Environment(\n        fee_recipient=\"0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba\",\n        difficulty=0x20000,\n        gas_limit=10000000000,\n        number=1,\n        timestamp=1000,\n    )\n\n    contract_address = pre.deploy_contract(Op.SSTORE(1, Op.CHAINID) + Op.STOP)\n    sender = pre.fund_eoa()\n\n    tx = Transaction(\n        ty=0x0,\n        chain_id=0x01,\n        to=contract_address,\n        gas_limit=100000000,\n        gas_price=10,\n        sender=sender,\n    )\n\n    post = {\n        contract_address: Account(storage={\"0x01\": \"0x01\"}),\n    }\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/istanbul/eip1344_chainid/test_chainid/index/test_cases/","title":"Test CHAINID - Test Cases","text":"

    Test cases generated from tests/istanbul/eip1344_chainid/test_chainid.py

    Parametrized test cases generated from the test module tests/istanbul/eip1344_chainid/test_chainid.py:

    test_chainid[fork_Istanbul-blockchain_test]\ntest_chainid[fork_Istanbul-state_test]\ntest_chainid[fork_Berlin-blockchain_test]\ntest_chainid[fork_Berlin-state_test]\ntest_chainid[fork_London-blockchain_test]\ntest_chainid[fork_London-state_test]\ntest_chainid[fork_Paris-blockchain_test]\ntest_chainid[fork_Paris-blockchain_test_engine]\ntest_chainid[fork_Paris-state_test]\ntest_chainid[fork_Shanghai-blockchain_test]\ntest_chainid[fork_Shanghai-blockchain_test_engine]\ntest_chainid[fork_Shanghai-state_test]\ntest_chainid[fork_Cancun-blockchain_test]\ntest_chainid[fork_Cancun-blockchain_test_engine]\ntest_chainid[fork_Cancun-state_test]\ntest_chainid[fork_Prague-blockchain_test]\ntest_chainid[fork_Prague-blockchain_test_engine]\ntest_chainid[fork_Prague-state_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/istanbul/eip1344_chainid/test_chainid.py\n
    "},{"location":"tests/paris/","title":"Paris","text":"

    Documentation for tests/paris.

    Generate fixtures for these test cases with:

    fill -v tests/paris\n

    Test cases for EVM functionality introduced in Paris (Merge).

    "},{"location":"tests/paris/security/","title":"Security","text":"

    Documentation for tests/paris/security.

    Generate fixtures for these test cases with:

    fill -v tests/paris/security\n

    Ethereum execution client tests related to security issues.

    "},{"location":"tests/paris/security/test_selfdestruct_balance_bug/","title":"Test Selfdestruct Balance Bug","text":"

    Documentation for tests/paris/security/test_selfdestruct_balance_bug.py.

    Generate fixtures for these test cases with:

    fill -v tests/paris/security/test_selfdestruct_balance_bug.py\n
    Tests the Consensus Flaw During Block Processing related to SELFDESTRUCT

    Tests the consensus-vulnerability reported in go-ethereum/security/advisories/GHSA-xw37-57qp-9mm4.

    To reproduce the issue with this test case:

    1. Fill the test with the most recent geth evm version.
    2. Run the fixture output within a vulnerable geth version: v1.9.20 > geth >= v1.9.4.
    "},{"location":"tests/paris/security/test_selfdestruct_balance_bug/#tests.paris.security.test_selfdestruct_balance_bug.test_tx_selfdestruct_balance_bug","title":"test_tx_selfdestruct_balance_bug(blockchain_test, pre)","text":"

    Test that the vulnerability is not present by checking the balance of the 0xaa contract after executing specific transactions:

    1. Start with contract 0xaa which has initial balance of 3 wei. 0xaa contract code simply performs a self-destruct to itself.

    2. Send a transaction (tx 1) to invoke caller contract 0xcc (which has a balance of 1 wei), which in turn invokes 0xaa with a 1 wei call.

    3. Store the balance of 0xaa after the first transaction is processed. 0xaa self-destructed. Expected outcome: 0 wei.

    4. Send another transaction (tx 2) to call 0xaa with 5 wei.

    5. Store the balance of 0xaa after the second transaction is processed. No self-destruct. Expected outcome: 5 wei.

    6. Verify that:

      • Call within tx 1 is successful, i.e 0xaa self-destructed.
      • The balances of 0xaa after each tx are correct.
      • During tx 2, code in 0xaa does not execute, hence self-destruct mechanism does not trigger.

    TODO: EOF - This test could be parametrized for EOFCREATE

    Source code in tests/paris/security/test_selfdestruct_balance_bug.py
    @pytest.mark.valid_from(\"Constantinople\")\ndef test_tx_selfdestruct_balance_bug(blockchain_test: BlockchainTestFiller, pre: Alloc):\n    \"\"\"\n    Test that the vulnerability is not present by checking the balance of the\n    `0xaa` contract after executing specific transactions:\n\n    1. Start with contract `0xaa` which has initial balance of 3 wei.\n        `0xaa` contract code simply performs a self-destruct to itself.\n\n    2. Send a transaction (tx 1) to invoke caller contract `0xcc` (which\n        has a balance of 1 wei), which in turn invokes `0xaa` with a 1 wei call.\n\n    3. Store the balance of `0xaa` after the first transaction\n        is processed. `0xaa` self-destructed. Expected outcome: 0 wei.\n\n    4. Send another transaction (tx 2) to call 0xaa with 5 wei.\n\n    5. Store the balance of `0xaa` after the second transaction\n        is processed. No self-destruct. Expected outcome: 5 wei.\n\n    6. Verify that:\n        - Call within tx 1 is successful, i.e `0xaa` self-destructed.\n        - The balances of `0xaa` after each tx are correct.\n        - During tx 2, code in `0xaa` does not execute,\n            hence self-destruct mechanism does not trigger.\n\n    TODO: EOF - This test could be parametrized for EOFCREATE\n    \"\"\"\n    deploy_code = Switch(\n        default_action=Op.REVERT(0, 0),\n        cases=[\n            CalldataCase(\n                value=0,\n                action=Op.SELFDESTRUCT(Op.ADDRESS),\n            ),\n            CalldataCase(\n                value=1,\n                action=Op.SSTORE(0, Op.SELFBALANCE),\n            ),\n        ],\n    )\n    aa_code = Initcode(\n        deploy_code=deploy_code,\n    )\n    cc_code = (\n        Op.CALLDATACOPY(size=Op.CALLDATASIZE)\n        + Op.MSTORE(\n            0,\n            Op.CREATE(\n                value=3,  # Initial balance of 3 wei\n                offset=0,\n                size=Op.CALLDATASIZE,\n            ),\n        )\n        + Op.SSTORE(0xCA1101, Op.CALL(gas=100000, address=Op.MLOAD(0), value=0))\n        + Op.CALL(gas=100000, address=Op.MLOAD(0), value=1)\n    )\n\n    cc_address = pre.deploy_contract(cc_code, balance=1000000000)\n    aa_location = compute_create_address(address=cc_address, nonce=1)\n    balance_code = Op.SSTORE(0xBA1AA, Op.BALANCE(aa_location))\n    balance_address_1 = pre.deploy_contract(balance_code)\n    balance_address_2 = pre.deploy_contract(balance_code)\n\n    sender = pre.fund_eoa()\n\n    blocks = [\n        Block(\n            txs=[\n                # Sender invokes caller, caller invokes 0xaa:\n                # calling with 1 wei call\n                Transaction(\n                    sender=sender,\n                    to=cc_address,\n                    data=aa_code,\n                    gas_limit=1000000,\n                ),\n                # Dummy tx to store balance of 0xaa after first TX.\n                Transaction(\n                    sender=sender,\n                    to=balance_address_1,\n                    gas_limit=100000,\n                ),\n                # Sender calls 0xaa with 5 wei.\n                Transaction(\n                    sender=sender,\n                    to=aa_location,\n                    gas_limit=100000,\n                    value=5,\n                ),\n                # Dummy tx to store balance of 0xaa after second TX.\n                Transaction(\n                    sender=sender,\n                    to=balance_address_2,\n                    gas_limit=100000,\n                ),\n            ],\n        ),\n    ]\n\n    post = {\n        # Check call from caller has succeeded.\n        cc_address: Account(nonce=2, storage={0xCA1101: 1}),\n        # Check balance of 0xaa after tx 1 is 0 wei, i.e self-destructed.\n        # Vulnerable versions should return 1 wei.\n        balance_address_1: Account(storage={0xBA1AA: 0}),\n        # Check that 0xaa exists and balance after tx 2 is 5 wei.\n        # Vulnerable versions should return 6 wei.\n        balance_address_2: Account(storage={0xBA1AA: 5}),\n        aa_location: Account(storage={0: 0}),\n    }\n\n    blockchain_test(pre=pre, post=post, blocks=blocks)\n
    "},{"location":"tests/paris/security/test_selfdestruct_balance_bug/index/test_cases/","title":"Test Selfdestruct Balance Bug - Test Cases","text":"

    Test cases generated from tests/paris/security/test_selfdestruct_balance_bug.py

    Parametrized test cases generated from the test module tests/paris/security/test_selfdestruct_balance_bug.py:

    test_tx_selfdestruct_balance_bug[fork_Constantinople-blockchain_test]\ntest_tx_selfdestruct_balance_bug[fork_ConstantinopleFix-blockchain_test]\ntest_tx_selfdestruct_balance_bug[fork_Istanbul-blockchain_test]\ntest_tx_selfdestruct_balance_bug[fork_Berlin-blockchain_test]\ntest_tx_selfdestruct_balance_bug[fork_London-blockchain_test]\ntest_tx_selfdestruct_balance_bug[fork_Paris-blockchain_test]\ntest_tx_selfdestruct_balance_bug[fork_Paris-blockchain_test_engine]\ntest_tx_selfdestruct_balance_bug[fork_Shanghai-blockchain_test]\ntest_tx_selfdestruct_balance_bug[fork_Shanghai-blockchain_test_engine]\ntest_tx_selfdestruct_balance_bug[fork_Cancun-blockchain_test]\ntest_tx_selfdestruct_balance_bug[fork_Cancun-blockchain_test_engine]\ntest_tx_selfdestruct_balance_bug[fork_Prague-blockchain_test]\ntest_tx_selfdestruct_balance_bug[fork_Prague-blockchain_test_engine]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/paris/security/test_selfdestruct_balance_bug.py\n
    "},{"location":"tests/prague/","title":"Prague","text":"

    Documentation for tests/prague.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Test cases for EVM functionality introduced in Prague.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/","title":"EIP-2537 Bls 12 381 Precompiles","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-2537: Precompile for BLS12-381 curve operations

    Tests for EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/spec.py.

    Defines EIP-2537 specification constants and functions.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/spec/#tests.prague.eip2537_bls_12_381_precompiles.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-2537 specifications as defined at https://eips.ethereum.org/EIPS/eip-2537

    Source code in tests/prague/eip2537_bls_12_381_precompiles/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-2537 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-2537\n    \"\"\"\n\n    # Addresses\n    G1ADD = 0x0B\n    G1MUL = 0x0C\n    G1MSM = 0x0D\n    G2ADD = 0x0E\n    G2MUL = 0x0F\n    G2MSM = 0x10\n    PAIRING = 0x11\n    MAP_FP_TO_G1 = 0x12\n    MAP_FP2_TO_G2 = 0x13\n\n    # Gas constants\n    G1ADD_GAS = 500\n    G1MUL_GAS = 12_000\n    G2ADD_GAS = 800\n    G2MUL_GAS = 45_000\n    MAP_FP_TO_G1_GAS = 5_500\n    MAP_FP2_TO_G2_GAS = 75_000\n    PAIRING_BASE_GAS = 65_000\n    PAIRING_PER_PAIR_GAS = 43_000\n\n    # Other constants\n    B_COEFFICIENT = 0x04\n    X = -0xD201000000010000\n    Q = X**4 - X**2 + 1\n    P = (X - 1) ** 2 * Q // 3 + X\n    LEN_PER_PAIR = len(PointG1() + PointG2())\n    MSM_MULTIPLIER = 1_000\n    MSM_DISCOUNT_TABLE = MSM_DISCOUNT_TABLE\n\n    # Test constants (from https://github.com/ethereum/bls12-381-tests/tree/eip-2537)\n    P1 = PointG1(  # random point in G1\n        0x112B98340EEE2777CC3C14163DEA3EC97977AC3DC5C70DA32E6E87578F44912E902CCEF9EFE28D4A78B8999DFBCA9426,  # noqa: E501\n        0x186B28D92356C4DFEC4B5201AD099DBDEDE3781F8998DDF929B4CD7756192185CA7B8F4EF7088F813270AC3D48868A21,  # noqa: E501\n    )\n    G1 = PointG1(\n        0x17F1D3A73197D7942695638C4FA9AC0FC3688C4F9774B905A14E3A3F171BAC586C55E83FF97A1AEFFB3AF00ADB22C6BB,  # noqa: E501\n        0x8B3F481E3AAA0F1A09E30ED741D8AE4FCF5E095D5D00AF600DB18CB2C04B3EDD03CC744A2888AE40CAA232946C5E7E1,  # noqa: E501\n    )\n    # point at infinity in G1\n    INF_G1 = PointG1(0, 0)\n    # random point in G2\n    P2 = PointG2(\n        (\n            0x103121A2CEAAE586D240843A398967325F8EB5A93E8FEA99B62B9F88D8556C80DD726A4B30E84A36EEABAF3592937F27,  # noqa: E501\n            0x86B990F3DA2AEAC0A36143B7D7C824428215140DB1BB859338764CB58458F081D92664F9053B50B3FBD2E4723121B68,  # noqa: E501\n        ),\n        (\n            0xF9E7BA9A86A8F7624AA2B42DCC8772E1AF4AE115685E60ABC2C9B90242167ACEF3D0BE4050BF935EED7C3B6FC7BA77E,  # noqa: E501\n            0xD22C3652D0DC6F0FC9316E14268477C2049EF772E852108D269D9C38DBA1D4802E8DAE479818184C08F9A569D878451,  # noqa: E501\n        ),\n    )\n    G2 = PointG2(\n        (\n            0x24AA2B2F08F0A91260805272DC51051C6E47AD4FA403B02B4510B647AE3D1770BAC0326A805BBEFD48056C8C121BDB8,  # noqa: E501\n            0x13E02B6052719F607DACD3A088274F65596BD0D09920B61AB5DA61BBDC7F5049334CF11213945D57E5AC7D055D042B7E,  # noqa: E501\n        ),\n        (\n            0xCE5D527727D6E118CC9CDC6DA2E351AADFD9BAA8CBDD3A76D429A695160D12C923AC9CC3BACA289E193548608B82801,  # noqa: E501\n            0x606C4A02EA734CC32ACD2B02BC28B99CB3E287E85A763AF267492AB572E99AB3F370D275CEC1DA1AAA9075FF05F79BE,  # noqa: E501\n        ),\n    )\n    # point at infinity in G2\n    INF_G2 = PointG2((0, 0), (0, 0))\n\n    # Other test constants\n    # point not in subgroup in curve Fp\n    P1_NOT_IN_SUBGROUP = PointG1(0, 2)\n    P1_NOT_IN_SUBGROUP_TIMES_2 = PointG1(0, P - 2)\n    # point not in subgroup in curve Fp2\n    P2_NOT_IN_SUBGROUP = PointG2(\n        (1, 1),\n        (\n            0x17FAA6201231304F270B858DAD9462089F2A5B83388E4B10773ABC1EEF6D193B9FCE4E8EA2D9D28E3C3A315AA7DE14CA,  # noqa: E501\n            0xCC12449BE6AC4E7F367E7242250427C4FB4C39325D3164AD397C1837A90F0EA1A534757DF374DD6569345EB41ED76E,  # noqa: E501\n        ),\n    )\n    P2_NOT_IN_SUBGROUP_TIMES_2 = PointG2(\n        (\n            0x919F97860ECC3E933E3477FCAC0E2E4FCC35A6E886E935C97511685232456263DEF6665F143CCCCB44C733333331553,  # noqa: E501\n            0x18B4376B50398178FA8D78ED2654B0FFD2A487BE4DBE6B69086E61B283F4E9D58389CCCB8EDC99995718A66666661555,  # noqa: E501\n        ),\n        (\n            0x26898F699C4B07A405AB4183A10B47F923D1C0FDA1018682DD2CCC88968C1B90D44534D6B9270CF57F8DC6D4891678A,  # noqa: E501\n            0x3270414330EAD5EC92219A03A24DFA059DBCBE610868BE1851CC13DAC447F60B40D41113FD007D3307B19ADD4B0F061,  # noqa: E501\n        ),\n    )\n\n    # Pairing precompile results\n    PAIRING_TRUE = int.to_bytes(1, length=32, byteorder=\"big\")\n    PAIRING_FALSE = int.to_bytes(0, length=32, byteorder=\"big\")\n\n    # Returned on precompile failure\n    INVALID = b\"\"\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/","title":"Test Bls12 G1add","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests BLS12_G1ADD precompile of EIP-2537: Precompile for BLS12-381 curve operations

    Tests BLS12_G1ADD precompile of EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1add.test_valid","title":"test_valid(state_test, pre, post, tx)","text":"

    Test the BLS12_G1ADD precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py
    @pytest.mark.parametrize(\n    \"input,expected_output\",\n    vectors_from_file(\"add_G1_bls.json\")\n    + [\n        pytest.param(\n            Spec.INF_G1 + Spec.INF_G1,\n            Spec.INF_G1,\n            id=\"inf_plus_inf\",\n        ),\n        pytest.param(\n            Spec.P1_NOT_IN_SUBGROUP + Spec.P1_NOT_IN_SUBGROUP,\n            Spec.P1_NOT_IN_SUBGROUP_TIMES_2,\n            id=\"not_in_subgroup_1\",\n        ),\n        pytest.param(\n            Spec.P1_NOT_IN_SUBGROUP + Spec.P1_NOT_IN_SUBGROUP_TIMES_2,\n            Spec.INF_G1,\n            id=\"not_in_subgroup_2\",\n        ),\n    ],\n)\ndef test_valid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1ADD precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1add.test_invalid","title":"test_invalid(state_test, pre, post, tx)","text":"

    Negative tests for the BLS12_G1ADD precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py
    @pytest.mark.parametrize(\n    \"input\",\n    vectors_from_file(\"fail-add_G1_bls.json\")\n    + [\n        pytest.param(\n            PointG1(0, 1) + Spec.INF_G1,\n            id=\"invalid_point_a_1\",\n        ),\n        pytest.param(\n            PointG1(Spec.P1.x, Spec.P1.y - 1) + Spec.INF_G1,\n            id=\"invalid_point_a_2\",\n        ),\n        pytest.param(\n            PointG1(Spec.P1.x, Spec.P1.y + 1) + Spec.INF_G1,\n            id=\"invalid_point_a_3\",\n        ),\n        pytest.param(\n            PointG1(Spec.P1.x, Spec.P1.x) + Spec.INF_G1,\n            id=\"invalid_point_a_4\",\n        ),\n        pytest.param(\n            PointG1(Spec.P1.x, Spec.P1.y - 1) + Spec.P1,\n            id=\"invalid_point_a_5\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + PointG1(0, 1),\n            id=\"invalid_point_b_1\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + PointG1(Spec.P1.x, Spec.P1.y - 1),\n            id=\"invalid_point_b_2\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + PointG1(Spec.P1.x, Spec.P1.y + 1),\n            id=\"invalid_point_b_3\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + PointG1(Spec.P1.x, Spec.P1.x),\n            id=\"invalid_point_b_4\",\n        ),\n        pytest.param(\n            Spec.P1 + PointG1(Spec.P1.x, Spec.P1.y - 1),\n            id=\"invalid_point_b_5\",\n        ),\n        pytest.param(\n            PointG1(Spec.P, 0) + Spec.INF_G1,\n            id=\"a_x_equal_to_p\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + PointG1(Spec.P, 0),\n            id=\"b_x_equal_to_p\",\n        ),\n        pytest.param(\n            PointG1(0, Spec.P) + Spec.INF_G1,\n            id=\"a_y_equal_to_p\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + PointG1(0, Spec.P),\n            id=\"b_y_equal_to_p\",\n        ),\n        pytest.param(\n            b\"\\x80\" + bytes(Spec.INF_G1)[1:] + Spec.INF_G1,\n            id=\"invalid_encoding_a\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + b\"\\x80\" + bytes(Spec.INF_G1)[1:],\n            id=\"invalid_encoding_b\",\n        ),\n        pytest.param(\n            (Spec.INF_G1 + PointG1(Spec.P1.x, Spec.P1.x))[:-1],\n            id=\"input_too_short\",\n        ),\n        pytest.param(\n            b\"\\x00\" + (Spec.INF_G1 + PointG1(Spec.P1.x, Spec.P1.x)),\n            id=\"input_too_long\",\n        ),\n        pytest.param(\n            b\"\",\n            id=\"zero_length_input\",\n        ),\n        pytest.param(\n            Spec.G1,\n            id=\"only_one_point\",\n        ),\n        pytest.param(\n            Spec.G2 + Spec.G2,\n            id=\"g2_points\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\ndef test_invalid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Negative tests for the BLS12_G1ADD precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1add.test_gas","title":"test_gas(state_test, pre, post, tx)","text":"

    Test the BLS12_G1ADD precompile gas requirements.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py
    @pytest.mark.parametrize(\n    \"input,expected_output,precompile_gas_modifier\",\n    [\n        pytest.param(\n            Spec.INF_G1 + Spec.INF_G1,\n            Spec.INF_G1,\n            1,\n            id=\"extra_gas\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + Spec.INF_G1,\n            Spec.INVALID,\n            -1,\n            id=\"insufficient_gas\",\n        ),\n    ],\n)\ndef test_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1ADD precompile gas requirements.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1add.test_call_types","title":"test_call_types(state_test, pre, post, tx)","text":"

    Test the BLS12_G1ADD precompile using different call types.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.STATICCALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"input,expected_output\",\n    [\n        pytest.param(\n            Spec.INF_G1 + Spec.INF_G1,\n            Spec.INF_G1,\n            id=\"inf_plus_inf\",\n        ),\n    ],\n)\ndef test_call_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1ADD precompile using different call types.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/index/test_cases/","title":"Test Bls12 G1add - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py:

    test_valid[fork_Prague-blockchain_test-bls_g1add_g1+p1-]\ntest_valid[fork_Prague-blockchain_test-bls_g1add_p1+g1-]\ntest_valid[fork_Prague-blockchain_test-bls_g1add_g1_wrong_order+g1-]\ntest_valid[fork_Prague-blockchain_test-bls_g1add_(g1+0=g1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1add_(p1+0=p1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1add_(g1-g1=0)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1add_(p1-p1=0)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1add_(g1+g1=2*g1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1add_(p1+p1=2*p1)-]\ntest_valid[fork_Prague-blockchain_test-inf_plus_inf-]\ntest_valid[fork_Prague-blockchain_test-not_in_subgroup_1-]\ntest_valid[fork_Prague-blockchain_test-not_in_subgroup_2-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1add_g1+p1-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1add_p1+g1-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1add_g1_wrong_order+g1-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1add_(g1+0=g1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1add_(p1+0=p1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1add_(g1-g1=0)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1add_(p1-p1=0)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1add_(g1+g1=2*g1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1add_(p1+p1=2*p1)-]\ntest_valid[fork_Prague-blockchain_test_engine-inf_plus_inf-]\ntest_valid[fork_Prague-blockchain_test_engine-not_in_subgroup_1-]\ntest_valid[fork_Prague-blockchain_test_engine-not_in_subgroup_2-]\ntest_valid[fork_Prague-state_test-bls_g1add_g1+p1-]\ntest_valid[fork_Prague-state_test-bls_g1add_p1+g1-]\ntest_valid[fork_Prague-state_test-bls_g1add_g1_wrong_order+g1-]\ntest_valid[fork_Prague-state_test-bls_g1add_(g1+0=g1)-]\ntest_valid[fork_Prague-state_test-bls_g1add_(p1+0=p1)-]\ntest_valid[fork_Prague-state_test-bls_g1add_(g1-g1=0)-]\ntest_valid[fork_Prague-state_test-bls_g1add_(p1-p1=0)-]\ntest_valid[fork_Prague-state_test-bls_g1add_(g1+g1=2*g1)-]\ntest_valid[fork_Prague-state_test-bls_g1add_(p1+p1=2*p1)-]\ntest_valid[fork_Prague-state_test-inf_plus_inf-]\ntest_valid[fork_Prague-state_test-not_in_subgroup_1-]\ntest_valid[fork_Prague-state_test-not_in_subgroup_2-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1add_empty_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1add_short_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1add_large_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1add_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2add_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1add_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_1-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_2-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_3-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_4-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_5-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_b_1-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_b_2-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_b_3-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_b_4-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_b_5-]\ntest_invalid[fork_Prague-blockchain_test--a_x_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--b_x_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--a_y_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--b_y_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding_a-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding_b-]\ntest_invalid[fork_Prague-blockchain_test--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test--only_one_point-]\ntest_invalid[fork_Prague-blockchain_test--g2_points-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1add_empty_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1add_short_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1add_large_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1add_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2add_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1add_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_3-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_4-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_5-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_b_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_b_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_b_3-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_b_4-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_b_5-]\ntest_invalid[fork_Prague-blockchain_test_engine--a_x_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--b_x_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--a_y_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--b_y_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding_a-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding_b-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test_engine--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--only_one_point-]\ntest_invalid[fork_Prague-blockchain_test_engine--g2_points-]\ntest_invalid[fork_Prague-state_test--bls_g1add_empty_input-]\ntest_invalid[fork_Prague-state_test--bls_g1add_short_input-]\ntest_invalid[fork_Prague-state_test--bls_g1add_large_input-]\ntest_invalid[fork_Prague-state_test--bls_g1add_point_not_on_curve-]\ntest_invalid[fork_Prague-state_test--bls_g2add_invalid_field_element-]\ntest_invalid[fork_Prague-state_test--bls_g1add_violate_top_bytes-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_1-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_2-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_3-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_4-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_5-]\ntest_invalid[fork_Prague-state_test--invalid_point_b_1-]\ntest_invalid[fork_Prague-state_test--invalid_point_b_2-]\ntest_invalid[fork_Prague-state_test--invalid_point_b_3-]\ntest_invalid[fork_Prague-state_test--invalid_point_b_4-]\ntest_invalid[fork_Prague-state_test--invalid_point_b_5-]\ntest_invalid[fork_Prague-state_test--a_x_equal_to_p-]\ntest_invalid[fork_Prague-state_test--b_x_equal_to_p-]\ntest_invalid[fork_Prague-state_test--a_y_equal_to_p-]\ntest_invalid[fork_Prague-state_test--b_y_equal_to_p-]\ntest_invalid[fork_Prague-state_test--invalid_encoding_a-]\ntest_invalid[fork_Prague-state_test--invalid_encoding_b-]\ntest_invalid[fork_Prague-state_test--input_too_short-]\ntest_invalid[fork_Prague-state_test--input_too_long-]\ntest_invalid[fork_Prague-state_test--zero_length_input-]\ntest_invalid[fork_Prague-state_test--only_one_point-]\ntest_invalid[fork_Prague-state_test--g2_points-]\ntest_gas[fork_Prague-blockchain_test-extra_gas-]\ntest_gas[fork_Prague-blockchain_test-insufficient_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-extra_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-insufficient_gas-]\ntest_gas[fork_Prague-state_test-extra_gas-]\ntest_gas[fork_Prague-state_test-insufficient_gas-]\ntest_call_types[fork_Prague-blockchain_test-inf_plus_inf-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test-inf_plus_inf-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test-inf_plus_inf-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_plus_inf-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_plus_inf-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_plus_inf-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-state_test-inf_plus_inf-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-state_test-inf_plus_inf-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-state_test-inf_plus_inf-call_opcode_CALLCODE-]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/","title":"Test Bls12 G1msm","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests BLS12_G1MSM precompile of EIP-2537: Precompile for BLS12-381 curve operations

    Tests BLS12_G1MSM precompile of EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1msm.test_valid","title":"test_valid(state_test, pre, post, tx)","text":"

    Test the BLS12_G1MSM precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py
    @pytest.mark.parametrize(\n    \"input,expected_output\",\n    vectors_from_file(\"multiexp_G1_bls.json\")\n    + [\n        pytest.param(\n            (Spec.P1 + Scalar(Spec.Q)) * (len(Spec.MSM_DISCOUNT_TABLE) - 1),\n            Spec.INF_G1,\n            id=\"max_discount\",\n        ),\n        pytest.param(\n            (Spec.P1 + Scalar(Spec.Q)) * len(Spec.MSM_DISCOUNT_TABLE),\n            Spec.INF_G1,\n            id=\"max_discount_plus_1\",\n        ),\n    ],\n)\ndef test_valid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1MSM precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1msm.test_invalid","title":"test_invalid(state_test, pre, post, tx)","text":"

    Test the BLS12_G1MSM precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py
    @pytest.mark.parametrize(\n    \"input\",\n    vectors_from_file(\"fail-multiexp_G1_bls.json\")\n    + [\n        pytest.param(\n            PointG1(0, 1) + Scalar(0),\n            id=\"invalid_point_1\",\n        ),\n        pytest.param(\n            PointG1(Spec.P1.x, Spec.P1.y - 1) + Scalar(0),\n            id=\"invalid_point_2\",\n        ),\n        pytest.param(\n            PointG1(Spec.P1.x, Spec.P1.y + 1) + Scalar(0),\n            id=\"invalid_point_3\",\n        ),\n        pytest.param(\n            PointG1(Spec.P1.x, Spec.P1.x) + Scalar(0),\n            id=\"invalid_point_4\",\n        ),\n        pytest.param(\n            b\"\\x80\" + bytes(Spec.INF_G1)[1:] + Scalar(0),\n            id=\"invalid_encoding\",\n        ),\n        pytest.param(\n            b\"\\x80\" + bytes(Spec.INF_G1)[1:] + Scalar(0),\n            id=\"invalid_encoding\",\n        ),\n        pytest.param(\n            Spec.P1_NOT_IN_SUBGROUP + Scalar(Spec.Q),\n            id=\"not_in_subgroup_1\",\n        ),\n        pytest.param(\n            Spec.P1_NOT_IN_SUBGROUP_TIMES_2 + Scalar(Spec.Q),\n            id=\"not_in_subgroup_2\",\n        ),\n        pytest.param(\n            Spec.G1,\n            id=\"bls_g1_truncated_input\",\n        ),\n    ],\n    # Input length tests can be found in ./test_bls12_variable_length_input_contracts.py\n)\n@pytest.mark.parametrize(\n    \"precompile_gas_modifier\", [100_000], ids=[\"\"]\n)  # Add gas so that won't be the cause of failure\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\ndef test_invalid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1MSM precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1msm.test_call_types","title":"test_call_types(state_test, pre, post, tx)","text":"

    Test the BLS12_G1MSM precompile using different call types.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.STATICCALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"input,expected_output\",\n    [\n        pytest.param(\n            Spec.INF_G1 + Scalar(0),\n            Spec.INF_G1,\n            id=\"inf_times_zero\",\n        ),\n    ],\n)\ndef test_call_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1MSM precompile using different call types.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/index/test_cases/","title":"Test Bls12 G1msm - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py:

    test_valid[fork_Prague-blockchain_test-bls_g1multiexp_(g1+g1=2*g1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_(p1+p1=2*p1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_(1*g1=g1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_(1*p1=p1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_(0*g1=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_(0*p1=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_(x*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_(2g1+inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_(inf+inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_(2g1+2p1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_multiple-]\ntest_valid[fork_Prague-blockchain_test-max_discount-]\ntest_valid[fork_Prague-blockchain_test-max_discount_plus_1-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(g1+g1=2*g1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(p1+p1=2*p1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(1*g1=g1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(1*p1=p1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(0*g1=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(0*p1=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(x*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(2g1+inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(inf+inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(2g1+2p1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_multiple-]\ntest_valid[fork_Prague-blockchain_test_engine-max_discount-]\ntest_valid[fork_Prague-blockchain_test_engine-max_discount_plus_1-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(g1+g1=2*g1)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(p1+p1=2*p1)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(1*g1=g1)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(1*p1=p1)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(0*g1=inf)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(0*p1=inf)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(x*inf=inf)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(2g1+inf)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(inf+inf)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(2g1+2p1)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_multiple-]\ntest_valid[fork_Prague-state_test-max_discount-]\ntest_valid[fork_Prague-state_test-max_discount_plus_1-]\ntest_invalid[fork_Prague-blockchain_test---bls_g1multiexp_empty_input-]\ntest_invalid[fork_Prague-blockchain_test---bls_g1multiexp_short_input-]\ntest_invalid[fork_Prague-blockchain_test---bls_g1multiexp_long_input-]\ntest_invalid[fork_Prague-blockchain_test---bls_g1multiexp_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test---bls_g1multiexp_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test---bls_g1multiexp_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test---bls_g1multiexp_g1_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test---invalid_point_1-]\ntest_invalid[fork_Prague-blockchain_test---invalid_point_2-]\ntest_invalid[fork_Prague-blockchain_test---invalid_point_3-]\ntest_invalid[fork_Prague-blockchain_test---invalid_point_4-]\ntest_invalid[fork_Prague-blockchain_test---invalid_encoding0-]\ntest_invalid[fork_Prague-blockchain_test---invalid_encoding1-]\ntest_invalid[fork_Prague-blockchain_test---not_in_subgroup_1-]\ntest_invalid[fork_Prague-blockchain_test---not_in_subgroup_2-]\ntest_invalid[fork_Prague-blockchain_test---bls_g1_truncated_input-]\ntest_invalid[fork_Prague-blockchain_test_engine---bls_g1multiexp_empty_input-]\ntest_invalid[fork_Prague-blockchain_test_engine---bls_g1multiexp_short_input-]\ntest_invalid[fork_Prague-blockchain_test_engine---bls_g1multiexp_long_input-]\ntest_invalid[fork_Prague-blockchain_test_engine---bls_g1multiexp_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test_engine---bls_g1multiexp_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test_engine---bls_g1multiexp_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test_engine---bls_g1multiexp_g1_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test_engine---invalid_point_1-]\ntest_invalid[fork_Prague-blockchain_test_engine---invalid_point_2-]\ntest_invalid[fork_Prague-blockchain_test_engine---invalid_point_3-]\ntest_invalid[fork_Prague-blockchain_test_engine---invalid_point_4-]\ntest_invalid[fork_Prague-blockchain_test_engine---invalid_encoding0-]\ntest_invalid[fork_Prague-blockchain_test_engine---invalid_encoding1-]\ntest_invalid[fork_Prague-blockchain_test_engine---not_in_subgroup_1-]\ntest_invalid[fork_Prague-blockchain_test_engine---not_in_subgroup_2-]\ntest_invalid[fork_Prague-blockchain_test_engine---bls_g1_truncated_input-]\ntest_invalid[fork_Prague-state_test---bls_g1multiexp_empty_input-]\ntest_invalid[fork_Prague-state_test---bls_g1multiexp_short_input-]\ntest_invalid[fork_Prague-state_test---bls_g1multiexp_long_input-]\ntest_invalid[fork_Prague-state_test---bls_g1multiexp_invalid_field_element-]\ntest_invalid[fork_Prague-state_test---bls_g1multiexp_violate_top_bytes-]\ntest_invalid[fork_Prague-state_test---bls_g1multiexp_point_not_on_curve-]\ntest_invalid[fork_Prague-state_test---bls_g1multiexp_g1_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-state_test---invalid_point_1-]\ntest_invalid[fork_Prague-state_test---invalid_point_2-]\ntest_invalid[fork_Prague-state_test---invalid_point_3-]\ntest_invalid[fork_Prague-state_test---invalid_point_4-]\ntest_invalid[fork_Prague-state_test---invalid_encoding0-]\ntest_invalid[fork_Prague-state_test---invalid_encoding1-]\ntest_invalid[fork_Prague-state_test---not_in_subgroup_1-]\ntest_invalid[fork_Prague-state_test---not_in_subgroup_2-]\ntest_invalid[fork_Prague-state_test---bls_g1_truncated_input-]\ntest_call_types[fork_Prague-blockchain_test-inf_times_zero-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test-inf_times_zero-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test-inf_times_zero-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_times_zero-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_times_zero-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_times_zero-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-state_test-inf_times_zero-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-state_test-inf_times_zero-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-state_test-inf_times_zero-call_opcode_CALLCODE-]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/","title":"Test Bls12 G1mul","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests BLS12_G1MUL precompile of EIP-2537: Precompile for BLS12-381 curve operations

    Tests BLS12_G1MUL precompile of EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1mul.test_valid","title":"test_valid(state_test, pre, post, tx)","text":"

    Test the BLS12_G1MUL precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py
    @pytest.mark.parametrize(\n    \"input,expected_output\",\n    vectors_from_file(\"mul_G1_bls.json\")\n    + [\n        pytest.param(\n            Spec.INF_G1 + Scalar(0),\n            Spec.INF_G1,\n            id=\"bls_g1mul_(0*inf=inf)\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + Scalar(2**256 - 1),\n            Spec.INF_G1,\n            id=\"bls_g1mul_(2**256-1*inf=inf)\",\n        ),\n        pytest.param(\n            Spec.P1 + Scalar(2**256 - 1),\n            PointG1(\n                0x3DA1F13DDEF2B8B5A46CD543CE56C0A90B8B3B0D6D43DEC95836A5FD2BACD6AA8F692601F870CF22E05DDA5E83F460B,  # noqa: E501\n                0x18D64F3C0E9785365CBDB375795454A8A4FA26F30B9C4F6E33CA078EB5C29B7AEA478B076C619BC1ED22B14C95569B2D,  # noqa: E501\n            ),\n            id=\"bls_g1mul_(2**256-1*P1)\",\n        ),\n        pytest.param(\n            Spec.P1 + Scalar(Spec.Q - 1),\n            -Spec.P1,  # negated P1\n            id=\"bls_g1mul_(q-1*P1)\",\n        ),\n        pytest.param(\n            Spec.P1 + Scalar(Spec.Q),\n            Spec.INF_G1,\n            id=\"bls_g1mul_(q*P1)\",\n        ),\n        pytest.param(\n            Spec.P1 + Scalar(Spec.Q + 1),\n            Spec.P1,\n            id=\"bls_g1mul_(q+1*P1)\",\n        ),\n        pytest.param(\n            Spec.P1 + Scalar(2 * Spec.Q),\n            Spec.INF_G1,\n            id=\"bls_g1mul_(2q*P1)\",\n        ),\n        pytest.param(\n            Spec.P1 + Scalar((2**256 // Spec.Q) * Spec.Q),\n            Spec.INF_G1,\n            id=\"bls_g1mul_(Nq*P1)\",\n        ),\n    ],\n)\ndef test_valid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1MUL precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1mul.test_invalid","title":"test_invalid(state_test, pre, post, tx)","text":"

    Negative tests for the BLS12_G1MUL precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py
    @pytest.mark.parametrize(\n    \"input\",\n    vectors_from_file(\"fail-mul_G1_bls.json\")\n    + [\n        pytest.param(\n            PointG1(0, 1) + Scalar(0),\n            id=\"invalid_point_1\",\n        ),\n        pytest.param(\n            PointG1(Spec.P1.x, Spec.P1.y - 1) + Scalar(0),\n            id=\"invalid_point_2\",\n        ),\n        pytest.param(\n            PointG1(Spec.P1.x, Spec.P1.y + 1) + Scalar(0),\n            id=\"invalid_point_3\",\n        ),\n        pytest.param(\n            PointG1(Spec.P1.x, Spec.P1.x) + Scalar(0),\n            id=\"invalid_point_4\",\n        ),\n        pytest.param(\n            b\"\\x80\" + bytes(Spec.INF_G1)[1:] + Scalar(0),\n            id=\"invalid_encoding\",\n        ),\n        pytest.param(\n            (Spec.INF_G1 + Scalar(0))[:-1],\n            id=\"input_too_short\",\n        ),\n        pytest.param(\n            b\"\\x00\" + (Spec.INF_G1 + Scalar(0)),\n            id=\"input_too_long\",\n        ),\n        pytest.param(\n            b\"\",\n            id=\"zero_length_input\",\n        ),\n        pytest.param(\n            Spec.P1_NOT_IN_SUBGROUP + Scalar(1),\n            id=\"bls_g1mul_not_in_subgroup_1\",\n        ),\n        pytest.param(\n            Spec.P1_NOT_IN_SUBGROUP_TIMES_2 + Scalar(1),\n            id=\"bls_g1mul_not_in_subgroup_2\",\n        ),\n        pytest.param(\n            Spec.P1_NOT_IN_SUBGROUP_TIMES_2 + Scalar(Spec.Q),\n            id=\"bls_g1mul_not_in_subgroup_times_q\",\n        ),\n        pytest.param(\n            Spec.P1_NOT_IN_SUBGROUP + Scalar(Spec.Q),\n            id=\"bls_g1mul_not_in_subgroup_times_q_2\",\n        ),\n        pytest.param(\n            Spec.G1 + Spec.G1,\n            id=\"bls_g1_add_input_invalid_length\",\n        ),\n        pytest.param(\n            Spec.G2 + Spec.G2,\n            id=\"bls_g2_add_input_invalid_length\",\n        ),\n        pytest.param(\n            Spec.G1,\n            id=\"bls_g1_truncated_input\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\ndef test_invalid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Negative tests for the BLS12_G1MUL precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1mul.test_gas","title":"test_gas(state_test, pre, post, tx)","text":"

    Test the BLS12_G1MUL precompile gas requirements.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py
    @pytest.mark.parametrize(\n    \"input,expected_output,precompile_gas_modifier\",\n    [\n        pytest.param(\n            Spec.INF_G1 + Scalar(0),\n            Spec.INF_G1,\n            1,\n            id=\"extra_gas\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + Scalar(0),\n            Spec.INVALID,\n            -1,\n            id=\"insufficient_gas\",\n        ),\n    ],\n)\ndef test_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1MUL precompile gas requirements.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g1mul.test_call_types","title":"test_call_types(state_test, pre, post, tx)","text":"

    Test the BLS12_G1MUL precompile using different call types.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.STATICCALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"input,expected_output\",\n    [\n        pytest.param(\n            Spec.INF_G1 + Scalar(0),\n            Spec.INF_G1,\n            id=\"bls_g1mul_(0*inf=inf)\",\n        ),\n    ],\n)\ndef test_call_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1MUL precompile using different call types.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/index/test_cases/","title":"Test Bls12 G1mul - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py:

    test_valid[fork_Prague-blockchain_test-bls_g1mul_(g1+g1=2*g1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(p1+p1=2*p1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(1*g1=g1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(1*p1=p1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(0*g1=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(0*p1=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(x*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_random*g1-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_random*p1-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_random*g1_unnormalized_scalar-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_random*p1_unnormalized_scalar-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(0*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(2**256-1*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(2**256-1*P1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(q-1*P1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(q*P1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(q+1*P1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(2q*P1)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1mul_(Nq*P1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(g1+g1=2*g1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(p1+p1=2*p1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(1*g1=g1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(1*p1=p1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(0*g1=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(0*p1=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(x*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_random*g1-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_random*p1-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_random*g1_unnormalized_scalar-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_random*p1_unnormalized_scalar-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(0*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(2**256-1*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(2**256-1*P1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(q-1*P1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(q*P1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(q+1*P1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(2q*P1)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1mul_(Nq*P1)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(g1+g1=2*g1)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(p1+p1=2*p1)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(1*g1=g1)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(1*p1=p1)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(0*g1=inf)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(0*p1=inf)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(x*inf=inf)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_random*g1-]\ntest_valid[fork_Prague-state_test-bls_g1mul_random*p1-]\ntest_valid[fork_Prague-state_test-bls_g1mul_random*g1_unnormalized_scalar-]\ntest_valid[fork_Prague-state_test-bls_g1mul_random*p1_unnormalized_scalar-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(0*inf=inf)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(2**256-1*inf=inf)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(2**256-1*P1)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(q-1*P1)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(q*P1)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(q+1*P1)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(2q*P1)-]\ntest_valid[fork_Prague-state_test-bls_g1mul_(Nq*P1)-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_empty_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_short_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_large_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_g1_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_1-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_2-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_3-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_4-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding-]\ntest_invalid[fork_Prague-blockchain_test--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_not_in_subgroup_1-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_not_in_subgroup_2-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_not_in_subgroup_times_q-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1mul_not_in_subgroup_times_q_2-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1_add_input_invalid_length-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2_add_input_invalid_length-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1_truncated_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_empty_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_short_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_large_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_g1_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_3-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_4-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test_engine--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_not_in_subgroup_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_not_in_subgroup_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_not_in_subgroup_times_q-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1mul_not_in_subgroup_times_q_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1_add_input_invalid_length-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2_add_input_invalid_length-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1_truncated_input-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_empty_input-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_short_input-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_large_input-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_invalid_field_element-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_point_not_on_curve-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_violate_top_bytes-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_g1_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-state_test--invalid_point_1-]\ntest_invalid[fork_Prague-state_test--invalid_point_2-]\ntest_invalid[fork_Prague-state_test--invalid_point_3-]\ntest_invalid[fork_Prague-state_test--invalid_point_4-]\ntest_invalid[fork_Prague-state_test--invalid_encoding-]\ntest_invalid[fork_Prague-state_test--input_too_short-]\ntest_invalid[fork_Prague-state_test--input_too_long-]\ntest_invalid[fork_Prague-state_test--zero_length_input-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_not_in_subgroup_1-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_not_in_subgroup_2-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_not_in_subgroup_times_q-]\ntest_invalid[fork_Prague-state_test--bls_g1mul_not_in_subgroup_times_q_2-]\ntest_invalid[fork_Prague-state_test--bls_g1_add_input_invalid_length-]\ntest_invalid[fork_Prague-state_test--bls_g2_add_input_invalid_length-]\ntest_invalid[fork_Prague-state_test--bls_g1_truncated_input-]\ntest_gas[fork_Prague-blockchain_test-extra_gas-]\ntest_gas[fork_Prague-blockchain_test-insufficient_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-extra_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-insufficient_gas-]\ntest_gas[fork_Prague-state_test-extra_gas-]\ntest_gas[fork_Prague-state_test-insufficient_gas-]\ntest_call_types[fork_Prague-blockchain_test-bls_g1mul_(0*inf=inf)-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test-bls_g1mul_(0*inf=inf)-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test-bls_g1mul_(0*inf=inf)-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-blockchain_test_engine-bls_g1mul_(0*inf=inf)-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-bls_g1mul_(0*inf=inf)-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-bls_g1mul_(0*inf=inf)-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-state_test-bls_g1mul_(0*inf=inf)-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-state_test-bls_g1mul_(0*inf=inf)-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-state_test-bls_g1mul_(0*inf=inf)-call_opcode_CALLCODE-]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/","title":"Test Bls12 G2add","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests BLS12_G2ADD precompile of EIP-2537: Precompile for BLS12-381 curve operations

    Tests BLS12_G2ADD precompile of EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2add.test_valid","title":"test_valid(state_test, pre, post, tx)","text":"

    Test the BLS12_G2ADD precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py
    @pytest.mark.parametrize(\n    \"input,expected_output\",\n    vectors_from_file(\"add_G2_bls.json\")\n    + [\n        pytest.param(\n            Spec.P2_NOT_IN_SUBGROUP + Spec.P2_NOT_IN_SUBGROUP,\n            Spec.P2_NOT_IN_SUBGROUP_TIMES_2,\n            id=\"not_in_subgroup\",\n        ),\n    ],\n)\ndef test_valid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G2ADD precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2add.test_invalid","title":"test_invalid(state_test, pre, post, tx)","text":"

    Negative tests for the BLS12_G2ADD precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py
    @pytest.mark.parametrize(\n    \"input\",\n    vectors_from_file(\"fail-add_G2_bls.json\")\n    + [\n        pytest.param(\n            PointG2((1, 0), (0, 0)) + Spec.INF_G2,\n            id=\"invalid_point_a_1\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (1, 0)) + Spec.INF_G2,\n            id=\"invalid_point_a_2\",\n        ),\n        pytest.param(\n            PointG2((0, 1), (0, 0)) + Spec.INF_G2,\n            id=\"invalid_point_a_3\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (0, 1)) + Spec.INF_G2,\n            id=\"invalid_point_a_4\",\n        ),\n        pytest.param(\n            PointG2(Spec.P2.x, (Spec.P2.y[0], Spec.P2.y[1] - 1)) + Spec.P2,\n            id=\"invalid_point_a_5\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + PointG2((1, 0), (0, 0)),\n            id=\"invalid_point_b_1\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + PointG2((0, 0), (1, 0)),\n            id=\"invalid_point_b_2\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + PointG2((0, 1), (0, 0)),\n            id=\"invalid_point_b_3\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + PointG2((0, 0), (0, 1)),\n            id=\"invalid_point_b_4\",\n        ),\n        pytest.param(\n            Spec.P2 + PointG2(Spec.P2.x, (Spec.P2.y[0], Spec.P2.y[1] - 1)),\n            id=\"invalid_point_b_5\",\n        ),\n        pytest.param(\n            PointG2((Spec.P, 0), (0, 0)) + Spec.INF_G2,\n            id=\"a_x_1_equal_to_p\",\n        ),\n        pytest.param(\n            PointG2((0, Spec.P), (0, 0)) + Spec.INF_G2,\n            id=\"a_x_2_equal_to_p\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (Spec.P, 0)) + Spec.INF_G2,\n            id=\"a_y_1_equal_to_p\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (0, Spec.P)) + Spec.INF_G2,\n            id=\"a_y_2_equal_to_p\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + PointG2((Spec.P, 0), (0, 0)),\n            id=\"b_x_1_equal_to_p\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + PointG2((0, Spec.P), (0, 0)),\n            id=\"b_x_2_equal_to_p\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + PointG2((0, 0), (Spec.P, 0)),\n            id=\"b_y_1_equal_to_p\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + PointG2((0, 0), (0, Spec.P)),\n            id=\"b_y_2_equal_to_p\",\n        ),\n        pytest.param(\n            b\"\\x80\" + bytes(Spec.INF_G2)[1:] + Spec.INF_G2,\n            id=\"invalid_encoding_a\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + b\"\\x80\" + bytes(Spec.INF_G2)[1:],\n            id=\"invalid_encoding_b\",\n        ),\n        pytest.param(\n            (Spec.INF_G2 + Spec.INF_G2)[:-1],\n            id=\"input_too_short\",\n        ),\n        pytest.param(\n            b\"\\x00\" + (Spec.INF_G2 + Spec.INF_G2),\n            id=\"input_too_long\",\n        ),\n        pytest.param(\n            b\"\",\n            id=\"zero_length_input\",\n        ),\n        pytest.param(\n            Spec.G2,\n            id=\"only_one_point\",\n        ),\n        pytest.param(\n            Spec.G1 + Spec.G1,\n            id=\"g1_points\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\ndef test_invalid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Negative tests for the BLS12_G2ADD precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2add.test_gas","title":"test_gas(state_test, pre, post, tx)","text":"

    Test the BLS12_G2ADD precompile gas requirements.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py
    @pytest.mark.parametrize(\n    \"input,expected_output,precompile_gas_modifier\",\n    [\n        pytest.param(\n            Spec.INF_G2 + Spec.INF_G2,\n            Spec.INF_G2,\n            1,\n            id=\"extra_gas\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + Spec.INF_G2,\n            Spec.INVALID,\n            -1,\n            id=\"insufficient_gas\",\n        ),\n    ],\n)\ndef test_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G2ADD precompile gas requirements.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2add.test_call_types","title":"test_call_types(state_test, pre, post, tx)","text":"

    Test the BLS12_G2ADD precompile using different call types.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.STATICCALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"input,expected_output\",\n    [\n        pytest.param(\n            Spec.INF_G2 + Spec.INF_G2,\n            Spec.INF_G2,\n            id=\"inf_plus_inf\",\n        ),\n    ],\n)\ndef test_call_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G2ADD precompile using different call types.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/index/test_cases/","title":"Test Bls12 G2add - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py:

    test_valid[fork_Prague-blockchain_test-bls_g2add_g2+p2-]\ntest_valid[fork_Prague-blockchain_test-bls_g2add_p2+g2-]\ntest_valid[fork_Prague-blockchain_test-bls_g2add_g2_wrong_order+g2-]\ntest_valid[fork_Prague-blockchain_test-bls_g2add_(g2+0=g2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2add_(p2+0=p2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2add_(g2-g2=0)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2add_(p2-p2=0)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2add_(g2+g2=2*g2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2add_(p2+p2=2*p2)-]\ntest_valid[fork_Prague-blockchain_test-not_in_subgroup-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2add_g2+p2-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2add_p2+g2-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2add_g2_wrong_order+g2-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2add_(g2+0=g2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2add_(p2+0=p2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2add_(g2-g2=0)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2add_(p2-p2=0)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2add_(g2+g2=2*g2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2add_(p2+p2=2*p2)-]\ntest_valid[fork_Prague-blockchain_test_engine-not_in_subgroup-]\ntest_valid[fork_Prague-state_test-bls_g2add_g2+p2-]\ntest_valid[fork_Prague-state_test-bls_g2add_p2+g2-]\ntest_valid[fork_Prague-state_test-bls_g2add_g2_wrong_order+g2-]\ntest_valid[fork_Prague-state_test-bls_g2add_(g2+0=g2)-]\ntest_valid[fork_Prague-state_test-bls_g2add_(p2+0=p2)-]\ntest_valid[fork_Prague-state_test-bls_g2add_(g2-g2=0)-]\ntest_valid[fork_Prague-state_test-bls_g2add_(p2-p2=0)-]\ntest_valid[fork_Prague-state_test-bls_g2add_(g2+g2=2*g2)-]\ntest_valid[fork_Prague-state_test-bls_g2add_(p2+p2=2*p2)-]\ntest_valid[fork_Prague-state_test-not_in_subgroup-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2add_empty_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2add_short_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2add_long_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2add_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2add_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2add_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_1-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_2-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_3-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_4-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_5-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_b_1-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_b_2-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_b_3-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_b_4-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_b_5-]\ntest_invalid[fork_Prague-blockchain_test--a_x_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--a_x_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--a_y_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--a_y_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--b_x_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--b_x_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--b_y_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--b_y_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding_a-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding_b-]\ntest_invalid[fork_Prague-blockchain_test--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test--only_one_point-]\ntest_invalid[fork_Prague-blockchain_test--g1_points-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2add_empty_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2add_short_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2add_long_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2add_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2add_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2add_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_3-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_4-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_5-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_b_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_b_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_b_3-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_b_4-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_b_5-]\ntest_invalid[fork_Prague-blockchain_test_engine--a_x_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--a_x_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--a_y_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--a_y_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--b_x_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--b_x_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--b_y_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--b_y_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding_a-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding_b-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test_engine--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--only_one_point-]\ntest_invalid[fork_Prague-blockchain_test_engine--g1_points-]\ntest_invalid[fork_Prague-state_test--bls_g2add_empty_input-]\ntest_invalid[fork_Prague-state_test--bls_g2add_short_input-]\ntest_invalid[fork_Prague-state_test--bls_g2add_long_input-]\ntest_invalid[fork_Prague-state_test--bls_g2add_point_not_on_curve-]\ntest_invalid[fork_Prague-state_test--bls_g2add_invalid_field_element-]\ntest_invalid[fork_Prague-state_test--bls_g2add_violate_top_bytes-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_1-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_2-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_3-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_4-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_5-]\ntest_invalid[fork_Prague-state_test--invalid_point_b_1-]\ntest_invalid[fork_Prague-state_test--invalid_point_b_2-]\ntest_invalid[fork_Prague-state_test--invalid_point_b_3-]\ntest_invalid[fork_Prague-state_test--invalid_point_b_4-]\ntest_invalid[fork_Prague-state_test--invalid_point_b_5-]\ntest_invalid[fork_Prague-state_test--a_x_1_equal_to_p-]\ntest_invalid[fork_Prague-state_test--a_x_2_equal_to_p-]\ntest_invalid[fork_Prague-state_test--a_y_1_equal_to_p-]\ntest_invalid[fork_Prague-state_test--a_y_2_equal_to_p-]\ntest_invalid[fork_Prague-state_test--b_x_1_equal_to_p-]\ntest_invalid[fork_Prague-state_test--b_x_2_equal_to_p-]\ntest_invalid[fork_Prague-state_test--b_y_1_equal_to_p-]\ntest_invalid[fork_Prague-state_test--b_y_2_equal_to_p-]\ntest_invalid[fork_Prague-state_test--invalid_encoding_a-]\ntest_invalid[fork_Prague-state_test--invalid_encoding_b-]\ntest_invalid[fork_Prague-state_test--input_too_short-]\ntest_invalid[fork_Prague-state_test--input_too_long-]\ntest_invalid[fork_Prague-state_test--zero_length_input-]\ntest_invalid[fork_Prague-state_test--only_one_point-]\ntest_invalid[fork_Prague-state_test--g1_points-]\ntest_gas[fork_Prague-blockchain_test-extra_gas-]\ntest_gas[fork_Prague-blockchain_test-insufficient_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-extra_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-insufficient_gas-]\ntest_gas[fork_Prague-state_test-extra_gas-]\ntest_gas[fork_Prague-state_test-insufficient_gas-]\ntest_call_types[fork_Prague-blockchain_test-inf_plus_inf-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test-inf_plus_inf-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test-inf_plus_inf-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_plus_inf-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_plus_inf-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_plus_inf-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-state_test-inf_plus_inf-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-state_test-inf_plus_inf-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-state_test-inf_plus_inf-call_opcode_CALLCODE-]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm/","title":"Test Bls12 G2msm","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests BLS12_G2MSM precompile of EIP-2537: Precompile for BLS12-381 curve operations

    Tests BLS12_G2MSM precompile of EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2msm.test_valid","title":"test_valid(state_test, pre, post, tx)","text":"

    Test the BLS12_G2MSM precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py
    @pytest.mark.parametrize(\"input,expected_output\", vectors_from_file(\"multiexp_G2_bls.json\"))\ndef test_valid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G2MSM precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2msm.test_invalid","title":"test_invalid(state_test, pre, post, tx)","text":"

    Negative tests for the BLS12_G2MSM precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py
    @pytest.mark.parametrize(\n    \"input\",\n    vectors_from_file(\"fail-multiexp_G2_bls.json\")\n    + [\n        pytest.param(\n            PointG2((1, 0), (0, 0)) + Scalar(0),\n            id=\"invalid_point_a_1\",\n        ),\n        pytest.param(\n            PointG2((0, 1), (0, 0)) + Scalar(0),\n            id=\"invalid_point_a_2\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (1, 0)) + Scalar(0),\n            id=\"invalid_point_a_3\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (0, 1)) + Scalar(0),\n            id=\"invalid_point_a_4\",\n        ),\n        pytest.param(\n            PointG2((Spec.P, 0), (0, 0)) + Scalar(0),\n            id=\"x_1_equal_to_p\",\n        ),\n        pytest.param(\n            PointG2((0, Spec.P), (0, 0)) + Scalar(0),\n            id=\"x_2_equal_to_p\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (Spec.P, 0)) + Scalar(0),\n            id=\"y_1_equal_to_p\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (0, Spec.P)) + Scalar(0),\n            id=\"y_2_equal_to_p\",\n        ),\n        pytest.param(\n            b\"\\x80\" + bytes(Spec.INF_G2)[1:] + Scalar(0),\n            id=\"invalid_encoding\",\n        ),\n        pytest.param(\n            Spec.P2_NOT_IN_SUBGROUP + Scalar(1),\n            id=\"bls_g2mul_not_in_subgroup\",\n        ),\n        pytest.param(\n            Spec.G2,\n            id=\"bls_g2_truncated_input\",\n        ),\n        # Input length tests can be found in ./test_bls12_variable_length_input_contracts.py\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\ndef test_invalid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Negative tests for the BLS12_G2MSM precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2msm.test_call_types","title":"test_call_types(state_test, pre, post, tx)","text":"

    Test the BLS12_G2MSM precompile using different call types.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.STATICCALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"input,expected_output\",\n    [\n        pytest.param(\n            Spec.INF_G2 + Scalar(0),\n            Spec.INF_G2,\n            id=\"inf_times_zero\",\n        ),\n    ],\n)\ndef test_call_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G2MSM precompile using different call types.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm/index/test_cases/","title":"Test Bls12 G2msm - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py:

    test_valid[fork_Prague-blockchain_test-bls_g2multiexp_(g2+g2=2*g2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2multiexp_(p2+p2=2*p2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2multiexp_(1*g2=g2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2multiexp_(1*p2=p2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2multiexp_(0*g2=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2multiexp_(0*p2=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2multiexp_(x*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2multiexp_(2g2+inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2multiexp_(2p2+inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g1multiexp_(inf+inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2multiexp_(2g2+2p2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2multiexp_multiple-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_(g2+g2=2*g2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_(p2+p2=2*p2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_(1*g2=g2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_(1*p2=p2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_(0*g2=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_(0*p2=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_(x*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_(2g2+inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_(2p2+inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1multiexp_(inf+inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_(2g2+2p2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2multiexp_multiple-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_(g2+g2=2*g2)-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_(p2+p2=2*p2)-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_(1*g2=g2)-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_(1*p2=p2)-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_(0*g2=inf)-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_(0*p2=inf)-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_(x*inf=inf)-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_(2g2+inf)-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_(2p2+inf)-]\ntest_valid[fork_Prague-state_test-bls_g1multiexp_(inf+inf)-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_(2g2+2p2)-]\ntest_valid[fork_Prague-state_test-bls_g2multiexp_multiple-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2multiexp_empty_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2multiexp_short_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2multiexp_long_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2multiexp_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2multiexp_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2multiexp_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test--bls_pairing_g2_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_1-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_2-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_3-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_4-]\ntest_invalid[fork_Prague-blockchain_test--x_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--x_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--y_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--y_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_not_in_subgroup-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2_truncated_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2multiexp_empty_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2multiexp_short_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2multiexp_long_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2multiexp_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2multiexp_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2multiexp_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_pairing_g2_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_3-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_4-]\ntest_invalid[fork_Prague-blockchain_test_engine--x_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--x_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--y_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--y_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_not_in_subgroup-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2_truncated_input-]\ntest_invalid[fork_Prague-state_test--bls_g2multiexp_empty_input-]\ntest_invalid[fork_Prague-state_test--bls_g2multiexp_short_input-]\ntest_invalid[fork_Prague-state_test--bls_g2multiexp_long_input-]\ntest_invalid[fork_Prague-state_test--bls_g2multiexp_violate_top_bytes-]\ntest_invalid[fork_Prague-state_test--bls_g2multiexp_invalid_field_element-]\ntest_invalid[fork_Prague-state_test--bls_g2multiexp_point_not_on_curve-]\ntest_invalid[fork_Prague-state_test--bls_pairing_g2_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_1-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_2-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_3-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_4-]\ntest_invalid[fork_Prague-state_test--x_1_equal_to_p-]\ntest_invalid[fork_Prague-state_test--x_2_equal_to_p-]\ntest_invalid[fork_Prague-state_test--y_1_equal_to_p-]\ntest_invalid[fork_Prague-state_test--y_2_equal_to_p-]\ntest_invalid[fork_Prague-state_test--invalid_encoding-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_not_in_subgroup-]\ntest_invalid[fork_Prague-state_test--bls_g2_truncated_input-]\ntest_call_types[fork_Prague-blockchain_test-inf_times_zero-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test-inf_times_zero-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test-inf_times_zero-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_times_zero-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_times_zero-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_times_zero-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-state_test-inf_times_zero-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-state_test-inf_times_zero-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-state_test-inf_times_zero-call_opcode_CALLCODE-]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/","title":"Test Bls12 G2mul","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests BLS12_G2MUL precompile of EIP-2537: Precompile for BLS12-381 curve operations

    Tests BLS12_G2MUL precompile of EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2mul.test_valid","title":"test_valid(state_test, pre, post, tx)","text":"

    Test the BLS12_G2MUL precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py
    @pytest.mark.parametrize(\n    \"input,expected_output\",\n    vectors_from_file(\"mul_G2_bls.json\")\n    + [\n        pytest.param(\n            Spec.INF_G2 + Scalar(0),\n            Spec.INF_G2,\n            id=\"bls_g2mul_(0*inf=inf)\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + Scalar(2**256 - 1),\n            Spec.INF_G2,\n            id=\"bls_g2mul_(2**256-1*inf=inf)\",\n        ),\n        pytest.param(\n            Spec.P2 + Scalar(2**256 - 1),\n            PointG2(\n                (\n                    0x2663E1C3431E174CA80E5A84489569462E13B52DA27E7720AF5567941603475F1F9BC0102E13B92A0A21D96B94E9B22,  # noqa: E501\n                    0x6A80D056486365020A6B53E2680B2D72D8A93561FC2F72B960936BB16F509C1A39C4E4174A7C9219E3D7EF130317C05,  # noqa: E501\n                ),\n                (\n                    0xC49EAD39E9EB7E36E8BC25824299661D5B6D0E200BBC527ECCB946134726BF5DBD861E8E6EC946260B82ED26AFE15FB,  # noqa: E501\n                    0x5397DAD1357CF8333189821B737172B18099ECF7EE8BDB4B3F05EBCCDF40E1782A6C71436D5ACE0843D7F361CBC6DB2,  # noqa: E501\n                ),\n            ),\n            id=\"bls_g2mul_(2**256-1*P2)\",\n        ),\n        pytest.param(\n            Spec.P2 + Scalar(Spec.Q - 1),\n            -Spec.P2,  # negated P2\n            id=\"bls_g2mul_(q-1*P2)\",\n        ),\n        pytest.param(\n            Spec.P2 + Scalar(Spec.Q),\n            Spec.INF_G2,\n            id=\"bls_g2mul_(q*P2)\",\n        ),\n        pytest.param(\n            Spec.G2 + Scalar(Spec.Q),\n            Spec.INF_G2,\n            id=\"bls_g2mul_(q*G2)\",\n        ),\n        pytest.param(\n            Spec.P2 + Scalar(Spec.Q + 1),\n            Spec.P2,\n            id=\"bls_g2mul_(q+1*P2)\",\n        ),\n        pytest.param(\n            Spec.P2 + Scalar(2 * Spec.Q),\n            Spec.INF_G2,\n            id=\"bls_g2mul_(2q*P2)\",\n        ),\n        pytest.param(\n            Spec.P2 + Scalar((2**256 // Spec.Q) * Spec.Q),\n            Spec.INF_G2,\n            id=\"bls_g2mul_(Nq*P2)\",\n        ),\n    ],\n)\ndef test_valid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G2MUL precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2mul.test_invalid","title":"test_invalid(state_test, pre, post, tx)","text":"

    Negative tests for the BLS12_G2MUL precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py
    @pytest.mark.parametrize(\n    \"input\",\n    vectors_from_file(\"fail-mul_G2_bls.json\")\n    + [\n        pytest.param(\n            PointG2((1, 0), (0, 0)) + Scalar(0),\n            id=\"invalid_point_a_1\",\n        ),\n        pytest.param(\n            PointG2((0, 1), (0, 0)) + Scalar(0),\n            id=\"invalid_point_a_2\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (1, 0)) + Scalar(0),\n            id=\"invalid_point_a_3\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (0, 1)) + Scalar(0),\n            id=\"invalid_point_a_4\",\n        ),\n        pytest.param(\n            PointG2((Spec.P, 0), (0, 0)) + Scalar(0),\n            id=\"x_1_equal_to_p\",\n        ),\n        pytest.param(\n            PointG2((0, Spec.P), (0, 0)) + Scalar(0),\n            id=\"x_2_equal_to_p\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (Spec.P, 0)) + Scalar(0),\n            id=\"y_1_equal_to_p\",\n        ),\n        pytest.param(\n            PointG2((0, 0), (0, Spec.P)) + Scalar(0),\n            id=\"y_2_equal_to_p\",\n        ),\n        pytest.param(\n            b\"\\x80\" + bytes(Spec.INF_G2)[1:] + Scalar(0),\n            id=\"invalid_encoding\",\n        ),\n        pytest.param(\n            (Spec.INF_G2 + Scalar(0))[:-1],\n            id=\"input_too_short\",\n        ),\n        pytest.param(\n            b\"\\x00\" + (Spec.INF_G2 + Scalar(0)),\n            id=\"input_too_long\",\n        ),\n        pytest.param(\n            b\"\",\n            id=\"zero_length_input\",\n        ),\n        pytest.param(\n            Spec.P2_NOT_IN_SUBGROUP + Scalar(1),\n            id=\"bls_g2mul_not_in_subgroup\",\n        ),\n        pytest.param(\n            Spec.P2_NOT_IN_SUBGROUP + Scalar(2),\n            id=\"bls_g2mul_not_in_subgroup_times_2\",\n        ),\n        pytest.param(\n            Spec.P2_NOT_IN_SUBGROUP + Scalar(Spec.Q),\n            id=\"bls_g2mul_not_in_subgroup_times_q\",\n        ),\n        pytest.param(\n            Spec.G1 + Spec.G1,\n            id=\"bls_g1_add_input_invalid_length\",\n        ),\n        pytest.param(\n            Spec.G2 + Spec.G2,\n            id=\"bls_g2_add_input_invalid_length\",\n        ),\n        pytest.param(\n            Spec.G2,\n            id=\"bls_g2_truncated_input\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\ndef test_invalid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Negative tests for the BLS12_G2MUL precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2mul.test_gas","title":"test_gas(state_test, pre, post, tx)","text":"

    Test the BLS12_G1MUL precompile gas requirements.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py
    @pytest.mark.parametrize(\n    \"input,expected_output,precompile_gas_modifier\",\n    [\n        pytest.param(\n            Spec.INF_G2 + Scalar(0),\n            Spec.INF_G2,\n            1,\n            id=\"extra_gas\",\n        ),\n        pytest.param(\n            Spec.INF_G2 + Scalar(0),\n            Spec.INVALID,\n            -1,\n            id=\"insufficient_gas\",\n        ),\n    ],\n)\ndef test_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1MUL precompile gas requirements.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_g2mul.test_call_types","title":"test_call_types(state_test, pre, post, tx)","text":"

    Test the BLS12_G2MUL using different call types.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.STATICCALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"input,expected_output\",\n    [\n        pytest.param(\n            Spec.INF_G2 + Scalar(0),\n            Spec.INF_G2,\n            id=\"bls_g2mul_(0*inf=inf)\",\n        ),\n    ],\n)\ndef test_call_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G2MUL using different call types.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/index/test_cases/","title":"Test Bls12 G2mul - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py:

    test_valid[fork_Prague-blockchain_test-bls_g2mul_(g2+g2=2*g2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(p2+p2=2*p2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(1*g2=g2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(1*p2=p2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(0*g2=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(0*p2=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(x*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_random*g2-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_random*p2-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_random*g2_unnormalized_scalar-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_random*p2_unnormalized_scalar-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(0*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(2**256-1*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(2**256-1*P2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(q-1*P2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(q*P2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(q*G2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(q+1*P2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(2q*P2)-]\ntest_valid[fork_Prague-blockchain_test-bls_g2mul_(Nq*P2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(g2+g2=2*g2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(p2+p2=2*p2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(1*g2=g2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(1*p2=p2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(0*g2=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(0*p2=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(x*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_random*g2-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_random*p2-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_random*g2_unnormalized_scalar-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_random*p2_unnormalized_scalar-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(0*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(2**256-1*inf=inf)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(2**256-1*P2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(q-1*P2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(q*P2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(q*G2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(q+1*P2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(2q*P2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2mul_(Nq*P2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(g2+g2=2*g2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(p2+p2=2*p2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(1*g2=g2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(1*p2=p2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(0*g2=inf)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(0*p2=inf)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(x*inf=inf)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_random*g2-]\ntest_valid[fork_Prague-state_test-bls_g2mul_random*p2-]\ntest_valid[fork_Prague-state_test-bls_g2mul_random*g2_unnormalized_scalar-]\ntest_valid[fork_Prague-state_test-bls_g2mul_random*p2_unnormalized_scalar-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(0*inf=inf)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(2**256-1*inf=inf)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(2**256-1*P2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(q-1*P2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(q*P2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(q*G2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(q+1*P2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(2q*P2)-]\ntest_valid[fork_Prague-state_test-bls_g2mul_(Nq*P2)-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_empty_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_short_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_large_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_g2_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_1-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_2-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_3-]\ntest_invalid[fork_Prague-blockchain_test--invalid_point_a_4-]\ntest_invalid[fork_Prague-blockchain_test--x_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--x_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--y_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--y_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding-]\ntest_invalid[fork_Prague-blockchain_test--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_not_in_subgroup-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_not_in_subgroup_times_2-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2mul_not_in_subgroup_times_q-]\ntest_invalid[fork_Prague-blockchain_test--bls_g1_add_input_invalid_length-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2_add_input_invalid_length-]\ntest_invalid[fork_Prague-blockchain_test--bls_g2_truncated_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_empty_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_short_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_large_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_point_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_violate_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_g2_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_3-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_point_a_4-]\ntest_invalid[fork_Prague-blockchain_test_engine--x_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--x_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--y_1_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--y_2_equal_to_p-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test_engine--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_not_in_subgroup-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_not_in_subgroup_times_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2mul_not_in_subgroup_times_q-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g1_add_input_invalid_length-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2_add_input_invalid_length-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_g2_truncated_input-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_empty_input-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_short_input-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_large_input-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_invalid_field_element-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_point_not_on_curve-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_violate_top_bytes-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_g2_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_1-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_2-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_3-]\ntest_invalid[fork_Prague-state_test--invalid_point_a_4-]\ntest_invalid[fork_Prague-state_test--x_1_equal_to_p-]\ntest_invalid[fork_Prague-state_test--x_2_equal_to_p-]\ntest_invalid[fork_Prague-state_test--y_1_equal_to_p-]\ntest_invalid[fork_Prague-state_test--y_2_equal_to_p-]\ntest_invalid[fork_Prague-state_test--invalid_encoding-]\ntest_invalid[fork_Prague-state_test--input_too_short-]\ntest_invalid[fork_Prague-state_test--input_too_long-]\ntest_invalid[fork_Prague-state_test--zero_length_input-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_not_in_subgroup-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_not_in_subgroup_times_2-]\ntest_invalid[fork_Prague-state_test--bls_g2mul_not_in_subgroup_times_q-]\ntest_invalid[fork_Prague-state_test--bls_g1_add_input_invalid_length-]\ntest_invalid[fork_Prague-state_test--bls_g2_add_input_invalid_length-]\ntest_invalid[fork_Prague-state_test--bls_g2_truncated_input-]\ntest_gas[fork_Prague-blockchain_test-extra_gas-]\ntest_gas[fork_Prague-blockchain_test-insufficient_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-extra_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-insufficient_gas-]\ntest_gas[fork_Prague-state_test-extra_gas-]\ntest_gas[fork_Prague-state_test-insufficient_gas-]\ntest_call_types[fork_Prague-blockchain_test-bls_g2mul_(0*inf=inf)-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test-bls_g2mul_(0*inf=inf)-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test-bls_g2mul_(0*inf=inf)-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-blockchain_test_engine-bls_g2mul_(0*inf=inf)-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-bls_g2mul_(0*inf=inf)-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-bls_g2mul_(0*inf=inf)-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-state_test-bls_g2mul_(0*inf=inf)-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-state_test-bls_g2mul_(0*inf=inf)-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-state_test-bls_g2mul_(0*inf=inf)-call_opcode_CALLCODE-]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/","title":"Test Bls12 Map Fp2 To G2","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests BLS12_MAP_FP2_TO_G2 precompile of EIP-2537: Precompile for BLS12-381 curve operations

    Tests BLS12_MAP_FP2_TO_G2 precompile of EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_map_fp2_to_g2.test_valid","title":"test_valid(state_test, pre, post, tx)","text":"

    Test the BLS12_MAP_FP2_TO_G2 precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py
    @pytest.mark.parametrize(\n    \"input,expected_output\",\n    vectors_from_file(\"map_fp2_to_G2_bls.json\")\n    + [\n        pytest.param(\n            FP2((0, 0)),\n            G2_POINT_ZERO_FP,\n            id=\"fp_0\",\n        ),\n        pytest.param(\n            FP2((Spec.P - 1, Spec.P - 1)),\n            PointG2(\n                (\n                    0x9BF1B857D8C15F317F649ACCFA7023EF21CFC03059936B83B487DB476FF9D2FE64C6147140A5F0A436B875F51FFDF07,  # noqa: E501\n                    0xBB10E09BDF236CB2951BD7BCC044E1B9A6BB5FD4B2019DCC20FFDE851D52D4F0D1A32382AF9D7DA2C5BA27E0F1C69E6,  # noqa: E501\n                ),\n                (\n                    0xDD416A927AB1C15490AB753C973FD377387B12EFCBE6BED2BF768B9DC95A0CA04D1A8F0F30DBC078A2350A1F823CFD3,  # noqa: E501\n                    0x171565CE4FCD047B35EA6BCEE4EF6FDBFEC8CC73B7ACDB3A1EC97A776E13ACDFEFFC21ED6648E3F0EEC53DDB6C20FB61,  # noqa: E501\n                ),\n            ),\n            id=\"fp_p_minus_1\",\n        ),\n    ],\n)\ndef test_valid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_MAP_FP2_TO_G2 precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_map_fp2_to_g2.test_invalid","title":"test_invalid(state_test, pre, post, tx)","text":"

    Negative tests for the BLS12_MAP_FP_TO_G2 precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py
    @pytest.mark.parametrize(\n    \"input\",\n    vectors_from_file(\"fail-map_fp2_to_G2_bls.json\")\n    + [\n        pytest.param(b\"\\x80\" + bytes(FP2((0, 0)))[1:], id=\"invalid_encoding\"),\n        pytest.param(bytes(FP2((0, 0)))[1:], id=\"input_too_short\"),\n        pytest.param(b\"\\x00\" + FP2((0, 0)), id=\"input_too_long\"),\n        pytest.param(b\"\", id=\"zero_length_input\"),\n        pytest.param(FP2((Spec.P, 0)), id=\"fq_eq_q\"),\n        pytest.param(FP2((0, Spec.P)), id=\"fq_eq_q_2\"),\n        pytest.param(FP2((2**512 - 1, 0)), id=\"fq_eq_2_512_minus_1\"),\n        pytest.param(FP2((0, 2**512 - 1)), id=\"fq_eq_2_512_minus_1_2\"),\n        pytest.param(Spec.G2, id=\"g2_input\"),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\ndef test_invalid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Negative tests for the BLS12_MAP_FP_TO_G2 precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_map_fp2_to_g2.test_gas","title":"test_gas(state_test, pre, post, tx)","text":"

    Test the BLS12_MAP_FP_TO_G2 precompile gas requirements.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py
    @pytest.mark.parametrize(\n    \"input,expected_output,precompile_gas_modifier\",\n    [\n        pytest.param(\n            FP2((0, 0)),\n            G2_POINT_ZERO_FP,\n            1,\n            id=\"extra_gas\",\n        ),\n        pytest.param(\n            FP2((0, 0)),\n            Spec.INVALID,\n            -1,\n            id=\"insufficient_gas\",\n        ),\n    ],\n)\ndef test_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_MAP_FP_TO_G2 precompile gas requirements.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_map_fp2_to_g2.test_call_types","title":"test_call_types(state_test, pre, post, tx)","text":"

    Test the BLS12_MAP_FP_TO_G2 precompile using different call types.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.STATICCALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"input,expected_output\",\n    [\n        pytest.param(\n            FP2((0, 0)),\n            G2_POINT_ZERO_FP,\n            id=\"fp_0\",\n        ),\n    ],\n)\ndef test_call_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_MAP_FP_TO_G2 precompile using different call types.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/index/test_cases/","title":"Test Bls12 Map Fp2 To G2 - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py:

    test_valid[fork_Prague-blockchain_test-bls_g2map_-]\ntest_valid[fork_Prague-blockchain_test-bls_g2map_616263-]\ntest_valid[fork_Prague-blockchain_test-bls_g2map_6162636465663031-]\ntest_valid[fork_Prague-blockchain_test-bls_g2map_713132385f717171-]\ntest_valid[fork_Prague-blockchain_test-bls_g2map_613531325f616161-]\ntest_valid[fork_Prague-blockchain_test-fp_0-]\ntest_valid[fork_Prague-blockchain_test-fp_p_minus_1-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2map_-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2map_616263-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2map_6162636465663031-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2map_713132385f717171-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g2map_613531325f616161-]\ntest_valid[fork_Prague-blockchain_test_engine-fp_0-]\ntest_valid[fork_Prague-blockchain_test_engine-fp_p_minus_1-]\ntest_valid[fork_Prague-state_test-bls_g2map_-]\ntest_valid[fork_Prague-state_test-bls_g2map_616263-]\ntest_valid[fork_Prague-state_test-bls_g2map_6162636465663031-]\ntest_valid[fork_Prague-state_test-bls_g2map_713132385f717171-]\ntest_valid[fork_Prague-state_test-bls_g2map_613531325f616161-]\ntest_valid[fork_Prague-state_test-fp_0-]\ntest_valid[fork_Prague-state_test-fp_p_minus_1-]\ntest_invalid[fork_Prague-blockchain_test--bls_mapg2_empty_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_mapg2_short_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_mapg2_long_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_mapg2_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test--bls_mapg2_invalid_fq_element-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding-]\ntest_invalid[fork_Prague-blockchain_test--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test--fq_eq_q-]\ntest_invalid[fork_Prague-blockchain_test--fq_eq_q_2-]\ntest_invalid[fork_Prague-blockchain_test--fq_eq_2_512_minus_1-]\ntest_invalid[fork_Prague-blockchain_test--fq_eq_2_512_minus_1_2-]\ntest_invalid[fork_Prague-blockchain_test--g2_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_mapg2_empty_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_mapg2_short_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_mapg2_long_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_mapg2_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_mapg2_invalid_fq_element-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test_engine--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--fq_eq_q-]\ntest_invalid[fork_Prague-blockchain_test_engine--fq_eq_q_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--fq_eq_2_512_minus_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--fq_eq_2_512_minus_1_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--g2_input-]\ntest_invalid[fork_Prague-state_test--bls_mapg2_empty_input-]\ntest_invalid[fork_Prague-state_test--bls_mapg2_short_input-]\ntest_invalid[fork_Prague-state_test--bls_mapg2_long_input-]\ntest_invalid[fork_Prague-state_test--bls_mapg2_top_bytes-]\ntest_invalid[fork_Prague-state_test--bls_mapg2_invalid_fq_element-]\ntest_invalid[fork_Prague-state_test--invalid_encoding-]\ntest_invalid[fork_Prague-state_test--input_too_short-]\ntest_invalid[fork_Prague-state_test--input_too_long-]\ntest_invalid[fork_Prague-state_test--zero_length_input-]\ntest_invalid[fork_Prague-state_test--fq_eq_q-]\ntest_invalid[fork_Prague-state_test--fq_eq_q_2-]\ntest_invalid[fork_Prague-state_test--fq_eq_2_512_minus_1-]\ntest_invalid[fork_Prague-state_test--fq_eq_2_512_minus_1_2-]\ntest_invalid[fork_Prague-state_test--g2_input-]\ntest_gas[fork_Prague-blockchain_test-extra_gas-]\ntest_gas[fork_Prague-blockchain_test-insufficient_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-extra_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-insufficient_gas-]\ntest_gas[fork_Prague-state_test-extra_gas-]\ntest_gas[fork_Prague-state_test-insufficient_gas-]\ntest_call_types[fork_Prague-blockchain_test-fp_0-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test-fp_0-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test-fp_0-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-blockchain_test_engine-fp_0-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-fp_0-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-fp_0-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-state_test-fp_0-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-state_test-fp_0-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-state_test-fp_0-call_opcode_CALLCODE-]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/","title":"Test Bls12 Map Fp To G1","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests BLS12_MAP_FP_TO_G1 precompile of EIP-2537: Precompile for BLS12-381 curve operations

    Tests BLS12_MAP_FP_TO_G1 precompile of EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_map_fp_to_g1.test_valid","title":"test_valid(state_test, pre, post, tx)","text":"

    Test the BLS12_MAP_FP_TO_G1 precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py
    @pytest.mark.parametrize(\n    \"input,expected_output\",\n    vectors_from_file(\"map_fp_to_G1_bls.json\")\n    + [\n        pytest.param(\n            FP(0),\n            G1_POINT_ZERO_FP,\n            id=\"fp_0\",\n        ),\n        pytest.param(\n            FP(Spec.P - 1),\n            PointG1(\n                0x1073311196F8EF19477219CCEE3A48035FF432295AA9419EED45D186027D88B90832E14C4F0E2AA4D15F54D1C3ED0F93,  # noqa: E501\n                0x16B3A3B2E3DDDF6A11459DDAF657FDE21C4F10282A56029D9B55AB3CE1F41E1CF39AD27E0EA35823C7D3250E81FF3D66,  # noqa: E501\n            ),\n            id=\"fp_p_minus_1\",\n        ),\n    ],\n)\ndef test_valid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_MAP_FP_TO_G1 precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_map_fp_to_g1.test_invalid","title":"test_invalid(state_test, pre, post, tx)","text":"

    Negative tests for the BLS12_MAP_FP_TO_G1 precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py
    @pytest.mark.parametrize(\n    \"input\",\n    vectors_from_file(\"fail-map_fp_to_G1_bls.json\")\n    + [\n        pytest.param(b\"\\x80\" + bytes(FP(0))[1:], id=\"invalid_encoding\"),\n        pytest.param(bytes(FP(0))[1:], id=\"input_too_short\"),\n        pytest.param(b\"\\x00\" + FP(0), id=\"input_too_long\"),\n        pytest.param(b\"\", id=\"zero_length_input\"),\n        pytest.param(FP(Spec.P), id=\"fq_eq_q\"),\n        pytest.param(FP(2**512 - 1), id=\"fq_eq_2_512_minus_1\"),\n        pytest.param(Spec.G1, id=\"g1_point_input\"),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\ndef test_invalid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Negative tests for the BLS12_MAP_FP_TO_G1 precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_map_fp_to_g1.test_gas","title":"test_gas(state_test, pre, post, tx)","text":"

    Test the BLS12_MAP_FP_TO_G1 precompile gas requirements.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py
    @pytest.mark.parametrize(\n    \"input,expected_output,precompile_gas_modifier\",\n    [\n        pytest.param(\n            FP(0),\n            G1_POINT_ZERO_FP,\n            1,\n            id=\"extra_gas\",\n        ),\n        pytest.param(\n            FP(0),\n            Spec.INVALID,\n            -1,\n            id=\"insufficient_gas\",\n        ),\n    ],\n)\ndef test_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_MAP_FP_TO_G1 precompile gas requirements.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_map_fp_to_g1.test_call_types","title":"test_call_types(state_test, pre, post, tx)","text":"

    Test the BLS12_MAP_FP_TO_G1 precompile using different call types.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.STATICCALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"input,expected_output\",\n    [\n        pytest.param(\n            FP(0),\n            G1_POINT_ZERO_FP,\n            id=\"fp_0\",\n        ),\n    ],\n)\ndef test_call_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_MAP_FP_TO_G1 precompile using different call types.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/index/test_cases/","title":"Test Bls12 Map Fp To G1 - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py:

    test_valid[fork_Prague-blockchain_test-bls_g1map_-]\ntest_valid[fork_Prague-blockchain_test-bls_g1map_616263-]\ntest_valid[fork_Prague-blockchain_test-bls_g1map_6162636465663031-]\ntest_valid[fork_Prague-blockchain_test-bls_g1map_713132385f717171-]\ntest_valid[fork_Prague-blockchain_test-bls_g1map_613531325f616161-]\ntest_valid[fork_Prague-blockchain_test-fp_0-]\ntest_valid[fork_Prague-blockchain_test-fp_p_minus_1-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1map_-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1map_616263-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1map_6162636465663031-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1map_713132385f717171-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_g1map_613531325f616161-]\ntest_valid[fork_Prague-blockchain_test_engine-fp_0-]\ntest_valid[fork_Prague-blockchain_test_engine-fp_p_minus_1-]\ntest_valid[fork_Prague-state_test-bls_g1map_-]\ntest_valid[fork_Prague-state_test-bls_g1map_616263-]\ntest_valid[fork_Prague-state_test-bls_g1map_6162636465663031-]\ntest_valid[fork_Prague-state_test-bls_g1map_713132385f717171-]\ntest_valid[fork_Prague-state_test-bls_g1map_613531325f616161-]\ntest_valid[fork_Prague-state_test-fp_0-]\ntest_valid[fork_Prague-state_test-fp_p_minus_1-]\ntest_invalid[fork_Prague-blockchain_test--bls_mapg1_empty_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_mapg1_short_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_mapg1_large_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_mapg1_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test--bls_invalid_fq_element-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding-]\ntest_invalid[fork_Prague-blockchain_test--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test--fq_eq_q-]\ntest_invalid[fork_Prague-blockchain_test--fq_eq_2_512_minus_1-]\ntest_invalid[fork_Prague-blockchain_test--g1_point_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_mapg1_empty_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_mapg1_short_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_mapg1_large_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_mapg1_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_invalid_fq_element-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_short-]\ntest_invalid[fork_Prague-blockchain_test_engine--input_too_long-]\ntest_invalid[fork_Prague-blockchain_test_engine--zero_length_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--fq_eq_q-]\ntest_invalid[fork_Prague-blockchain_test_engine--fq_eq_2_512_minus_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--g1_point_input-]\ntest_invalid[fork_Prague-state_test--bls_mapg1_empty_input-]\ntest_invalid[fork_Prague-state_test--bls_mapg1_short_input-]\ntest_invalid[fork_Prague-state_test--bls_mapg1_large_input-]\ntest_invalid[fork_Prague-state_test--bls_mapg1_top_bytes-]\ntest_invalid[fork_Prague-state_test--bls_invalid_fq_element-]\ntest_invalid[fork_Prague-state_test--invalid_encoding-]\ntest_invalid[fork_Prague-state_test--input_too_short-]\ntest_invalid[fork_Prague-state_test--input_too_long-]\ntest_invalid[fork_Prague-state_test--zero_length_input-]\ntest_invalid[fork_Prague-state_test--fq_eq_q-]\ntest_invalid[fork_Prague-state_test--fq_eq_2_512_minus_1-]\ntest_invalid[fork_Prague-state_test--g1_point_input-]\ntest_gas[fork_Prague-blockchain_test-extra_gas-]\ntest_gas[fork_Prague-blockchain_test-insufficient_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-extra_gas-]\ntest_gas[fork_Prague-blockchain_test_engine-insufficient_gas-]\ntest_gas[fork_Prague-state_test-extra_gas-]\ntest_gas[fork_Prague-state_test-insufficient_gas-]\ntest_call_types[fork_Prague-blockchain_test-fp_0-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test-fp_0-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test-fp_0-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-blockchain_test_engine-fp_0-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-fp_0-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-fp_0-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-state_test-fp_0-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-state_test-fp_0-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-state_test-fp_0-call_opcode_CALLCODE-]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing/","title":"Test Bls12 Pairing","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests BLS12_PAIRING precompile of EIP-2537: Precompile for BLS12-381 curve operations

    Tests BLS12_PAIRING precompile of EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_pairing.test_valid","title":"test_valid(state_test, pre, post, tx)","text":"

    Test the BLS12_PAIRING precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py
    @pytest.mark.parametrize(\n    \"input,expected_output\",\n    vectors_from_file(\"pairing_check_bls.json\")\n    + [\n        pytest.param(\n            Spec.INF_G1 + Spec.INF_G2,\n            Spec.PAIRING_TRUE,\n            id=\"inf_pair\",\n        ),\n        pytest.param(\n            (Spec.INF_G1 + Spec.INF_G2) * 1000,\n            Spec.PAIRING_TRUE,\n            id=\"multi_inf_pair\",\n        ),\n    ],\n)\ndef test_valid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_PAIRING precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_pairing.test_invalid","title":"test_invalid(state_test, pre, post, tx)","text":"

    Negative tests for the BLS12_PAIRING precompile.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py
    @pytest.mark.parametrize(\n    \"input\",\n    vectors_from_file(\"fail-pairing_check_bls.json\")\n    + [\n        pytest.param(\n            PointG1(Spec.P, 0) + Spec.INF_G2,\n            id=\"g1_P_g2_inf_1\",\n        ),\n        pytest.param(\n            PointG1(0, Spec.P) + Spec.INF_G2,\n            id=\"g1_P_g2_inf_2\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + PointG2((Spec.P, 0), (0, 0)),\n            id=\"g1_inf_g2_P_1\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + PointG2((0, Spec.P), (0, 0)),\n            id=\"g1_inf_g2_P_2\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + PointG2((0, 0), (Spec.P, 0)),\n            id=\"g1_inf_g2_P_3\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + PointG2((0, 0), (0, Spec.P)),\n            id=\"g1_inf_g2_P_4\",\n        ),\n        pytest.param(\n            b\"\\x80\" + bytes(Spec.INF_G1)[1:] + Spec.INF_G2,\n            id=\"invalid_encoding_g1\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + b\"\\x80\" + bytes(Spec.INF_G2)[1:],\n            id=\"invalid_encoding_g2\",\n        ),\n        pytest.param(\n            (Spec.INF_G1 + Spec.INF_G2) * 1000 + PointG1(Spec.P, 0) + Spec.INF_G2,\n            id=\"multi_inf_plus_g1_P_g2_inf_1\",\n        ),\n        pytest.param(\n            Spec.P1_NOT_IN_SUBGROUP + Spec.INF_G2,\n            id=\"P1_not_in_subgroup\",\n        ),\n        pytest.param(\n            Spec.INF_G1 + Spec.P2_NOT_IN_SUBGROUP,\n            id=\"P2_not_in_subgroup\",\n        ),\n        # Input length tests can be found in ./test_bls12_variable_length_input_contracts.py\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\ndef test_invalid(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Negative tests for the BLS12_PAIRING precompile.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_pairing.test_call_types","title":"test_call_types(state_test, pre, post, tx)","text":"

    Test the BLS12_PAIRING precompile using different call types.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.STATICCALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"input,expected_output\",\n    [\n        pytest.param(\n            Spec.INF_G1 + Spec.INF_G2,\n            Spec.PAIRING_TRUE,\n            id=\"inf_pair\",\n        ),\n    ],\n)\ndef test_call_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_PAIRING precompile using different call types.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing/index/test_cases/","title":"Test Bls12 Pairing - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py:

    test_valid[fork_Prague-blockchain_test-bls_pairing_e(G1,0)=e(0,G2)-]\ntest_valid[fork_Prague-blockchain_test-bls_pairing_non-degeneracy-]\ntest_valid[fork_Prague-blockchain_test-bls_pairing_bilinearity-]\ntest_valid[fork_Prague-blockchain_test-bls_pairing_e(G1,-G2)=e(-G1,G2)-]\ntest_valid[fork_Prague-blockchain_test-bls_pairing_e(aG1,bG2)=e(abG1,G2)-]\ntest_valid[fork_Prague-blockchain_test-bls_pairing_e(aG1,bG2)=e(G1,abG2)-]\ntest_valid[fork_Prague-blockchain_test-inf_pair-]\ntest_valid[fork_Prague-blockchain_test-multi_inf_pair-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_pairing_e(G1,0)=e(0,G2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_pairing_non-degeneracy-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_pairing_bilinearity-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_pairing_e(G1,-G2)=e(-G1,G2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_pairing_e(aG1,bG2)=e(abG1,G2)-]\ntest_valid[fork_Prague-blockchain_test_engine-bls_pairing_e(aG1,bG2)=e(G1,abG2)-]\ntest_valid[fork_Prague-blockchain_test_engine-inf_pair-]\ntest_valid[fork_Prague-blockchain_test_engine-multi_inf_pair-]\ntest_valid[fork_Prague-state_test-bls_pairing_e(G1,0)=e(0,G2)-]\ntest_valid[fork_Prague-state_test-bls_pairing_non-degeneracy-]\ntest_valid[fork_Prague-state_test-bls_pairing_bilinearity-]\ntest_valid[fork_Prague-state_test-bls_pairing_e(G1,-G2)=e(-G1,G2)-]\ntest_valid[fork_Prague-state_test-bls_pairing_e(aG1,bG2)=e(abG1,G2)-]\ntest_valid[fork_Prague-state_test-bls_pairing_e(aG1,bG2)=e(G1,abG2)-]\ntest_valid[fork_Prague-state_test-inf_pair-]\ntest_valid[fork_Prague-state_test-multi_inf_pair-]\ntest_invalid[fork_Prague-blockchain_test--bls_pairing_empty_input-]\ntest_invalid[fork_Prague-blockchain_test--bls_pairing_missing_data-]\ntest_invalid[fork_Prague-blockchain_test--bls_pairing_extra_data-]\ntest_invalid[fork_Prague-blockchain_test--bls_pairing_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test--bls_pairing_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test--bls_pairing_g1_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test--bls_pairing_g2_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test--bls_pairing_g1_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test--bls_pairing_g2_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test--g1_P_g2_inf_1-]\ntest_invalid[fork_Prague-blockchain_test--g1_P_g2_inf_2-]\ntest_invalid[fork_Prague-blockchain_test--g1_inf_g2_P_1-]\ntest_invalid[fork_Prague-blockchain_test--g1_inf_g2_P_2-]\ntest_invalid[fork_Prague-blockchain_test--g1_inf_g2_P_3-]\ntest_invalid[fork_Prague-blockchain_test--g1_inf_g2_P_4-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding_g1-]\ntest_invalid[fork_Prague-blockchain_test--invalid_encoding_g2-]\ntest_invalid[fork_Prague-blockchain_test--multi_inf_plus_g1_P_g2_inf_1-]\ntest_invalid[fork_Prague-blockchain_test--P1_not_in_subgroup-]\ntest_invalid[fork_Prague-blockchain_test--P2_not_in_subgroup-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_pairing_empty_input-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_pairing_missing_data-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_pairing_extra_data-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_pairing_top_bytes-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_pairing_invalid_field_element-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_pairing_g1_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_pairing_g2_not_on_curve-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_pairing_g1_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test_engine--bls_pairing_g2_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-blockchain_test_engine--g1_P_g2_inf_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--g1_P_g2_inf_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--g1_inf_g2_P_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--g1_inf_g2_P_2-]\ntest_invalid[fork_Prague-blockchain_test_engine--g1_inf_g2_P_3-]\ntest_invalid[fork_Prague-blockchain_test_engine--g1_inf_g2_P_4-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding_g1-]\ntest_invalid[fork_Prague-blockchain_test_engine--invalid_encoding_g2-]\ntest_invalid[fork_Prague-blockchain_test_engine--multi_inf_plus_g1_P_g2_inf_1-]\ntest_invalid[fork_Prague-blockchain_test_engine--P1_not_in_subgroup-]\ntest_invalid[fork_Prague-blockchain_test_engine--P2_not_in_subgroup-]\ntest_invalid[fork_Prague-state_test--bls_pairing_empty_input-]\ntest_invalid[fork_Prague-state_test--bls_pairing_missing_data-]\ntest_invalid[fork_Prague-state_test--bls_pairing_extra_data-]\ntest_invalid[fork_Prague-state_test--bls_pairing_top_bytes-]\ntest_invalid[fork_Prague-state_test--bls_pairing_invalid_field_element-]\ntest_invalid[fork_Prague-state_test--bls_pairing_g1_not_on_curve-]\ntest_invalid[fork_Prague-state_test--bls_pairing_g2_not_on_curve-]\ntest_invalid[fork_Prague-state_test--bls_pairing_g1_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-state_test--bls_pairing_g2_not_in_correct_subgroup-]\ntest_invalid[fork_Prague-state_test--g1_P_g2_inf_1-]\ntest_invalid[fork_Prague-state_test--g1_P_g2_inf_2-]\ntest_invalid[fork_Prague-state_test--g1_inf_g2_P_1-]\ntest_invalid[fork_Prague-state_test--g1_inf_g2_P_2-]\ntest_invalid[fork_Prague-state_test--g1_inf_g2_P_3-]\ntest_invalid[fork_Prague-state_test--g1_inf_g2_P_4-]\ntest_invalid[fork_Prague-state_test--invalid_encoding_g1-]\ntest_invalid[fork_Prague-state_test--invalid_encoding_g2-]\ntest_invalid[fork_Prague-state_test--multi_inf_plus_g1_P_g2_inf_1-]\ntest_invalid[fork_Prague-state_test--P1_not_in_subgroup-]\ntest_invalid[fork_Prague-state_test--P2_not_in_subgroup-]\ntest_call_types[fork_Prague-blockchain_test-inf_pair-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test-inf_pair-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test-inf_pair-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_pair-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_pair-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-blockchain_test_engine-inf_pair-call_opcode_CALLCODE-]\ntest_call_types[fork_Prague-state_test-inf_pair-call_opcode_STATICCALL-]\ntest_call_types[fork_Prague-state_test-inf_pair-call_opcode_DELEGATECALL-]\ntest_call_types[fork_Prague-state_test-inf_pair-call_opcode_CALLCODE-]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork/","title":"Test Bls12 Precompiles Before Fork","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests BLS12 precompiles of EIP-2537: Precompile for BLS12-381 curve operations

    Tests BLS12 precompiles of EIP-2537: Precompile for BLS12-381 curve operations before the Prague hard fork is active

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_precompiles_before_fork.test_precompile_before_fork","title":"test_precompile_before_fork(state_test, pre, post, tx)","text":"

    Test all BLS12 precompiles before the Prague hard fork is active.

    The call must succeed but the output must be empty.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork.py
    @pytest.mark.parametrize(\n    \"precompile_address,input\",\n    [\n        pytest.param(\n            Spec.G1ADD,\n            Spec.INF_G1 + Spec.INF_G1,\n            id=\"G1ADD\",\n        ),\n        pytest.param(\n            Spec.G1MSM,\n            Spec.INF_G1 + Scalar(0),\n            id=\"G1MSM\",\n        ),\n        pytest.param(\n            Spec.G1MUL,\n            Spec.INF_G1 + Scalar(0),\n            id=\"G1MUL\",\n        ),\n        pytest.param(\n            Spec.G2ADD,\n            Spec.INF_G2 + Spec.INF_G2,\n            id=\"G2ADD\",\n        ),\n        pytest.param(\n            Spec.G2MSM,\n            Spec.INF_G2 + Scalar(0),\n            id=\"G2MSM\",\n        ),\n        pytest.param(\n            Spec.G2MUL,\n            Spec.INF_G2 + Scalar(0),\n            id=\"G2MUL\",\n        ),\n        pytest.param(\n            Spec.PAIRING,\n            Spec.INF_G1 + Spec.INF_G2,\n            id=\"PAIRING\",\n        ),\n        pytest.param(\n            Spec.MAP_FP_TO_G1,\n            FP(0),\n            id=\"MAP_FP_TO_G1\",\n        ),\n        pytest.param(\n            Spec.MAP_FP2_TO_G2,\n            FP2((0, 0)),\n            id=\"MAP_FP2_TO_G2\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output,call_succeeds\", [pytest.param(b\"\", True, id=\"\")])\ndef test_precompile_before_fork(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test all BLS12 precompiles before the Prague hard fork is active.\n\n    The call must succeed but the output must be empty.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork/index/test_cases/","title":"Test Bls12 Precompiles Before Fork - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork.py:

    test_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--G1ADD]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--G1MSM]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--G1MUL]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--G2ADD]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--G2MSM]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--G2MUL]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--PAIRING]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--MAP_FP_TO_G1]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--MAP_FP2_TO_G2]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test_engine--G1ADD]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test_engine--G1MSM]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test_engine--G1MUL]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test_engine--G2ADD]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test_engine--G2MSM]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test_engine--G2MUL]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test_engine--PAIRING]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test_engine--MAP_FP_TO_G1]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test_engine--MAP_FP2_TO_G2]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-state_test--G1ADD]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-state_test--G1MSM]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-state_test--G1MUL]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-state_test--G2ADD]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-state_test--G2MSM]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-state_test--G2MUL]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-state_test--PAIRING]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-state_test--MAP_FP_TO_G1]\ntest_precompile_before_fork[fork_CancunToPragueAtTime15k-state_test--MAP_FP2_TO_G2]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/","title":"Test Bls12 Variable Length Input Contracts","text":"

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests minimum gas and input length for BLS12_G1MSM, BLS12_G2MSM, BLS12_PAIRING precompiles of EIP-2537: Precompile for BLS12-381 curve operations

    Tests minimum gas and input length for BLS12_G1MSM, BLS12_G2MSM, BLS12_PAIRING precompiles of EIP-2537: Precompile for BLS12-381 curve operations.

    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_variable_length_input_contracts.test_valid_gas_g1msm","title":"test_valid_gas_g1msm(state_test, pre, post, tx)","text":"

    Test the BLS12_G1MSM discount gas table in full, by expecting the call to succeed for all possible input lengths because the appropriate amount of gas is provided.

    If any of the calls fail, the test will fail.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py
    @pytest.mark.parametrize(\n    \"precompile_gas_list,precompile_data_length_list\",\n    [\n        pytest.param(\n            [G1_GAS(i * G1_MSM_K_INPUT_LENGTH) for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            [i * G1_MSM_K_INPUT_LENGTH for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            id=\"exact_gas_full_discount_table\",\n        ),\n        pytest.param(\n            [\n                G1_GAS(i * G1_MSM_K_INPUT_LENGTH) + 1\n                for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))\n            ],\n            [i * G1_MSM_K_INPUT_LENGTH for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            id=\"one_extra_gas_full_discount_table\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [PointG1()], ids=[\"\"])\n@pytest.mark.parametrize(\"tx_gas_limit\", [100_000_000], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_address\", [Spec.G1MSM])\ndef test_valid_gas_g1msm(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1MSM discount gas table in full, by expecting the call to succeed for\n    all possible input lengths because the appropriate amount of gas is provided.\n\n    If any of the calls fail, the test will fail.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_variable_length_input_contracts.test_invalid_gas_g1msm","title":"test_invalid_gas_g1msm(state_test, pre, post, tx)","text":"

    Test the BLS12_G1MSM discount gas table in full, by expecting the call to fail for all possible input lengths because the appropriate amount of gas is not provided.

    If any of the calls succeeds, the test will fail.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py
    @pytest.mark.parametrize(\n    \"precompile_gas_list,precompile_data_length_list\",\n    [\n        pytest.param(\n            [0],\n            [G1_MSM_K_INPUT_LENGTH],\n            id=\"zero_gas_passed\",\n        ),\n        pytest.param(\n            [\n                G1_GAS(i * G1_MSM_K_INPUT_LENGTH) - 1\n                for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))\n            ],\n            [i * G1_MSM_K_INPUT_LENGTH for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            id=\"insufficient_gas_full_discount_table\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\n@pytest.mark.parametrize(\"tx_gas_limit\", [100_000_000], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_address\", [Spec.G1MSM])\ndef test_invalid_gas_g1msm(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1MSM discount gas table in full, by expecting the call to fail for\n    all possible input lengths because the appropriate amount of gas is not provided.\n\n    If any of the calls succeeds, the test will fail.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_variable_length_input_contracts.test_invalid_length_g1msm","title":"test_invalid_length_g1msm(state_test, pre, post, tx)","text":"

    Test the BLS12_G1MSM discount gas table in full, by expecting the call to fail for all possible input lengths provided because they are too long or short, or zero length.

    If any of the calls succeeds, the test will fail.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py
    @pytest.mark.parametrize(\n    \"precompile_gas_list,precompile_data_length_list\",\n    [\n        pytest.param(\n            [G1_GAS(G1_MSM_K_INPUT_LENGTH)],\n            [0],\n            id=\"zero_length_input\",\n        ),\n        pytest.param(\n            [G1_GAS(i * G1_MSM_K_INPUT_LENGTH) for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            [(i * G1_MSM_K_INPUT_LENGTH) - 1 for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            id=\"input_one_byte_too_short_full_discount_table\",\n        ),\n        pytest.param(\n            [G1_GAS(i * G1_MSM_K_INPUT_LENGTH) for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            [(i * G1_MSM_K_INPUT_LENGTH) + 1 for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            id=\"input_one_byte_too_long_full_discount_table\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\n@pytest.mark.parametrize(\"tx_gas_limit\", [100_000_000], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_address\", [Spec.G1MSM])\ndef test_invalid_length_g1msm(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G1MSM discount gas table in full, by expecting the call to fail for\n    all possible input lengths provided because they are too long or short, or zero length.\n\n    If any of the calls succeeds, the test will fail.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_variable_length_input_contracts.test_valid_gas_g2msm","title":"test_valid_gas_g2msm(state_test, pre, post, tx)","text":"

    Test the BLS12_G2MSM discount gas table in full, by expecting the call to succeed for all possible input lengths because the appropriate amount of gas is provided.

    If any of the calls fail, the test will fail.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py
    @pytest.mark.parametrize(\n    \"precompile_gas_list,precompile_data_length_list\",\n    [\n        pytest.param(\n            [G2_GAS(i * G2_MSM_K_INPUT_LENGTH) for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            [i * G2_MSM_K_INPUT_LENGTH for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            id=\"exact_gas_full_discount_table\",\n        ),\n        pytest.param(\n            [\n                G2_GAS(i * G2_MSM_K_INPUT_LENGTH) + 1\n                for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))\n            ],\n            [i * G2_MSM_K_INPUT_LENGTH for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            id=\"one_extra_gas_full_discount_table\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [PointG2()], ids=[\"\"])\n@pytest.mark.parametrize(\"tx_gas_limit\", [100_000_000], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_address\", [Spec.G2MSM])\ndef test_valid_gas_g2msm(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G2MSM discount gas table in full, by expecting the call to succeed for\n    all possible input lengths because the appropriate amount of gas is provided.\n\n    If any of the calls fail, the test will fail.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_variable_length_input_contracts.test_invalid_gas_g2msm","title":"test_invalid_gas_g2msm(state_test, pre, post, tx)","text":"

    Test the BLS12_G2MSM discount gas table in full, by expecting the call to fail for all possible input lengths because the appropriate amount of gas is not provided.

    If any of the calls succeeds, the test will fail.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py
    @pytest.mark.parametrize(\n    \"precompile_gas_list,precompile_data_length_list\",\n    [\n        pytest.param(\n            [0],\n            [G2_MSM_K_INPUT_LENGTH],\n            id=\"zero_gas_passed\",\n        ),\n        pytest.param(\n            [\n                G2_GAS(i * G2_MSM_K_INPUT_LENGTH) - 1\n                for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))\n            ],\n            [i * G2_MSM_K_INPUT_LENGTH for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            id=\"insufficient_gas_full_discount_table\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\n@pytest.mark.parametrize(\"tx_gas_limit\", [100_000_000], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_address\", [Spec.G2MSM])\ndef test_invalid_gas_g2msm(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G2MSM discount gas table in full, by expecting the call to fail for\n    all possible input lengths because the appropriate amount of gas is not provided.\n\n    If any of the calls succeeds, the test will fail.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_variable_length_input_contracts.test_invalid_length_g2msm","title":"test_invalid_length_g2msm(state_test, pre, post, tx)","text":"

    Test the BLS12_G2MSM discount gas table in full, by expecting the call to fail for all possible input lengths provided because they are too long or short, or zero length.

    If any of the calls succeeds, the test will fail.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py
    @pytest.mark.parametrize(\n    \"precompile_gas_list,precompile_data_length_list\",\n    [\n        pytest.param(\n            [G2_GAS(G2_MSM_K_INPUT_LENGTH)],\n            [0],\n            id=\"zero_length_input\",\n        ),\n        pytest.param(\n            [G2_GAS(i * G2_MSM_K_INPUT_LENGTH) for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            [(i * G2_MSM_K_INPUT_LENGTH) - 1 for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            id=\"input_one_byte_too_short_full_discount_table\",\n        ),\n        pytest.param(\n            [G2_GAS(i * G2_MSM_K_INPUT_LENGTH) for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            [(i * G2_MSM_K_INPUT_LENGTH) + 1 for i in range(1, len(Spec.MSM_DISCOUNT_TABLE))],\n            id=\"input_one_byte_too_long_full_discount_table\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\n@pytest.mark.parametrize(\"tx_gas_limit\", [100_000_000], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_address\", [Spec.G2MSM])\ndef test_invalid_length_g2msm(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_G2MSM discount gas table in full, by expecting the call to fail for\n    all possible input lengths provided because they are too long or short, or zero length.\n\n    If any of the calls succeeds, the test will fail.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_variable_length_input_contracts.test_valid_gas_pairing","title":"test_valid_gas_pairing(state_test, pre, post, tx)","text":"

    Test the BLS12_PAIRING precompile, by expecting the call to succeed for all possible input lengths (up to k == PAIRINGS_TO_TEST).

    If any of the calls fails, the test will fail.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py
    @pytest.mark.parametrize(\n    \"precompile_gas_list,precompile_data_length_list\",\n    [\n        pytest.param(\n            [PAIRING_GAS(i * Spec.LEN_PER_PAIR) for i in range(1, PAIRINGS_TO_TEST + 1)],\n            [i * Spec.LEN_PER_PAIR for i in range(1, PAIRINGS_TO_TEST + 1)],\n            id=\"sufficient_gas\",\n        ),\n        pytest.param(\n            [PAIRING_GAS(i * Spec.LEN_PER_PAIR) + 1 for i in range(1, PAIRINGS_TO_TEST + 1)],\n            [i * Spec.LEN_PER_PAIR for i in range(1, PAIRINGS_TO_TEST + 1)],\n            id=\"extra_gas\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.PAIRING_TRUE], ids=[\"\"])\n@pytest.mark.parametrize(\"tx_gas_limit\", [100_000_000], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_address\", [Spec.PAIRING])\ndef test_valid_gas_pairing(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_PAIRING precompile, by expecting the call to succeed for all possible input\n    lengths (up to k == PAIRINGS_TO_TEST).\n\n    If any of the calls fails, the test will fail.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_variable_length_input_contracts.test_invalid_gas_pairing","title":"test_invalid_gas_pairing(state_test, pre, post, tx)","text":"

    Test the BLS12_PAIRING precompile, by expecting the call to fail for all possible input lengths (up to k == PAIRINGS_TO_TEST) because the appropriate amount of gas is not provided.

    If any of the calls succeeds, the test will fail.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py
    @pytest.mark.parametrize(\n    \"precompile_gas_list,precompile_data_length_list\",\n    [\n        pytest.param(\n            [0],\n            [Spec.LEN_PER_PAIR],\n            id=\"zero_gas_passed\",\n        ),\n        pytest.param(\n            [PAIRING_GAS(i * Spec.LEN_PER_PAIR) - 1 for i in range(1, PAIRINGS_TO_TEST + 1)],\n            [i * Spec.LEN_PER_PAIR for i in range(1, PAIRINGS_TO_TEST + 1)],\n            id=\"insufficient_gas\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\n@pytest.mark.parametrize(\"tx_gas_limit\", [100_000_000], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_address\", [Spec.PAIRING])\ndef test_invalid_gas_pairing(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_PAIRING precompile, by expecting the call to fail for all possible input\n    lengths (up to k == PAIRINGS_TO_TEST) because the appropriate amount of gas is not provided.\n\n    If any of the calls succeeds, the test will fail.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/#tests.prague.eip2537_bls_12_381_precompiles.test_bls12_variable_length_input_contracts.test_invalid_length_pairing","title":"test_invalid_length_pairing(state_test, pre, post, tx)","text":"

    Test the BLS12_PAIRING precompile, by expecting the call to fail for all possible input lengths (up to k == PAIRINGS_TO_TEST) because the incorrect input length was used.

    If any of the calls succeeds, the test will fail.

    Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py
    @pytest.mark.parametrize(\n    \"precompile_gas_list,precompile_data_length_list\",\n    [\n        pytest.param(\n            [PAIRING_GAS(Spec.LEN_PER_PAIR)],\n            [0],\n            id=\"zero_length\",\n        ),\n        pytest.param(\n            [PAIRING_GAS(i * Spec.LEN_PER_PAIR) for i in range(1, PAIRINGS_TO_TEST + 1)],\n            [(i * Spec.LEN_PER_PAIR) - 1 for i in range(1, PAIRINGS_TO_TEST + 1)],\n            id=\"input_too_short\",\n        ),\n        pytest.param(\n            [PAIRING_GAS(i * Spec.LEN_PER_PAIR) for i in range(1, PAIRINGS_TO_TEST + 1)],\n            [(i * Spec.LEN_PER_PAIR) + 1 for i in range(1, PAIRINGS_TO_TEST + 1)],\n            id=\"input_too_long\",\n        ),\n    ],\n)\n@pytest.mark.parametrize(\"expected_output\", [Spec.INVALID], ids=[\"\"])\n@pytest.mark.parametrize(\"tx_gas_limit\", [100_000_000], ids=[\"\"])\n@pytest.mark.parametrize(\"precompile_address\", [Spec.PAIRING])\ndef test_invalid_length_pairing(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    post: dict,\n    tx: Transaction,\n):\n    \"\"\"\n    Test the BLS12_PAIRING precompile, by expecting the call to fail for all possible input\n    lengths (up to k == PAIRINGS_TO_TEST) because the incorrect input length was used.\n\n    If any of the calls succeeds, the test will fail.\n    \"\"\"\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/index/test_cases/","title":"Test Bls12 Variable Length Input Contracts - Test Cases","text":"

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py:

    test_valid_gas_g1msm[fork_Prague-blockchain_test-precompile_address_13---exact_gas_full_discount_table]\ntest_valid_gas_g1msm[fork_Prague-blockchain_test-precompile_address_13---one_extra_gas_full_discount_table]\ntest_valid_gas_g1msm[fork_Prague-blockchain_test_engine-precompile_address_13---exact_gas_full_discount_table]\ntest_valid_gas_g1msm[fork_Prague-blockchain_test_engine-precompile_address_13---one_extra_gas_full_discount_table]\ntest_valid_gas_g1msm[fork_Prague-state_test-precompile_address_13---exact_gas_full_discount_table]\ntest_valid_gas_g1msm[fork_Prague-state_test-precompile_address_13---one_extra_gas_full_discount_table]\ntest_invalid_gas_g1msm[fork_Prague-blockchain_test-precompile_address_13---zero_gas_passed]\ntest_invalid_gas_g1msm[fork_Prague-blockchain_test-precompile_address_13---insufficient_gas_full_discount_table]\ntest_invalid_gas_g1msm[fork_Prague-blockchain_test_engine-precompile_address_13---zero_gas_passed]\ntest_invalid_gas_g1msm[fork_Prague-blockchain_test_engine-precompile_address_13---insufficient_gas_full_discount_table]\ntest_invalid_gas_g1msm[fork_Prague-state_test-precompile_address_13---zero_gas_passed]\ntest_invalid_gas_g1msm[fork_Prague-state_test-precompile_address_13---insufficient_gas_full_discount_table]\ntest_invalid_length_g1msm[fork_Prague-blockchain_test-precompile_address_13---zero_length_input]\ntest_invalid_length_g1msm[fork_Prague-blockchain_test-precompile_address_13---input_one_byte_too_short_full_discount_table]\ntest_invalid_length_g1msm[fork_Prague-blockchain_test-precompile_address_13---input_one_byte_too_long_full_discount_table]\ntest_invalid_length_g1msm[fork_Prague-blockchain_test_engine-precompile_address_13---zero_length_input]\ntest_invalid_length_g1msm[fork_Prague-blockchain_test_engine-precompile_address_13---input_one_byte_too_short_full_discount_table]\ntest_invalid_length_g1msm[fork_Prague-blockchain_test_engine-precompile_address_13---input_one_byte_too_long_full_discount_table]\ntest_invalid_length_g1msm[fork_Prague-state_test-precompile_address_13---zero_length_input]\ntest_invalid_length_g1msm[fork_Prague-state_test-precompile_address_13---input_one_byte_too_short_full_discount_table]\ntest_invalid_length_g1msm[fork_Prague-state_test-precompile_address_13---input_one_byte_too_long_full_discount_table]\ntest_valid_gas_g2msm[fork_Prague-blockchain_test-precompile_address_16---exact_gas_full_discount_table]\ntest_valid_gas_g2msm[fork_Prague-blockchain_test-precompile_address_16---one_extra_gas_full_discount_table]\ntest_valid_gas_g2msm[fork_Prague-blockchain_test_engine-precompile_address_16---exact_gas_full_discount_table]\ntest_valid_gas_g2msm[fork_Prague-blockchain_test_engine-precompile_address_16---one_extra_gas_full_discount_table]\ntest_valid_gas_g2msm[fork_Prague-state_test-precompile_address_16---exact_gas_full_discount_table]\ntest_valid_gas_g2msm[fork_Prague-state_test-precompile_address_16---one_extra_gas_full_discount_table]\ntest_invalid_gas_g2msm[fork_Prague-blockchain_test-precompile_address_16---zero_gas_passed]\ntest_invalid_gas_g2msm[fork_Prague-blockchain_test-precompile_address_16---insufficient_gas_full_discount_table]\ntest_invalid_gas_g2msm[fork_Prague-blockchain_test_engine-precompile_address_16---zero_gas_passed]\ntest_invalid_gas_g2msm[fork_Prague-blockchain_test_engine-precompile_address_16---insufficient_gas_full_discount_table]\ntest_invalid_gas_g2msm[fork_Prague-state_test-precompile_address_16---zero_gas_passed]\ntest_invalid_gas_g2msm[fork_Prague-state_test-precompile_address_16---insufficient_gas_full_discount_table]\ntest_invalid_length_g2msm[fork_Prague-blockchain_test-precompile_address_16---zero_length_input]\ntest_invalid_length_g2msm[fork_Prague-blockchain_test-precompile_address_16---input_one_byte_too_short_full_discount_table]\ntest_invalid_length_g2msm[fork_Prague-blockchain_test-precompile_address_16---input_one_byte_too_long_full_discount_table]\ntest_invalid_length_g2msm[fork_Prague-blockchain_test_engine-precompile_address_16---zero_length_input]\ntest_invalid_length_g2msm[fork_Prague-blockchain_test_engine-precompile_address_16---input_one_byte_too_short_full_discount_table]\ntest_invalid_length_g2msm[fork_Prague-blockchain_test_engine-precompile_address_16---input_one_byte_too_long_full_discount_table]\ntest_invalid_length_g2msm[fork_Prague-state_test-precompile_address_16---zero_length_input]\ntest_invalid_length_g2msm[fork_Prague-state_test-precompile_address_16---input_one_byte_too_short_full_discount_table]\ntest_invalid_length_g2msm[fork_Prague-state_test-precompile_address_16---input_one_byte_too_long_full_discount_table]\ntest_valid_gas_pairing[fork_Prague-blockchain_test-precompile_address_17---sufficient_gas]\ntest_valid_gas_pairing[fork_Prague-blockchain_test-precompile_address_17---extra_gas]\ntest_valid_gas_pairing[fork_Prague-blockchain_test_engine-precompile_address_17---sufficient_gas]\ntest_valid_gas_pairing[fork_Prague-blockchain_test_engine-precompile_address_17---extra_gas]\ntest_valid_gas_pairing[fork_Prague-state_test-precompile_address_17---sufficient_gas]\ntest_valid_gas_pairing[fork_Prague-state_test-precompile_address_17---extra_gas]\ntest_invalid_gas_pairing[fork_Prague-blockchain_test-precompile_address_17---zero_gas_passed]\ntest_invalid_gas_pairing[fork_Prague-blockchain_test-precompile_address_17---insufficient_gas]\ntest_invalid_gas_pairing[fork_Prague-blockchain_test_engine-precompile_address_17---zero_gas_passed]\ntest_invalid_gas_pairing[fork_Prague-blockchain_test_engine-precompile_address_17---insufficient_gas]\ntest_invalid_gas_pairing[fork_Prague-state_test-precompile_address_17---zero_gas_passed]\ntest_invalid_gas_pairing[fork_Prague-state_test-precompile_address_17---insufficient_gas]\ntest_invalid_length_pairing[fork_Prague-blockchain_test-precompile_address_17---zero_length]\ntest_invalid_length_pairing[fork_Prague-blockchain_test-precompile_address_17---input_too_short]\ntest_invalid_length_pairing[fork_Prague-blockchain_test-precompile_address_17---input_too_long]\ntest_invalid_length_pairing[fork_Prague-blockchain_test_engine-precompile_address_17---zero_length]\ntest_invalid_length_pairing[fork_Prague-blockchain_test_engine-precompile_address_17---input_too_short]\ntest_invalid_length_pairing[fork_Prague-blockchain_test_engine-precompile_address_17---input_too_long]\ntest_invalid_length_pairing[fork_Prague-state_test-precompile_address_17---zero_length]\ntest_invalid_length_pairing[fork_Prague-state_test-precompile_address_17---input_too_short]\ntest_invalid_length_pairing[fork_Prague-state_test-precompile_address_17---input_too_long]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py\n
    "},{"location":"tests/prague/eip2537_bls_12_381_precompiles/vectors/test-vectors./","title":"Test Vectors for EIP-2537 - Precompile for BLS12-381 curve operations","text":"

    These test vectors are derived from BLS 12-381 tests

    "},{"location":"tests/prague/eip2935_historical_block_hashes_from_state/","title":"EIP-2935 Historical Block Hashes From State","text":"

    Documentation for tests/prague/eip2935_historical_block_hashes_from_state.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2935_historical_block_hashes_from_state --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2935_historical_block_hashes_from_state --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Cross-client EIP-2935 Tests

    "},{"location":"tests/prague/eip2935_historical_block_hashes_from_state/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip2935_historical_block_hashes_from_state/spec.py.

    Defines EIP-2935 specification constants and functions.

    "},{"location":"tests/prague/eip2935_historical_block_hashes_from_state/spec/#tests.prague.eip2935_historical_block_hashes_from_state.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-2935 specifications as defined at https://eips.ethereum.org/EIPS/eip-2935

    Source code in tests/prague/eip2935_historical_block_hashes_from_state/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-2935 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-2935\n    \"\"\"\n\n    FORK_TIMESTAMP = 15_000\n    HISTORY_STORAGE_ADDRESS = 0x0AAE40965E6800CD9B1F4B05FF21581047E3F91E\n    HISTORY_SERVE_WINDOW = 8192\n    BLOCKHASH_OLD_WINDOW = 256\n
    "},{"location":"tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes/","title":"Test Block Hashes","text":"

    Documentation for tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-2935: Serve historical block hashes from state

    Test EIP-2935: Serve historical block hashes from state

    "},{"location":"tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes/#tests.prague.eip2935_historical_block_hashes_from_state.test_block_hashes.test_block_hashes_history_at_transition","title":"test_block_hashes_history_at_transition(blockchain_test, pre, blocks_before_fork, blocks_after_fork)","text":"

    Tests that block hashes are stored correctly at the system contract address after the fork transition. Block hashes are stored incrementally at the transition until the HISTORY_SERVE_WINDOW ring buffer is full. Afterwards the oldest block hash is replaced by the new one.

    Note: The block hashes before the fork are no longer stored in the contract at the moment of the transition.

    Source code in tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py
    @pytest.mark.parametrize(\n    \"blocks_before_fork, blocks_after_fork\",\n    [\n        [1, 2],\n        [Spec.BLOCKHASH_OLD_WINDOW + 1, 10],\n        [1, Spec.BLOCKHASH_OLD_WINDOW + 1],\n    ],\n)\n@pytest.mark.valid_at_transition_to(\"Prague\")\ndef test_block_hashes_history_at_transition(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    blocks_before_fork: int,\n    blocks_after_fork: int,\n):\n    \"\"\"\n    Tests that block hashes are stored correctly at the system contract address after the fork\n    transition. Block hashes are stored incrementally at the transition until the\n    `HISTORY_SERVE_WINDOW` ring buffer is full. Afterwards the oldest block hash is replaced by the\n    new one.\n\n    Note: The block hashes before the fork are no longer stored in the contract at the moment of\n    the transition.\n    \"\"\"\n    blocks: List[Block] = []\n    assert blocks_before_fork >= 1 and blocks_before_fork < Spec.FORK_TIMESTAMP\n\n    sender = pre.fund_eoa(10_000_000_000)\n    post: Dict[Address, Account] = {}\n    current_block_number = 1\n    fork_block_number = current_block_number + blocks_before_fork\n\n    for i in range(blocks_before_fork):\n        txs: List[Transaction] = []\n        if i == blocks_before_fork - 1:\n            # On the last block before the fork, `BLOCKHASH` must return values for the last 256\n            # blocks but not for the blocks before that.\n            # And `HISTORY_STORAGE_ADDRESS` should be empty.\n            code = Bytecode()\n            storage = Storage()\n\n            # Check the last block before blockhash the window\n            code += generate_block_check_code(\n                check_block_number=current_block_number - Spec.BLOCKHASH_OLD_WINDOW - 1,\n                current_block_number=current_block_number,\n                fork_block_number=fork_block_number,\n                storage=storage,\n            )\n\n            # Check the first block inside blockhash the window\n            code += generate_block_check_code(\n                check_block_number=(\n                    current_block_number - Spec.BLOCKHASH_OLD_WINDOW\n                    if current_block_number > Spec.BLOCKHASH_OLD_WINDOW\n                    else 0  # Entire chain is inside the window, check genesis\n                ),\n                current_block_number=current_block_number,\n                fork_block_number=fork_block_number,\n                storage=storage,\n            )\n\n            check_blocks_before_fork_address = pre.deploy_contract(code)\n            txs.append(\n                Transaction(\n                    to=check_blocks_before_fork_address,\n                    gas_limit=10_000_000,\n                    sender=sender,\n                )\n            )\n            post[check_blocks_before_fork_address] = Account(storage=storage)\n        blocks.append(Block(timestamp=current_block_number, txs=txs))\n        current_block_number += 1\n\n    # Add blocks after the fork transition to gradually fill up the `HISTORY_SERVE_WINDOW`\n    for i in range(blocks_after_fork):\n        txs = []\n        # On these blocks, `BLOCKHASH` will still return values for the last 256 blocks, and\n        # `HISTORY_STORAGE_ADDRESS` should now serve values for the previous blocks in the new\n        # fork.\n        code = Bytecode()\n        storage = Storage()\n\n        # Check that each block can return previous blockhashes if `BLOCKHASH_OLD_WINDOW` and or\n        # `HISTORY_SERVE_WINDOW`.\n        for j in range(current_block_number):\n            code += generate_block_check_code(\n                check_block_number=j,\n                current_block_number=current_block_number,\n                fork_block_number=fork_block_number,\n                storage=storage,\n            )\n\n        check_blocks_after_fork_address = pre.deploy_contract(code)\n        txs.append(\n            Transaction(\n                to=check_blocks_after_fork_address,\n                gas_limit=10_000_000,\n                sender=sender,\n            )\n        )\n        post[check_blocks_after_fork_address] = Account(storage=storage)\n\n        blocks.append(Block(timestamp=Spec.FORK_TIMESTAMP + i, txs=txs))\n        current_block_number += 1\n\n    blockchain_test(\n        pre=pre,\n        blocks=blocks,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes/#tests.prague.eip2935_historical_block_hashes_from_state.test_block_hashes.test_block_hashes_history","title":"test_block_hashes_history(blockchain_test, pre, block_count, check_contract_first)","text":"

    Tests that block hashes are stored correctly at the system contract address after the fork transition. Block hashes are stored incrementally at the transition until the HISTORY_SERVE_WINDOW ring buffer is full. Afterwards the oldest block hash is replaced by the new one.

    Source code in tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py
    @pytest.mark.parametrize(\n    \"block_count,check_contract_first\",\n    [\n        pytest.param(1, False, id=\"single_block_check_blockhash_first\"),\n        pytest.param(1, True, id=\"single_block_check_contract_first\"),\n        pytest.param(2, False, id=\"two_blocks_check_blockhash_first\"),\n        pytest.param(2, True, id=\"two_blocks_check_contract_first\"),\n        pytest.param(\n            Spec.HISTORY_SERVE_WINDOW + 1,\n            False,\n            marks=pytest.mark.slow,\n            id=\"full_history_plus_one_check_blockhash_first\",\n        ),\n    ],\n)\n@pytest.mark.valid_from(\"Prague\")\ndef test_block_hashes_history(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    block_count: int,\n    check_contract_first: bool,\n):\n    \"\"\"\n    Tests that block hashes are stored correctly at the system contract address after the fork\n    transition. Block hashes are stored incrementally at the transition until the\n    `HISTORY_SERVE_WINDOW` ring buffer is full. Afterwards the oldest block hash is replaced by the\n    new one.\n    \"\"\"\n    blocks: List[Block] = []\n\n    sender = pre.fund_eoa(10_000_000_000)\n    post: Dict[Address, Account] = {}\n    current_block_number = 1\n    fork_block_number = 0  # We fork at genesis\n\n    for _ in range(block_count - 1):\n        # Generate empty blocks after the fork.\n        blocks.append(Block())\n        current_block_number += 1\n\n    txs = []\n    # On these blocks, `BLOCKHASH` will still return values for the last 256 blocks, and\n    # `HISTORY_STORAGE_ADDRESS` should now serve values for the previous blocks in the new\n    # fork.\n    code = Bytecode()\n    storage = Storage()\n\n    # Check the first block outside of the window if any\n    code += generate_block_check_code(\n        check_block_number=current_block_number - Spec.HISTORY_SERVE_WINDOW - 1,\n        current_block_number=current_block_number,\n        fork_block_number=fork_block_number,\n        storage=storage,\n        check_contract_first=check_contract_first,\n    )\n\n    # Check the first block inside the window\n    code += generate_block_check_code(\n        check_block_number=current_block_number - Spec.HISTORY_SERVE_WINDOW,\n        current_block_number=current_block_number,\n        fork_block_number=fork_block_number,\n        storage=storage,\n        check_contract_first=check_contract_first,\n    )\n\n    # Check the first block outside the BLOCKHASH window\n    code += generate_block_check_code(\n        check_block_number=current_block_number - Spec.BLOCKHASH_OLD_WINDOW - 1,\n        current_block_number=current_block_number,\n        fork_block_number=fork_block_number,\n        storage=storage,\n        check_contract_first=check_contract_first,\n    )\n\n    # Check the first block inside the BLOCKHASH window\n    code += generate_block_check_code(\n        check_block_number=current_block_number - Spec.BLOCKHASH_OLD_WINDOW,\n        current_block_number=current_block_number,\n        fork_block_number=fork_block_number,\n        storage=storage,\n        check_contract_first=check_contract_first,\n    )\n\n    # Check the previous block\n    code += generate_block_check_code(\n        check_block_number=current_block_number - 1,\n        current_block_number=current_block_number,\n        fork_block_number=fork_block_number,\n        storage=storage,\n        check_contract_first=check_contract_first,\n    )\n\n    check_blocks_after_fork_address = pre.deploy_contract(code)\n    txs.append(\n        Transaction(\n            to=check_blocks_after_fork_address,\n            gas_limit=10_000_000,\n            sender=sender,\n        )\n    )\n    post[check_blocks_after_fork_address] = Account(storage=storage)\n\n    blocks.append(Block(txs=txs))\n    current_block_number += 1\n\n    blockchain_test(\n        pre=pre,\n        blocks=blocks,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes/#tests.prague.eip2935_historical_block_hashes_from_state.test_block_hashes.test_invalid_history_contract_calls","title":"test_invalid_history_contract_calls(blockchain_test, pre, block_number, reverts)","text":"

    Test calling the history contract with invalid block numbers, such as blocks from the future or overflowing block numbers.

    Also test the BLOCKHASH opcode with the same block numbers, which should not affect the behavior of the opcode, even after verkle.

    Source code in tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py
    @pytest.mark.parametrize(\n    \"block_number,reverts\",\n    [\n        pytest.param(1, False, id=\"current_block\"),\n        pytest.param(2, False, id=\"future_block\"),\n        pytest.param(2**64 - 1, False, id=\"2**64-1\"),\n        pytest.param(2**64, True, id=\"2**64\"),\n    ],\n)\n@pytest.mark.valid_from(\"Prague\")\ndef test_invalid_history_contract_calls(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    block_number: int,\n    reverts: bool,\n):\n    \"\"\"\n    Test calling the history contract with invalid block numbers, such as blocks from the future\n    or overflowing block numbers.\n\n    Also test the BLOCKHASH opcode with the same block numbers, which should not affect the\n    behavior of the opcode, even after verkle.\n    \"\"\"\n    storage = Storage()\n\n    return_code_slot = storage.store_next(not reverts)\n    returned_block_hash_slot = storage.store_next(0)\n    block_hash_opcode_slot = storage.store_next(0)\n\n    # Check the first block outside of the window if any\n    code = (\n        Op.MSTORE(0, block_number)\n        + Op.SSTORE(\n            return_code_slot, Op.CALL(Op.GAS, Spec.HISTORY_STORAGE_ADDRESS, 0, 0, 32, 32, 64)\n        )\n        + Op.SSTORE(returned_block_hash_slot, Op.MLOAD(32))\n        + Op.SSTORE(block_hash_opcode_slot, Op.BLOCKHASH(block_number))\n    )\n    check_contract_address = pre.deploy_contract(code, storage=storage.canary())\n\n    txs = [\n        Transaction(\n            to=check_contract_address,\n            gas_limit=10_000_000,\n            sender=pre.fund_eoa(),\n        )\n    ]\n    post = {check_contract_address: Account(storage=storage)}\n\n    blocks = [Block(txs=txs)]\n    blockchain_test(\n        pre=pre,\n        blocks=blocks,\n        post=post,\n        reverts=reverts,\n    )\n
    "},{"location":"tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes/index/test_cases/","title":"Test Block Hashes - Test Cases","text":"

    Test cases generated from tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py

    Parametrized test cases generated from the test module tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py:

    test_block_hashes_history_at_transition[fork_CancunToPragueAtTime15k-blockchain_test-blocks_before_fork_1-blocks_after_fork_2]\ntest_block_hashes_history_at_transition[fork_CancunToPragueAtTime15k-blockchain_test-blocks_before_fork_257-blocks_after_fork_10]\ntest_block_hashes_history_at_transition[fork_CancunToPragueAtTime15k-blockchain_test-blocks_before_fork_1-blocks_after_fork_257]\ntest_block_hashes_history_at_transition[fork_CancunToPragueAtTime15k-blockchain_test_engine-blocks_before_fork_1-blocks_after_fork_2]\ntest_block_hashes_history_at_transition[fork_CancunToPragueAtTime15k-blockchain_test_engine-blocks_before_fork_257-blocks_after_fork_10]\ntest_block_hashes_history_at_transition[fork_CancunToPragueAtTime15k-blockchain_test_engine-blocks_before_fork_1-blocks_after_fork_257]\ntest_block_hashes_history[fork_Prague-blockchain_test-single_block_check_blockhash_first]\ntest_block_hashes_history[fork_Prague-blockchain_test-single_block_check_contract_first]\ntest_block_hashes_history[fork_Prague-blockchain_test-two_blocks_check_blockhash_first]\ntest_block_hashes_history[fork_Prague-blockchain_test-two_blocks_check_contract_first]\ntest_block_hashes_history[fork_Prague-blockchain_test-full_history_plus_one_check_blockhash_first]\ntest_block_hashes_history[fork_Prague-blockchain_test_engine-single_block_check_blockhash_first]\ntest_block_hashes_history[fork_Prague-blockchain_test_engine-single_block_check_contract_first]\ntest_block_hashes_history[fork_Prague-blockchain_test_engine-two_blocks_check_blockhash_first]\ntest_block_hashes_history[fork_Prague-blockchain_test_engine-two_blocks_check_contract_first]\ntest_block_hashes_history[fork_Prague-blockchain_test_engine-full_history_plus_one_check_blockhash_first]\ntest_invalid_history_contract_calls[fork_Prague-blockchain_test-current_block]\ntest_invalid_history_contract_calls[fork_Prague-blockchain_test-future_block]\ntest_invalid_history_contract_calls[fork_Prague-blockchain_test-2**64-1]\ntest_invalid_history_contract_calls[fork_Prague-blockchain_test-2**64]\ntest_invalid_history_contract_calls[fork_Prague-blockchain_test_engine-current_block]\ntest_invalid_history_contract_calls[fork_Prague-blockchain_test_engine-future_block]\ntest_invalid_history_contract_calls[fork_Prague-blockchain_test_engine-2**64-1]\ntest_invalid_history_contract_calls[fork_Prague-blockchain_test_engine-2**64]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py\n
    "},{"location":"tests/prague/eip6110_deposits/","title":"EIP-6110 Deposits","text":"

    Documentation for tests/prague/eip6110_deposits.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip6110_deposits --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip6110_deposits --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Cross-client EIP-6110 Tests

    "},{"location":"tests/prague/eip6110_deposits/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip6110_deposits/spec.py.

    Defines EIP-6110 specification constants and functions.

    "},{"location":"tests/prague/eip6110_deposits/spec/#tests.prague.eip6110_deposits.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-6110 specifications as defined at https://eips.ethereum.org/EIPS/eip-6110

    Source code in tests/prague/eip6110_deposits/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-6110 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-6110\n    \"\"\"\n\n    DEPOSIT_CONTRACT_ADDRESS = 0x00000000219AB540356CBB839CBE05303D7705FA\n
    "},{"location":"tests/prague/eip6110_deposits/test_deposits/","title":"Test Deposits","text":"

    Documentation for tests/prague/eip6110_deposits/test_deposits.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip6110_deposits/test_deposits.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip6110_deposits/test_deposits.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-6110: Supply validator deposits on chain

    Test EIP-6110: Supply validator deposits on chain.

    "},{"location":"tests/prague/eip6110_deposits/test_deposits/#tests.prague.eip6110_deposits.test_deposits.test_deposit","title":"test_deposit(blockchain_test, pre, blocks)","text":"

    Test making a deposit to the beacon chain deposit contract.

    Source code in tests/prague/eip6110_deposits/test_deposits.py
    @pytest.mark.parametrize(\n    \"requests\",\n    [\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n            ],\n            id=\"single_deposit_from_eoa\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=120_000_000_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                    sender_balance=120_000_001_000_000_000 * 10**9,\n                ),\n            ],\n            id=\"single_deposit_from_eoa_huge_amount\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x1,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"multiple_deposit_from_same_eoa\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=i,\n                        )\n                        for i in range(200)\n                    ],\n                )\n            ],\n            id=\"multiple_deposit_from_same_eoa_high_count\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x1,\n                        )\n                    ],\n                ),\n            ],\n            id=\"multiple_deposit_from_different_eoa\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=999_999_999,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"multiple_deposit_from_same_eoa_first_reverts\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=999_999_999,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"multiple_deposit_from_same_eoa_last_reverts\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                            # From traces, gas used by the first tx is 82,718 so reduce by one here\n                            gas_limit=0x1431D,\n                            valid=False,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"multiple_deposit_from_same_eoa_first_oog\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                            # From traces, gas used by the second tx is 68,594, reduce by one here\n                            gas_limit=0x10BF1,\n                            valid=False,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"multiple_deposit_from_same_eoa_last_oog\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                            calldata_modifier=lambda _: b\"\",\n                            valid=False,\n                        )\n                    ],\n                ),\n            ],\n            id=\"send_eth_from_eoa\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n            ],\n            id=\"single_deposit_from_contract\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x1,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"multiple_deposits_from_contract\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=i,\n                        )\n                        for i in range(1000)\n                    ],\n                    tx_gas_limit=60_000_000,\n                ),\n            ],\n            id=\"many_deposits_from_contract\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=999_999_999,\n                            signature=0x03,\n                            index=0x0,\n                            valid=False,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"multiple_deposits_from_contract_first_reverts\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=999_999_999,\n                            signature=0x03,\n                            index=0x1,\n                            valid=False,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"multiple_deposits_from_contract_last_reverts\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            gas_limit=100,\n                            index=0x0,\n                            valid=False,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            gas_limit=1_000_000,\n                            index=0x0,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"multiple_deposits_from_contract_first_oog\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                            gas_limit=1_000_000,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                            gas_limit=100,\n                            valid=False,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"multiple_deposits_from_contract_last_oog\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                            valid=False,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x1,\n                            valid=False,\n                        ),\n                    ],\n                    extra_code=Op.REVERT(0, 0),\n                ),\n            ],\n            id=\"multiple_deposits_from_contract_caller_reverts\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                            valid=False,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x1,\n                            valid=False,\n                        ),\n                    ],\n                    extra_code=Macros.OOG(),\n                ),\n            ],\n            id=\"multiple_deposits_from_contract_caller_oog\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=i,\n                            valid=False,\n                        )\n                        for i in range(1000)\n                    ],\n                    tx_gas_limit=23_738_700,\n                ),\n            ],\n            id=\"many_deposits_from_contract_oog\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                    ],\n                ),\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x1,\n                        )\n                    ],\n                ),\n            ],\n            id=\"single_deposit_from_contract_single_deposit_from_eoa\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x1,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"single_deposit_from_eoa_single_deposit_from_contract\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x1,\n                        ),\n                    ],\n                ),\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x2,\n                        )\n                    ],\n                ),\n            ],\n            id=\"single_deposit_from_contract_between_eoa_deposits\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                    ],\n                ),\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x1,\n                        )\n                    ],\n                ),\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x2,\n                        ),\n                    ],\n                ),\n            ],\n            id=\"single_deposit_from_eoa_between_contract_deposits\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                            valid=False,\n                        )\n                    ],\n                    call_type=Op.DELEGATECALL,\n                ),\n            ],\n            id=\"single_deposit_from_contract_delegatecall\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                            valid=False,\n                        )\n                    ],\n                    call_type=Op.STATICCALL,\n                ),\n            ],\n            id=\"single_deposit_from_contract_staticcall\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                            valid=False,\n                        )\n                    ],\n                    call_type=Op.CALLCODE,\n                ),\n            ],\n            id=\"single_deposit_from_contract_callcode\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                    call_depth=3,\n                ),\n            ],\n            id=\"single_deposit_from_contract_call_depth_3\",\n        ),\n        pytest.param(\n            [\n                DepositContract(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=32_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                    call_depth=1024,\n                    tx_gas_limit=2_500_000_000_000,\n                ),\n            ],\n            id=\"single_deposit_from_contract_call_high_depth\",\n        ),\n        # TODO: Send eth with the transaction to the contract\n    ],\n)\ndef test_deposit(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    blocks: List[Block],\n):\n    \"\"\"\n    Test making a deposit to the beacon chain deposit contract.\n    \"\"\"\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post={},\n        blocks=blocks,\n    )\n
    "},{"location":"tests/prague/eip6110_deposits/test_deposits/#tests.prague.eip6110_deposits.test_deposits.test_deposit_negative","title":"test_deposit_negative(blockchain_test, pre, blocks)","text":"

    Test producing a block with the incorrect deposits in the body of the block, and/or Engine API payload.

    Source code in tests/prague/eip6110_deposits/test_deposits.py
    @pytest.mark.parametrize(\n    \"requests,block_body_override_requests,exception\",\n    [\n        pytest.param(\n            [],\n            [\n                DepositRequest(\n                    pubkey=0x01,\n                    withdrawal_credentials=0x02,\n                    amount=1_000_000_000,\n                    signature=0x03,\n                    index=0x0,\n                ),\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"no_deposits_non_empty_requests_list\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n            ],\n            [],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_deposit_empty_requests_list\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n            ],\n            [\n                DepositRequest(\n                    pubkey=0x02,\n                    withdrawal_credentials=0x02,\n                    amount=1_000_000_000,\n                    signature=0x03,\n                    index=0x0,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_deposit_pubkey_mismatch\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n            ],\n            [\n                DepositRequest(\n                    pubkey=0x01,\n                    withdrawal_credentials=0x03,\n                    amount=1_000_000_000,\n                    signature=0x03,\n                    index=0x0,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_deposit_credentials_mismatch\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n            ],\n            [\n                DepositRequest(\n                    pubkey=0x01,\n                    withdrawal_credentials=0x02,\n                    amount=2_000_000_000,\n                    signature=0x03,\n                    index=0x0,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_deposit_amount_mismatch\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n            ],\n            [\n                DepositRequest(\n                    pubkey=0x01,\n                    withdrawal_credentials=0x02,\n                    amount=1_000_000_000,\n                    signature=0x04,\n                    index=0x0,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_deposit_signature_mismatch\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n            ],\n            [\n                DepositRequest(\n                    pubkey=0x01,\n                    withdrawal_credentials=0x02,\n                    amount=1_000_000_000,\n                    signature=0x03,\n                    index=0x1,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_deposit_index_mismatch\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        ),\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x1,\n                        ),\n                    ],\n                ),\n            ],\n            [\n                DepositRequest(\n                    pubkey=0x01,\n                    withdrawal_credentials=0x02,\n                    amount=1_000_000_000,\n                    signature=0x03,\n                    index=0x1,\n                ),\n                DepositRequest(\n                    pubkey=0x01,\n                    withdrawal_credentials=0x02,\n                    amount=1_000_000_000,\n                    signature=0x03,\n                    index=0x0,\n                ),\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"two_deposits_out_of_order\",\n        ),\n        pytest.param(\n            [\n                DepositTransaction(\n                    requests=[\n                        DepositRequest(\n                            pubkey=0x01,\n                            withdrawal_credentials=0x02,\n                            amount=1_000_000_000,\n                            signature=0x03,\n                            index=0x0,\n                        )\n                    ],\n                ),\n            ],\n            [\n                DepositRequest(\n                    pubkey=0x01,\n                    withdrawal_credentials=0x02,\n                    amount=1_000_000_000,\n                    signature=0x03,\n                    index=0x0,\n                ),\n                DepositRequest(\n                    pubkey=0x01,\n                    withdrawal_credentials=0x02,\n                    amount=1_000_000_000,\n                    signature=0x03,\n                    index=0x0,\n                ),\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_deposit_duplicate_in_requests_list\",\n        ),\n    ],\n)\ndef test_deposit_negative(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    blocks: List[Block],\n):\n    \"\"\"\n    Test producing a block with the incorrect deposits in the body of the block,\n    and/or Engine API payload.\n    \"\"\"\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post={},\n        blocks=blocks,\n    )\n
    "},{"location":"tests/prague/eip6110_deposits/test_deposits/index/test_cases/","title":"Test Deposits - Test Cases","text":"

    Test cases generated from tests/prague/eip6110_deposits/test_deposits.py

    Parametrized test cases generated from the test module tests/prague/eip6110_deposits/test_deposits.py:

    test_deposit[fork_Prague-blockchain_test-single_deposit_from_eoa]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_eoa_huge_amount]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_high_count]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposit_from_different_eoa]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_first_reverts]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_last_reverts]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_first_oog]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_last_oog]\ntest_deposit[fork_Prague-blockchain_test-send_eth_from_eoa]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_contract]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract]\ntest_deposit[fork_Prague-blockchain_test-many_deposits_from_contract]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract_first_reverts]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract_last_reverts]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract_first_oog]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract_last_oog]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract_caller_reverts]\ntest_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract_caller_oog]\ntest_deposit[fork_Prague-blockchain_test-many_deposits_from_contract_oog]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_single_deposit_from_eoa]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_eoa_single_deposit_from_contract]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_between_eoa_deposits]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_eoa_between_contract_deposits]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_delegatecall]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_staticcall]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_callcode]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_call_depth_3]\ntest_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_call_high_depth]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_eoa]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_eoa_huge_amount]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposit_from_same_eoa]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposit_from_same_eoa_high_count]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposit_from_different_eoa]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposit_from_same_eoa_first_reverts]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposit_from_same_eoa_last_reverts]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposit_from_same_eoa_first_oog]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposit_from_same_eoa_last_oog]\ntest_deposit[fork_Prague-blockchain_test_engine-send_eth_from_eoa]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_contract]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposits_from_contract]\ntest_deposit[fork_Prague-blockchain_test_engine-many_deposits_from_contract]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposits_from_contract_first_reverts]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposits_from_contract_last_reverts]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposits_from_contract_first_oog]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposits_from_contract_last_oog]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposits_from_contract_caller_reverts]\ntest_deposit[fork_Prague-blockchain_test_engine-multiple_deposits_from_contract_caller_oog]\ntest_deposit[fork_Prague-blockchain_test_engine-many_deposits_from_contract_oog]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_contract_single_deposit_from_eoa]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_eoa_single_deposit_from_contract]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_contract_between_eoa_deposits]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_eoa_between_contract_deposits]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_contract_delegatecall]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_contract_staticcall]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_contract_callcode]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_contract_call_depth_3]\ntest_deposit[fork_Prague-blockchain_test_engine-single_deposit_from_contract_call_high_depth]\ntest_deposit_negative[fork_Prague-blockchain_test-no_deposits_non_empty_requests_list]\ntest_deposit_negative[fork_Prague-blockchain_test-single_deposit_empty_requests_list]\ntest_deposit_negative[fork_Prague-blockchain_test-single_deposit_pubkey_mismatch]\ntest_deposit_negative[fork_Prague-blockchain_test-single_deposit_credentials_mismatch]\ntest_deposit_negative[fork_Prague-blockchain_test-single_deposit_amount_mismatch]\ntest_deposit_negative[fork_Prague-blockchain_test-single_deposit_signature_mismatch]\ntest_deposit_negative[fork_Prague-blockchain_test-single_deposit_index_mismatch]\ntest_deposit_negative[fork_Prague-blockchain_test-two_deposits_out_of_order]\ntest_deposit_negative[fork_Prague-blockchain_test-single_deposit_duplicate_in_requests_list]\ntest_deposit_negative[fork_Prague-blockchain_test_engine-no_deposits_non_empty_requests_list]\ntest_deposit_negative[fork_Prague-blockchain_test_engine-single_deposit_empty_requests_list]\ntest_deposit_negative[fork_Prague-blockchain_test_engine-single_deposit_pubkey_mismatch]\ntest_deposit_negative[fork_Prague-blockchain_test_engine-single_deposit_credentials_mismatch]\ntest_deposit_negative[fork_Prague-blockchain_test_engine-single_deposit_amount_mismatch]\ntest_deposit_negative[fork_Prague-blockchain_test_engine-single_deposit_signature_mismatch]\ntest_deposit_negative[fork_Prague-blockchain_test_engine-single_deposit_index_mismatch]\ntest_deposit_negative[fork_Prague-blockchain_test_engine-two_deposits_out_of_order]\ntest_deposit_negative[fork_Prague-blockchain_test_engine-single_deposit_duplicate_in_requests_list]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip6110_deposits/test_deposits.py\n
    "},{"location":"tests/prague/eip7002_el_triggerable_withdrawals/","title":"EIP-7002 El Triggerable Withdrawals","text":"

    Documentation for tests/prague/eip7002_el_triggerable_withdrawals.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7002_el_triggerable_withdrawals --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7002_el_triggerable_withdrawals --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Cross-client EIP-7002 Tests

    "},{"location":"tests/prague/eip7002_el_triggerable_withdrawals/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip7002_el_triggerable_withdrawals/spec.py.

    Common procedures to test EIP-7002: Execution layer triggerable withdrawals

    "},{"location":"tests/prague/eip7002_el_triggerable_withdrawals/spec/#tests.prague.eip7002_el_triggerable_withdrawals.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-7002 specifications as defined at https://eips.ethereum.org/EIPS/eip-7002#configuration

    If the parameter is not currently used within the tests, it is commented out.

    Source code in tests/prague/eip7002_el_triggerable_withdrawals/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-7002 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-7002#configuration\n\n    If the parameter is not currently used within the tests, it is commented\n    out.\n    \"\"\"\n\n    WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS = 0x00A3CA265EBCB825B45F985A16CEFB49958CE017\n    SYSTEM_ADDRESS = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE\n\n    EXCESS_WITHDRAWAL_REQUESTS_STORAGE_SLOT = 0\n    WITHDRAWAL_REQUEST_COUNT_STORAGE_SLOT = 1\n    WITHDRAWAL_REQUEST_QUEUE_HEAD_STORAGE_SLOT = (\n        2  # Pointer to head of the withdrawal request message queue\n    )\n    WITHDRAWAL_REQUEST_QUEUE_TAIL_STORAGE_SLOT = (\n        3  # Pointer to the tail of the withdrawal request message queue\n    )\n    WITHDRAWAL_REQUEST_QUEUE_STORAGE_OFFSET = (\n        4  # The start memory slot of the in-state withdrawal request message queue\n    )\n    MAX_WITHDRAWAL_REQUESTS_PER_BLOCK = (\n        16  # Maximum number of withdrawal requests that can be de-queued into a block\n    )\n    TARGET_WITHDRAWAL_REQUESTS_PER_BLOCK = 2\n    MIN_WITHDRAWAL_REQUEST_FEE = 1\n    WITHDRAWAL_REQUEST_FEE_UPDATE_FRACTION = 17\n    EXCESS_RETURN_GAS_STIPEND = 2300\n\n    MAX_AMOUNT = 2**64 - 1\n\n    @staticmethod\n    def fake_exponential(factor: int, numerator: int, denominator: int) -> int:\n        \"\"\"\n        Used to calculate the withdrawal request fee.\n        \"\"\"\n        i = 1\n        output = 0\n        numerator_accumulator = factor * denominator\n        while numerator_accumulator > 0:\n            output += numerator_accumulator\n            numerator_accumulator = (numerator_accumulator * numerator) // (denominator * i)\n            i += 1\n        return output // denominator\n\n    @staticmethod\n    def get_fee(excess_withdrawal_requests: int) -> int:\n        \"\"\"\n        Calculate the fee for the excess withdrawal requests.\n        \"\"\"\n        return Spec.fake_exponential(\n            Spec.MIN_WITHDRAWAL_REQUEST_FEE,\n            excess_withdrawal_requests,\n            Spec.WITHDRAWAL_REQUEST_FEE_UPDATE_FRACTION,\n        )\n\n    @staticmethod\n    def get_excess_withdrawal_requests(previous_excess: int, count: int) -> int:\n        \"\"\"\n        Calculate the new excess withdrawal requests.\n        \"\"\"\n        if previous_excess + count > Spec.TARGET_WITHDRAWAL_REQUESTS_PER_BLOCK:\n            return previous_excess + count - Spec.TARGET_WITHDRAWAL_REQUESTS_PER_BLOCK\n        return 0\n
    "},{"location":"tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests/","title":"Test Withdrawal Requests","text":"

    Documentation for tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-7002: Execution layer triggerable withdrawals

    Test execution layer triggered exits EIP-7002: Execution layer triggerable withdrawals

    "},{"location":"tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests/#tests.prague.eip7002_el_triggerable_withdrawals.test_withdrawal_requests.test_withdrawal_requests","title":"test_withdrawal_requests(blockchain_test, blocks, pre)","text":"

    Test making a withdrawal request to the beacon chain.

    Source code in tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py
    @pytest.mark.parametrize(\n    \"blocks_withdrawal_requests\",\n    [\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_single_withdrawal_request_from_eoa\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=0,\n                                valid=False,\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_single_withdrawal_request_from_eoa_insufficient_fee\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                                calldata_modifier=lambda x: x[:-1],\n                                valid=False,\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_single_withdrawal_request_from_eoa_input_too_short\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                                calldata_modifier=lambda x: x + b\"\\x00\",\n                                valid=False,\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_single_withdrawal_request_from_eoa_input_too_long\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                            ),\n                            WithdrawalRequest(\n                                validator_pubkey=0x02,\n                                amount=Spec.MAX_AMOUNT - 1,\n                                fee=Spec.get_fee(0),\n                            ),\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_request_from_same_eoa\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                            )\n                        ],\n                    ),\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x02,\n                                amount=Spec.MAX_AMOUNT - 1,\n                                fee=Spec.get_fee(0),\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_request_from_different_eoa\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=i + 1,\n                                amount=0 if i % 2 == 0 else Spec.MAX_AMOUNT,\n                                fee=Spec.get_fee(0),\n                            )\n                            for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK)\n                        ],\n                    )\n                ],\n            ],\n            id=\"single_block_max_withdrawal_requests_from_eoa\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=0,\n                            ),\n                            WithdrawalRequest(\n                                validator_pubkey=0x02,\n                                amount=Spec.MAX_AMOUNT - 1,\n                                fee=Spec.get_fee(0),\n                            ),\n                        ]\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_request_first_reverts\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                            ),\n                            WithdrawalRequest(\n                                validator_pubkey=0x02,\n                                amount=Spec.MAX_AMOUNT - 1,\n                                fee=0,\n                            ),\n                        ]\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_request_last_reverts\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                                # Value obtained from trace minus one\n                                gas_limit=114_247 - 1,\n                                valid=False,\n                            ),\n                            WithdrawalRequest(\n                                validator_pubkey=0x02,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                            ),\n                        ]\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_request_first_oog\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                            ),\n                            WithdrawalRequest(\n                                validator_pubkey=0x02,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                                # Value obtained from trace minus one\n                                gas_limit=80_047 - 1,\n                                valid=False,\n                            ),\n                        ]\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_request_last_oog\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestTransaction(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=i + 1,\n                                amount=0 if i % 2 == 0 else Spec.MAX_AMOUNT,\n                                fee=Spec.get_fee(0),\n                            )\n                            for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK * 2)\n                        ]\n                    )\n                ],\n            ],\n            id=\"multiple_block_above_max_withdrawal_requests_from_eoa\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                            ),\n                        ]\n                    ),\n                ],\n            ],\n            id=\"single_block_single_withdrawal_request_from_contract\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=i + 1,\n                                amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0,\n                                fee=Spec.get_fee(0),\n                            )\n                            for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK)\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_requests_from_contract\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=1,\n                                amount=Spec.MAX_AMOUNT,\n                                fee=0,\n                            )\n                        ]\n                        + [\n                            WithdrawalRequest(\n                                validator_pubkey=i + 1,\n                                amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0,\n                                fee=Spec.get_fee(0),\n                            )\n                            for i in range(1, Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK)\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_requests_from_contract_first_reverts\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=i + 1,\n                                amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0,\n                                fee=Spec.get_fee(0),\n                            )\n                            for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK - 1)\n                        ]\n                        + [\n                            WithdrawalRequest(\n                                validator_pubkey=Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK,\n                                amount=Spec.MAX_AMOUNT - 1\n                                if (Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK - 1) % 2 == 0\n                                else 0,\n                                fee=0,\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_requests_from_contract_last_reverts\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=1,\n                                amount=Spec.MAX_AMOUNT - 1,\n                                gas_limit=100,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                        ]\n                        + [\n                            WithdrawalRequest(\n                                validator_pubkey=i + 1,\n                                amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0,\n                                gas_limit=1_000_000,\n                                fee=Spec.get_fee(0),\n                                valid=True,\n                            )\n                            for i in range(1, Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK)\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_requests_from_contract_first_oog\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=i + 1,\n                                amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0,\n                                fee=Spec.get_fee(0),\n                                gas_limit=1_000_000,\n                                valid=True,\n                            )\n                            for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK)\n                        ]\n                        + [\n                            WithdrawalRequest(\n                                validator_pubkey=Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK,\n                                amount=Spec.MAX_AMOUNT - 1,\n                                gas_limit=100,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_requests_from_contract_last_oog\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=i + 1,\n                                amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                            for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK)\n                        ],\n                        extra_code=Op.REVERT(0, 0),\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_requests_from_contract_caller_reverts\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=i + 1,\n                                amount=Spec.MAX_AMOUNT - 1 if i % 2 == 0 else 0,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                            for i in range(Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK)\n                        ],\n                        extra_code=Macros.OOG(),\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_withdrawal_requests_from_contract_caller_oog\",\n        ),\n        pytest.param(\n            # Test the first 50 fee increments\n            get_n_fee_increment_blocks(50),\n            id=\"multiple_block_fee_increments\",\n        ),\n        pytest.param(\n            [\n                [\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                        ],\n                        call_type=Op.DELEGATECALL,\n                    ),\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                        ],\n                        call_type=Op.STATICCALL,\n                    ),\n                    WithdrawalRequestContract(\n                        requests=[\n                            WithdrawalRequest(\n                                validator_pubkey=0x01,\n                                amount=0,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                        ],\n                        call_type=Op.CALLCODE,\n                    ),\n                ],\n            ],\n            id=\"single_block_single_withdrawal_request_delegatecall_staticcall_callcode\",\n        ),\n    ],\n)\ndef test_withdrawal_requests(\n    blockchain_test: BlockchainTestFiller,\n    blocks: List[Block],\n    pre: Alloc,\n):\n    \"\"\"\n    Test making a withdrawal request to the beacon chain.\n    \"\"\"\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post={},\n        blocks=blocks,\n    )\n
    "},{"location":"tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests/#tests.prague.eip7002_el_triggerable_withdrawals.test_withdrawal_requests.test_withdrawal_requests_negative","title":"test_withdrawal_requests_negative(pre, blockchain_test, requests, block_body_override_requests, exception)","text":"

    Test blocks where the requests list and the actual withdrawal requests that happened in the block's transactions do not match.

    Source code in tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py
    @pytest.mark.parametrize(\n    \"requests,block_body_override_requests,exception\",\n    [\n        pytest.param(\n            [],\n            [\n                WithdrawalRequest(\n                    validator_pubkey=0x01,\n                    amount=0,\n                    source_address=Address(0),\n                ),\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"no_withdrawals_non_empty_requests_list\",\n        ),\n        pytest.param(\n            [\n                WithdrawalRequestTransaction(\n                    requests=[\n                        WithdrawalRequest(\n                            validator_pubkey=0x01,\n                            amount=0,\n                            fee=Spec.get_fee(0),\n                        ),\n                    ]\n                ),\n            ],\n            [],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_withdrawal_request_empty_requests_list\",\n        ),\n        pytest.param(\n            [\n                WithdrawalRequestTransaction(\n                    requests=[\n                        WithdrawalRequest(\n                            validator_pubkey=0x01,\n                            amount=0,\n                            fee=Spec.get_fee(0),\n                        ),\n                    ]\n                ),\n            ],\n            [\n                WithdrawalRequest(\n                    validator_pubkey=0x02,\n                    amount=0,\n                    source_address=TestAddress,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_withdrawal_request_public_key_mismatch\",\n        ),\n        pytest.param(\n            [\n                WithdrawalRequestTransaction(\n                    requests=[\n                        WithdrawalRequest(\n                            validator_pubkey=0x01,\n                            amount=0,\n                            fee=Spec.get_fee(0),\n                        )\n                    ],\n                ),\n            ],\n            [\n                WithdrawalRequest(\n                    validator_pubkey=0x01,\n                    amount=1,\n                    source_address=TestAddress,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_withdrawal_request_amount_mismatch\",\n        ),\n        pytest.param(\n            [\n                WithdrawalRequestTransaction(\n                    requests=[\n                        WithdrawalRequest(\n                            validator_pubkey=0x01,\n                            amount=0,\n                            fee=Spec.get_fee(0),\n                        )\n                    ],\n                ),\n            ],\n            [\n                WithdrawalRequest(\n                    validator_pubkey=0x01,\n                    amount=0,\n                    source_address=TestAddress2,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_withdrawal_request_source_address_mismatch\",\n        ),\n        pytest.param(\n            [\n                WithdrawalRequestTransaction(\n                    requests=[\n                        WithdrawalRequest(\n                            validator_pubkey=0x01,\n                            amount=0,\n                            fee=Spec.get_fee(0),\n                        ),\n                        WithdrawalRequest(\n                            validator_pubkey=0x02,\n                            amount=0,\n                            fee=Spec.get_fee(0),\n                        ),\n                    ],\n                ),\n            ],\n            [\n                WithdrawalRequest(\n                    validator_pubkey=0x02,\n                    amount=0,\n                    source_address=TestAddress,\n                ),\n                WithdrawalRequest(\n                    validator_pubkey=0x01,\n                    amount=0,\n                    source_address=TestAddress,\n                ),\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"two_withdrawal_requests_out_of_order\",\n        ),\n        pytest.param(\n            [\n                WithdrawalRequestTransaction(\n                    requests=[\n                        WithdrawalRequest(\n                            validator_pubkey=0x01,\n                            amount=0,\n                            fee=Spec.get_fee(0),\n                        )\n                    ],\n                ),\n            ],\n            [\n                WithdrawalRequest(\n                    validator_pubkey=0x01,\n                    amount=0,\n                    source_address=TestAddress,\n                ),\n                WithdrawalRequest(\n                    validator_pubkey=0x01,\n                    amount=0,\n                    source_address=TestAddress,\n                ),\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_withdrawal_requests_duplicate_in_requests_list\",\n        ),\n    ],\n)\ndef test_withdrawal_requests_negative(\n    pre: Alloc,\n    blockchain_test: BlockchainTestFiller,\n    requests: List[WithdrawalRequestInteractionBase],\n    block_body_override_requests: List[WithdrawalRequest],\n    exception: BlockException,\n):\n    \"\"\"\n    Test blocks where the requests list and the actual withdrawal requests that happened in the\n    block's transactions do not match.\n    \"\"\"\n    for d in requests:\n        d.update_pre(pre)\n\n    # No previous block so fee is the base\n    fee = 1\n    current_block_requests = []\n    for w in requests:\n        current_block_requests += w.valid_requests(fee)\n    included_requests = current_block_requests[: Spec.MAX_WITHDRAWAL_REQUESTS_PER_BLOCK]\n\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post={},\n        blocks=[\n            Block(\n                txs=sum((r.transactions() for r in requests), []),\n                header_verify=Header(\n                    requests_root=included_requests,\n                ),\n                requests=block_body_override_requests,\n                exception=exception,\n            )\n        ],\n    )\n
    "},{"location":"tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests/index/test_cases/","title":"Test Withdrawal Requests - Test Cases","text":"

    Test cases generated from tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py

    Parametrized test cases generated from the test module tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py:

    test_withdrawal_requests[fork_Prague-blockchain_test-single_block_single_withdrawal_request_from_eoa]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_single_withdrawal_request_from_eoa_insufficient_fee]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_single_withdrawal_request_from_eoa_input_too_short]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_single_withdrawal_request_from_eoa_input_too_long]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_request_from_same_eoa]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_request_from_different_eoa]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_max_withdrawal_requests_from_eoa]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_request_first_reverts]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_request_last_reverts]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_request_first_oog]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_request_last_oog]\ntest_withdrawal_requests[fork_Prague-blockchain_test-multiple_block_above_max_withdrawal_requests_from_eoa]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_single_withdrawal_request_from_contract]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_requests_from_contract]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_requests_from_contract_first_reverts]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_requests_from_contract_last_reverts]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_requests_from_contract_first_oog]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_requests_from_contract_last_oog]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_requests_from_contract_caller_reverts]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_requests_from_contract_caller_oog]\ntest_withdrawal_requests[fork_Prague-blockchain_test-multiple_block_fee_increments]\ntest_withdrawal_requests[fork_Prague-blockchain_test-single_block_single_withdrawal_request_delegatecall_staticcall_callcode]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_single_withdrawal_request_from_eoa]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_single_withdrawal_request_from_eoa_insufficient_fee]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_single_withdrawal_request_from_eoa_input_too_short]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_single_withdrawal_request_from_eoa_input_too_long]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_request_from_same_eoa]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_request_from_different_eoa]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_max_withdrawal_requests_from_eoa]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_request_first_reverts]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_request_last_reverts]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_request_first_oog]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_request_last_oog]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-multiple_block_above_max_withdrawal_requests_from_eoa]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_single_withdrawal_request_from_contract]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_requests_from_contract]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_requests_from_contract_first_reverts]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_requests_from_contract_last_reverts]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_requests_from_contract_first_oog]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_requests_from_contract_last_oog]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_requests_from_contract_caller_reverts]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_multiple_withdrawal_requests_from_contract_caller_oog]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-multiple_block_fee_increments]\ntest_withdrawal_requests[fork_Prague-blockchain_test_engine-single_block_single_withdrawal_request_delegatecall_staticcall_callcode]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test-no_withdrawals_non_empty_requests_list]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test-single_withdrawal_request_empty_requests_list]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test-single_withdrawal_request_public_key_mismatch]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test-single_withdrawal_request_amount_mismatch]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test-single_withdrawal_request_source_address_mismatch]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test-two_withdrawal_requests_out_of_order]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test-single_withdrawal_requests_duplicate_in_requests_list]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test_engine-no_withdrawals_non_empty_requests_list]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test_engine-single_withdrawal_request_empty_requests_list]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test_engine-single_withdrawal_request_public_key_mismatch]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test_engine-single_withdrawal_request_amount_mismatch]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test_engine-single_withdrawal_request_source_address_mismatch]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test_engine-two_withdrawal_requests_out_of_order]\ntest_withdrawal_requests_negative[fork_Prague-blockchain_test_engine-single_withdrawal_requests_duplicate_in_requests_list]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py\n
    "},{"location":"tests/prague/eip7251_consolidations/","title":"EIP-7251 Consolidations","text":"

    Documentation for tests/prague/eip7251_consolidations.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7251_consolidations --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7251_consolidations --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Cross-client EIP-7251 Tests

    "},{"location":"tests/prague/eip7251_consolidations/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip7251_consolidations/spec.py.

    Defines EIP-7251 specification constants and functions.

    "},{"location":"tests/prague/eip7251_consolidations/spec/#tests.prague.eip7251_consolidations.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-7251 specifications as defined at https://eips.ethereum.org/EIPS/eip-7251#execution-layer

    Source code in tests/prague/eip7251_consolidations/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-7251 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-7251#execution-layer\n    \"\"\"\n\n    CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS = 0x00B42DBF2194E931E80326D950320F7D9DBEAC02\n    SYSTEM_ADDRESS = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE\n\n    EXCESS_CONSOLIDATION_REQUESTS_STORAGE_SLOT = 0\n    CONSOLIDATION_REQUEST_COUNT_STORAGE_SLOT = 1\n    CONSOLIDATION_REQUEST_QUEUE_HEAD_STORAGE_SLOT = (\n        2  # Pointer to head of the consolidation request message queue\n    )\n    CONSOLIDATION_REQUEST_QUEUE_TAIL_STORAGE_SLOT = (\n        3  # Pointer to the tail of the consolidation request message queue\n    )\n    CONSOLIDATION_REQUEST_QUEUE_STORAGE_OFFSET = (\n        4  # The start memory slot of the in-state consolidation request message queue\n    )\n    MAX_CONSOLIDATION_REQUESTS_PER_BLOCK = (\n        1  # Maximum number of consolidation requests that can be de-queued into a block\n    )\n    TARGET_CONSOLIDATION_REQUESTS_PER_BLOCK = 1\n    MIN_CONSOLIDATION_REQUEST_FEE = 1\n    CONSOLIDATION_REQUEST_FEE_UPDATE_FRACTION = 17\n    EXCESS_INHIBITOR = 1181\n\n    @staticmethod\n    def fake_exponential(factor: int, numerator: int, denominator: int) -> int:\n        \"\"\"\n        Used to calculate the consolidation request fee.\n        \"\"\"\n        i = 1\n        output = 0\n        numerator_accumulator = factor * denominator\n        while numerator_accumulator > 0:\n            output += numerator_accumulator\n            numerator_accumulator = (numerator_accumulator * numerator) // (denominator * i)\n            i += 1\n        return output // denominator\n\n    @staticmethod\n    def get_fee(excess_consolidation_requests: int) -> int:\n        \"\"\"\n        Calculate the fee for the excess consolidation requests.\n        \"\"\"\n        return Spec.fake_exponential(\n            Spec.MIN_CONSOLIDATION_REQUEST_FEE,\n            excess_consolidation_requests,\n            Spec.CONSOLIDATION_REQUEST_FEE_UPDATE_FRACTION,\n        )\n\n    @staticmethod\n    def get_excess_consolidation_requests(previous_excess: int, count: int) -> int:\n        \"\"\"\n        Calculate the new excess consolidation requests.\n        \"\"\"\n        if previous_excess + count > Spec.TARGET_CONSOLIDATION_REQUESTS_PER_BLOCK:\n            return previous_excess + count - Spec.TARGET_CONSOLIDATION_REQUESTS_PER_BLOCK\n        return 0\n
    "},{"location":"tests/prague/eip7251_consolidations/test_consolidations/","title":"Test Consolidations","text":"

    Documentation for tests/prague/eip7251_consolidations/test_consolidations.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7251_consolidations/test_consolidations.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7251_consolidations/test_consolidations.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-7251: Increase the MAX_EFFECTIVE_BALANCE

    Test execution layer triggered consolidations EIP-7251: Increase the MAX_EFFECTIVE_BALANCE

    "},{"location":"tests/prague/eip7251_consolidations/test_consolidations/#tests.prague.eip7251_consolidations.test_consolidations.test_consolidation_requests","title":"test_consolidation_requests(blockchain_test, blocks, pre)","text":"

    Test making a consolidation request to the beacon chain.

    Source code in tests/prague/eip7251_consolidations/test_consolidations.py
    @pytest.mark.parametrize(\n    \"blocks_consolidation_requests\",\n    [\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_single_consolidation_request_from_eoa\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x01,\n                                fee=Spec.get_fee(0),\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_single_consolidation_request_from_eoa_equal_pubkeys\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=-1,\n                                target_pubkey=-2,\n                                fee=Spec.get_fee(0),\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_single_consolidation_request_from_eoa_max_pubkeys\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=0,\n                                valid=False,\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_single_consolidation_request_from_eoa_insufficient_fee\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                                calldata_modifier=lambda x: x[:-1],\n                                valid=False,\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_single_consolidation_request_from_eoa_input_too_short\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                                calldata_modifier=lambda x: x + b\"\\x00\",\n                                valid=False,\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_single_consolidation_request_from_eoa_input_too_long\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                            ),\n                            ConsolidationRequest(\n                                source_pubkey=0x03,\n                                target_pubkey=0x04,\n                                fee=Spec.get_fee(0),\n                            ),\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_request_from_same_eoa\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                            )\n                        ],\n                    ),\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x03,\n                                target_pubkey=0x04,\n                                fee=Spec.get_fee(0),\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_request_from_different_eoa\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=i * 2,\n                                target_pubkey=i * 2 + 1,\n                                fee=Spec.get_fee(0),\n                            )\n                            for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK)\n                        ],\n                    )\n                ],\n            ],\n            marks=pytest.mark.skip(\n                reason=\"duplicate test due to MAX_CONSOLIDATION_REQUESTS_PER_BLOCK==1\"\n            ),\n            id=\"single_block_max_consolidation_requests_from_eoa\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=0,\n                            ),\n                            ConsolidationRequest(\n                                source_pubkey=0x03,\n                                target_pubkey=0x04,\n                                fee=Spec.get_fee(0),\n                            ),\n                        ]\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_request_first_reverts\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                            ),\n                            ConsolidationRequest(\n                                source_pubkey=0x03,\n                                target_pubkey=0x04,\n                                fee=0,\n                            ),\n                        ]\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_request_last_reverts\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                                gas_limit=136_534 - 1,\n                                valid=False,\n                            ),\n                            ConsolidationRequest(\n                                source_pubkey=0x03,\n                                target_pubkey=0x04,\n                                fee=Spec.get_fee(0),\n                            ),\n                        ]\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_request_first_oog\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                            ),\n                            ConsolidationRequest(\n                                source_pubkey=0x03,\n                                target_pubkey=0x04,\n                                fee=Spec.get_fee(0),\n                                gas_limit=102_334 - 1,\n                                valid=False,\n                            ),\n                        ]\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_request_last_oog\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestTransaction(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=i * 2,\n                                target_pubkey=i * 2 + 1,\n                                fee=Spec.get_fee(0),\n                            )\n                            for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5)\n                        ]\n                    )\n                ],\n            ],\n            id=\"multiple_block_above_max_consolidation_requests_from_eoa\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                            ),\n                        ]\n                    ),\n                ],\n            ],\n            id=\"single_block_single_consolidation_request_from_contract\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=i * 2,\n                                target_pubkey=i * 2 + 1,\n                                fee=Spec.get_fee(0),\n                            )\n                            for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5)\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_requests_from_contract\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x00,\n                                target_pubkey=0x01,\n                                fee=0,\n                            )\n                        ]\n                        + [\n                            ConsolidationRequest(\n                                source_pubkey=i * 2,\n                                target_pubkey=i * 2 + 1,\n                                fee=Spec.get_fee(0),\n                            )\n                            for i in range(1, Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5)\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_requests_from_contract_first_reverts\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=i * 2,\n                                target_pubkey=i * 2 + 1,\n                                fee=Spec.get_fee(0),\n                            )\n                            for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5)\n                        ]\n                        + [\n                            ConsolidationRequest(\n                                source_pubkey=-1,\n                                target_pubkey=-2,\n                                fee=0,\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_requests_from_contract_last_reverts\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=-1,\n                                target_pubkey=-2,\n                                gas_limit=100,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                        ]\n                        + [\n                            ConsolidationRequest(\n                                source_pubkey=i * 2,\n                                target_pubkey=i * 2 + 1,\n                                gas_limit=1_000_000,\n                                fee=Spec.get_fee(0),\n                                valid=True,\n                            )\n                            for i in range(1, Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5)\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_requests_from_contract_first_oog\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=i * 2,\n                                target_pubkey=i * 2 + 1,\n                                fee=Spec.get_fee(0),\n                                gas_limit=1_000_000,\n                                valid=True,\n                            )\n                            for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5)\n                        ]\n                        + [\n                            ConsolidationRequest(\n                                source_pubkey=-1,\n                                target_pubkey=-2,\n                                gas_limit=100,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                        ],\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_requests_from_contract_last_oog\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=i * 2,\n                                target_pubkey=i * 2 + 1,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                            for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5)\n                        ],\n                        extra_code=Op.REVERT(0, 0),\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_requests_from_contract_caller_reverts\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=i * 2,\n                                target_pubkey=i * 2 + 1,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                            for i in range(Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK * 5)\n                        ],\n                        extra_code=Macros.OOG(),\n                    ),\n                ],\n            ],\n            id=\"single_block_multiple_consolidation_requests_from_contract_caller_oog\",\n        ),\n        pytest.param(\n            # Test the first 50 fee increments\n            get_n_fee_increment_blocks(50),\n            id=\"multiple_block_fee_increments\",\n        ),\n        pytest.param(\n            [\n                [\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                        ],\n                        call_type=Op.DELEGATECALL,\n                    ),\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                        ],\n                        call_type=Op.STATICCALL,\n                    ),\n                    ConsolidationRequestContract(\n                        requests=[\n                            ConsolidationRequest(\n                                source_pubkey=0x01,\n                                target_pubkey=0x02,\n                                fee=Spec.get_fee(0),\n                                valid=False,\n                            )\n                        ],\n                        call_type=Op.CALLCODE,\n                    ),\n                ],\n            ],\n            id=\"single_block_single_consolidation_request_delegatecall_staticcall_callcode\",\n        ),\n    ],\n)\ndef test_consolidation_requests(\n    blockchain_test: BlockchainTestFiller,\n    blocks: List[Block],\n    pre: Alloc,\n):\n    \"\"\"\n    Test making a consolidation request to the beacon chain.\n    \"\"\"\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post={},\n        blocks=blocks,\n    )\n
    "},{"location":"tests/prague/eip7251_consolidations/test_consolidations/#tests.prague.eip7251_consolidations.test_consolidations.test_consolidation_requests_negative","title":"test_consolidation_requests_negative(pre, blockchain_test, requests, block_body_override_requests, exception)","text":"

    Test blocks where the requests list and the actual consolidation requests that happened in the block's transactions do not match.

    Source code in tests/prague/eip7251_consolidations/test_consolidations.py
    @pytest.mark.parametrize(\n    \"requests,block_body_override_requests,exception\",\n    [\n        pytest.param(\n            [],\n            [\n                ConsolidationRequest(\n                    source_pubkey=0x01,\n                    target_pubkey=0x02,\n                    source_address=Address(0),\n                ),\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"no_consolidations_non_empty_requests_list\",\n        ),\n        pytest.param(\n            [\n                ConsolidationRequestTransaction(\n                    requests=[\n                        ConsolidationRequest(\n                            source_pubkey=0x01,\n                            target_pubkey=0x02,\n                            fee=Spec.get_fee(0),\n                        ),\n                    ]\n                ),\n            ],\n            [],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_consolidation_request_empty_requests_list\",\n        ),\n        pytest.param(\n            [\n                ConsolidationRequestTransaction(\n                    requests=[\n                        ConsolidationRequest(\n                            source_pubkey=0x01,\n                            target_pubkey=0x02,\n                            fee=Spec.get_fee(0),\n                        ),\n                    ]\n                ),\n            ],\n            [\n                ConsolidationRequest(\n                    source_pubkey=0x00,\n                    target_pubkey=0x02,\n                    source_address=TestAddress,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_consolidation_request_source_public_key_mismatch\",\n        ),\n        pytest.param(\n            [\n                ConsolidationRequestTransaction(\n                    requests=[\n                        ConsolidationRequest(\n                            source_pubkey=0x01,\n                            target_pubkey=0x02,\n                            fee=Spec.get_fee(0),\n                        ),\n                    ]\n                ),\n            ],\n            [\n                ConsolidationRequest(\n                    source_pubkey=0x01,\n                    target_pubkey=0x00,\n                    source_address=TestAddress,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_consolidation_request_target_public_key_mismatch\",\n        ),\n        pytest.param(\n            [\n                ConsolidationRequestTransaction(\n                    requests=[\n                        ConsolidationRequest(\n                            source_pubkey=0x01,\n                            target_pubkey=0x02,\n                            fee=Spec.get_fee(0),\n                        ),\n                    ]\n                ),\n            ],\n            [\n                ConsolidationRequest(\n                    source_pubkey=0x02,\n                    target_pubkey=0x01,\n                    source_address=TestAddress,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_consolidation_request_pubkeys_swapped\",\n        ),\n        pytest.param(\n            [\n                ConsolidationRequestTransaction(\n                    requests=[\n                        ConsolidationRequest(\n                            source_pubkey=0x01,\n                            target_pubkey=0x02,\n                            fee=Spec.get_fee(0),\n                        )\n                    ],\n                ),\n            ],\n            [\n                ConsolidationRequest(\n                    source_pubkey=0x01,\n                    target_pubkey=0x02,\n                    source_address=TestAddress2,\n                )\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_consolidation_request_source_address_mismatch\",\n        ),\n        pytest.param(\n            [\n                ConsolidationRequestTransaction(\n                    requests=[\n                        ConsolidationRequest(\n                            source_pubkey=0x01,\n                            target_pubkey=0x02,\n                            fee=Spec.get_fee(0),\n                        ),\n                        ConsolidationRequest(\n                            source_pubkey=0x03,\n                            target_pubkey=0x04,\n                            fee=Spec.get_fee(0),\n                        ),\n                    ],\n                ),\n            ],\n            [\n                ConsolidationRequest(\n                    source_pubkey=0x03,\n                    target_pubkey=0x04,\n                    source_address=TestAddress,\n                ),\n                ConsolidationRequest(\n                    source_pubkey=0x01,\n                    target_pubkey=0x02,\n                    source_address=TestAddress,\n                ),\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"two_consolidation_requests_out_of_order\",\n        ),\n        pytest.param(\n            [\n                ConsolidationRequestTransaction(\n                    requests=[\n                        ConsolidationRequest(\n                            source_pubkey=0x01,\n                            target_pubkey=0x02,\n                            fee=Spec.get_fee(0),\n                        )\n                    ],\n                ),\n            ],\n            [\n                ConsolidationRequest(\n                    source_pubkey=0x01,\n                    target_pubkey=0x02,\n                    source_address=TestAddress,\n                ),\n                ConsolidationRequest(\n                    source_pubkey=0x01,\n                    target_pubkey=0x02,\n                    source_address=TestAddress,\n                ),\n            ],\n            BlockException.INVALID_REQUESTS,\n            id=\"single_consolidation_requests_duplicate_in_requests_list\",\n        ),\n    ],\n)\ndef test_consolidation_requests_negative(\n    pre: Alloc,\n    blockchain_test: BlockchainTestFiller,\n    requests: List[ConsolidationRequestInteractionBase],\n    block_body_override_requests: List[ConsolidationRequest],\n    exception: BlockException,\n):\n    \"\"\"\n    Test blocks where the requests list and the actual consolidation requests that happened in the\n    block's transactions do not match.\n    \"\"\"\n    for d in requests:\n        d.update_pre(pre)\n\n    # No previous block so fee is the base\n    fee = 1\n    current_block_requests = []\n    for w in requests:\n        current_block_requests += w.valid_requests(fee)\n    included_requests = current_block_requests[: Spec.MAX_CONSOLIDATION_REQUESTS_PER_BLOCK]\n\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post={},\n        blocks=[\n            Block(\n                txs=sum((r.transactions() for r in requests), []),\n                header_verify=Header(\n                    requests_root=included_requests,\n                ),\n                requests=block_body_override_requests,\n                exception=exception,\n            )\n        ],\n    )\n
    "},{"location":"tests/prague/eip7251_consolidations/test_consolidations/index/test_cases/","title":"Test Consolidations - Test Cases","text":"

    Test cases generated from tests/prague/eip7251_consolidations/test_consolidations.py

    Parametrized test cases generated from the test module tests/prague/eip7251_consolidations/test_consolidations.py:

    test_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_eoa]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_eoa_equal_pubkeys]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_eoa_max_pubkeys]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_eoa_insufficient_fee]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_eoa_input_too_short]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_eoa_input_too_long]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_request_from_same_eoa]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_request_from_different_eoa]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_max_consolidation_requests_from_eoa]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_request_first_reverts]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_request_last_reverts]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_request_first_oog]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_request_last_oog]\ntest_consolidation_requests[fork_Prague-blockchain_test-multiple_block_above_max_consolidation_requests_from_eoa]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_contract]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_requests_from_contract]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_requests_from_contract_first_reverts]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_requests_from_contract_last_reverts]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_requests_from_contract_first_oog]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_requests_from_contract_last_oog]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_requests_from_contract_caller_reverts]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_requests_from_contract_caller_oog]\ntest_consolidation_requests[fork_Prague-blockchain_test-multiple_block_fee_increments]\ntest_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_delegatecall_staticcall_callcode]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_single_consolidation_request_from_eoa]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_single_consolidation_request_from_eoa_equal_pubkeys]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_single_consolidation_request_from_eoa_max_pubkeys]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_single_consolidation_request_from_eoa_insufficient_fee]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_single_consolidation_request_from_eoa_input_too_short]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_single_consolidation_request_from_eoa_input_too_long]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_request_from_same_eoa]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_request_from_different_eoa]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_max_consolidation_requests_from_eoa]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_request_first_reverts]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_request_last_reverts]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_request_first_oog]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_request_last_oog]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-multiple_block_above_max_consolidation_requests_from_eoa]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_single_consolidation_request_from_contract]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_requests_from_contract]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_requests_from_contract_first_reverts]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_requests_from_contract_last_reverts]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_requests_from_contract_first_oog]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_requests_from_contract_last_oog]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_requests_from_contract_caller_reverts]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_multiple_consolidation_requests_from_contract_caller_oog]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-multiple_block_fee_increments]\ntest_consolidation_requests[fork_Prague-blockchain_test_engine-single_block_single_consolidation_request_delegatecall_staticcall_callcode]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test-no_consolidations_non_empty_requests_list]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test-single_consolidation_request_empty_requests_list]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test-single_consolidation_request_source_public_key_mismatch]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test-single_consolidation_request_target_public_key_mismatch]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test-single_consolidation_request_pubkeys_swapped]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test-single_consolidation_request_source_address_mismatch]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test-two_consolidation_requests_out_of_order]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test-single_consolidation_requests_duplicate_in_requests_list]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test_engine-no_consolidations_non_empty_requests_list]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test_engine-single_consolidation_request_empty_requests_list]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test_engine-single_consolidation_request_source_public_key_mismatch]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test_engine-single_consolidation_request_target_public_key_mismatch]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test_engine-single_consolidation_request_pubkeys_swapped]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test_engine-single_consolidation_request_source_address_mismatch]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test_engine-two_consolidation_requests_out_of_order]\ntest_consolidation_requests_negative[fork_Prague-blockchain_test_engine-single_consolidation_requests_duplicate_in_requests_list]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip7251_consolidations/test_consolidations.py\n
    "},{"location":"tests/prague/eip7685_general_purpose_el_requests/","title":"EIP-7685 General Purpose El Requests","text":"

    Documentation for tests/prague/eip7685_general_purpose_el_requests.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7685_general_purpose_el_requests --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7685_general_purpose_el_requests --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Cross-client EIP-7685 Tests

    "},{"location":"tests/prague/eip7685_general_purpose_el_requests/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip7685_general_purpose_el_requests/spec.py.

    Common procedures to test EIP-7685: General purpose execution layer requests

    "},{"location":"tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations/","title":"Test Deposits Withdrawals Consolidations","text":"

    Documentation for tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-7685: General purpose execution layer requests

    Cross testing for withdrawal and deposit request for EIP-7685: General purpose execution layer requests

    "},{"location":"tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations/#tests.prague.eip7685_general_purpose_el_requests.test_deposits_withdrawals_consolidations.test_valid_deposit_withdrawal_consolidation_requests","title":"test_valid_deposit_withdrawal_consolidation_requests(blockchain_test, pre, blocks)","text":"

    Test making a deposit to the beacon chain deposit contract and a withdrawal in the same block.

    Source code in tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py
    @pytest.mark.parametrize(\n    \"requests\",\n    [\n        *get_eoa_permutations(),\n        *get_contract_permutations(),\n        pytest.param(\n            [\n                single_deposit_from_eoa(0),\n                single_withdrawal_from_eoa(0),\n                single_deposit_from_contract(1),\n            ],\n            id=\"deposit_from_eoa+withdrawal_from_eoa+deposit_from_contract\",\n        ),\n        pytest.param(\n            [\n                single_withdrawal_from_eoa(0),\n                single_deposit_from_eoa(0),\n                single_withdrawal_from_contract(1),\n            ],\n            id=\"withdrawal_from_eoa+deposit_from_eoa+withdrawal_from_contract\",\n        ),\n        pytest.param(\n            [\n                single_deposit_from_eoa(0),\n                single_consolidation_from_eoa(0),\n                single_deposit_from_contract(1),\n            ],\n            id=\"deposit_from_eoa+consolidation_from_eoa+deposit_from_contract\",\n        ),\n        pytest.param(\n            [\n                single_consolidation_from_eoa(0),\n                single_deposit_from_eoa(0),\n                single_consolidation_from_contract(1),\n            ],\n            marks=pytest.mark.skip(\"Only one consolidation request is allowed per block\"),\n            id=\"consolidation_from_eoa+deposit_from_eoa+consolidation_from_contract\",\n        ),\n        pytest.param(\n            [\n                single_consolidation_from_eoa(0),\n                single_withdrawal_from_eoa(0),\n                single_consolidation_from_contract(1),\n            ],\n            marks=pytest.mark.skip(\"Only one consolidation request is allowed per block\"),\n            id=\"consolidation_from_eoa+withdrawal_from_eoa+consolidation_from_contract\",\n        ),\n        pytest.param(\n            [\n                single_withdrawal_from_eoa(0),\n                single_consolidation_from_eoa(0),\n                single_withdrawal_from_contract(1),\n            ],\n            id=\"withdrawal_from_eoa+consolidation_from_eoa+withdrawal_from_contract\",\n        ),\n    ],\n)\ndef test_valid_deposit_withdrawal_consolidation_requests(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    blocks: List[Block],\n):\n    \"\"\"\n    Test making a deposit to the beacon chain deposit contract and a withdrawal in the same block.\n    \"\"\"\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post={},\n        blocks=blocks,\n    )\n
    "},{"location":"tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations/#tests.prague.eip7685_general_purpose_el_requests.test_deposits_withdrawals_consolidations.test_valid_deposit_withdrawal_consolidation_request_from_same_tx","title":"test_valid_deposit_withdrawal_consolidation_request_from_same_tx(blockchain_test, pre, requests)","text":"

    Test making a deposit to the beacon chain deposit contract and a withdrawal in the same tx.

    Source code in tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py
    @pytest.mark.parametrize(\"requests\", [*get_permutations()])\ndef test_valid_deposit_withdrawal_consolidation_request_from_same_tx(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    requests: List[DepositRequest | WithdrawalRequest | ConsolidationRequest],\n):\n    \"\"\"\n    Test making a deposit to the beacon chain deposit contract and a withdrawal in the same tx.\n    \"\"\"\n    withdrawal_request_fee = 1\n    consolidation_request_fee = 1\n\n    calldata = b\"\"\n    contract_code = Bytecode()\n    total_value = 0\n    storage = Storage()\n\n    for request in requests:\n        calldata_start = len(calldata)\n        current_calldata = request.calldata\n        calldata += current_calldata\n\n        contract_code += Op.CALLDATACOPY(0, calldata_start, len(current_calldata))\n\n        call_contract_address = 0\n        value = 0\n        if isinstance(request, DepositRequest):\n            call_contract_address = Spec_EIP6110.DEPOSIT_CONTRACT_ADDRESS\n            value = request.value\n        elif isinstance(request, WithdrawalRequest):\n            call_contract_address = Spec_EIP7002.WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS\n            value = withdrawal_request_fee\n        elif isinstance(request, ConsolidationRequest):\n            call_contract_address = Spec_EIP7251.CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS\n            value = consolidation_request_fee\n\n        total_value += value\n\n        contract_code += Op.SSTORE(\n            storage.store_next(1),\n            Op.CALL(\n                address=call_contract_address,\n                value=value,\n                args_offset=0,\n                args_size=len(current_calldata),\n            ),\n        )\n\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=contract_code,\n    )\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=contract_address,\n        value=total_value,\n        data=calldata,\n        sender=sender,\n    )\n\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post={\n            contract_address: Account(\n                storage=storage,\n            )\n        },\n        blocks=[\n            Block(\n                txs=[tx],\n                header_verify=Header(\n                    requests_root=[\n                        request.with_source_address(contract_address)\n                        for request in sorted(requests, key=lambda r: r.type_byte())\n                    ]\n                ),\n            )\n        ],\n    )\n
    "},{"location":"tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations/#tests.prague.eip7685_general_purpose_el_requests.test_deposits_withdrawals_consolidations.test_invalid_deposit_withdrawal_consolidation_requests","title":"test_invalid_deposit_withdrawal_consolidation_requests(blockchain_test, pre, blocks)","text":"

    Negative testing for deposits and withdrawals in the same block.

    Source code in tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py
    @pytest.mark.parametrize(\n    \"requests,block_body_override_requests,exception\",\n    [\n        pytest.param(\n            [\n                single_withdrawal_from_eoa(0),\n                single_deposit_from_eoa(0),\n            ],\n            [\n                single_withdrawal(0).with_source_address(TestAddress),\n                single_deposit(0),\n            ],\n            # TODO: on the Engine API, the issue should be detected as an invalid block hash\n            BlockException.INVALID_REQUESTS,\n            id=\"single_withdrawal_single_deposit_incorrect_order\",\n        ),\n        pytest.param(\n            [\n                single_consolidation_from_eoa(0),\n                single_deposit_from_eoa(0),\n            ],\n            [\n                single_consolidation(0).with_source_address(TestAddress),\n                single_deposit(0),\n            ],\n            # TODO: on the Engine API, the issue should be detected as an invalid block hash\n            BlockException.INVALID_REQUESTS,\n            id=\"single_consolidation_single_deposit_incorrect_order\",\n        ),\n        pytest.param(\n            [\n                single_consolidation_from_eoa(0),\n                single_withdrawal_from_eoa(0),\n            ],\n            [\n                single_consolidation(0).with_source_address(TestAddress),\n                single_withdrawal(0).with_source_address(TestAddress2),\n            ],\n            # TODO: on the Engine API, the issue should be detected as an invalid block hash\n            BlockException.INVALID_REQUESTS,\n            id=\"single_consolidation_single_withdrawal_incorrect_order\",\n        ),\n    ],\n)\ndef test_invalid_deposit_withdrawal_consolidation_requests(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    blocks: List[Block],\n):\n    \"\"\"\n    Negative testing for deposits and withdrawals in the same block.\n    \"\"\"\n    blockchain_test(\n        genesis_environment=Environment(),\n        pre=pre,\n        post={},\n        blocks=blocks,\n    )\n
    "},{"location":"tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations/index/test_cases/","title":"Test Deposits Withdrawals Consolidations - Test Cases","text":"

    Test cases generated from tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py

    Parametrized test cases generated from the test module tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py:

    test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_eoa+withdrawal_from_eoa+consolidation_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_eoa+consolidation_from_eoa+withdrawal_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_eoa+deposit_from_eoa+consolidation_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_eoa+consolidation_from_eoa+deposit_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-consolidation_from_eoa+deposit_from_eoa+withdrawal_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-consolidation_from_eoa+withdrawal_from_eoa+deposit_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_contract+withdrawal_from_contract+consolidation_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_contract+consolidation_from_contract+withdrawal_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_contract+deposit_from_contract+consolidation_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_contract+consolidation_from_contract+deposit_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-consolidation_from_contract+deposit_from_contract+withdrawal_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-consolidation_from_contract+withdrawal_from_contract+deposit_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_eoa+withdrawal_from_eoa+deposit_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_eoa+deposit_from_eoa+withdrawal_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_eoa+consolidation_from_eoa+deposit_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-consolidation_from_eoa+deposit_from_eoa+consolidation_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-consolidation_from_eoa+withdrawal_from_eoa+consolidation_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_eoa+consolidation_from_eoa+withdrawal_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-deposit_from_eoa+withdrawal_from_eoa+consolidation_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-deposit_from_eoa+consolidation_from_eoa+withdrawal_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-withdrawal_from_eoa+deposit_from_eoa+consolidation_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-withdrawal_from_eoa+consolidation_from_eoa+deposit_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-consolidation_from_eoa+deposit_from_eoa+withdrawal_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-consolidation_from_eoa+withdrawal_from_eoa+deposit_from_eoa]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-deposit_from_contract+withdrawal_from_contract+consolidation_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-deposit_from_contract+consolidation_from_contract+withdrawal_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-withdrawal_from_contract+deposit_from_contract+consolidation_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-withdrawal_from_contract+consolidation_from_contract+deposit_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-consolidation_from_contract+deposit_from_contract+withdrawal_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-consolidation_from_contract+withdrawal_from_contract+deposit_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-deposit_from_eoa+withdrawal_from_eoa+deposit_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-withdrawal_from_eoa+deposit_from_eoa+withdrawal_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-deposit_from_eoa+consolidation_from_eoa+deposit_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-consolidation_from_eoa+deposit_from_eoa+consolidation_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-consolidation_from_eoa+withdrawal_from_eoa+consolidation_from_contract]\ntest_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-withdrawal_from_eoa+consolidation_from_eoa+withdrawal_from_contract]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test-deposit+withdrawal+consolidation]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test-deposit+consolidation+withdrawal]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test-withdrawal+deposit+consolidation]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test-withdrawal+consolidation+deposit]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test-consolidation+deposit+withdrawal]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test-consolidation+withdrawal+deposit]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test_engine-deposit+withdrawal+consolidation]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test_engine-deposit+consolidation+withdrawal]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test_engine-withdrawal+deposit+consolidation]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test_engine-withdrawal+consolidation+deposit]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test_engine-consolidation+deposit+withdrawal]\ntest_valid_deposit_withdrawal_consolidation_request_from_same_tx[fork_Prague-blockchain_test_engine-consolidation+withdrawal+deposit]\ntest_invalid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-single_withdrawal_single_deposit_incorrect_order]\ntest_invalid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-single_consolidation_single_deposit_incorrect_order]\ntest_invalid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-single_consolidation_single_withdrawal_incorrect_order]\ntest_invalid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-single_withdrawal_single_deposit_incorrect_order]\ntest_invalid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-single_consolidation_single_deposit_incorrect_order]\ntest_invalid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test_engine-single_consolidation_single_withdrawal_incorrect_order]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/","title":"EIP-7692 Eof V1","text":"

    Documentation for tests/prague/eip7692_eof_v1.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1 --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1 --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Test cases for all EIPs mentioned in the EOF V1 meta-EIP.

    "},{"location":"tests/prague/eip7692_eof_v1/tracker./","title":"EOF Testing Coverage Tracker","text":"
    • Example Test Case 1
    • Example Test Case 2 (./eip3540_eof_v1/test_example_valid_invalid.py::test_example_valid_invalid)
    • Example Test Case 3 (ethereum/tests: ./src/EOFTestsFiller/validInvalidFiller.yml)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-3540-eof-evm-object-format-v1","title":"EIP-3540: EOF - EVM Object Format v1","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#validation","title":"Validation","text":"
    • Empty code is not a valid EOF (ethereum/tests: src/EOFTestsFiller/efValidation/validate_empty_code_Copier.json)
    • Valid container without data section (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/minimal_valid_EOF1_code_Copier.json)
    • Valid container with data section (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/minimal_valid_EOF1_code_with_data_Copier.json)
    • Valid container with truncated data section (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_truncated_section_Copier.json)
    • Valid container with data section truncated to empty (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Valid containers with multiple code sections (ethereum/tests: ./src/EOFTestsFiller/validInvalidFiller.yml src/EOFTestsFiller/efValidation/minimal_valid_EOF1_multiple_code_sections_Copier.json)
    • Valid containers with max number of code sections (ethereum/tests: src/EOFTestsFiller/efValidation/many_code_sections_1024_Copier.json src/EOFTestsFiller/EIP4750/validInvalidFiller.yml)
    • Too many code sections (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_too_many_code_sections_Copier.json src/EOFTestsFiller/efValidation/too_many_code_sections_Copier.json)
    • Truncated magic (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Valid container except magic (./eip3540_eof_v1/test_container_validation.py::test_magic_validation ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/validate_EOF_prefix_Copier.json)
    • Truncated before version (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Valid container except version (./eip3540_eof_v1/test_container_validation.py::test_version_validation ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/validate_EOF_version_Copier.json)
    • Truncated before type section header (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Truncated before type section size (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_incomplete_section_size_Copier.json)
    • Truncated type section size (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_incomplete_section_size_Copier.json)
    • No type section header (ethereum/tests: src/EOFTestsFiller/efValidation/EOF1_no_type_section_Copier.json)
    • Truncated before code section header (ethereum/tests: ./src/EOFTestsFiller/validInvalidFiller.yml)
    • Truncated before code section number (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml )
    • Truncated code section number (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_incomplete_section_size_Copier.json)
    • Truncated before code section size (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Truncated code section size (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_incomplete_section_size_Copier.json)
    • No code section header (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_code_section_missing_Copier.json)
    • 0 code section number (ethereum/tests: ./src/EOFTestsFiller/validInvalidFiller.yml)
    • 0 code section size (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml ./src/EOFTestsFiller/efValidation/EOF1_code_section_0_size_Copier.json)
    • 0 code section size with non-empty data section (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • No container sections, truncated before data section header (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Container sections present, truncated before data section header (ethereum/tests: ./src/EOFTestsFiller/validInvalidFiller.yml)
    • Truncated before data section size (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_incomplete_section_size_Copier.json)
    • Truncated data section size (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_incomplete_section_size_Copier.json)
    • Truncated before header terminator (ethereum/tests: src/EOFTestsFiller/efValidation/EOF1_header_not_terminated_Copier.json)
    • Truncated before header terminator (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Truncated before type section (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_truncated_section_Copier.json)
    • Type section truncated before outputs (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Type section truncated before max_stack_height (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Type section truncated max_stack_height (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_truncated_section_Copier.json)
    • Truncated before code sections (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Truncated code section (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_truncated_section_Copier.json)
    • Data section empty, trailing bytes (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_trailing_bytes_Copier.json)
    • Data section non-empty, trailing bytes (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_trailing_bytes_Copier.json)
    • Wrong order of sections (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_section_order_Copier.json ./src/EOFTestsFiller/efValidation/EOF1_data_section_before_code_section_Copier.json ./src/EOFTestsFiller/efValidation/EOF1_data_section_before_types_section_Copier.json src/EOFTestsFiller/efValidation/EOF1_type_section_not_first_Copier.json)
    • No data section header (ethereum/tests: ./src/EOFTestsFiller/validInvalidFiller.yml src/EOFTestsFiller/efValidation/data_section_missing_Copier.json)
    • Multiple data sections (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Unknown section id (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_unknown_section_Copier.json)
    • Type section size != 4 * code section number (ethereum/tests: ./src/EOFTestsFiller/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_invalid_type_section_size_Copier.json src/EOFTestsFiller/efValidation/EOF1_types_section_0_size_Copier.json)
    • Code section with max max_stack_height (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml)
    • Code section with max_stack_height above limit (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/efValidation/max_stack_height_Copier.json)
    • Valid code sections with inputs/outputs (ethereum/tests: ./src/EOFTestsFiller/EIP4750/validInvalidFiller.yml)
    • Valid code section with max inputs
    • Valid code section with max outputs
    • Code sections with invalid number of inputs/outputs (above limit)
    • 0 section with inputs/outputs (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_invalid_section_0_type_Copier.json src/EOFTestsFiller/EIP4750/validInvalidFiller.yml)
    • Multiple type section headers (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_multiple_type_sections_Copier.json)
    • Multiple code section headers (ethereum/tests: src/EOFTestsFiller/efValidation/multiple_code_sections_headers_Copier.json)
    • Multiple data section headers (ethereum/tests: src/EOFTestsFiller/efValidation/EOF1_multiple_data_sections_Copier.json)
    • Container without type section (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_type_section_missing_Copier.json src/EOFTestsFiller/efValidation/EOF1_types_section_missing_Copier.json)
    • Container without code sections (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Container without data section (ethereum/tests: ./src/EOFTestsFiller/EIP3540/validInvalidFiller.yml)
    • Valid containers without data section and with subcontainers (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_embedded_container_Copier.json)
    • Valid containers with data section and with subcontainers (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_embedded_container_Copier.json)
    • Valid container with maximum number of subcontainers (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_embedded_container_Copier.json)
    • Container with number of subcontainers above the limit (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_embedded_container_invalid_Copier.json)
    • Subcontainer section header truncated before subcontainer number (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_embedded_container_invalid_Copier.json)
    • Subcontainer section header truncated before subcontainer size (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_embedded_container_invalid_Copier.json)
    • Truncated subcontainer size (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_embedded_container_invalid_Copier.json)
    • 0 container section number (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_embedded_container_invalid_Copier.json)
    • 0 container size (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_embedded_container_invalid_Copier.json)
    • Truncated container section body (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_embedded_container_invalid_Copier.json)
    • Multiple container section headers
    • Invalid subcontainer
    • Invalid subcontainer on a deep nesting level
    • Max number of inputs/outputs in a section (ethereum/tests: src/EOFTestsFiller/efValidation/max_arguments_count_Copier.json)
    • Number of inputs/outputs in a section above the limit (ethereum/tests: src/EOFTestsFiller/efValidation/max_arguments_count_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#execution","title":"Execution","text":"
    • Execution of EOF contracts (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_ExecutionFiller.yml)
    • Legacy executing EXTCODESIZE of EOF contract (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_ExecutionFiller.yml)
    • Legacy executing EXTCODEHASH of EOF contract (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_ExecutionFiller.yml)
    • Legacy executing EXTCODECOPY of EOF contract (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_ExecutionFiller.yml)
    • *CALLs from legacy contracts to EOF contracts (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_CallsFiller.yml)
    • EXT*CALLs from EOF to legacy contracts (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_CallsFiller.yml)
    • EXTDELEGATECALL from EOF to EOF contract (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_CallsFiller.yml)
    • EXTDELEGATECALL from EOF to legacy contract failing (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_CallsFiller.yml)
    • EXTDELEGATECALL from EOF to EOA failing
    • EXTDELEGATECALL from EOF to empty account failing
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-3670-eof-code-validation","title":"EIP-3670: EOF - Code Validation","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#validation_1","title":"Validation","text":"
    • Code section with invalid opcodes is rejected (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_undefined_opcodes_Copier.json src/EOFTestsFiller/EIP3670/validInvalidFiller.yml)
    • INVALID opcode is valid (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml)
    • Truncated PUSH data (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/efValidation/EOF1_truncated_push_Copier.json src/EOFTestsFiller/EIP3670/validInvalidFiller.yml)
    • Opcodes deprecated in EOF are rejected (ethereum/tests: src/EOFTestsFiller/efValidation/deprecated_instructions_Copier.json ethereum/tests: src/EOFTestsFiller/EIP3670/validInvalidFiller.yml)
    • Codes with each valid opcodes (ethereum/tests: src/EOFTestsFiller/EIP3670/validInvalidFiller.yml)
    • Undefined instruction after terminating instruction (ethereum/tests: src/EOFTestsFiller/EIP3670/validInvalidFiller.yml)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-4200-eof-static-relative-jumps","title":"EIP-4200: EOF - Static relative jumps","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#validation_2","title":"Validation","text":"
    • Valid RJUMP with various offsets (ethereum/tests: src/EOFTestsFiller/efValidation/EOF1_valid_rjump_Copier.json src/EOFTestsFiller/EIP4200/validInvalidFiller.yml)
    • Valid RJUMP with maximum offset (ethereum/tests: src/EOFTestsFiller/EIP4200/validInvalidFiller.yml)
    • Valid RJUMP with minimum offset
    • Valid RJUMPI with various offsets (ethereum/tests: src/EOFTestsFiller/efValidation/EOF1_valid_rjumpi_Copier.json src/EOFTestsFiller/EIP4200/validInvalidFiller.yml)
    • Valid RJUMPI with maximum offset (ethereum/offset: src/EOFTestsFiller/EIP4200/validInvalidFiller.yml)
    • Valid RJUMPI with minimum offset
    • Valid RJUMPV with various number of offsets and various offsets (ethereum/tests: src/EOFTestsFiller/efValidation/EOF1_valid_rjumpv_Copier.json src/EOFTestsFiller/EIP4200/validInvalidFiller.yml)
    • Valid RJUMPV with table size 256 (ethereum/tests: src/EOFTestsFiller/EIP4200/validInvalidFiller.yml)
    • Valid RJUMPV containing maximum offset (ethereum/tests: src/EOFTestsFiller/EIP4200/validInvalidFiller.yml)
    • Valid RJUMPV containing minimum offset
    • Truncated before RJUMP immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjump_truncated_Copier.json)
    • Truncated RJUMP immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjump_truncated_Copier.json)
    • RJUMP out of container bounds (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjump_invalid_destination_Copier.json)
    • RJUMP out of section bounds (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjump_invalid_destination_Copier.json)
    • RJUMP into immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjump_invalid_destination_Copier.json)
    • Truncated before RJUMPI immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjumpi_truncated_Copier.json)
    • Truncated RJUMPI immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjumpi_truncated_Copier.json)
    • RJUMPI out of container bounds (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjumpi_invalid_destination_Copier.json)
    • RJUMPI out of section bounds (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjumpi_invalid_destination_Copier.json)
    • RJUMPI into immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjumpi_invalid_destination_Copier.json)
    • Truncated before RJUMPV immediate
    • Truncated RJUMPV immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjumpv_truncated_Copier.json)
    • RJUMPV out of container bounds (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjumpv_invalid_destination_Copier.json)
    • RJUMPV out of section bounds (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjumpv_invalid_destination_Copier.json)
    • RJUMPV into immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_rjumpv_invalid_destination_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#execution_1","title":"Execution","text":"
    • RJUMP forwards (eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_positive_negative)
    • RJUMP backwards (eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_positive_negative)
    • RJUMP with 0 offset (eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py::test_rjump_zero)
    • RJUMPI forwards with condition true/false (eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_condition_forwards)
    • RJUMPI backwards with condition true/false (eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_condition_backwards)
    • RJUMPI with 0 offset with condition true/false (eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py::test_rjumpi_condition_zero)
    • RJUMPV with different case values (eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_condition)
    • RJUMPV with case value out of table bounds (eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_condition)
    • RJUMPV with max cases number (eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_condition eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py::test_rjumpv_full_table*)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-4750-eof-functions","title":"EIP-4750: EOF - Functions","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#validation_3","title":"Validation","text":"
    • Valid CALLFs (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml)
    • CALLFs to non-existing sections (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/efValidation/callf_invalid_code_section_index_Copier.json src/EOFTestsFiller/EIP4750/validInvalidFiller.yml)
    • Truncated CALLF immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_callf_truncated_Copier.json src/EOFTestsFiller/EIP4750/validInvalidFiller.yml)
    • Unreachable code sections (ethereum/tests: src/EOFTestsFiller/efValidation/unreachable_code_sections_Copier.json)
    • Sections reachable from other sections, but not reachable from section 0 (ethereum/tests: src/EOFTestsFiller/efValidation/unreachable_code_sections_Copier.json)
    • RETF with maximum number of outputs (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#execution_2","title":"Execution","text":"
    • CALLF/RETF execution (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP4200/CALLF_RETF_ExecutionFiller.yml)
    • Dispatch to CALLF to different functions based on calldata (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP4200/CALLF_RETF_ExecutionFiller.yml)
    • Maximum number of code sections, calling each section with CALLF (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP4200/CALLF_RETF_ExecutionFiller.yml)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-5450-eof-stack-validation","title":"EIP-5450: EOF - Stack Validation","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#validation_4","title":"Validation","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#terminating-instructions","title":"Terminating instructions","text":"
    • Check all terminating opcodes (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • Code section not terminating (executing beyond section end) (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/EIP5450/validInvalidFiller.yml src/EOFTestsFiller/efStack/no_terminating_instruction_Copier.json)
    • Code section ending with NOP (not terminating) (src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • Check that unreachable code is invalid after all terminating instructions (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml src/EOFTestsFiller/efStack/unreachable_instructions_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#jumps","title":"Jumps","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#rjump","title":"RJUMP","text":"
    • Valid RJUMP backwards in a constant stack segment (ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjump_Copier.json)
    • Invalid RJUMP backwards with mismatching stack in a constant stack segment(ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjump_Copier.json)
    • Valid RJUMP backwards in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjump_variable_stack_Copier.json)
    • Invalid RJUMP backwards with mismatching stack in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjump_variable_stack_Copier.json)
    • Valid RJUMP forwards (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjump_Copier.json)
    • Valid RJUMP forwards from different stack (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjump_Copier.json)
    • Valid RJUMP forwards in variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjump_variable_stack_Copier.json)
    • Valid RJUMP forwards from different stack in variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjump_variable_stack_Copier.json)
    • Valid empty infinite loop with RJUMP (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • Valid balanced infinite loop (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#rjumpi","title":"RJUMPI","text":"
    • Valid RJUMPI backwards in a constant stack segment (ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjumpi_Copier.json)
    • Invalid RJUMPI backwards with mismatching stack in a constant stack segment(ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjumpi_Copier.json)
    • Valid RJUMPI backwards in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjumpi_variable_stack_Copier.json)
    • Invalid RJUMPI backwards with mismatching stack in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjumpi_variable_stack_Copier.json)
    • RJUMPI forward with branches of equal stack height (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_Copier.json src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • RJUMPI forward with branches of equal stack height in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_variable_stack_Copier.json)
    • RJUMPI forward with branches of different stack height (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_Copier.json src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • RJUMPI forward with branches of different stack height in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_variable_stack_Copier.json)
    • Valid loop using RJUMPI (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • Valid loop with a break using RJUMPI - equal stack after break and normal loop end (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_Copier.json)
    • Valid loop with a break using RJUMPI - equal stack after break and normal loop end, variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_variable_stack_Copier.json)
    • Valid loop with a break using RJUMPI - different stack after break and normal loop end (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_Copier.json)
    • Valid loop with a break using RJUMPI - different stack after break and normal loop end, variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_variable_stack_Copier.json)
    • If-then-else with equal stack height in branches (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_Copier.json)
    • If-then-else with equal stack height in branches, variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_variable_stack_Copier.json)
    • If-then-else with different stack height in branches (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_Copier.json)
    • If-then-else with different stack height in branches, variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_variable_stack_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#rjumpv","title":"RJUMPV","text":"
    • Valid RJUMPV backwards in a constant stack segment (ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjumpv_Copier.json)
    • Invalid RJUMPV backwards with mismatching stack in a constant stack segment(ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjumpv_Copier.json)
    • Valid RJUMPV backwards in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjumpv_variable_stack_Copier.json)
    • Invalid RJUMPV backwards with mismatching stack in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/backwards_rjumpv_variable_stack_Copier.json)
    • RJUMPV forward with branches of equal stack height (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_Copier.json src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • RJUMPV forward with branches of equal stack height in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_variable_stack_Copier.json)
    • RJUMPV forward with branches of different stack height (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_Copier.json src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • RJUMPV forward with branches of different stack height in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_variable_stack_Copier.json)
    • Valid infinite loop using RJUMPV (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • Switch with equal stack height in branches (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_Copier.json)
    • Switch with equal stack height in branches, variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_variable_stack_Copier.json)
    • Switch with different stack height in branches (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_Copier.json)
    • Switch with different stack height in branches, variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_variable_stack_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#combinations","title":"Combinations","text":"
    • RJUMP and RJUMPI with the same target and equal stack height (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_Copier.json)
    • RJUMP and RJUMPI with the same target and equal stack height in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_variable_stack_Copier.json)
    • RJUMP and RJUMPI with the same target and different stack height (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_Copier.json)
    • RJUMP and RJUMPI with the same target and different stack height in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpi_variable_stack_Copier.json)
    • RJUMP and RJUMPV with the same target and equal stack height (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_Copier.json)
    • RJUMP and RJUMPV with the same target and equal stack height in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_variable_stack_Copier.json)
    • RJUMP and RJUMPV with the same target and different stack height (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_Copier.json)
    • RJUMP and RJUMPV with the same target and different stack height in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/forwards_rjumpv_variable_stack_Copier.json)
    • RJUMPI and RJUMPV with the same target

    • RJUMP* to self (ethereum/tests: src/EOFTestsFiller/efStack/self_referencing_jumps_Copier.json)

    • RJUMP* to self in a variable stack segment (ethereum/tests: src/EOFTestsFiller/efStack/self_referencing_jumps_variable_stack_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#stack-underflow","title":"Stack underflow","text":"
    • Stack underflows (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml )
    • Stack underflow with enough items available in caller stack - can't dig into caller frame (ethereum/tests: src/EOFTestsFiller/EIP4750/validInvalidFiller.yml)
    • Stack underflow in variable stack segment, only min underflow (ethereum/tests: src/EOFTestsFiller/efStack/underflow_variable_stack_Copier.json)
    • Stack underflow in variable stack segment, both min and max underflow (ethereum/tests: src/EOFTestsFiller/efStack/underflow_variable_stack_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#callf","title":"CALLF","text":"
    • Valid CALLFs to functions with inputs (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml src/EOFTestsFiller/efStack/callf_stack_validation_Copier.json)
    • CALLF stack underflows (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/EIP4750/validInvalidFiller.yml src/EOFTestsFiller/EIP5450/validInvalidFiller.yml src/EOFTestsFiller/efStack/callf_stack_validation_Copier.json)
    • CALLF stack underflow in variable stack segment, only min underflow (ethereum/tests: src/EOFTestsFiller/efStack/underflow_variable_stack_Copier.json)
    • CALLF stack underflow in variable stack segment, both min and max underflow (ethereum/tests: src/EOFTestsFiller/efStack/underflow_variable_stack_Copier.json)
    • Branching to CALLFs with the same number of outputs (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • Check that CALLF stack inputs/outputs equal to target section type definition
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#retf","title":"RETF","text":"
    • Valid RETF with correct number of items on stack (ethereum/tests: src/EOFTestsFiller/efStack/retf_stack_validation_Copier.json src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • Invalid RETF with extra items on stack (ethereum/tests: src/EOFTestsFiller/efStack/retf_stack_validation_Copier.json ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/EIP4750/validInvalidFiller.yml)
    • RETF stack underflow (ethereum/tests: src/EOFTestsFiller/efStack/retf_stack_validation_Copier.json)
    • RETF reached via different paths (ethereum/tests: src/EOFTestsFiller/efStack/retf_stack_validation_Copier.json)
    • RETF in variable stack segment is not allowed (ethereum/tests: src/EOFTestsFiller/efStack/retf_variable_stack_Copier.json)
    • Extra items on stack allowed for terminating instructions other than RETF (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#jumpf","title":"JUMPF","text":"
    • Extra items on stack are allowed for JUMPF to non-returning function (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_to_nonreturning_Copier.json src/EOFTestsFiller/efStack/jumpf_to_nonreturning_variable_stack_Copier.json)
    • JUMPF stack underflows (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_to_nonreturning_Copier.json src/EOFTestsFiller/efStack/jumpf_to_returning_Copier.json)
    • JUMPF stack underflow in a variable stack segment - only min underflow (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_to_nonreturning_variable_stack_Copier.json)
    • JUMPF stack underflow in a variable stack segment - both min and max underflow (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_to_nonreturning_variable_stack_Copier.json)
    • JUMPF into function with the same number of outputs (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_to_returning_Copier.json)
    • JUMPF into function with fewer outputs than current one (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_to_returning_Copier.json)
    • Extra items on stack are allowed for JUMPF to returning function (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_to_returning_Copier.json)
    • JUMPF to returning in a variable stack segment is not allowed (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_to_returning_variable_stack_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#stack-overflow","title":"Stack overflow","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#callf_1","title":"CALLF","text":"
    • Max allowed stack height reached in CALLF-ed function (ethereum/tests: src/EOFTestsFiller/efStack/callf_stack_overflow_Copier.json)
    • CALLF validation time stack overflow (ethereum/tests: src/EOFTestsFiller/EIP4750/validInvalidFiller.yml src/EOFTestsFiller/efStack/callf_stack_overflow_Copier.json)
    • Max allowed stack height reached in CALLF-ed function with inputs (ethereum/tests: src/EOFTestsFiller/efStack/callf_with_inputs_stack_overflow_Copier.json)
    • CALLF validation time stack overflow in function with inputs (ethereum/tests: src/EOFTestsFiller/EIP4750/validInvalidFiller.yml src/EOFTestsFiller/efStack/callf_with_inputs_stack_overflow_Copier.json)
    • Max allowed stack height reached in CALLF-ed function. CALLF in variable stack segment. (ethereum/tests: src/EOFTestsFiller/efStack/callf_stack_overflow_variable_stack_Copier.json)
    • CALLF validation time stack overflow in variable stack segment. (ethereum/tests: src/EOFTestsFiller/EIP4750/validInvalidFiller.yml src/EOFTestsFiller/efStack/callf_stack_overflow_variable_stack_Copier.json)
    • Max allowed stack height reached in CALLF-ed function with inputs. CALLF in variable stack segment. (ethereum/tests: src/EOFTestsFiller/efStack/callf_with_inputs_stack_overflow_variable_stack_Copier.json)
    • CALLF validation time stack overflow in function with inputs in variable stack segment. (ethereum/tests: src/EOFTestsFiller/EIP4750/validInvalidFiller.yml src/EOFTestsFiller/efStack/callf_with_inputs_stack_overflow_variable_stack_Copier.json)
    • Function inputs are accessible and accounted for (no stack underflow if they are popped) (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#jumpf_1","title":"JUMPF","text":"
    • Max allowed stack height reached in JUMPF-ed function (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_stack_overflow_Copier.json)
    • JUMPF validation time stack overflow (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_stack_overflow_Copier.json)
    • Max allowed stack height reached in JUMPF-ed function with inputs
    • JUMPF validation time stack overflow in function with inputs (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_with_inputs_stack_overflow_Copier.json)
    • JUMPF validation time stack overflow in function with inputs, variable stack segment, only max overflow (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_with_inputs_stack_overflow_variable_stack_Copier.json)
    • JUMPF validation time stack overflow in function with inputs, variable stack segment, both max and min overflow (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_with_inputs_stack_overflow_variable_stack_Copier.json)
    • Max allowed stack height reached in JUMPF-ed function. JUMPF in variable stack segment. (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_stack_overflow_variable_stack_Copier.json)
    • JUMPF validation time stack overflow in variable stack segment - only max overflow. (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_stack_overflow_variable_stack_Copier.json)
    • JUMPF validation time stack overflow in variable stack segment - both min and max overflow. (ethereum/tests: src/EOFTestsFiller/efStack/jumpf_stack_overflow_variable_stack_Copier.json)
    • Max allowed stack height reached in JUMPF-ed function with inputs. JUMPF in variable stack segment.
    • JUMPF validation time stack overflow in function with inputs in variable stack segment.
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#swapndupnexchange","title":"SWAPN/DUPN/EXCHANGE","text":"
    • Valid DUPN with enough items on stack (ethereum/tests: src/EOFTestsFiller/efStack/dupn_stack_validation_Copier.json)
    • DUPN stack underflow (ethereum/tests: src/EOFTestsFiller/efStack/dupn_stack_validation_Copier.json)
    • Valid SWAPN with enough items on stack (ethereum/tests: src/EOFTestsFiller/efStack/swapn_stack_validation_Copier.json)
    • SWAPN stack underflow (ethereum/tests: src/EOFTestsFiller/efStack/swapn_stack_validation_Copier.json)
    • Valid EXCHANGE with enough items on stack (ethereum/tests: src/EOFTestsFiller/efStack/exchange_deep_stack_validation_Copier.json src/EOFTestsFiller/efStack/exchange_stack_validation_Copier.json)
    • EXCHANGE stack underflow (ethereum/tests: src/EOFTestsFiller/efStack/exchange_stack_validation_Copier.json src/EOFTestsFiller/efStack/exchange_empty_stack_validation_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#other","title":"Other","text":"
    • Wrong max_stack_height (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/efValidation/max_stack_height_Copier.json src/EOFTestsFiller/EIP4750/validInvalidFiller.yml)
    • All opcodes correctly account for stack inputs/outputs (ethereum/tests: src/EOFTestsFiller/EIP5450/validInvalidFiller.yml)
    • Code reachable only via backwards jump is invalid
    • Maximally broad [0, 1023] stack range (ethereum/tests: src/EOFTestsFiller/efStack/stack_range_maximally_broad_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#execution_3","title":"Execution","text":"
    • Max stack size (1024) in CALLF-ed function (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP4200/EOF1_CALLF_ExecutionFiller.yml)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-6206-eof-jumpf-and-non-returning-functions","title":"EIP-6206: EOF - JUMPF and non-returning functions","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#validation_5","title":"Validation","text":"
    • 0 section returning (ethereum/tests: ./src/EOFTestsFiller/efExample/validInvalidFiller.yml src/EOFTestsFiller/EIP4750/validInvalidFiller.yml)
    • 0 section declared non-returning but ends with RETF (ethereum/tests: src/EOFTestsFiller/EIP4750/validInvalidFiller.yml)
    • CALLF into non-returning function (ethereum/tests: src/EOFTestsFiller/efValidation/callf_into_nonreturning_Copier.json)
    • Valid JUMPF into sections with equal number of outputs (ethereum/tests: src/EOFTestsFiller/efValidation/jumpf_equal_outputs_Copier.json)
    • Valid JUMPF into sections with different but compatible number of outputs (ethereum/tests: src/EOFTestsFiller/efValidation/jumpf_compatible_outputs_Copier.json)
    • JUMPF into sections with incompatible outputs (ethereum/tests: src/EOFTestsFiller/efValidation/jumpf_incompatible_outputs_Copier.json)
    • Non-returning section without JUMPF (ethereum/tests: src/EOFTestsFiller/efValidation/non_returning_status_Copier.json)
    • Non-returning section with JUMPF (ethereum/tests: src/EOFTestsFiller/efValidation/non_returning_status_Copier.json)
    • Returning section with RETF (ethereum/tests: src/EOFTestsFiller/efValidation/non_returning_status_Copier.json)
    • Returning section with JUMPF (ethereum/tests: src/EOFTestsFiller/efValidation/non_returning_status_Copier.json)
    • Returning section with JUMPF to returning and RETF (ethereum/tests: src/EOFTestsFiller/efValidation/non_returning_status_Copier.json)
    • Returning section with JUMPF to non-returning and RETF (ethereum/tests: src/EOFTestsFiller/efValidation/non_returning_status_Copier.json)
    • Invalid non-returning flag (ethereum/tests: src/EOFTestsFiller/efValidation/non_returning_status_Copier.json)
    • Circular JUMPF between two sections (ethereum/tests: src/EOFTestsFiller/efValidation/non_returning_status_Copier.json)
    • JUMPF into non-existing section
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-7480-eof-data-section-access-instructions","title":"EIP-7480: EOF - Data section access instructions","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#validation_6","title":"Validation","text":"
    • Valid DATALOADN with various offsets (ethereum/tests: src/EOFTestsFiller/efValidation/dataloadn_Copier.json)
    • Truncated DATALOADN immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_dataloadn_truncated_Copier.json)
    • DATALOADN offset out of bounds (ethereum/tests: src/EOFTestsFiller/efValidation/dataloadn_Copier.json)
    • DATALOADN accessing not full word (ethereum/tests: src/EOFTestsFiller/efValidation/dataloadn_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-663-swapn-dupn-and-exchange-instructions","title":"EIP-663: SWAPN, DUPN and EXCHANGE instructions","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#validation_7","title":"Validation","text":"
    • A DUPN instruction causes stack overflow
    • A DUPN instruction causes stack underflow
    • A DUPN instruction causes max stack height mismatch
    • A SWAPN instruction causes stack underflow
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#execution_4","title":"Execution","text":"
    • Positive tests for DUPN instructions (./eip663_dupn_swapn_exchange/test_dupn.py::test_dupn_all_valid_immediates)
    • Positive tests for SWAPN instructions (./eip663_dupn_swapn_exchange/test_swapn.py::test_swapn_all_valid_immediates)
    • Positive tests for EXCHANGE instruction (./eip663_dupn_swapn_exchange/test_exchange_py.py::test_exchange_all_valid_immediates)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-7069-revamped-call-instructions","title":"EIP-7069: Revamped CALL instructions","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#execution_5","title":"Execution","text":"
    • EXTDELEGATECALL from EOF to EOF (evmone-tests: state_tests/state_transition/eof_calls/eof1_extdelegatecall_eof1.json)
    • EXTDELEGATECALL from EOF to legacy fails (evmone-tests: state_tests/state_transition/eof_calls/eof1_extdelegatecall_legacy.json)
    • EXTSTATICCALL forwards static mode (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_static.json)
    • EXTCALL with value success (evmone-tests: state_tests/state_transition/eof_calls/extcall_with_value.json)
    • EXTCALL with value from EXTSTATICCALL (evmone-tests: state_tests/state_transition/eof_calls/extcall_static_with_value.json)
    • EXTCALL with value, not enough balance (evmone-tests: state_tests/state_transition/eof_calls/extcall_failing_with_value_balance_check.json)
    • EXTCALL with value, check additional charge for value (evmone-tests: state_tests/state_transition/eof_calls/extcall_failing_with_value_additional_cost.json)
    • EXTCALL with gas not enough for callee to get 5000 gas (evmone-tests: state_tests/state_transition/eof_calls/extcall_min_callee_gas_failure_mode.json)
    • RETURNDATA* after EXTCALL (evmone-tests: state_tests/state_transition/eof_calls/extcall_output.json)
    • RETURNDATA* after EXTDELEGATECALL (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_output.json state_tests/state_transition/eof_calls/extdelegatecall_returndatasize.json state_tests/state_transition/eof_calls/returndatacopy.json state_tests/state_transition/eof_calls/returndataload.json)
    • RETURNDATA* after EXTSTATICCALL (evmone-tests: state_tests/state_transition/eof_calls/extstaticcall_output.json)
    • RETURNDATA* after aborted EXT*CALL (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_returndatasize_abort.json)
    • Failed EXTCALL clears returndata from previous EXTCALL (evmone-tests: state_tests/state_transition/eof_calls/extcall_clears_returndata.json)
    • EXTCALL not enough gas for input memory charge (evmone-tests: state_tests/state_transition/eof_calls/extcall_memory.json)
    • EXTDELEGATECALL not enough gas for input memory charge (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_memory.json)
    • EXTSTATICCALL not enough gas for input memory charge (evmone-tests: state_tests/state_transition/eof_calls/extstaticcall_memory.json)
    • EXTCALL exception due to target address overflow (bits set in high 12 bytes) (evmone-tests: state_tests/state_transition/eof_calls/extcall_ase_ready_violation.json)
    • EXTDELEGATECALL exception due to target address overflow (bits set in high 12 bytes) (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_ase_ready_violation.json)
    • EXTSTATICCALL exception due to target address overflow (bits set in high 12 bytes) (evmone-tests: state_tests/state_transition/eof_calls/extstaticcall_ase_ready_violation.json)
    • EXTCALL not enough gas for warming up target address (evmone-tests: state_tests/state_transition/eof_calls/extcall_cold_oog.json)
    • EXTDELEGATECALL not enough gas for warming up target address (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_cold_oog.json)
    • EXTSTATICCALL not enough gas for warming up target address (evmone-tests: state_tests/state_transition/eof_calls/extstaticcall_cold_oog.json)
    • EXTCALL not enough gas for account creation cost (transfer value to non-existing account) (evmone-tests: state_tests/state_transition/eof_calls/extcall_value_zero_to_nonexistent_account.json)
    • OOG after EXTCALL (evmone-tests: state_tests/state_transition/eof_calls/extcall_then_oog.json)
    • OOG after EXTDELEGATECALL (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_then_oog.json)
    • OOG after EXTSTATICCALL (evmone-tests: state_tests/state_transition/eof_calls/extstaticcall_then_oog.json)
    • REVERT inside EXTCALL (evmone-tests: state_tests/state_transition/eof_calls/extcall_callee_revert.json)
    • REVERT inside EXTDELEGATECALL (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_callee_revert.json)
    • REVERT inside EXTSTATICCALL (evmone-tests: state_tests/state_transition/eof_calls/extstaticcall_callee_revert.json)
    • EXTCALL with input (evmone-tests: state_tests/state_transition/eof_calls/extcall_input.json)
    • EXTDELEGATECALL with input (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_input.json)
    • EXTSTATICCALL with input (evmone-tests: state_tests/state_transition/eof_calls/extstaticcall_input.json)
    • EXTCALL with just enough gas for MIN_RETAINED_GAS and MIN_CALLEE_GAS (evmone-tests: state_tests/state_transition/eof_calls/extcall_with_value_enough_gas.json)
    • EXTCALL with not enough gas for MIN_CALLEE_GAS (evmone-tests: state_tests/state_transition/eof_calls/extcall_with_value_low_gas.json)
    • ADDRESS and CALLER inside EXTCALL (evmone-tests: state_tests/state_transition/eof_calls/extcall_recipient_and_code_address.json)
    • ADDRESS and CALLER inside EXTDELEGATECALL (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_recipient_and_code_address.json)
    • ADDRESS and CALLER inside EXTSTATICCALL (evmone-tests: state_tests/state_transition/eof_calls/extstaticcall_recipient_and_code_address.json)
    • Refund inside EXTCALL is applied after the transaction (evmone-tests: state_tests/state_transition/eof_calls/extcall_gas_refund_propagation.json)
    • Refund inside EXTDELEGATECALL is applied after the transaction (evmone-tests: state_tests/state_transition/eof_calls/extdelegatecall_gas_refund_propagation.json)
    • EXTSTATICCALL from EOF to non-pure legacy contract failing (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_CallsFiller.yml)
    • EXTSTATICCALL from EOF to pure EOF contract (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_CallsFiller.yml)
    • EXTSTATICCALL from EOF to non-pure EOF contract failing (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_CallsFiller.yml)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-7620-eof-contract-creation","title":"EIP-7620: EOF Contract Creation","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#validation_8","title":"Validation","text":"
    • Valid EOFCREATEs referring to various container numbers (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_eofcreate_valid_Copier.json)
    • Truncated before EOFCREATE immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_eofcreate_invalid_Copier.json)
    • EOFCREATE is not a valid terminating instruction (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_eofcreate_invalid_Copier.json)
    • EOFCREATE immediate referring to non-existing container (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_eofcreate_invalid_Copier.json)
    • EOFCREATE immediate referring to container with truncated data (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_eofcreate_invalid_Copier.json)
    • Valid RETURNCONTRACTs referring to various container numbers (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_returncontract_valid_Copier.json)
    • Truncated before RETURNCONTRACT immediate (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_returncontract_invalid_Copier.json)
    • RETURNCONTRACT immediate referring to non-existing container (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_returncontract_invalid_Copier.json)
    • Unreachable code after RETURNCONTRACT, check that RETURNCONTRACT is terminating (ethereum/tests: ./src/EOFTestsFiller/efValidation/EOF1_returncontract_invalid_Copier.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#execution_6","title":"Execution","text":"
    • CREATE with EOF initcode fails in Prague (evmone-tests: state_tests/state_transition/eof_create/create_with_eof_initcode.json)
    • CREATE with EOF initcode fails in Cancun (evmone-tests: state_tests/state_transition/eof_create/create_with_eof_initcode_cancun.json)
    • CREATE2 with EOF initcode fails in Prague (evmone-tests: state_tests/state_transition/eof_create/create2_with_eof_initcode.json)
    • CREATE2 with EOF initcode fails in Cancun (evmone-tests: state_tests/state_transition/eof_create/create2_with_eof_initcode_cancun.json)
    • CREATE with legacy initcode and EOF deploy code fails (evmone-tests: state_tests/state_transition/eof_create/create_deploying_eof.json)
    • CREATE2 with legacy initcode and EOF deploy code fails (evmone-tests: state_tests/state_transition/eof_create/create2_deploying_eof.json)
    • EOFCREATE success with empty aux data (evmone-tests: state_tests/state_transition/eof_create/eofcreate_empty_auxdata.json)
    • EOFCREATE success with aux data length equal to declared in deploy container (evmone-tests: state_tests/state_transition/eof_create/eofcreate_auxdata_equal_to_declared.json)
    • EOFCREATE success with aux data longer than size declared in deploy container (evmone-tests: state_tests/state_transition/eof_create/eofcreate_auxdata_longer_than_declared.json)
    • EOFCREATE with aux data shorter than size declared in deploy container fails (evmone-tests: state_tests/state_transition/eof_create/eofcreate_auxdata_shorter_than_declared.json)
    • EOFCREATE success deploying DATALOADN referring to aux data portion of deploy container data (evmone-tests: state_tests/state_transition/eof_create/eofcreate_dataloadn_referring_to_auxdata.json)
    • EOFCREATE success with deploy container having aux data and subcontainer (evmone-tests: state_tests/state_transition/eof_create/eofcreate_with_auxdata_and_subcontainer.json)
    • REVERT in initcontainer (evmone-tests: state_tests/state_transition/eof_create/eofcreate_revert_empty_returndata.json)
    • REVERT with return data in initcontainer (evmone-tests: state_tests/state_transition/eof_create/eofcreate_revert_non_empty_returndata.json)
    • Exceptional abort in initcontainer (evmone-tests: state_tests/state_transition/eof_create/eofcreate_initcontainer_aborts.json)
    • EOFCREATE with deploy container of max size 0x6000 (evmone-tests: state_tests/state_transition/eof_create/eofcreate_deploy_container_max_size.json)
    • EOFCREATE with deploy container size above limit (evmone-tests: state_tests/state_transition/eof_create/eofcreate_deploy_container_too_large.json)
    • EOFCREATE with deploy container data size above 64K after appending aux data (evmone-tests: state_tests/state_transition/eof_create/eofcreate_appended_data_size_larger_than_64K.json)
    • EOFCREATE with deploy container size above limit after appending aux data (evmone-tests: state_tests/state_transition/eof_create/eofcreate_deploy_container_with_aux_data_too_large.json)
    • EOFCREATE success nested in EOFCREATE initcode (evmone-tests: state_tests/state_transition/eof_create/eofcreate_nested_eofcreate.json)
    • EOFCREATE success nested in EOFCREATE initcode that reverts (evmone-tests: state_tests/state_transition/eof_create/eofcreate_nested_eofcreate_revert.json)
    • EOFCREATE with value success
    • EOFCREATE with value - not enough caller balance (evmone-tests: state_tests/state_transition/eof_create/eofcreate_caller_balance_too_low.json)
    • EOFCREATE not enough gas for initcode (EIP-3860) charge (evmone-tests: state_tests/state_transition/eof_create/eofcreate_not_enough_gas_for_initcode_charge.json)
    • EOFCREATE not enough gas for input memory expansion (evmone-tests: state_tests/state_transition/eof_create/eofcreate_not_enough_gas_for_mem_expansion.json)
    • RETURNCONTRACT not enough gas for aux data memory expansion (evmone-tests: state_tests/state_transition/eof_create/returncontract_not_enough_gas_for_mem_expansion.json)
    • Successful EOFCREATE clears returndata (evmone-tests: state_tests/state_transition/eof_create/eofcreate_clears_returndata.json)
    • Second EOFCREATE with the same container and salt fails (evmone-tests: state_tests/state_transition/eof_create/eofcreate_failure_after_eofcreate_success.json)
    • Call created contract after EOFCREATE (evmone-tests: state_tests/state_transition/eof_create/eofcreate_call_created_contract.json)
    "},{"location":"tests/prague/eip7692_eof_v1/tracker./#eip-7698-eof-creation-transaction","title":"EIP-7698: EOF - Creation transaction","text":""},{"location":"tests/prague/eip7692_eof_v1/tracker./#execution_7","title":"Execution","text":"
    • Creation transaction success with empty deploy container data (evmone-tests: state_tests/state_transition/eof_create/creation_tx.json)
    • Creation transaction success with data in deploy container without aux data (evmone-tests: state_tests/state_transition/eof_create/creation_tx_deploy_data.json)
    • Creation transaction success with data in deploy container with aux data length equal to declared (evmone-tests: state_tests/state_transition/eof_create/creation_tx_static_auxdata_in_calldata.json)
    • Creation transaction success with data in deploy container with aux data longer than declared (evmone-tests: state_tests/state_transition/eof_create/creation_tx_dynamic_auxdata_in_calldata.json)
    • Creation transaction success deploying DATALOADN referring to aux data portion of deploy container data (evmone-tests: state_tests/state_transition/eof_create/creation_tx_dataloadn_referring_to_auxdata.json)
    • Exceptional abort in creation transaction initcode (evmone-tests: state_tests/state_transition/eof_create/creation_tx_initcontainer_aborts.json)
    • RETURN in creation transaction initcode fails (evmone-tests: state_tests/state_transition/eof_create/creation_tx_initcontainer_return.json)
    • STOP in creation transaction initcode fails (evmone-tests: state_tests/state_transition/eof_create/creation_tx_initcontainer_stop.json)
    • Creation transaction with initcode of max allowed size 0xc000 (evmone-tests: state_tests/state_transition/eof_create/creation_tx_initcontainer_max_size.json)
    • Creation transaction with initcode size above limit (evmone-tests: state_tests/state_transition/eof_create/creation_tx_initcontainer_too_large.json)
    • Creation transaction deploys container of max allowed size 0x6000 (evmone-tests: state_tests/state_transition/eof_create/creation_tx_deploy_container_max_size.json)
    • Creation transaction deploying container of size above limit fails (evmone-tests: state_tests/state_transition/eof_create/creation_tx_deploy_container_too_large.json)
    • EOFCREATE success nested in creation transaction initcode (evmone-tests: state_tests/state_transition/eof_create/creation_tx_nested_eofcreate.json)
    • Creation transaction with invalid initcontainer (invalid header) (evmone-tests: state_tests/state_transition/eof_create/creation_tx_invalid_initcode_header.json)
    • Creation transaction with invalid initcontainer (invalid EOF version) (evmone-tests: state_tests/state_transition/eof_create/creation_tx_invalid_eof_version.json)
    • Creation transaction with invalid initcontainer (invalid max stack height) (evmone-tests: state_tests/state_transition/eof_create/creation_tx_invalid_initcode.json)
    • Creation transaction fails if initcontainer has truncated data section (declared size > present data size ) (evmone-tests: state_tests/state_transition/eof_create/creation_tx_truncated_data_initcode.json)
    • Creation transaction with invalid deploy container (evmone-tests: state_tests/state_transition/eof_create/creation_tx_invalid_deploycode.json)
    • Create transaction with legacy initcode and EOF deploy code fails (evmone-tests: state_tests/state_transition/eof_create/creation_tx_deploying_eof.json)
    • EOF creation transaction fails before Prague (evmone-tests: state_tests/state_transition/eof_create/initcode_transaction_before_prague.json)
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/","title":"EIP-3540 Eof V1","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1 --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1 --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Cross-client EVM Object Format Tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/spec.py.

    EOF V1 Constants used throughout all tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/","title":"Test All Opcodes In Container","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF Container: check how every opcode behaves in the middle of the valid eof container code

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_all_opcodes_in_container.test_all_opcodes_in_container","title":"test_all_opcodes_in_container(eof_test, opcode)","text":"

    Test all opcodes inside valid container 257 because 0x5B is duplicated

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    sorted((all_opcodes | undefined_opcodes) - {Op.RETF}),\n)\ndef test_all_opcodes_in_container(\n    eof_test: EOFTestFiller,\n    opcode: Opcode,\n):\n    \"\"\"\n    Test all opcodes inside valid container\n    257 because 0x5B is duplicated\n    \"\"\"\n    data_portion = 1 if opcode == Op.CALLF else 0\n    opcode_with_data_portion = opcode[data_portion] if opcode.has_data_portion() else opcode\n\n    # opcode_with_data_portion has the correct minimum stack height\n    bytecode = Op.PUSH0 * opcode_with_data_portion.min_stack_height + opcode_with_data_portion\n\n    if opcode not in (halting_opcodes | section_terminating_opcodes):\n        bytecode += Op.STOP\n\n    sections = [Section.Code(code=bytecode)]\n\n    match opcode:\n        case Op.EOFCREATE | Op.RETURNCONTRACT:\n            sections.append(\n                Section.Container(\n                    container=Container(\n                        sections=[\n                            Section.Code(code=Op.REVERT(0, 0)),\n                        ]\n                    )\n                )\n            )\n        case Op.CALLF:\n            sections.append(\n                Section.Code(\n                    code=Op.RETF,\n                    code_outputs=0,\n                )\n            )\n    sections.append(Section.Data(\"1122334455667788\" * 4))\n\n    if opcode == Op.RETURNCONTRACT:\n        eof_code = Container(sections=sections, kind=ContainerKind.INITCODE)\n    else:\n        eof_code = Container(sections=sections)\n\n    eof_test(\n        data=eof_code,\n        expect_exception=(\n            None if opcode in valid_eof_opcodes else EOFException.UNDEFINED_INSTRUCTION\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_all_opcodes_in_container.test_all_invalid_terminating_opcodes","title":"test_all_invalid_terminating_opcodes(eof_test, opcode)","text":"

    Test all opcodes that are invalid as the last opcode in a container

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    sorted(\n        valid_eof_opcodes\n        - halting_opcodes\n        - section_terminating_opcodes\n        - {Op.RJUMP, Op.RJUMPI, Op.RJUMPV}\n    ),\n)\ndef test_all_invalid_terminating_opcodes(\n    eof_test: EOFTestFiller,\n    opcode: Opcode,\n):\n    \"\"\"\n    Test all opcodes that are invalid as the last opcode in a container\n    \"\"\"\n    if opcode.has_data_portion():\n        # Add the appropriate data portion to the opcode by using the get_item method.\n        # On the CALLF opcode we need to reference the second code section, hence the [1] index.\n        opcode = opcode[0] if opcode != Op.CALLF else opcode[1]\n\n    bytecode = (Op.PUSH0 * opcode.min_stack_height) + opcode\n\n    sections = [Section.Code(code=bytecode)]\n\n    if opcode == Op.CALLF[1]:\n        sections += [Section.Code(code=Op.RETF, code_outputs=0)]\n    elif opcode == Op.EOFCREATE[0]:\n        sections += [\n            Section.Container(\n                container=Container(\n                    sections=[\n                        Section.Code(code=Op.RETURNCONTRACT[0](0, 0)),\n                        Section.Container(Container.Code(code=Op.STOP)),\n                    ]\n                )\n            )\n        ]\n\n    sections += [Section.Data(b\"\\0\" * 32)]\n\n    eof_test(\n        data=Container(\n            sections=sections,\n        ),\n        expect_exception=EOFException.MISSING_STOP_OPCODE,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_all_opcodes_in_container.test_all_unreachable_terminating_opcodes_after_stop","title":"test_all_unreachable_terminating_opcodes_after_stop(eof_test, opcode)","text":"

    Test all terminating opcodes after stop.

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    sorted(halting_opcodes | section_terminating_opcodes),\n)\ndef test_all_unreachable_terminating_opcodes_after_stop(\n    eof_test: EOFTestFiller,\n    opcode: Opcode,\n):\n    \"\"\"\n    Test all terminating opcodes after stop.\n    \"\"\"\n    match opcode:\n        case Op.STOP:\n            sections = [Section.Code(code=Op.STOP + Op.STOP)]\n        case Op.RETF:\n            sections = [\n                Section.Code(code=Op.CALLF[1] + Op.STOP),\n                Section.Code(code=Op.STOP + Op.RETF, code_outputs=0),\n            ]\n        case Op.JUMPF:\n            sections = [\n                Section.Code(code=Op.STOP + Op.JUMPF[1]),\n                Section.Code(code=Op.STOP),\n            ]\n        case Op.RETURNCONTRACT:\n            sections = [\n                Section.Code(code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP),\n                Section.Container(\n                    container=Container(\n                        sections=[\n                            Section.Code(code=Op.STOP + Op.RETURNCONTRACT[0](0, 0)),\n                            Section.Container(Container.Code(code=Op.STOP)),\n                        ]\n                    )\n                ),\n            ]\n        case Op.RETURN | Op.REVERT | Op.INVALID:\n            sections = [\n                Section.Code(code=Op.PUSH0 + Op.PUSH0 + Op.STOP + opcode),\n            ]\n        case _:\n            raise NotImplementedError(f\"Opcode {opcode} is not implemented\")\n\n    eof_test(\n        data=Container(\n            sections=sections,\n        ),\n        expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS\n        if opcode != Op.RETURNCONTRACT\n        else EOFException.INCOMPATIBLE_CONTAINER_KIND,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_all_opcodes_in_container.test_all_unreachable_terminating_opcodes_before_stop","title":"test_all_unreachable_terminating_opcodes_before_stop(eof_test, opcode)","text":"

    Test all opcodes terminating opcodes before.

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    sorted((halting_opcodes | section_terminating_opcodes) - {Op.STOP}),\n)\ndef test_all_unreachable_terminating_opcodes_before_stop(\n    eof_test: EOFTestFiller,\n    opcode: Opcode,\n):\n    \"\"\"\n    Test all opcodes terminating opcodes before.\n    \"\"\"\n    match opcode:\n        case Op.RETF:\n            sections = [\n                Section.Code(code=Op.CALLF[1] + Op.STOP),\n                Section.Code(code=Op.RETF + Op.STOP, code_outputs=0),\n            ]\n        case Op.JUMPF:\n            sections = [\n                Section.Code(code=Op.JUMPF[1] + Op.STOP),\n                Section.Code(code=Op.STOP),\n            ]\n        case Op.RETURNCONTRACT:\n            sections = [\n                Section.Code(code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP),\n                Section.Container(\n                    container=Container(\n                        sections=[\n                            Section.Code(code=Op.RETURNCONTRACT[0](0, 0) + Op.STOP),\n                            Section.Container(Container.Code(code=Op.STOP)),\n                        ]\n                    )\n                ),\n            ]\n        case Op.RETURN | Op.REVERT | Op.INVALID:\n            sections = [\n                Section.Code(code=Op.PUSH1(0) + Op.PUSH1(0) + opcode + Op.STOP),\n            ]\n        case _:\n            raise NotImplementedError(f\"Opcode {opcode} is not implemented\")\n\n    eof_test(\n        data=Container(\n            sections=sections,\n        ),\n        expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS\n        if opcode != Op.RETURNCONTRACT\n        else EOFException.INCOMPATIBLE_CONTAINER_KIND,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_all_opcodes_in_container.test_all_opcodes_stack_underflow","title":"test_all_opcodes_stack_underflow(eof_test, opcode)","text":"

    Test stack underflow on all opcodes that require at least one item on the stack

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    sorted(op for op in valid_eof_opcodes if op.min_stack_height > 0)\n    + [\n        # Opcodes that have variable min_stack_height\n        Op.SWAPN[0x00],\n        Op.SWAPN[0xFF],\n        Op.DUPN[0x00],\n        Op.DUPN[0xFF],\n        Op.EXCHANGE[0x00],\n        Op.EXCHANGE[0xFF],\n    ],\n)\ndef test_all_opcodes_stack_underflow(\n    eof_test: EOFTestFiller,\n    opcode: Opcode,\n):\n    \"\"\"\n    Test stack underflow on all opcodes that require at least one item on the stack\n    \"\"\"\n    sections: List[Section]\n    if opcode == Op.EOFCREATE:\n        sections = [\n            Section.Code(code=Op.PUSH0 * (opcode.min_stack_height - 1) + opcode[0] + Op.STOP),\n            Section.Container(\n                container=Container(\n                    sections=[\n                        Section.Code(code=Op.RETURNCONTRACT[0](0, 0)),\n                        Section.Container(Container.Code(code=Op.STOP)),\n                    ]\n                )\n            ),\n        ]\n    elif opcode == Op.RETURNCONTRACT:\n        sections = [\n            Section.Code(code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP),\n            Section.Container(\n                container=Container(\n                    sections=[\n                        Section.Code(code=Op.PUSH0 * (opcode.min_stack_height - 1) + opcode[0]),\n                        Section.Container(Container.Code(code=Op.STOP)),\n                    ]\n                )\n            ),\n        ]\n    else:\n        bytecode = Op.PUSH0 * (opcode.min_stack_height - 1)\n        if opcode.has_data_portion():\n            bytecode += opcode[0]\n        else:\n            bytecode += opcode\n        bytecode += Op.STOP\n        sections = [Section.Code(code=bytecode)]\n    eof_code = Container(sections=sections)\n\n    eof_test(\n        data=eof_code,\n        expect_exception=EOFException.STACK_UNDERFLOW,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_all_opcodes_in_container.test_all_opcodes_stack_overflow","title":"test_all_opcodes_stack_overflow(eof_test, opcode, exception)","text":"

    Test stack overflow on all opcodes that push more items than they pop

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    sorted(op for op in valid_eof_opcodes if op.pushed_stack_items > op.popped_stack_items)\n    + [\n        Op.DUPN[0xFF],\n    ],\n)\n@pytest.mark.parametrize(\n    \"exception\",\n    # We test two types of exceptions here:\n    # 1. Invalid max stack height, where we modify the `max_stack_height` field of the code section\n    #    to the maximum stack height allowed by the EIP-3540, so the code still has to be checked\n    #    for stack overflow.\n    # 2. Max stack height above limit, where we don't modify the `max_stack_height` field of the\n    #    code section, so the actual code doesn't have to be verified for the stack overflow.\n    [EOFException.INVALID_MAX_STACK_HEIGHT, EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT],\n)\ndef test_all_opcodes_stack_overflow(\n    eof_test: EOFTestFiller,\n    opcode: Opcode,\n    exception: EOFException,\n):\n    \"\"\"\n    Test stack overflow on all opcodes that push more items than they pop\n    \"\"\"\n    opcode = opcode[0] if opcode.has_data_portion() else opcode\n\n    assert opcode.pushed_stack_items - opcode.popped_stack_items == 1\n    opcode_count = MAX_OPERAND_STACK_HEIGHT + 1 - opcode.min_stack_height\n\n    bytecode = Op.PUSH0 * opcode.min_stack_height\n    bytecode += opcode * opcode_count\n    bytecode += Op.STOP\n\n    kwargs: Dict[str, Any] = {\"code\": bytecode}\n\n    if exception == EOFException.INVALID_MAX_STACK_HEIGHT:\n        # Lie about the max stack height to make the code be checked for stack overflow.\n        kwargs[\"max_stack_height\"] = MAX_OPERAND_STACK_HEIGHT\n\n    sections = [Section.Code(**kwargs)]\n\n    if opcode == Op.DATALOADN[0]:\n        sections.append(Section.Data(b\"\\0\" * 32))\n    eof_code = Container(sections=sections)\n\n    eof_test(\n        data=eof_code,\n        expect_exception=exception,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/index/test_cases/","title":"Test All Opcodes In Container - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py:

    test_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_STOP]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_ADD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_MUL]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SUB]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DIV]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SDIV]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_MOD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SMOD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_ADDMOD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_MULMOD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_EXP]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SIGNEXTEND]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_0C]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_0D]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_0E]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_0F]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_LT]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_GT]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SLT]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SGT]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_EQ]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_ISZERO]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_AND]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OR]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_XOR]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_NOT]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_BYTE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SHL]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SHR]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SAR]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_1E]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_1F]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SHA3]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_21]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_22]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_23]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_24]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_25]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_26]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_27]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_28]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_29]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_2A]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_2B]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_2C]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_2D]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_2E]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_2F]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_ADDRESS]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_BALANCE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_ORIGIN]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CALLER]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CALLVALUE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CALLDATALOAD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CALLDATASIZE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CALLDATACOPY]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CODESIZE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CODECOPY]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_GASPRICE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_EXTCODESIZE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_EXTCODECOPY]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_RETURNDATASIZE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_RETURNDATACOPY]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_EXTCODEHASH]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_BLOCKHASH]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_COINBASE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_TIMESTAMP]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_NUMBER]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PREVRANDAO]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_GASLIMIT]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CHAINID]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SELFBALANCE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_BASEFEE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_BLOBHASH]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_BLOBBASEFEE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_4B]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_4C]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_4D]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_4E]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_4F]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_POP]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_MLOAD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_MSTORE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_MSTORE8]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SLOAD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SSTORE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_JUMP]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_JUMPI]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PC]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_MSIZE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_GAS]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_JUMPDEST]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_TLOAD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_TSTORE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_MCOPY]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH0]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH1]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH2]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH3]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH4]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH5]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH6]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH7]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH8]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH9]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH10]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH11]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH12]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH13]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH14]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH15]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH16]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH17]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH18]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH19]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH20]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH21]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH22]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH23]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH24]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH25]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH26]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH27]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH28]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH29]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH30]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH31]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_PUSH32]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP1]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP2]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP3]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP4]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP5]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP6]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP7]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP8]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP9]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP10]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP11]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP12]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP13]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP14]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP15]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUP16]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP1]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP2]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP3]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP4]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP5]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP6]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP7]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP8]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP9]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP10]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP11]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP12]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP13]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP14]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP15]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAP16]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_LOG0]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_LOG1]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_LOG2]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_LOG3]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_LOG4]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_A5]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_A6]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_A7]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_A8]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_A9]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_AA]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_AB]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_AC]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_AD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_AE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_AF]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_B0]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_B1]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_B2]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_B3]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_B4]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_B5]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_B6]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_B7]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_B8]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_B9]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_BA]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_BB]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_BC]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_BD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_BE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_BF]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_C0]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_C1]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_C2]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_C3]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_C4]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_C5]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_C6]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_C7]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_C8]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_C9]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_CA]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_CB]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_CC]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_CD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_CE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_CF]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DATALOAD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DATALOADN]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DATASIZE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DATACOPY]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_D4]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_D5]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_D6]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_D7]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_D8]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_D9]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_DA]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_DB]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_DC]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_DD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_DE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_DF]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_RJUMP]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_RJUMPI]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_RJUMPV]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CALLF]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_JUMPF]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DUPN]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SWAPN]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_EXCHANGE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_E9]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_EA]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_EB]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_EOFCREATE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_ED]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_RETURNCONTRACT]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_EF]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CREATE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CALL]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CALLCODE]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_RETURN]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_DELEGATECALL]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_CREATE2]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_F6]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_RETURNDATALOAD]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_EXTCALL]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_EXTDELEGATECALL]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_STATICCALL]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_EXTSTATICCALL]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_OPCODE_FC]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_REVERT]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_INVALID]\ntest_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_SELFDESTRUCT]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_ADD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_MUL]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SUB]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DIV]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SDIV]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_MOD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SMOD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_ADDMOD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_MULMOD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_EXP]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SIGNEXTEND]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_LT]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_GT]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SLT]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SGT]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_EQ]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_ISZERO]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_AND]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_OR]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_XOR]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_NOT]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_BYTE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SHL]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SHR]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SAR]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SHA3]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_ADDRESS]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_BALANCE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_ORIGIN]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_CALLER]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_CALLVALUE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_CALLDATALOAD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_CALLDATASIZE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_CALLDATACOPY]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_GASPRICE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_RETURNDATASIZE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_RETURNDATACOPY]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_BLOCKHASH]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_COINBASE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_TIMESTAMP]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_NUMBER]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PREVRANDAO]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_GASLIMIT]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_CHAINID]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SELFBALANCE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_BASEFEE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_BLOBHASH]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_BLOBBASEFEE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_POP]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_MLOAD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_MSTORE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_MSTORE8]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SLOAD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SSTORE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_MSIZE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_JUMPDEST]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_TLOAD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_TSTORE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_MCOPY]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH0]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH1]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH2]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH3]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH4]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH5]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH6]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH7]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH8]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH9]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH10]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH11]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH12]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH13]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH14]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH15]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH16]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH17]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH18]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH19]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH20]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH21]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH22]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH23]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH24]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH25]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH26]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH27]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH28]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH29]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH30]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH31]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_PUSH32]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP1]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP2]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP3]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP4]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP5]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP6]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP7]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP8]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP9]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP10]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP11]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP12]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP13]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP14]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP15]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUP16]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP1]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP2]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP3]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP4]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP5]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP6]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP7]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP8]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP9]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP10]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP11]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP12]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP13]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP14]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP15]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAP16]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_LOG0]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_LOG1]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_LOG2]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_LOG3]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_LOG4]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DATALOAD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DATALOADN]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DATASIZE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DATACOPY]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_CALLF]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_DUPN]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_SWAPN]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_EXCHANGE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_EOFCREATE]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_RETURNDATALOAD]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_EXTCALL]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_EXTDELEGATECALL]\ntest_all_invalid_terminating_opcodes[fork_CancunEIP7692-eof_test-opcode_EXTSTATICCALL]\ntest_all_unreachable_terminating_opcodes_after_stop[fork_CancunEIP7692-eof_test-opcode_STOP]\ntest_all_unreachable_terminating_opcodes_after_stop[fork_CancunEIP7692-eof_test-opcode_RETF]\ntest_all_unreachable_terminating_opcodes_after_stop[fork_CancunEIP7692-eof_test-opcode_JUMPF]\ntest_all_unreachable_terminating_opcodes_after_stop[fork_CancunEIP7692-eof_test-opcode_RETURNCONTRACT]\ntest_all_unreachable_terminating_opcodes_after_stop[fork_CancunEIP7692-eof_test-opcode_RETURN]\ntest_all_unreachable_terminating_opcodes_after_stop[fork_CancunEIP7692-eof_test-opcode_REVERT]\ntest_all_unreachable_terminating_opcodes_after_stop[fork_CancunEIP7692-eof_test-opcode_INVALID]\ntest_all_unreachable_terminating_opcodes_before_stop[fork_CancunEIP7692-eof_test-opcode_RETF]\ntest_all_unreachable_terminating_opcodes_before_stop[fork_CancunEIP7692-eof_test-opcode_JUMPF]\ntest_all_unreachable_terminating_opcodes_before_stop[fork_CancunEIP7692-eof_test-opcode_RETURNCONTRACT]\ntest_all_unreachable_terminating_opcodes_before_stop[fork_CancunEIP7692-eof_test-opcode_RETURN]\ntest_all_unreachable_terminating_opcodes_before_stop[fork_CancunEIP7692-eof_test-opcode_REVERT]\ntest_all_unreachable_terminating_opcodes_before_stop[fork_CancunEIP7692-eof_test-opcode_INVALID]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_ADD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_MUL]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SUB]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DIV]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SDIV]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_MOD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SMOD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_ADDMOD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_MULMOD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_EXP]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SIGNEXTEND]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_LT]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_GT]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SLT]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SGT]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_EQ]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_ISZERO]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_AND]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_OR]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_XOR]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_NOT]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_BYTE]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SHL]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SHR]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SAR]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SHA3]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_BALANCE]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_CALLDATALOAD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_CALLDATACOPY]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_RETURNDATACOPY]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_BLOCKHASH]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_BLOBHASH]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_POP]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_MLOAD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_MSTORE]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_MSTORE8]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SLOAD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SSTORE]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_TLOAD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_TSTORE]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_MCOPY]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP1]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP2]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP3]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP4]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP5]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP6]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP7]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP8]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP9]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP10]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP11]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP12]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP13]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP14]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP15]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUP16]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP1]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP2]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP3]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP4]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP5]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP6]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP7]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP8]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP9]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP10]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP11]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP12]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP13]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP14]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP15]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAP16]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_LOG0]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_LOG1]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_LOG2]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_LOG3]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_LOG4]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DATALOAD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DATACOPY]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_RJUMPI]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_RJUMPV]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_EOFCREATE]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_RETURNCONTRACT]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_RETURN]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_RETURNDATALOAD]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_EXTCALL]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_EXTDELEGATECALL]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_EXTSTATICCALL]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_REVERT]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAPN_0x00]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_SWAPN_0xff]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUPN_0x00]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_DUPN_0xff]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_EXCHANGE_0x00]\ntest_all_opcodes_stack_underflow[fork_CancunEIP7692-eof_test-opcode_EXCHANGE_0xff]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_ADDRESS]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_ORIGIN]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_CALLER]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_CALLVALUE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_CALLDATASIZE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_GASPRICE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_RETURNDATASIZE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_COINBASE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_TIMESTAMP]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_NUMBER]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PREVRANDAO]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_GASLIMIT]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_CHAINID]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_SELFBALANCE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_BASEFEE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_BLOBBASEFEE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_MSIZE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH0]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH1]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH2]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH3]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH4]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH5]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH6]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH7]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH8]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH9]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH10]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH11]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH12]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH13]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH14]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH15]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH16]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH17]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH18]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH19]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH20]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH21]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH22]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH23]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH24]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH25]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH26]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH27]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH28]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH29]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH30]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH31]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_PUSH32]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP1]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP2]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP3]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP4]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP5]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP6]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP7]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP8]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP9]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP10]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP11]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP12]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP13]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP14]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP15]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUP16]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DATALOADN]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DATASIZE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUPN]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.INVALID_MAX_STACK_HEIGHT-opcode_DUPN_0xff]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_ADDRESS]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_ORIGIN]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_CALLER]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_CALLVALUE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_CALLDATASIZE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_GASPRICE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_RETURNDATASIZE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_COINBASE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_TIMESTAMP]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_NUMBER]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PREVRANDAO]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_GASLIMIT]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_CHAINID]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_SELFBALANCE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_BASEFEE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_BLOBBASEFEE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_MSIZE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH0]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH1]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH2]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH3]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH4]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH5]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH6]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH7]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH8]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH9]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH10]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH11]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH12]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH13]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH14]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH15]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH16]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH17]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH18]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH19]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH20]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH21]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH22]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH23]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH24]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH25]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH26]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH27]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH28]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH29]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH30]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH31]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_PUSH32]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP1]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP2]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP3]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP4]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP5]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP6]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP7]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP8]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP9]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP10]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP11]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP12]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP13]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP14]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP15]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUP16]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DATALOADN]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DATASIZE]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUPN]\ntest_all_opcodes_stack_overflow[fork_CancunEIP7692-eof_test-exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT-opcode_DUPN_0xff]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation/","title":"Test Code Validation","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF V1 Code Validation tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_code_validation.test_legacy_initcode_valid_eof_v1_contract","title":"test_legacy_initcode_valid_eof_v1_contract(eof_test, container)","text":"

    Test creating various types of valid EOF V1 contracts using legacy initcode and a contract creating transaction.

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py
    @pytest.mark.parametrize(\n    \"container\",\n    VALID,\n    ids=container_name,\n)\ndef test_legacy_initcode_valid_eof_v1_contract(\n    eof_test: EOFTestFiller,\n    container: Container,\n):\n    \"\"\"\n    Test creating various types of valid EOF V1 contracts using legacy\n    initcode and a contract creating transaction.\n    \"\"\"\n    assert (\n        container.validity_error is None\n    ), f\"Valid container with validity error: {container.validity_error}\"\n    eof_test(\n        data=bytes(container),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_code_validation.test_legacy_initcode_invalid_eof_v1_contract","title":"test_legacy_initcode_invalid_eof_v1_contract(eof_test, container)","text":"

    Test creating various types of valid EOF V1 contracts using legacy initcode and a contract creating transaction.

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py
    @pytest.mark.parametrize(\n    \"container\",\n    INVALID,\n    ids=container_name,\n)\ndef test_legacy_initcode_invalid_eof_v1_contract(\n    eof_test: EOFTestFiller,\n    container: Container,\n):\n    \"\"\"\n    Test creating various types of valid EOF V1 contracts using legacy\n    initcode and a contract creating transaction.\n    \"\"\"\n    assert container.validity_error is not None, \"Invalid container without validity error\"\n    eof_test(\n        data=bytes(container),\n        expect_exception=container.validity_error,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation/index/test_cases/","title":"Test Code Validation - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py:

    test_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_max_stack_size]\ntest_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_input_maximum]\ntest_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_output_maximum]\ntest_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-multiple_code_section_max_inputs_max_outputs]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_no_data_section]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-incomplete_magic]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_version]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_type_header]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_type_section_size]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_code_header]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-code_section_size_incomplete_1]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-code_section_size_incomplete_2]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-code_section_size_incomplete_3]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-code_section_size_incomplete_4]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-code_section_count_0x8000_truncated]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-code_section_count_0xFFFF_truncated]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-code_section_count_0x8000]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-code_section_count_0xFFFF]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-code_section_size_0x8000_truncated]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-code_section_size_0xFFFF_truncated]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-terminator_incomplete]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_data_section_size]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-data_section_size_incomplete]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_sections]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_code_section]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-too_many_code_sections]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-zero_code_sections_header]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_1]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_2]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_3]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_section_bodies_ok_1]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_section_bodies_ok_2]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_nonzero]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_nonzero_1]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_nonzero_2]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_nonzero_3]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_nonzero_4]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_code_section_contents]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-incomplete_code_section_contents]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-trailing_bytes_after_code_section]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-empty_code_section]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-empty_code_section_with_non_empty_data]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_data_section_contents]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-data_section_contents_incomplete]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-data_section_preceding_code_section]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-data_section_without_code_section]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_3a]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_section_terminator_4a]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-trailing_bytes_after_data_section]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-multiple_data_sections]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-multiple_code_and_data_sections]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-unknown_section_1]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-unknown_section_2]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-unknown_section_empty]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-no_type_section]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-too_many_type_sections]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-empty_type_section]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-type_section_too_small_1]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-type_section_too_small_2]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-type_section_too_big]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_non_zero_inputs]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_non_zero_outputs]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-multiple_code_section_non_zero_inputs]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-multiple_code_section_non_zero_outputs]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-data_section_before_code_with_type]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-data_section_listed_in_type]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_incomplete_type]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_input_too_large]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-invalid_inputs_to_non_returning_code_section_2]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_output_too_large]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_max_stack_size_too_large]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size/","title":"Test Container Size","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF validation tests for EIP-3540 container size

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_container_size.test_max_size","title":"test_max_size(eof_test, over_limit)","text":"

    Verify EOF container valid at maximum size, invalid above

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py
    @pytest.mark.parametrize(\n    \"over_limit\",\n    [0, 1, 2, 2**16 - MAX_INITCODE_SIZE],\n)\ndef test_max_size(\n    eof_test: EOFTestFiller,\n    over_limit: int,\n):\n    \"\"\"\n    Verify EOF container valid at maximum size, invalid above\n    \"\"\"\n    # Expand the minimal EOF code by more noop code, reaching the desired target container size.\n    code = Container(\n        sections=[\n            Section.Code(\n                code=Op.JUMPDEST * (MAX_INITCODE_SIZE - len(VALID_CONTAINER) + over_limit)\n                + Op.STOP\n            )\n        ]\n    )\n    assert len(code) == MAX_INITCODE_SIZE + over_limit\n    eof_test(\n        data=bytes(code),\n        expect_exception=None if over_limit == 0 else EOFException.CONTAINER_SIZE_ABOVE_LIMIT,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_container_size.test_above_max_size_raw","title":"test_above_max_size_raw(eof_test, size)","text":"

    Verify EOF container invalid above maximum size, regardless of header contents

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py
    @pytest.mark.parametrize(\n    \"size\",\n    [MAX_INITCODE_SIZE + 1, MAX_INITCODE_SIZE * 2],\n)\ndef test_above_max_size_raw(\n    eof_test: EOFTestFiller,\n    size: int,\n):\n    \"\"\"\n    Verify EOF container invalid above maximum size, regardless of header contents\n    \"\"\"\n    code = Op.INVALID * size\n    eof_test(\n        data=bytes(code),\n        expect_exception=EOFException.CONTAINER_SIZE_ABOVE_LIMIT,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_container_size.test_section_after_end_of_container","title":"test_section_after_end_of_container(eof_test, code)","text":"

    Verify EOF container is invalid if any of sections declares above container size

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py
    @pytest.mark.parametrize(\n    \"code\",\n    [\n        pytest.param(\n            Container(sections=[Section.Code(code=Op.STOP, custom_size=MAX_INITCODE_SIZE)]),\n            id=\"1st_code_section\",\n        ),\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(code=Op.STOP),\n                    Section.Code(code=Op.STOP, custom_size=MAX_INITCODE_SIZE),\n                ]\n            ),\n            id=\"2nd_code_section\",\n        ),\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(code=Op.STOP),\n                    Section.Container(container=Op.STOP, custom_size=MAX_INITCODE_SIZE),\n                ]\n            ),\n            id=\"1st_container_section\",\n        ),\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(code=Op.STOP),\n                    Section.Container(container=Op.STOP),\n                    Section.Container(container=Op.STOP, custom_size=MAX_INITCODE_SIZE),\n                ]\n            ),\n            id=\"2nd_container_section\",\n        ),\n    ],\n)\ndef test_section_after_end_of_container(\n    eof_test: EOFTestFiller,\n    code: Container,\n):\n    \"\"\"\n    Verify EOF container is invalid if any of sections declares above container size\n    \"\"\"\n    eof_test(\n        data=bytes(code),\n        expect_exception=EOFException.INVALID_SECTION_BODIES_SIZE,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size/index/test_cases/","title":"Test Container Size - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py:

    test_max_size[fork_CancunEIP7692-eof_test-over_limit_0]\ntest_max_size[fork_CancunEIP7692-eof_test-over_limit_1]\ntest_max_size[fork_CancunEIP7692-eof_test-over_limit_2]\ntest_max_size[fork_CancunEIP7692-eof_test-over_limit_16384]\ntest_above_max_size_raw[fork_CancunEIP7692-eof_test-size_49153]\ntest_above_max_size_raw[fork_CancunEIP7692-eof_test-size_98304]\ntest_section_after_end_of_container[fork_CancunEIP7692-eof_test-1st_code_section]\ntest_section_after_end_of_container[fork_CancunEIP7692-eof_test-2nd_code_section]\ntest_section_after_end_of_container[fork_CancunEIP7692-eof_test-1st_container_section]\ntest_section_after_end_of_container[fork_CancunEIP7692-eof_test-2nd_container_section]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/","title":"Test Container Validation","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF validation tests for EIP-3540 container format

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_container_validation.test_magic_validation","title":"test_magic_validation(eof_test, magic_0, magic_1)","text":"

    Verify EOF container 2-byte magic

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py
    @pytest.mark.parametrize(\"magic_0\", [0, 1, 0xEE, 0xEF, 0xF0, 0xFF])\n@pytest.mark.parametrize(\"magic_1\", [0, 1, 2, 0xFE, 0xFF])\ndef test_magic_validation(\n    eof_test: EOFTestFiller,\n    magic_0: int,\n    magic_1: int,\n):\n    \"\"\"\n    Verify EOF container 2-byte magic\n    \"\"\"\n    code = bytearray(bytes(VALID_CONTAINER))\n    code[0] = magic_0\n    code[1] = magic_1\n    eof_test(\n        data=bytes(code),\n        expect_exception=None if magic_0 == 0xEF and magic_1 == 0 else EOFException.INVALID_MAGIC,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_container_validation.test_version_validation","title":"test_version_validation(eof_test, version)","text":"

    Verify EOF container version

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py
    @pytest.mark.parametrize(\"version\", [0, 1, 2, 0xFE, 0xFF])\ndef test_version_validation(\n    eof_test: EOFTestFiller,\n    version: int,\n):\n    \"\"\"\n    Verify EOF container version\n    \"\"\"\n    code = bytearray(bytes(VALID_CONTAINER))\n    code[2] = version\n    eof_test(\n        data=bytes(code),\n        expect_exception=None if version == 1 else EOFException.INVALID_VERSION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_container_validation.test_single_code_section","title":"test_single_code_section(eof_test, plus_data, plus_container)","text":"

    Verify EOF container maximum number of code sections

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py
    @pytest.mark.parametrize(\"plus_data\", [False, True])\n@pytest.mark.parametrize(\"plus_container\", [False, True])\ndef test_single_code_section(\n    eof_test: EOFTestFiller,\n    plus_data: bool,\n    plus_container: bool,\n):\n    \"\"\"\n    Verify EOF container maximum number of code sections\n    \"\"\"\n    sections = [Section.Code(Op.RETURNCONTRACT[0](0, 0) if plus_container else Op.STOP)]\n    if plus_container:\n        sections.append(\n            Section.Container(\n                container=Container(\n                    sections=[\n                        Section.Code(Op.JUMPF[i + 1] if i < (MAX_CODE_SECTIONS - 1) else Op.STOP)\n                        for i in range(MAX_CODE_SECTIONS)\n                    ],\n                )\n            )\n        )\n    if plus_data:\n        sections.append(Section.Data(data=b\"\\0\"))\n    eof_test(\n        data=Container(\n            name=\"max_code_sections\",\n            sections=sections,\n            kind=ContainerKind.INITCODE if plus_container else ContainerKind.RUNTIME,\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_container_validation.test_max_code_sections","title":"test_max_code_sections(eof_test, plus_data, plus_container)","text":"

    Verify EOF container maximum number of code sections

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py
    @pytest.mark.parametrize(\"plus_data\", [False, True])\n@pytest.mark.parametrize(\"plus_container\", [False, True])\ndef test_max_code_sections(\n    eof_test: EOFTestFiller,\n    plus_data: bool,\n    plus_container: bool,\n):\n    \"\"\"\n    Verify EOF container maximum number of code sections\n    \"\"\"\n    if plus_container:\n        sections = [\n            Section.Code(\n                Op.JUMPF[i + 1] if i < (MAX_CODE_SECTIONS - 1) else Op.RETURNCONTRACT[0](0, 0)\n            )\n            for i in range(MAX_CODE_SECTIONS)\n        ]\n        sections.append(\n            Section.Container(\n                container=Container(\n                    sections=[\n                        Section.Code(Op.JUMPF[i + 1] if i < (MAX_CODE_SECTIONS - 1) else Op.STOP)\n                        for i in range(MAX_CODE_SECTIONS)\n                    ],\n                )\n            )\n        )\n    else:\n        sections = [\n            Section.Code(Op.JUMPF[i + 1] if i < (MAX_CODE_SECTIONS - 1) else Op.STOP)\n            for i in range(MAX_CODE_SECTIONS)\n        ]\n    if plus_data:\n        sections.append(Section.Data(data=b\"\\0\"))\n    eof_test(\n        data=Container(\n            name=\"max_code_sections\",\n            sections=sections,\n            kind=ContainerKind.INITCODE if plus_container else ContainerKind.RUNTIME,\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/index/test_cases/","title":"Test Container Validation - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py:

    test_magic_validation[fork_CancunEIP7692-eof_test-magic_1_0-magic_0_0]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_0-magic_0_1]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_0-magic_0_238]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_0-magic_0_239]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_0-magic_0_240]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_0-magic_0_255]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_1-magic_0_0]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_1-magic_0_1]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_1-magic_0_238]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_1-magic_0_239]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_1-magic_0_240]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_1-magic_0_255]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_2-magic_0_0]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_2-magic_0_1]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_2-magic_0_238]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_2-magic_0_239]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_2-magic_0_240]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_2-magic_0_255]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_254-magic_0_0]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_254-magic_0_1]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_254-magic_0_238]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_254-magic_0_239]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_254-magic_0_240]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_254-magic_0_255]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_255-magic_0_0]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_255-magic_0_1]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_255-magic_0_238]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_255-magic_0_239]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_255-magic_0_240]\ntest_magic_validation[fork_CancunEIP7692-eof_test-magic_1_255-magic_0_255]\ntest_version_validation[fork_CancunEIP7692-eof_test-version_0]\ntest_version_validation[fork_CancunEIP7692-eof_test-version_1]\ntest_version_validation[fork_CancunEIP7692-eof_test-version_2]\ntest_version_validation[fork_CancunEIP7692-eof_test-version_254]\ntest_version_validation[fork_CancunEIP7692-eof_test-version_255]\ntest_single_code_section[fork_CancunEIP7692-eof_test-plus_container_False-plus_data_False]\ntest_single_code_section[fork_CancunEIP7692-eof_test-plus_container_False-plus_data_True]\ntest_single_code_section[fork_CancunEIP7692-eof_test-plus_container_True-plus_data_False]\ntest_single_code_section[fork_CancunEIP7692-eof_test-plus_container_True-plus_data_True]\ntest_max_code_sections[fork_CancunEIP7692-eof_test-plus_container_False-plus_data_False]\ntest_max_code_sections[fork_CancunEIP7692-eof_test-plus_container_False-plus_data_True]\ntest_max_code_sections[fork_CancunEIP7692-eof_test-plus_container_True-plus_data_False]\ntest_max_code_sections[fork_CancunEIP7692-eof_test-plus_container_True-plus_data_True]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example/","title":"Test Eof Example","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF Classes example use

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_eof_example.test_eof_example","title":"test_eof_example(eof_test)","text":"

    Example of python EOF classes

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py
    def test_eof_example(eof_test: EOFTestFiller):\n    \"\"\"\n    Example of python EOF classes\n    \"\"\"\n    # Lets construct an EOF container code\n    eof_code = Container(\n        name=\"valid_container_example\",\n        sections=[\n            # TYPES section is constructed automatically based on CODE\n            # CODE section\n            Section.Code(\n                code=Op.CALLF[1](Op.PUSH0) + Op.STOP,  # bytecode to be deployed in the body\n                # Code: call section 1 with a single zero as input, then stop.\n                max_stack_height=1,  # define code header (in body) stack size\n            ),\n            # There can be multiple code sections\n            Section.Code(\n                # Remove input and call section 2 with no inputs, then remove output and return\n                code=Op.POP + Op.CALLF[2]() + Op.POP + Op.RETF,\n                code_inputs=1,\n                code_outputs=0,\n                max_stack_height=1,\n            ),\n            Section.Code(\n                # Call section 3 with two inputs (address twice), return\n                code=Op.CALLF[3](Op.DUP1, Op.ADDRESS) + Op.POP + Op.POP + Op.RETF,\n                code_outputs=1,\n                max_stack_height=3,\n            ),\n            Section.Code(\n                # Duplicate one input and return\n                code=Op.DUP1 + Op.RETF,\n                code_inputs=2,\n                code_outputs=3,\n                max_stack_height=3,\n            ),\n            # DATA section\n            Section.Data(\"0xef\"),\n        ],\n    )\n\n    # This will construct a valid EOF container with these bytes\n    assert bytes(eof_code) == bytes.fromhex(\n        \"ef0001010010020004000500060008000204000100008000010100000100010003020300035fe300010050\"\n        \"e3000250e43080e300035050e480e4ef\"\n    )\n\n    eof_test(\n        data=eof_code,\n        expect_exception=eof_code.validity_error,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_eof_example.test_eof_example_custom_fields","title":"test_eof_example_custom_fields(eof_test)","text":"

    Example of python EOF container class tuning

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py
    def test_eof_example_custom_fields(eof_test: EOFTestFiller):\n    \"\"\"\n    Example of python EOF container class tuning\n    \"\"\"\n    # if you need to overwrite certain structure bytes, you can use customization\n    # this is useful for unit testing the eof structure format, you can reorganize sections\n    # and overwrite the header bytes for testing purposes\n    # most of the combinations are covered by the unit tests\n\n    # This features are subject for development and will change in the future\n\n    eof_code = Container(\n        name=\"valid_container_example_2\",\n        magic=b\"\\xef\\x00\",  # magic can be overwritten for test purposes, (default is 0xEF00)\n        version=b\"\\x01\",  # version can be overwritten for testing purposes (default is 0x01)\n        header_terminator=b\"\\x00\",  # terminator byte can be overwritten (default is 0x00)\n        extra=b\"\",  # extra bytes to be trailed after the container body bytes (default is None)\n        sections=[\n            # TYPES section is constructed automatically based on CODE\n            # CODE section\n            Section.Code(\n                code=Op.PUSH1(2)\n                + Op.STOP,  # this is the actual bytecode to be deployed in the body\n                max_stack_height=1,  # define code header (in body) stack size\n            ),\n            # DATA section\n            Section.Data(\n                data=\"0xef\",\n                # custom_size overrides the size bytes, so you can put only 1 byte into data\n                # but still make the header size of 2 to produce invalid section\n                # if custom_size != len(data), the section will be invalid\n                custom_size=1,\n            ),\n        ],\n        # auto generate types section based on provided code sections\n        # AutoSection.ONLY_BODY - means the section will be generated only for the body bytes\n        # AutoSection.ONLY_BODY - means the section will be generated only for the header bytes\n        auto_type_section=AutoSection.AUTO,\n        # auto generate default data section (0x empty), by default is True\n        auto_data_section=True,\n        # auto sort section by order 01 02 03 04\n        # AutoSection.ONLY_BODY - means the sorting will be done only for the body bytes\n        # AutoSection.ONLY_BODY - means the section will be done only for the header bytes\n        auto_sort_sections=AutoSection.AUTO,\n    )\n\n    eof_test(\n        data=eof_code,\n        expect_exception=eof_code.validity_error,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_eof_example.test_eof_example_parameters","title":"test_eof_example_parameters(eof_test, data_section_bytes, code_section_code, exception)","text":"

    Example of python EOF classes

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py
    @pytest.mark.parametrize(\n    \"data_section_bytes\",\n    (b\"\\x01\", b\"\\xef\"),\n)\n@pytest.mark.parametrize(\n    \"code_section_code, exception\",\n    [(Op.PUSH1(10) + Op.STOP, None), (Op.PUSH1(14), EOFException.MISSING_STOP_OPCODE)],\n)\ndef test_eof_example_parameters(\n    eof_test: EOFTestFiller,\n    data_section_bytes: bytes,\n    code_section_code: Bytecode,\n    exception: EOFException,\n):\n    \"\"\"\n    Example of python EOF classes\n    \"\"\"\n    eof_code = Container(\n        name=\"parametrized_eof_example\",\n        sections=[\n            Section.Code(\n                code=code_section_code,\n                max_stack_height=1,\n            ),\n            Section.Data(data_section_bytes),\n        ],\n        validity_error=exception,\n    )\n\n    eof_test(\n        data=eof_code,\n        expect_exception=eof_code.validity_error,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example/index/test_cases/","title":"Test Eof Example - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py:

    test_eof_example[fork_CancunEIP7692-eof_test]\ntest_eof_example_custom_fields[fork_CancunEIP7692-eof_test]\ntest_eof_example_parameters[fork_CancunEIP7692-eof_test-code_section_code_-exception_None-data_section_bytes_b'\\x01']\ntest_eof_example_parameters[fork_CancunEIP7692-eof_test-code_section_code_-exception_None-data_section_bytes_b'\\xef']\ntest_eof_example_parameters[fork_CancunEIP7692-eof_test-code_section_code_-exception_EOFException.MISSING_STOP_OPCODE-data_section_bytes_b'\\x01']\ntest_eof_example_parameters[fork_CancunEIP7692-eof_test-code_section_code_-exception_EOFException.MISSING_STOP_OPCODE-data_section_bytes_b'\\xef']\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function/","title":"Test Execution Function","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Execution of CALLF, RETF opcodes within EOF V1 containers tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_execution_function.test_eof_functions_contract_call_succeed","title":"test_eof_functions_contract_call_succeed(state_test, pre, container)","text":"

    Test simple contracts that are simply expected to succeed on call.

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py
    @pytest.mark.parametrize(\"container\", CALL_SUCCEED_CONTRACTS, ids=lambda x: x.name)\ndef test_eof_functions_contract_call_succeed(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    container: Container,\n):\n    \"\"\"\n    Test simple contracts that are simply expected to succeed on call.\n    \"\"\"\n    env = Environment()\n\n    sender = pre.fund_eoa()\n    container_address = pre.deploy_contract(container)\n    caller_contract = Op.SSTORE(0, Op.CALL(Op.GAS, container_address, 0, 0, 0, 0, 0)) + Op.STOP()\n    caller_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        to=caller_address,\n        gas_limit=50000000,\n        gas_price=10,\n        protected=False,\n        data=\"\",\n        sender=sender,\n    )\n\n    post = {caller_address: Account(storage={0: 1})}\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_execution_function.test_eof_functions_contract_call_fail","title":"test_eof_functions_contract_call_fail(state_test, pre, container)","text":"

    Test simple contracts that are simply expected to fail on call.

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py
    @pytest.mark.parametrize(\"container\", CALL_FAIL_CONTRACTS, ids=lambda x: x.name)\ndef test_eof_functions_contract_call_fail(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    container: Container,\n):\n    \"\"\"\n    Test simple contracts that are simply expected to fail on call.\n    \"\"\"\n    env = Environment()\n\n    sender = pre.fund_eoa()\n    container_address = pre.deploy_contract(container)\n    caller_contract = Op.SSTORE(Op.CALL(Op.GAS, container_address, 0, 0, 0, 0, 0), 1) + Op.STOP()\n    caller_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        to=caller_address,\n        gas_limit=50000000,\n        gas_price=10,\n        protected=False,\n        data=\"\",\n        sender=sender,\n    )\n\n    post = {caller_address: Account(storage={0: 1})}\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_execution_function.test_eof_functions_contract_call_within_deep_nested","title":"test_eof_functions_contract_call_within_deep_nested(state_test, pre)","text":"

    Test performing a call within a nested callf and verify correct behavior of return stack in calling contract.

    TODO: This test belongs in EIP-7069 test folder, not code validation.

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py
    def test_eof_functions_contract_call_within_deep_nested(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Test performing a call within a nested callf and verify correct behavior of\n    return stack in calling contract.\n\n    TODO: This test belongs in EIP-7069 test folder, not code validation.\n    \"\"\"\n    env = Environment()\n\n    nested_callee_address = pre.deploy_contract(code=Op.SSTORE(0, 1) + Op.STOP())\n    contract_call_within_deep_nested_callf = Container(\n        name=\"contract_call_within_deep_nested_callf\",\n        sections=[\n            Section.Code(\n                code=Op.CALLF[1] + Op.SSTORE(0, 1) + Op.STOP,\n            )\n        ]\n        + [\n            # All sections call next section and on return, store a 1\n            # to their call stack height key\n            Section.Code(\n                code=(Op.CALLF[i] + Op.SSTORE(i - 1, 1) + Op.RETF),\n                code_outputs=0,\n            )\n            for i in range(2, MAX_CODE_SECTIONS)\n        ]\n        + [\n            # Last section makes external contract call\n            Section.Code(\n                code=(\n                    Op.EXTCALL(nested_callee_address, 0, 0, 0)\n                    + Op.ISZERO\n                    + Op.PUSH2(MAX_CODE_SECTIONS - 1)\n                    + Op.SSTORE\n                    + Op.RETF\n                ),\n                code_outputs=0,\n            )\n        ],\n    )\n    callee_address = pre.deploy_contract(contract_call_within_deep_nested_callf)\n    sender = pre.fund_eoa()\n\n    tx = Transaction(\n        to=callee_address,\n        gas_limit=50000000,\n        gas_price=10,\n        protected=False,\n        data=\"\",\n        sender=sender,\n    )\n    post = {\n        callee_address: Account(storage={i: 1 for i in range(MAX_CODE_SECTIONS)}),\n        nested_callee_address: Account(\n            storage={\n                0: 1,\n            }\n        ),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function/index/test_cases/","title":"Test Execution Function - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py:

    test_eof_functions_contract_call_succeed[fork_CancunEIP7692-blockchain_test-function_finishes_contract_execution]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-blockchain_test-max_recursive_callf]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-blockchain_test-max_recursive_callf_sstore]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-blockchain_test-max_recursive_callf_memory]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-blockchain_test_engine-function_finishes_contract_execution]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-blockchain_test_engine-max_recursive_callf]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-blockchain_test_engine-max_recursive_callf_sstore]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-blockchain_test_engine-max_recursive_callf_memory]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-state_test-function_finishes_contract_execution]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-state_test-max_recursive_callf]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-state_test-max_recursive_callf_sstore]\ntest_eof_functions_contract_call_succeed[fork_CancunEIP7692-state_test-max_recursive_callf_memory]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-blockchain_test-invalid_opcode]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-blockchain_test-overflow_recursive_callf]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-blockchain_test-overflow_recursive_callf_sstore]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-blockchain_test-overflow_recursive_callf_memory]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-blockchain_test_engine-invalid_opcode]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-blockchain_test_engine-overflow_recursive_callf]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-blockchain_test_engine-overflow_recursive_callf_sstore]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-blockchain_test_engine-overflow_recursive_callf_memory]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-state_test-invalid_opcode]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-state_test-overflow_recursive_callf]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-state_test-overflow_recursive_callf_sstore]\ntest_eof_functions_contract_call_fail[fork_CancunEIP7692-state_test-overflow_recursive_callf_memory]\ntest_eof_functions_contract_call_within_deep_nested[fork_CancunEIP7692-blockchain_test]\ntest_eof_functions_contract_call_within_deep_nested[fork_CancunEIP7692-blockchain_test_engine]\ntest_eof_functions_contract_call_within_deep_nested[fork_CancunEIP7692-state_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode/","title":"Test Extcode","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    test execution semantics changes

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_extcode.test_legacy_calls_eof_sstore","title":"test_legacy_calls_eof_sstore(state_test, pre)","text":"

    Test EXTCODE* opcodes calling EOF and legacy contracts

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py
    def test_legacy_calls_eof_sstore(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"Test EXTCODE* opcodes calling EOF and legacy contracts\"\"\"\n    env = Environment()\n    address_eof_contract = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.RJUMP[0] + Op.STOP,\n                )\n            ]\n        )\n    )\n    legacy_code = Op.PUSH1(2) + Op.JUMPDEST + Op.STOP\n    address_legacy_contract = pre.deploy_contract(legacy_code)\n\n    storage_test = Storage()\n    test_contract_code = (\n        Op.SSTORE(storage_test.store_next(4), Op.EXTCODESIZE(address_legacy_contract))\n        + Op.EXTCODECOPY(address_legacy_contract, 0, 0, Op.EXTCODESIZE(address_legacy_contract))\n        + Op.SSTORE(\n            storage_test.store_next(bytes(legacy_code) + (b\"\\0\" * (32 - len(legacy_code)))),\n            Op.MLOAD(0),\n        )\n        + Op.SSTORE(\n            storage_test.store_next(legacy_code.keccak256()),\n            Op.EXTCODEHASH(address_legacy_contract),\n        )\n        + Op.SSTORE(storage_test.store_next(2), Op.EXTCODESIZE(address_eof_contract))\n        + Op.EXTCODECOPY(address_eof_contract, 0x20, 0, 6)\n        + Op.SSTORE(storage_test.store_next(b\"\\xef\" + (b\"\\0\" * 31)), Op.MLOAD(0x20))\n        + Op.SSTORE(\n            storage_test.store_next(keccak256(b\"\\xef\\x00\")),\n            Op.EXTCODEHASH(address_eof_contract),\n        )\n    )\n    address_test_contract = pre.deploy_contract(test_contract_code)\n\n    sender = pre.fund_eoa()\n\n    tx = Transaction(\n        sender=sender,\n        to=address_test_contract,\n        gas_limit=50_000_000,\n        gas_price=10,\n        protected=False,\n        data=\"\",\n    )\n\n    post = {\n        address_test_contract: Account(storage=storage_test),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode/index/test_cases/","title":"Test Extcode - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py:

    test_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test_engine]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-state_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid/","title":"Test Migrated Valid Invalid","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF validation tests for EIP-3540 migrated from ethereum/tests/src/EOFTestsFiller/EIP3540/validInvalidFiller.yml

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_migrated_valid_invalid.test_migrated_valid_invalid","title":"test_migrated_valid_invalid(eof_test, eof_code, exception)","text":"

    Verify EOF container construction and exception

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py
    @pytest.mark.parametrize(\n    \"eof_code,exception\",\n    [\n        pytest.param(\n            # Deployed code without data section\n            Container(\n                name=\"EOF1V3540_0001\",\n                sections=[\n                    Section.Code(code=Op.PUSH1[0] + Op.POP + Op.STOP),\n                ],\n            ),\n            None,\n            id=\"EOF1V3540_0001_deployed_code_without_data_section\",\n        ),\n        pytest.param(\n            # Deployed code with data section\n            Container(\n                name=\"EOF1V3540_0002\",\n                sections=[\n                    Section.Code(code=Op.PUSH1[0] + Op.POP + Op.STOP),\n                    Section.Data(\"aabbccdd\"),\n                ],\n            ),\n            None,\n            id=\"EOF1V3540_0002_deployed_code_with_data_section\",\n        ),\n        pytest.param(\n            # No data section contents\n            Container(\n                name=\"EOF1V3540_0003\",\n                sections=[\n                    Section.Code(code=Op.INVALID),\n                    Section.Data(custom_size=2),\n                ],\n            ),\n            EOFException.TOPLEVEL_CONTAINER_TRUNCATED,\n            id=\"EOF1V3540_0003_no_data_section_contents\",\n        ),\n        pytest.param(\n            # Data section contents incomplete\n            Container(\n                name=\"EOF1V3540_0004\",\n                sections=[\n                    Section.Code(code=Op.INVALID),\n                    Section.Data(\"aa\", custom_size=2),\n                ],\n            ),\n            EOFException.TOPLEVEL_CONTAINER_TRUNCATED,\n            id=\"EOF1V3540_0004_data_section_contents_incomplete\",\n        ),\n        pytest.param(\n            # Type section size incomplete\n            bytes.fromhex(\"ef00010100\"),\n            [EOFException.INCOMPLETE_SECTION_SIZE, EOFException.INVALID_TYPE_SECTION_SIZE],\n            id=\"EOF1I3540_0011_type_section_size_incomplete\",\n        ),\n        pytest.param(\n            # Empty code section with non-empty data section\n            Container(\n                sections=[Section.Code(code_outputs=0), Section.Data(\"aabb\")],\n                expected_bytecode=\"ef000101000402000100000400020000000000aabb\",\n            ),\n            EOFException.ZERO_SECTION_SIZE,\n            id=\"EOF1I3540_0012_empty_code_section_with_non_empty_data_section\",\n        ),\n        pytest.param(\n            Container(\n                name=\"EOF1I3540_0014 (Invalid) Total of code sections incomplete\",\n                raw_bytes=\"ef00010100040200\",\n            ),\n            EOFException.INCOMPLETE_SECTION_NUMBER,\n            id=\"EOF1I3540_0014_total_of_code_sections_incomplete\",\n        ),\n        pytest.param(\n            Container(\n                name=\"EOF1I3540_0016 (Invalid) Code section size incomplete\",\n                raw_bytes=\"0xef000101000402000100\",\n            ),\n            [EOFException.INCOMPLETE_SECTION_SIZE, EOFException.ZERO_SECTION_SIZE],\n            id=\"EOF1I3540_0016_code_section_size_incomplete\",\n        ),\n        pytest.param(\n            # No data section after code section size\n            bytes.fromhex(\"ef00010100040200010001\"),\n            EOFException.MISSING_HEADERS_TERMINATOR,\n            id=\"EOF1I3540_0017_no_data_section_after_code_section_size\",\n        ),\n        pytest.param(\n            # No data size\n            bytes.fromhex(\"ef0001010004020001000104\"),\n            [EOFException.MISSING_HEADERS_TERMINATOR, EOFException.INCOMPLETE_DATA_HEADER],\n            id=\"EOF1I3540_0018_no_data_size\",\n        ),\n        pytest.param(\n            # Data size incomplete\n            bytes.fromhex(\"ef000101000402000100010400\"),\n            [EOFException.INCOMPLETE_SECTION_SIZE, EOFException.INCOMPLETE_DATA_HEADER],\n            id=\"EOF1I3540_0019_data_size_incomplete\",\n        ),\n        pytest.param(\n            # No section terminator after data section size\n            bytes.fromhex(\"ef00010100040200010001040002\"),\n            EOFException.MISSING_HEADERS_TERMINATOR,\n            id=\"EOF1I3540_0020_no_section_terminator_after_data_section_size\",\n        ),\n        pytest.param(\n            # No type section contents\n            bytes.fromhex(\"ef0001010004020001000104000200\"),\n            EOFException.INVALID_SECTION_BODIES_SIZE,\n            id=\"EOF1I3540_0021_no_type_section_contents\",\n        ),\n        pytest.param(\n            # Type section contents (no outputs and max stack)\n            bytes.fromhex(\"ef000101000402000100010400020000\"),\n            EOFException.INVALID_SECTION_BODIES_SIZE,\n            id=\"EOF1I3540_0022_invalid_type_section_no_outputs_and_max_stack\",\n        ),\n        pytest.param(\n            # Type section contents (no max stack)\n            bytes.fromhex(\"ef00010100040200010001040002000000\"),\n            EOFException.INVALID_SECTION_BODIES_SIZE,\n            id=\"EOF1I3540_0023_invalid_type_section_no_max_stack\",\n        ),\n        pytest.param(\n            # Type section contents (max stack incomplete)\n            bytes.fromhex(\"ef0001010004020001000104000200000000\"),\n            EOFException.INVALID_SECTION_BODIES_SIZE,\n            id=\"EOF1I3540_0024_invalid_type_section_max_stack_incomplete\",\n        ),\n        pytest.param(\n            # No code section contents\n            bytes.fromhex(\"ef000101000402000100010400020000000000\"),\n            EOFException.INVALID_SECTION_BODIES_SIZE,\n            id=\"EOF1I3540_0025_no_code_section_contents\",\n        ),\n        pytest.param(\n            # Code section contents incomplete\n            bytes.fromhex(\"ef0001010004020001002904000000000000027f\"),\n            EOFException.INVALID_SECTION_BODIES_SIZE,\n            id=\"EOF1I3540_0026_code_section_contents_incomplete\",\n        ),\n        pytest.param(\n            # Trailing bytes after code section\n            bytes.fromhex(\"ef0001 010004 0200010001 040000 00 00800000 fe aabbcc\"),\n            EOFException.INVALID_SECTION_BODIES_SIZE,\n            id=\"EOF1I3540_0027_trailing_bytes_after_code_section\",\n        ),\n        pytest.param(\n            # Trailing bytes after code section with wrong first section type\n            bytes.fromhex(\"ef0001 010004 0200010001 040000 00 00000000 fe aabbcc\"),\n            EOFException.INVALID_FIRST_SECTION_TYPE,\n            id=\"EOF1I3540_0027_trailing_bytes_after_code_section_with_wrong_first_section_type\",\n        ),\n        pytest.param(\n            # Empty code section\n            bytes.fromhex(\"ef000101000402000100000400000000000000\"),\n            EOFException.ZERO_SECTION_SIZE,\n            id=\"EOF1I3540_0028_empty_code_section\",\n        ),\n        pytest.param(\n            # Code section preceding type section\n            bytes.fromhex(\"ef000102000100010100040400020000000000feaabb\"),\n            [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0030_code_section_preceding_type_section\",\n        ),\n        pytest.param(\n            # Data section preceding type section\n            bytes.fromhex(\"ef000104000201000402000100010000000000feaabb\"),\n            [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0031_data_section_preceding_type_section\",\n        ),\n        pytest.param(\n            # Data section preceding code section\n            bytes.fromhex(\"ef000101000404000202000100010000000000feaabb\"),\n            [EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0032_data_section_preceding_code_section\",\n        ),\n        pytest.param(\n            # Data section without code section\n            bytes.fromhex(\"ef00010100040400020000000000aabb\"),\n            [EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0033_data_section_without_code_section\",\n        ),\n        pytest.param(\n            # No data section\n            bytes.fromhex(\"ef000101000402000100010000000000fe\"),\n            [EOFException.MISSING_DATA_SECTION, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0034_no_data_section\",\n        ),\n        pytest.param(\n            # Trailing bytes after data section\n            Container(\n                sections=[\n                    Section.Code(Op.INVALID),\n                    Section.Data(\"aabb\"),\n                ],\n                extra=\"ccdd\",\n                expected_bytecode=\"ef0001 010004 0200010001 040002 00 00800000 fe aabbccdd\",\n            ),\n            EOFException.INVALID_SECTION_BODIES_SIZE,\n            id=\"EOF1I3540_0035_trailing_bytes_after_data_section\",\n        ),\n        pytest.param(\n            # Trailing bytes after data section with wrong first section type\n            bytes.fromhex(\"ef0001 010004 0200010001 040002 00 00000000 fe aabbccdd\"),\n            EOFException.INVALID_FIRST_SECTION_TYPE,\n            id=\"EOF1I3540_0035_trailing_bytes_after_data_section_with_wrong_first_section_type\",\n        ),\n        pytest.param(\n            # Multiple data sections\n            bytes.fromhex(\"ef000101000402000100010400020400020000000000feaabbaabb\"),\n            [EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0036_multiple_data_sections\",\n        ),\n        pytest.param(\n            # Multiple code and data sections\n            bytes.fromhex(\"ef000101000802000200010001040002040002000000000000000000fefeaabbaabb\"),\n            [EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0037_multiple_code_and_data_sections\",\n        ),\n        pytest.param(\n            # Unknown section ID (at the beginning)\n            bytes.fromhex(\"ef000105000101000402000100010400000000000000fe\"),\n            [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0038_unknown_section_id_at_the_beginning_05\",\n        ),\n        pytest.param(\n            # Unknown section ID (at the beginning)\n            bytes.fromhex(\"ef000106000101000402000100010400000000000000fe\"),\n            [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0039_unknown_section_id_at_the_beginning_06\",\n        ),\n        pytest.param(\n            # Unknown section ID (at the beginning)\n            bytes.fromhex(\"ef0001ff000101000402000100010400000000000000fe\"),\n            [EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0040_unknown_section_id_at_the_beginning_ff\",\n        ),\n        pytest.param(\n            # Unknown section ID (after types section)\n            bytes.fromhex(\"ef000101000405000102000100010400000000000000fe\"),\n            [EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0041_unknown_section_id_after_types_section_05\",\n        ),\n        pytest.param(\n            # Unknown section ID (after types section)\n            bytes.fromhex(\"ef000101000406000102000100010400000000000000fe\"),\n            [EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0042_unknown_section_id_after_types_section_06\",\n        ),\n        pytest.param(\n            # Unknown section ID (after types section)\n            bytes.fromhex(\"ef0001010004ff000102000100010400000000000000fe\"),\n            [EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0043_unknown_section_id_after_types_section_ff\",\n        ),\n        pytest.param(\n            # Unknown section ID (after code section)\n            bytes.fromhex(\"ef000101000402000100010500010400000000000000fe\"),\n            [EOFException.MISSING_DATA_SECTION, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0044_unknown_section_id_after_code_section_05\",\n        ),\n        pytest.param(\n            # Unknown section ID (after code section)\n            bytes.fromhex(\"ef000101000402000100010600010400000000000000fe\"),\n            [EOFException.MISSING_DATA_SECTION, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0045_unknown_section_id_after_code_section_06\",\n        ),\n        pytest.param(\n            # Unknown section ID (after code section)\n            bytes.fromhex(\"ef00010100040200010001ff00010400000000000000fe\"),\n            [EOFException.MISSING_DATA_SECTION, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0046_unknown_section_id_after_code_section_ff\",\n        ),\n        pytest.param(\n            # Unknown section ID (after data section)\n            bytes.fromhex(\"ef000101000402000100010400000500010000000000fe\"),\n            [EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0047_unknown_section_id_after_data_section_05\",\n        ),\n        pytest.param(\n            # Unknown section ID (after data section)\n            bytes.fromhex(\"ef000101000402000100010400000600010000000000fe\"),\n            [EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0048_unknown_section_id_after_data_section_06\",\n        ),\n        pytest.param(\n            # Unknown section ID (after data section)\n            bytes.fromhex(\"ef00010100040200010001040000ff00010000000000fe\"),\n            [EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n            id=\"EOF1I3540_0049_unknown_section_id_after_data_section_ff\",\n        ),\n        # TODO: Duplicated tests\n        # The following test cases are duplicates but added to confirm test coverage is retained.\n        pytest.param(\n            Container(\n                name=\"EOF1I3540_0001 (Invalid) No magic\",\n                raw_bytes=\"ef\",\n            ),\n            EOFException.INVALID_MAGIC,\n            id=\"EOF1I3540_0001_invalid_no_magic\",\n        ),\n        pytest.param(\n            Container(\n                name=\"EOF1I3540_0002 (Invalid) Invalid magic\",\n                raw_bytes=\"ef010101000402000100010400000000000000fe\",\n            ),\n            EOFException.INVALID_MAGIC,\n            id=\"EOF1I3540_0002_invalid_incorrect_magic_01\",\n        ),\n        pytest.param(\n            Container(\n                name=\"EOF1I3540_0003\",\n                raw_bytes=\"ef020101000402000100010400000000000000fe\",\n            ),\n            EOFException.INVALID_MAGIC,\n            id=\"EOF1I3540_0003_invalid_incorrect_magic_02\",\n        ),\n        pytest.param(\n            Container(\n                name=\"EOF1I3540_0004\",\n                raw_bytes=\"efff0101000402000100010400000000000000fe\",\n            ),\n            EOFException.INVALID_MAGIC,\n            id=\"EOF1I3540_0004_invalid_incorrect_magic_ff\",\n        ),\n        pytest.param(\n            Container(\n                name=\"EOF1I3540_0005 (Invalid) No version\",\n                raw_bytes=\"ef00\",\n            ),\n            [EOFException.INVALID_VERSION, EOFException.INVALID_MAGIC],\n            id=\"EOF1I3540_0005_invalid_no_version\",\n        ),\n        pytest.param(\n            Container(\n                name=\"EOF1I3540_0006 (Invalid) Invalid version\",\n                raw_bytes=\"ef000001000402000100010400000000000000fe\",\n            ),\n            EOFException.INVALID_VERSION,\n            id=\"EOF1I3540_0006_invalid_incorrect_version_00\",\n        ),\n        pytest.param(\n            Container(\n                name=\"EOF1I3540_0007\",\n                raw_bytes=\"ef000201000402000100010400000000000000fe\",\n            ),\n            EOFException.INVALID_VERSION,\n            id=\"EOF1I3540_0007_invalid_incorrect_version_02\",\n        ),\n        pytest.param(\n            Container(\n                name=\"EOF1I3540_0008\",\n                raw_bytes=\"ef00ff01000402000100010400000000000000fe\",\n            ),\n            EOFException.INVALID_VERSION,\n            id=\"EOF1I3540_0008_invalid_incorrect_version_ff\",\n        ),\n    ],\n)\ndef test_migrated_valid_invalid(\n    eof_test: EOFTestFiller,\n    eof_code: Container | bytes,\n    exception: EOFExceptionInstanceOrList | None,\n):\n    \"\"\"\n    Verify EOF container construction and exception\n    \"\"\"\n    eof_test(\n        data=eof_code,\n        expect_exception=exception,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid/index/test_cases/","title":"Test Migrated Valid Invalid - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py:

    test_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1V3540_0001_deployed_code_without_data_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1V3540_0002_deployed_code_with_data_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1V3540_0003_no_data_section_contents]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1V3540_0004_data_section_contents_incomplete]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0011_type_section_size_incomplete]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0012_empty_code_section_with_non_empty_data_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0014_total_of_code_sections_incomplete]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0016_code_section_size_incomplete]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0017_no_data_section_after_code_section_size]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0018_no_data_size]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0019_data_size_incomplete]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0020_no_section_terminator_after_data_section_size]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0021_no_type_section_contents]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0022_invalid_type_section_no_outputs_and_max_stack]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0023_invalid_type_section_no_max_stack]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0024_invalid_type_section_max_stack_incomplete]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0025_no_code_section_contents]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0026_code_section_contents_incomplete]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0027_trailing_bytes_after_code_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0027_trailing_bytes_after_code_section_with_wrong_first_section_type]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0028_empty_code_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0030_code_section_preceding_type_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0031_data_section_preceding_type_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0032_data_section_preceding_code_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0033_data_section_without_code_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0034_no_data_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0035_trailing_bytes_after_data_section]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0035_trailing_bytes_after_data_section_with_wrong_first_section_type]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0036_multiple_data_sections]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0037_multiple_code_and_data_sections]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0038_unknown_section_id_at_the_beginning_05]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0039_unknown_section_id_at_the_beginning_06]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0040_unknown_section_id_at_the_beginning_ff]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0041_unknown_section_id_after_types_section_05]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0042_unknown_section_id_after_types_section_06]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0043_unknown_section_id_after_types_section_ff]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0044_unknown_section_id_after_code_section_05]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0045_unknown_section_id_after_code_section_06]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0046_unknown_section_id_after_code_section_ff]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0047_unknown_section_id_after_data_section_05]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0048_unknown_section_id_after_data_section_06]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0049_unknown_section_id_after_data_section_ff]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0001_invalid_no_magic]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0002_invalid_incorrect_magic_01]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0003_invalid_incorrect_magic_02]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0004_invalid_incorrect_magic_ff]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0005_invalid_no_version]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0006_invalid_incorrect_version_00]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0007_invalid_incorrect_version_02]\ntest_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1I3540_0008_invalid_incorrect_version_ff]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch/","title":"Test Section Header Body Mismatch","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF Container construction test

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_section_header_body_mismatch.test_code_section_header_body_mismatch","title":"test_code_section_header_body_mismatch(eof_test, skip_header_listing, skip_body_listing, skip_types_body_listing, skip_types_header_listing, expected_code, expected_exception)","text":"

    Inconsistent number of code sections (between types and code)

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch.py
    @pytest.mark.parametrize(\n    **extend_with_defaults(\n        defaults=dict(\n            skip_header_listing=False,  # second section is mentioned in code header array\n            skip_body_listing=False,  # second section code is in container's body\n            skip_types_body_listing=False,  # code input bytes not listed in container's body\n            skip_types_header_listing=False,  # code input bytes size not added to types section size  # noqa: E501\n            expected_code=\"\",\n            expected_exception=None,\n        ),\n        cases=[\n            pytest.param(\n                dict(\n                    skip_header_listing=True,\n                    skip_body_listing=True,\n                    expected_code=\"ef000101000802000100030400040000800001000000003050000bad60A7\",\n                    expected_exception=[\n                        EOFException.INVALID_TYPE_SECTION_SIZE,\n                        EOFException.INVALID_SECTION_BODIES_SIZE,\n                    ],\n                ),\n                id=\"drop_code_section_and_header\",\n            ),\n            pytest.param(\n                dict(\n                    skip_header_listing=True,\n                    skip_body_listing=False,\n                    expected_code=\"ef000101000802000100030400040000800001000000003050003050000bad60A7\",  # noqa: E501\n                    expected_exception=[\n                        EOFException.INVALID_TYPE_SECTION_SIZE,\n                        EOFException.INVALID_SECTION_BODIES_SIZE,\n                    ],\n                ),\n                id=\"drop_code_header\",\n            ),\n            pytest.param(\n                dict(\n                    skip_header_listing=False,\n                    skip_body_listing=True,\n                    expected_code=\"ef0001010008020002000300030400040000800001000000003050000bad60A7\",  # noqa: E501\n                    expected_exception=[\n                        EOFException.UNREACHABLE_CODE_SECTIONS,\n                        EOFException.TOPLEVEL_CONTAINER_TRUNCATED,\n                    ],\n                ),\n                id=\"drop_code_section\",\n            ),\n            pytest.param(\n                dict(\n                    skip_header_listing=False,\n                    skip_body_listing=False,\n                    expected_code=\"ef0001010008020002000300030400040000800001000000003050003050000bad60A7\",  # noqa: E501\n                    expected_exception=EOFException.UNREACHABLE_CODE_SECTIONS,\n                ),\n                id=\"layout_ok_code_bad\",\n            ),\n            pytest.param(\n                dict(\n                    skip_header_listing=True,\n                    skip_body_listing=True,\n                    skip_types_body_listing=True,\n                    expected_code=\"ef0001010008020001000304000400008000013050000bad60a7\",\n                    expected_exception=[\n                        EOFException.INVALID_TYPE_SECTION_SIZE,\n                        EOFException.INVALID_SECTION_BODIES_SIZE,\n                    ],\n                ),\n                id=\"drop_types_header\",\n            ),\n            pytest.param(\n                dict(\n                    skip_header_listing=True,\n                    skip_body_listing=True,\n                    skip_types_body_listing=True,\n                    skip_types_header_listing=True,\n                    expected_code=\"ef0001010004020001000304000400008000013050000bad60a7\",\n                    expected_exception=None,\n                ),\n                id=\"drop_everything\",\n            ),\n        ],\n    )\n)\ndef test_code_section_header_body_mismatch(\n    eof_test: EOFTestFiller,\n    skip_header_listing: bool,\n    skip_body_listing: bool,\n    skip_types_body_listing: bool,\n    skip_types_header_listing: bool,\n    expected_code: str,\n    expected_exception: EOFExceptionInstanceOrList | None,\n):\n    \"\"\"\n    Inconsistent number of code sections (between types and code)\n    \"\"\"\n    eof_code = Container(\n        name=\"EOF1I0018\",\n        sections=[\n            Section.Code(\n                code=Op.ADDRESS + Op.POP + Op.STOP,\n            ),\n            Section.Code(\n                code=Op.ADDRESS + Op.POP + Op.STOP,\n                code_inputs=0,\n                code_outputs=0,\n                max_stack_height=0,\n                # whether to not mention it in code section header list\n                skip_header_listing=skip_header_listing,\n                # whether to not print its code in containers body\n                skip_body_listing=skip_body_listing,\n                # whether to not print its input bytes in containers body\n                skip_types_body_listing=skip_types_body_listing,\n                # whether to not calculate its input bytes size in types section's header\n                skip_types_header_listing=skip_types_header_listing,\n            ),\n            Section.Data(\"0x0bad60A7\"),\n        ],\n    )\n\n    # TODO remove this after Container class implementation is reliable\n    assert bytes(eof_code).hex() == bytes.fromhex(expected_code).hex()\n\n    eof_test(\n        data=eof_code,\n        expect_exception=expected_exception,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch/index/test_cases/","title":"Test Section Header Body Mismatch - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch.py:

    test_code_section_header_body_mismatch[fork_CancunEIP7692-eof_test-drop_code_section_and_header]\ntest_code_section_header_body_mismatch[fork_CancunEIP7692-eof_test-drop_code_header]\ntest_code_section_header_body_mismatch[fork_CancunEIP7692-eof_test-drop_code_section]\ntest_code_section_header_body_mismatch[fork_CancunEIP7692-eof_test-layout_ok_code_bad]\ntest_code_section_header_body_mismatch[fork_CancunEIP7692-eof_test-drop_types_header]\ntest_code_section_header_body_mismatch[fork_CancunEIP7692-eof_test-drop_everything]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order/","title":"Test Section Order","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Different variations of EOF sections displacement

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_section_order.test_section_order","title":"test_section_order(eof_test, section_kind, section_test, test_position)","text":"

    Test sections order and it appearance in body and header

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py
    @pytest.mark.parametrize(\"section_kind\", [SectionKind.TYPE, SectionKind.CODE, SectionKind.DATA])\n@pytest.mark.parametrize(\"section_test\", [SectionTest.MISSING, SectionTest.WRONG_ORDER])\n@pytest.mark.parametrize(\n    \"test_position\", [CasePosition.BODY, CasePosition.HEADER, CasePosition.BODY_AND_HEADER]\n)\ndef test_section_order(\n    eof_test: EOFTestFiller,\n    section_kind: SectionKind,\n    section_test: SectionTest,\n    test_position: CasePosition,\n):\n    \"\"\"\n    Test sections order and it appearance in body and header\n    \"\"\"\n\n    def calculate_skip_flag(kind, position) -> bool:\n        return (\n            False\n            if (section_kind != kind)\n            else (\n                True\n                if section_test == SectionTest.MISSING\n                and (test_position == position or test_position == CasePosition.BODY_AND_HEADER)\n                else False\n            )\n        )\n\n    def make_section_order(kind) -> List[Section]:\n        if section_test != SectionTest.WRONG_ORDER:\n            return [section_type, section_code, section_data]\n        if kind == SectionKind.TYPE:\n            return [section_code, section_type, section_data]\n        if kind == SectionKind.CODE:\n            return [section_type, section_data, section_code]\n        if kind == SectionKind.DATA:\n            return [section_data, section_type, section_code]\n        return [section_type, section_code, section_data]\n\n    section_code = Section.Code(\n        code=Op.ADDRESS + Op.POP + Op.STOP,\n        skip_header_listing=calculate_skip_flag(SectionKind.CODE, CasePosition.HEADER),\n        skip_body_listing=calculate_skip_flag(SectionKind.CODE, CasePosition.BODY),\n    )\n    section_type = Section(\n        kind=SectionKind.TYPE,\n        data=bytes.fromhex(\"00800001\"),\n        custom_size=4,\n        skip_header_listing=calculate_skip_flag(SectionKind.TYPE, CasePosition.HEADER),\n        skip_body_listing=calculate_skip_flag(SectionKind.TYPE, CasePosition.BODY),\n    )\n    section_data = Section.Data(\n        \"ef\",\n        skip_header_listing=calculate_skip_flag(SectionKind.DATA, CasePosition.HEADER),\n        skip_body_listing=calculate_skip_flag(SectionKind.DATA, CasePosition.BODY),\n    )\n\n    expected_code, expected_exception = get_expected_code_exception(\n        section_kind, section_test, test_position\n    )\n\n    eof_code = Container(\n        sections=make_section_order(section_kind),\n        auto_type_section=AutoSection.NONE,\n        auto_sort_sections=(\n            AutoSection.AUTO\n            if section_test != SectionTest.WRONG_ORDER\n            else (\n                AutoSection.ONLY_BODY\n                if test_position == CasePosition.HEADER\n                else (\n                    AutoSection.ONLY_HEADER\n                    if test_position == CasePosition.BODY\n                    else AutoSection.NONE\n                )\n            )\n        ),\n        expected_bytecode=expected_code,\n    )\n\n    eof_test(\n        data=eof_code,\n        expect_exception=expected_exception,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_section_order.test_container_section_order","title":"test_container_section_order(eof_test, container_position, test_position)","text":"

    Test containers section being out of order in the header and/or body. This extends and follows the convention of the test_section_order() for the optional container section.

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py
    @pytest.mark.parametrize(\"container_position\", range(4))\n@pytest.mark.parametrize(\n    \"test_position\", [CasePosition.BODY, CasePosition.HEADER, CasePosition.BODY_AND_HEADER]\n)\ndef test_container_section_order(\n    eof_test: EOFTestFiller,\n    container_position: int,\n    test_position: CasePosition,\n):\n    \"\"\"\n    Test containers section being out of order in the header and/or body.\n    This extends and follows the convention of the test_section_order()\n    for the optional container section.\n    \"\"\"\n    section_code = Section.Code(\n        code=Op.EOFCREATE[0](0, 0, 0, 0)\n        # TODO: Migrated tests had the following infinite loop, so it is kept here\n        #       to equalize code coverage.\n        + Op.RJUMP[0]\n        + Op.STOP()\n    )\n    section_type = Section(kind=SectionKind.TYPE, data=bytes.fromhex(\"00800004\"))\n    section_data = Section.Data(\"ef\")\n    section_container = Section.Container(Container.Code(Op.INVALID))\n\n    sections = [section_type, section_code, section_data]\n    sections.insert(container_position, section_container)\n    eof_code = Container(\n        sections=sections,\n        auto_type_section=AutoSection.NONE,\n        auto_sort_sections=(\n            AutoSection.ONLY_BODY\n            if test_position == CasePosition.HEADER\n            else (\n                AutoSection.ONLY_HEADER if test_position == CasePosition.BODY else AutoSection.NONE\n            )\n        ),\n    )\n\n    def get_expected_exception():\n        match container_position, test_position:\n            case 2, _:\n                return None  # Valid containers section position\n            case 0, CasePosition.BODY:  # Messes up with the type section\n                return EOFException.INVALID_FIRST_SECTION_TYPE\n            case 1, CasePosition.BODY:  # Messes up with the code section\n                return EOFException.UNDEFINED_INSTRUCTION\n            case 3, CasePosition.BODY:  # Data section messes up with the container section\n                return EOFException.INVALID_MAGIC\n            case 0, CasePosition.HEADER | CasePosition.BODY_AND_HEADER:\n                return EOFException.MISSING_TYPE_HEADER\n            case 1, CasePosition.HEADER | CasePosition.BODY_AND_HEADER:\n                return EOFException.MISSING_CODE_HEADER\n            case 3, CasePosition.HEADER | CasePosition.BODY_AND_HEADER:\n                return EOFException.MISSING_TERMINATOR\n\n    eof_test(\n        data=eof_code,\n        expect_exception=get_expected_exception(),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order/index/test_cases/","title":"Test Section Order - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py:

    test_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-section_test_SectionTest.MISSING-section_kind_TYPE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-section_test_SectionTest.MISSING-section_kind_CODE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-section_test_SectionTest.MISSING-section_kind_DATA]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-section_test_SectionTest.WRONG_ORDER-section_kind_TYPE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-section_test_SectionTest.WRONG_ORDER-section_kind_CODE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-section_test_SectionTest.WRONG_ORDER-section_kind_DATA]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.HEADER-section_test_SectionTest.MISSING-section_kind_TYPE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.HEADER-section_test_SectionTest.MISSING-section_kind_CODE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.HEADER-section_test_SectionTest.MISSING-section_kind_DATA]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.HEADER-section_test_SectionTest.WRONG_ORDER-section_kind_TYPE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.HEADER-section_test_SectionTest.WRONG_ORDER-section_kind_CODE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.HEADER-section_test_SectionTest.WRONG_ORDER-section_kind_DATA]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY_AND_HEADER-section_test_SectionTest.MISSING-section_kind_TYPE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY_AND_HEADER-section_test_SectionTest.MISSING-section_kind_CODE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY_AND_HEADER-section_test_SectionTest.MISSING-section_kind_DATA]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY_AND_HEADER-section_test_SectionTest.WRONG_ORDER-section_kind_TYPE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY_AND_HEADER-section_test_SectionTest.WRONG_ORDER-section_kind_CODE]\ntest_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY_AND_HEADER-section_test_SectionTest.WRONG_ORDER-section_kind_DATA]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-container_position_0]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-container_position_1]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-container_position_2]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-container_position_3]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.HEADER-container_position_0]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.HEADER-container_position_1]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.HEADER-container_position_2]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.HEADER-container_position_3]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY_AND_HEADER-container_position_0]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY_AND_HEADER-container_position_1]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY_AND_HEADER-container_position_2]\ntest_container_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY_AND_HEADER-container_position_3]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size/","title":"Test Section Size","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF Container, test custom_size field for sections

    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_section_size.test_section_size","title":"test_section_size(eof_test, section_size, section_kind, exception)","text":"

    Test custom_size is auto, more or less then the actual size of the section

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py
    @pytest.mark.parametrize(\n    \"section_kind, section_size, exception\",\n    [\n        pytest.param(SectionKind.DATA, SectionSize.NORMAL, None),\n        pytest.param(SectionKind.DATA, SectionSize.ZERO, EOFException.INVALID_SECTION_BODIES_SIZE),\n        pytest.param(\n            SectionKind.DATA, SectionSize.UNDERSIZE, EOFException.INVALID_SECTION_BODIES_SIZE\n        ),\n        pytest.param(\n            SectionKind.DATA, SectionSize.OVERSIZE, EOFException.TOPLEVEL_CONTAINER_TRUNCATED\n        ),\n        pytest.param(\n            SectionKind.DATA, SectionSize.HUGE, EOFException.TOPLEVEL_CONTAINER_TRUNCATED\n        ),\n        pytest.param(SectionKind.DATA, SectionSize.MAX, EOFException.TOPLEVEL_CONTAINER_TRUNCATED),\n        pytest.param(SectionKind.CODE, SectionSize.NORMAL, None),\n        pytest.param(SectionKind.CODE, SectionSize.ZERO, EOFException.ZERO_SECTION_SIZE),\n        pytest.param(\n            SectionKind.CODE, SectionSize.UNDERSIZE, EOFException.INVALID_SECTION_BODIES_SIZE\n        ),\n        pytest.param(\n            SectionKind.CODE, SectionSize.OVERSIZE, EOFException.INVALID_SECTION_BODIES_SIZE\n        ),\n        pytest.param(SectionKind.CODE, SectionSize.HUGE, EOFException.INVALID_SECTION_BODIES_SIZE),\n        pytest.param(SectionKind.CODE, SectionSize.MAX, EOFException.INVALID_SECTION_BODIES_SIZE),\n        pytest.param(SectionKind.TYPE, SectionSize.NORMAL, None),\n        pytest.param(\n            SectionKind.TYPE,\n            SectionSize.ZERO,\n            [EOFException.ZERO_SECTION_SIZE, EOFException.INVALID_SECTION_BODIES_SIZE],\n            id=\"type_size_zero\",\n        ),\n        pytest.param(\n            SectionKind.TYPE, SectionSize.UNDERSIZE, EOFException.INVALID_TYPE_SECTION_SIZE\n        ),\n        pytest.param(\n            SectionKind.TYPE, SectionSize.OVERSIZE, EOFException.INVALID_SECTION_BODIES_SIZE\n        ),\n        pytest.param(SectionKind.TYPE, SectionSize.HUGE, EOFException.INVALID_SECTION_BODIES_SIZE),\n        pytest.param(\n            SectionKind.TYPE,\n            SectionSize.MAX,\n            [EOFException.INVALID_SECTION_BODIES_SIZE, EOFException.INVALID_TYPE_SECTION_SIZE],\n            id=\"type_size_max\",\n        ),\n    ],\n)\ndef test_section_size(\n    eof_test: EOFTestFiller,\n    section_size: SectionSize,\n    section_kind: SectionKind,\n    exception: EOFExceptionInstanceOrList,\n):\n    \"\"\"\n    Test custom_size is auto, more or less then the actual size of the section\n    \"\"\"\n    eof_code = Container()\n\n    if section_size != SectionSize.NORMAL and section_kind == SectionKind.TYPE:\n        eof_code.sections.append(\n            Section(\n                kind=SectionKind.TYPE,\n                data=\"0x00800001\",\n                custom_size=section_size,\n            ),\n        )\n\n    if section_size != SectionSize.NORMAL and section_kind == SectionKind.CODE:\n        eof_code.sections.append(\n            Section.Code(\n                code=Op.ADDRESS + Op.POP + Op.STOP,\n                max_stack_height=1,\n                custom_size=section_size,\n            )\n        )\n    else:\n        eof_code.sections.append(\n            Section.Code(\n                code=Op.ADDRESS + Op.POP + Op.STOP,\n                max_stack_height=1,\n            )\n        )\n\n    if section_size != SectionSize.NORMAL and section_kind == SectionKind.DATA:\n        eof_code.sections.append(Section.Data(\"0x00daaa\", custom_size=section_size))\n    else:\n        eof_code.sections.append(Section.Data(\"0x00aaaa\"))\n\n    eof_test(\n        data=eof_code,\n        expect_exception=exception,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_section_size.test_truncated_container_without_data","title":"test_truncated_container_without_data(eof_test, truncation_len, exception)","text":"

    This test takes a semi-valid container and removes some bytes from its tail. Migrated from EOFTests/efValidation/EOF1_truncated_section_.json (cases without data section).

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py
    @pytest.mark.parametrize(\n    \"truncation_len, exception\",\n    [\n        # The original container is not valid by itself because its 2-byte code section\n        # starts with the terminating instruction: INVALID.\n        pytest.param(0, EOFException.UNREACHABLE_INSTRUCTIONS),\n        pytest.param(1, EOFException.INVALID_SECTION_BODIES_SIZE, id=\"EOF1_truncated_section_2\"),\n        pytest.param(3, EOFException.INVALID_SECTION_BODIES_SIZE, id=\"EOF1_truncated_section_1\"),\n        pytest.param(6, EOFException.INVALID_SECTION_BODIES_SIZE, id=\"EOF1_truncated_section_0\"),\n    ],\n)\ndef test_truncated_container_without_data(\n    eof_test: EOFTestFiller,\n    truncation_len: int,\n    exception: EOFException,\n):\n    \"\"\"\n    This test takes a semi-valid container and removes some bytes from its tail.\n    Migrated from EOFTests/efValidation/EOF1_truncated_section_.json (cases without data section).\n    \"\"\"\n    container = Container(sections=[Section.Code(Op.INVALID + Op.INVALID)])\n    bytecode = bytes(container)\n    eof_test(\n        data=bytecode[: len(bytecode) - truncation_len],\n        expect_exception=exception,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_section_size.test_truncated_container_with_data","title":"test_truncated_container_with_data(eof_test, truncation_len, exception)","text":"

    This test takes a valid container with data and removes some bytes from its tail. Migrated from EOFTests/efValidation/EOF1_truncated_section_.json (cases with data section).

    Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py
    @pytest.mark.parametrize(\n    \"truncation_len, exception\",\n    [\n        pytest.param(0, None),\n        pytest.param(1, EOFException.TOPLEVEL_CONTAINER_TRUNCATED, id=\"EOF1_truncated_section_4\"),\n        pytest.param(2, EOFException.TOPLEVEL_CONTAINER_TRUNCATED, id=\"EOF1_truncated_section_3\"),\n    ],\n)\ndef test_truncated_container_with_data(\n    eof_test: EOFTestFiller,\n    truncation_len: int,\n    exception: EOFException,\n):\n    \"\"\"\n    This test takes a valid container with data and removes some bytes from its tail.\n    Migrated from EOFTests/efValidation/EOF1_truncated_section_.json (cases with data section).\n    \"\"\"\n    container = Container(sections=[Section.Code(Op.INVALID), Section.Data(\"aabb\")])\n    bytecode = bytes(container)\n    eof_test(\n        data=bytecode[: len(bytecode) - truncation_len],\n        expect_exception=exception,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size/index/test_cases/","title":"Test Section Size - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py:

    test_section_size[fork_CancunEIP7692-eof_test-section_kind_DATA-section_size_NORMAL-exception_None]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_DATA-section_size_ZERO-exception_EOFException.INVALID_SECTION_BODIES_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_DATA-section_size_UNDERSIZE-exception_EOFException.INVALID_SECTION_BODIES_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_DATA-section_size_OVERSIZE-exception_EOFException.TOPLEVEL_CONTAINER_TRUNCATED]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_DATA-section_size_HUGE-exception_EOFException.TOPLEVEL_CONTAINER_TRUNCATED]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_DATA-section_size_MAX-exception_EOFException.TOPLEVEL_CONTAINER_TRUNCATED]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_CODE-section_size_NORMAL-exception_None]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_CODE-section_size_ZERO-exception_EOFException.ZERO_SECTION_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_CODE-section_size_UNDERSIZE-exception_EOFException.INVALID_SECTION_BODIES_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_CODE-section_size_OVERSIZE-exception_EOFException.INVALID_SECTION_BODIES_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_CODE-section_size_HUGE-exception_EOFException.INVALID_SECTION_BODIES_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_CODE-section_size_MAX-exception_EOFException.INVALID_SECTION_BODIES_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_TYPE-section_size_NORMAL-exception_None]\ntest_section_size[fork_CancunEIP7692-eof_test-type_size_zero]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_TYPE-section_size_UNDERSIZE-exception_EOFException.INVALID_TYPE_SECTION_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_TYPE-section_size_OVERSIZE-exception_EOFException.INVALID_SECTION_BODIES_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_TYPE-section_size_HUGE-exception_EOFException.INVALID_SECTION_BODIES_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-type_size_max]\ntest_truncated_container_without_data[fork_CancunEIP7692-eof_test-truncation_len_0-exception_EOFException.UNREACHABLE_INSTRUCTIONS]\ntest_truncated_container_without_data[fork_CancunEIP7692-eof_test-EOF1_truncated_section_2]\ntest_truncated_container_without_data[fork_CancunEIP7692-eof_test-EOF1_truncated_section_1]\ntest_truncated_container_without_data[fork_CancunEIP7692-eof_test-EOF1_truncated_section_0]\ntest_truncated_container_with_data[fork_CancunEIP7692-eof_test-truncation_len_0-exception_None]\ntest_truncated_container_with_data[fork_CancunEIP7692-eof_test-EOF1_truncated_section_4]\ntest_truncated_container_with_data[fork_CancunEIP7692-eof_test-EOF1_truncated_section_3]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/","title":"EIP-4200 Relative Jumps","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip4200_relative_jumps.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip4200_relative_jumps --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip4200_relative_jumps --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF tests for EIP-4200 relative jumps

    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/","title":"Test Rjump","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF JUMPF tests covering stack and code validation rules.

    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_positive_negative","title":"test_rjump_positive_negative(eof_state_test)","text":"

    EOF1V4200_0001 (Valid) EOF code containing RJUMP (Positive, Negative)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_positive_negative(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0001 (Valid) EOF code containing RJUMP (Positive, Negative)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0\n                    + Op.RJUMPI[3]\n                    + Op.RJUMP[7]\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                    + Op.RJUMP[-10],\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_positive_negative_with_data","title":"test_rjump_positive_negative_with_data(eof_state_test)","text":"

    EOF1V4200_0001 (Valid) EOF code containing RJUMP (Positive, Negative)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_positive_negative_with_data(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0001 (Valid) EOF code containing RJUMP (Positive, Negative)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0\n                    + Op.RJUMPI[3]\n                    + Op.RJUMP[7]\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                    + Op.RJUMP[-10],\n                ),\n                Section.Data(data=b\"\\xde\\xad\\xbe\\xef\"),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_zero","title":"test_rjump_zero(eof_state_test)","text":"

    EOF1V4200_0002 (Valid) EOF code containing RJUMP (Zero)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_zero(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0002 (Valid) EOF code containing RJUMP (Zero)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RJUMP[0] + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_maxes","title":"test_rjump_maxes(eof_state_test)","text":"

    EOF1V4200_0003 EOF with RJUMP containing the maximum positive and negative offset (32767)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_maxes(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0003 EOF with RJUMP containing the maximum positive and negative offset (32767)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0\n                    + Op.RJUMPI[\n                        RJUMP_LEN\n                    ]  # The push/jumpi is to allow the NOOPs to be forward referenced\n                    + Op.RJUMP[0x7FFF]\n                    + Op.NOOP * (0x7FFF - 7)\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                    + Op.RJUMP[0x8000],\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_max_bytecode_size","title":"test_rjump_max_bytecode_size(eof_test)","text":"

    EOF1V4200_0003 EOF with RJUMP containing the maximum offset that does not exceed the maximum bytecode size

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_max_bytecode_size(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1V4200_0003 EOF with RJUMP containing the maximum offset that does not exceed the maximum\n    bytecode size\n    \"\"\"\n    NOOP_COUNT = MAX_BYTECODE_SIZE - 27\n    code = (\n        Op.RJUMPI[RJUMP_LEN](Op.ORIGIN)  # The jumpi is to allow the NOOPs to be forward referenced\n        + Op.RJUMP[len(Op.NOOP) * NOOP_COUNT]\n        + (Op.NOOP * NOOP_COUNT)\n        + Op.STOP\n    )\n    container = Container.Code(code=code)\n    assert len(container) == MAX_BYTECODE_SIZE\n    eof_test(data=container)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_truncated_rjump","title":"test_rjump_truncated_rjump(eof_test)","text":"

    EOF1I4200_0001 (Invalid) EOF code containing truncated RJUMP

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_truncated_rjump(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF1I4200_0001 (Invalid) EOF code containing truncated RJUMP\"\"\"\n    eof_test(\n        data=Container(\n            sections=[Section.Code(code=Op.RJUMP)],\n        ),\n        expect_exception=EOFException.TRUNCATED_INSTRUCTION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_truncated_rjump_2","title":"test_rjump_truncated_rjump_2(eof_test)","text":"

    EOF1I4200_0002 (Invalid) EOF code containing truncated RJUMP

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_truncated_rjump_2(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF1I4200_0002 (Invalid) EOF code containing truncated RJUMP\"\"\"\n    eof_test(\n        data=Container(\n            sections=[Section.Code(code=Op.RJUMP + Op.STOP)],\n        ),\n        expect_exception=EOFException.TRUNCATED_INSTRUCTION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_header","title":"test_rjump_into_header(eof_test)","text":"

    EOF1I4200_0003 (Invalid) EOF code containing RJUMP with target outside code bounds (Jumping into header)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_header(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0003 (Invalid) EOF code containing RJUMP with target outside code bounds\n    (Jumping into header)\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.RJUMP[-5]),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_before_header","title":"test_rjump_before_header(eof_test)","text":"

    EOF1I4200_0004 (Invalid) EOF code containing RJUMP with target outside code bounds (Jumping before code begin)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_before_header(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0004 (Invalid) EOF code containing RJUMP with target outside code bounds\n    (Jumping before code begin)\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.RJUMP[-23]),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_data","title":"test_rjump_into_data(eof_test)","text":"

    EOF1I4200_0005 (Invalid) EOF code containing RJUMP with target outside code bounds (Jumping into data section)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_data(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0005 (Invalid) EOF code containing RJUMP with target outside code bounds\n    (Jumping into data section)\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.RJUMP[2]),\n                Section.Data(data=b\"\\xaa\\xbb\\xcc\"),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_outside_other_section_before","title":"test_rjump_outside_other_section_before(eof_test)","text":"

    EOF code containing RJUMP with target outside code bounds (prior code section)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_outside_other_section_before(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target outside code bounds (prior code section)\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.JUMPF[1]),\n                Section.Code(code=Op.RJUMP[-6]),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_outside_other_section_after","title":"test_rjump_outside_other_section_after(eof_test)","text":"

    EOF code containing RJUMP with target outside code bounds (Subsequent code section)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_outside_other_section_after(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target outside code bounds (Subsequent code section)\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.JUMPF[1]),\n                Section.Code(code=Op.RJUMP[3] + Op.JUMPF[2]),\n                Section.Code(code=Op.STOP),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_after_container","title":"test_rjump_after_container(eof_test)","text":"

    EOF1I4200_0006 (Invalid) EOF code containing RJUMP with target outside code bounds (Jumping after code end)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_after_container(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0006 (Invalid) EOF code containing RJUMP with target outside code bounds\n    (Jumping after code end)\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.RJUMP[2]),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_to_code_end","title":"test_rjump_to_code_end(eof_test)","text":"

    EOF1I4200_0007 (Invalid) EOF code containing RJUMP with target outside code bounds (Jumping to code end)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_to_code_end(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0007 (Invalid) EOF code containing RJUMP with target outside code bounds\n    (Jumping to code end)\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.RJUMP[1] + Op.STOP),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_self_data_portion","title":"test_rjump_into_self_data_portion(eof_test, offset)","text":"

    EOF1I4200_0008 (Invalid) EOF code containing RJUMP with target self RJUMP immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    @pytest.mark.parametrize(\"offset\", range(1, Op.RJUMP.data_portion_length + 1))\ndef test_rjump_into_self_data_portion(\n    eof_test: EOFTestFiller,\n    offset: int,\n):\n    \"\"\"EOF1I4200_0008 (Invalid) EOF code containing RJUMP with target self RJUMP immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.RJUMP[-offset] + Op.STOP),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_self_remaining_code","title":"test_rjump_into_self_remaining_code(eof_test)","text":"

    EOF1I4200_0008 (Invalid) EOF code containing RJUMP with target self RJUMP but remaining unreachable code

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_self_remaining_code(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0008 (Invalid) EOF code containing RJUMP with target self RJUMP but remaining\n    unreachable code\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.RJUMP[-len(Op.RJUMP[0])] + Op.STOP),\n            ],\n        ),\n        expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_self","title":"test_rjump_into_self(eof_test)","text":"

    EOF code containing RJUMP with target self RJUMP

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_self(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target self RJUMP\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.RJUMP[-len(Op.RJUMP[0])]),\n            ],\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_self_pre_code","title":"test_rjump_into_self_pre_code(eof_test)","text":"

    EOF code containing RJUMP with target self RJUMP with non-zero stack before RJUMP

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_self_pre_code(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target self RJUMP with non-zero stack before RJUMP\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.PUSH1(0) + Op.RJUMP[-len(Op.RJUMP[0])]),\n            ],\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_stack_height_diff","title":"test_rjump_into_stack_height_diff(eof_test)","text":"

    EOF code containing RJUMP with target instruction that causes stack height difference

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_stack_height_diff(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target instruction that causes stack height difference\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.PUSH1(0) + Op.RJUMP[-(len(Op.RJUMP[0]) + len(Op.PUSH1(0)))]),\n            ],\n        ),\n        expect_exception=EOFException.STACK_HEIGHT_MISMATCH,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_stack_height_diff_2","title":"test_rjump_into_stack_height_diff_2(eof_test)","text":"

    EOF code containing RJUMP with target instruction that cause stack height difference

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_stack_height_diff_2(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target instruction that cause stack height difference\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0) + Op.POP + Op.RJUMP[-(len(Op.RJUMP[0]) + len(Op.POP))]\n                ),\n            ],\n        ),\n        expect_exception=EOFException.STACK_HEIGHT_MISMATCH,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_stack_underflow","title":"test_rjump_into_stack_underflow(eof_test)","text":"

    EOF code containing RJUMP with target instruction that cause stack underflow

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_stack_underflow(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target instruction that cause stack underflow\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.ORIGIN\n                    + Op.RJUMPI[len(Op.RJUMP[0])]\n                    + Op.RJUMP[len(Op.STOP)]\n                    + Op.STOP\n                    + Op.POP\n                    + Op.STOP\n                ),\n            ],\n        ),\n        expect_exception=EOFException.STACK_UNDERFLOW,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_rjump","title":"test_rjump_into_rjump(eof_test)","text":"

    EOF1I4200_0009 (Invalid) EOF code containing RJUMP with target other RJUMP immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_rjump(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF1I4200_0009 (Invalid) EOF code containing RJUMP with target other RJUMP immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.RJUMP[1] + Op.RJUMP[0]),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_rjumpi","title":"test_rjump_into_rjumpi(eof_test)","text":"

    EOF1I4200_0010 (Invalid) EOF code containing RJUMP with target RJUMPI immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_rjumpi(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF1I4200_0010 (Invalid) EOF code containing RJUMP with target RJUMPI immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RJUMP[5] + Op.STOP + Op.PUSH1(1) + Op.RJUMPI[-6] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_push_1","title":"test_rjump_into_push_1(eof_test, jump)","text":"

    EOF1I4200_0011 (Invalid) EOF code containing RJUMP with target PUSH1 immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    @pytest.mark.parametrize(\"jump\", [JumpDirection.FORWARD, JumpDirection.BACKWARD])\ndef test_rjump_into_push_1(eof_test: EOFTestFiller, jump: JumpDirection):\n    \"\"\"EOF1I4200_0011 (Invalid) EOF code containing RJUMP with target PUSH1 immediate\"\"\"\n    code = (\n        Op.PUSH1[1] + Op.RJUMP[-4] if jump == JumpDirection.BACKWARD else Op.RJUMP[1] + Op.PUSH1[1]\n    ) + Op.STOP\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=code),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_push_n","title":"test_rjump_into_push_n(eof_test, opcode, jump, data_portion_end)","text":"

    EOF1I4200_0011 (Invalid) EOF code containing RJUMP with target PUSH2+ immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.PUSH2,\n        Op.PUSH3,\n        Op.PUSH4,\n        Op.PUSH5,\n        Op.PUSH6,\n        Op.PUSH7,\n        Op.PUSH8,\n        Op.PUSH9,\n        Op.PUSH10,\n        Op.PUSH11,\n        Op.PUSH12,\n        Op.PUSH13,\n        Op.PUSH14,\n        Op.PUSH15,\n        Op.PUSH16,\n        Op.PUSH17,\n        Op.PUSH18,\n        Op.PUSH19,\n        Op.PUSH20,\n        Op.PUSH21,\n        Op.PUSH22,\n        Op.PUSH23,\n        Op.PUSH24,\n        Op.PUSH25,\n        Op.PUSH26,\n        Op.PUSH27,\n        Op.PUSH28,\n        Op.PUSH29,\n        Op.PUSH30,\n        Op.PUSH31,\n        Op.PUSH32,\n    ],\n)\n@pytest.mark.parametrize(\"jump\", [JumpDirection.FORWARD, JumpDirection.BACKWARD])\n@pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjump_into_push_n(\n    eof_test: EOFTestFiller,\n    opcode: Op,\n    jump: JumpDirection,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0011 (Invalid) EOF code containing RJUMP with target PUSH2+ immediate\"\"\"\n    data_portion_length = int.from_bytes(opcode, byteorder=\"big\") - 0x5F\n    if jump == JumpDirection.FORWARD:\n        offset = data_portion_length if data_portion_end else 1\n        code = Op.RJUMP[offset] + opcode[0] + Op.STOP\n    else:\n        offset = -4 if data_portion_end else -4 - data_portion_length + 1\n        code = opcode[0] + Op.RJUMP[offset]\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=code),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_rjumpv","title":"test_rjump_into_rjumpv(eof_test, target_rjumpv_table_size, data_portion_end)","text":"

    EOF1I4200_0012 (Invalid) EOF code containing RJUMP with target RJUMPV immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    @pytest.mark.parametrize(\"target_rjumpv_table_size\", [1, 256])\n@pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjump_into_rjumpv(\n    eof_test: EOFTestFiller,\n    target_rjumpv_table_size: int,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0012 (Invalid) EOF code containing RJUMP with target RJUMPV immediate\"\"\"\n    invalid_destination = 4 + (2 * target_rjumpv_table_size) if data_portion_end else 4\n    target_jump_table = [0 for _ in range(target_rjumpv_table_size)]\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RJUMP[invalid_destination]\n                    + Op.STOP\n                    + Op.PUSH1(1)\n                    + Op.RJUMPV[target_jump_table]\n                    + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_callf","title":"test_rjump_into_callf(eof_test, data_portion_end)","text":"

    EOF1I4200_0013 (Invalid) EOF code containing RJUMP with target CALLF immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    @pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjump_into_callf(\n    eof_test: EOFTestFiller,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0013 (Invalid) EOF code containing RJUMP with target CALLF immediate\"\"\"\n    invalid_destination = 2 if data_portion_end else 1\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RJUMP[invalid_destination] + Op.CALLF[1] + Op.STOP,\n                ),\n                Section.Code(\n                    code=Op.SSTORE(1, 1) + Op.RETF,\n                    code_outputs=0,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_dupn","title":"test_rjump_into_dupn(eof_test)","text":"

    EOF code containing RJUMP with target DUPN immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_dupn(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target DUPN immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.PUSH1(1)\n                    + Op.RJUMP[1]\n                    + Op.DUPN[1]\n                    + Op.SSTORE\n                    + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_swapn","title":"test_rjump_into_swapn(eof_test)","text":"

    EOF code containing RJUMP with target SWAPN immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_swapn(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target SWAPN immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.PUSH1(1)\n                    + Op.RJUMP[1]\n                    + Op.SWAPN[1]\n                    + Op.SSTORE\n                    + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_exchange","title":"test_rjump_into_exchange(eof_test)","text":"

    EOF code containing RJUMP with target EXCHANGE immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_exchange(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target EXCHANGE immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.PUSH1(2)\n                    + Op.PUSH1(3)\n                    + Op.RJUMP[1]\n                    + Op.EXCHANGE[0x00]\n                    + Op.SSTORE\n                    + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_eofcreate","title":"test_rjump_into_eofcreate(eof_test)","text":"

    EOF code containing RJUMP with target EOFCREATE immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_eofcreate(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target EOFCREATE immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RJUMP[1] + Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP,\n                ),\n                Section.Container(\n                    container=Container(\n                        sections=[\n                            Section.Code(\n                                code=Op.RETURNCONTRACT[0](0, 0),\n                            ),\n                            Section.Container(\n                                container=Container(\n                                    sections=[\n                                        Section.Code(code=Op.STOP),\n                                    ]\n                                )\n                            ),\n                        ]\n                    )\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_into_returncontract","title":"test_rjump_into_returncontract(eof_test)","text":"

    EOF code containing RJUMP with target RETURNCONTRACT immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_into_returncontract(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target RETURNCONTRACT immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP,\n                ),\n                Section.Container(\n                    container=Container(\n                        sections=[\n                            Section.Code(\n                                code=Op.RJUMP[5] + Op.RETURNCONTRACT[0](0, 0),\n                            ),\n                            Section.Container(\n                                container=Container(\n                                    sections=[\n                                        Section.Code(code=Op.STOP),\n                                    ]\n                                )\n                            ),\n                        ]\n                    )\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_unreachable_code","title":"test_rjump_unreachable_code(eof_test)","text":"

    EOF code containing instructions skipped by RJUMP

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_unreachable_code(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF code containing instructions skipped by RJUMP\n    \"\"\"\n    container = Container.Code(code=(Op.RJUMP[len(Op.STOP)] + Op.STOP + Op.STOP))\n    eof_test(\n        data=container,\n        expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_backwards_reference_only","title":"test_rjump_backwards_reference_only(eof_test)","text":"

    EOF code containing instructions only reachable by backwards RJUMP

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_backwards_reference_only(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF code containing instructions only reachable by backwards RJUMP\n    \"\"\"\n    container = Container.Code(\n        code=(Op.RJUMP[RJUMP_LEN] + Op.RJUMP[RJUMP_LEN] + Op.RJUMP[-(2 * RJUMP_LEN)] + Op.STOP)\n    )\n    eof_test(\n        data=container,\n        expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_backwards_illegal_stack_height","title":"test_rjump_backwards_illegal_stack_height(eof_test)","text":"

    Invalid backward jump, found via fuzzing coverage

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_backwards_illegal_stack_height(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    Invalid backward jump, found via fuzzing coverage\n    \"\"\"\n    eof_test(\n        data=Container.Code(\n            code=(\n                Op.PUSH0\n                + Op.RJUMPI[3]\n                + Op.RJUMP(7)\n                + Op.PUSH2(0x2015)\n                + Op.PUSH3(0x015500)\n                + Op.RJUMP[-10]\n            ),\n            max_stack_height=0x24,\n        ),\n        expect_exception=EOFException.STACK_HEIGHT_MISMATCH,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjump.test_rjump_backwards_infinite_loop","title":"test_rjump_backwards_infinite_loop(eof_test)","text":"

    Validate that a backwards RJUMP as terminal operation is valid

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py
    def test_rjump_backwards_infinite_loop(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    Validate that a backwards RJUMP as terminal operation is valid\n    \"\"\"\n    eof_test(\n        data=Container(\n            name=\"backwards_rjump_terminal\",\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0\n                    + Op.RJUMPI[3]\n                    + Op.RJUMP[7]\n                    + Op.SSTORE(1, 0x2015)\n                    + Op.STOP\n                    + Op.RJUMP[-10]\n                ),\n                Section.Data(data=\"0xdeadbeef\"),\n            ],\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/index/test_cases/","title":"Test Rjump - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py:

    test_rjump_positive_negative[fork_CancunEIP7692-eof_test]\ntest_rjump_positive_negative[fork_CancunEIP7692-state_test]\ntest_rjump_positive_negative[fork_CancunEIP7692-blockchain_test]\ntest_rjump_positive_negative[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjump_positive_negative_with_data[fork_CancunEIP7692-eof_test]\ntest_rjump_positive_negative_with_data[fork_CancunEIP7692-state_test]\ntest_rjump_positive_negative_with_data[fork_CancunEIP7692-blockchain_test]\ntest_rjump_positive_negative_with_data[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjump_zero[fork_CancunEIP7692-eof_test]\ntest_rjump_zero[fork_CancunEIP7692-state_test]\ntest_rjump_zero[fork_CancunEIP7692-blockchain_test]\ntest_rjump_zero[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjump_maxes[fork_CancunEIP7692-eof_test]\ntest_rjump_maxes[fork_CancunEIP7692-state_test]\ntest_rjump_maxes[fork_CancunEIP7692-blockchain_test]\ntest_rjump_maxes[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjump_max_bytecode_size[fork_CancunEIP7692-eof_test]\ntest_rjump_truncated_rjump[fork_CancunEIP7692-eof_test]\ntest_rjump_truncated_rjump_2[fork_CancunEIP7692-eof_test]\ntest_rjump_into_header[fork_CancunEIP7692-eof_test]\ntest_rjump_before_header[fork_CancunEIP7692-eof_test]\ntest_rjump_into_data[fork_CancunEIP7692-eof_test]\ntest_rjump_outside_other_section_before[fork_CancunEIP7692-eof_test]\ntest_rjump_outside_other_section_after[fork_CancunEIP7692-eof_test]\ntest_rjump_after_container[fork_CancunEIP7692-eof_test]\ntest_rjump_to_code_end[fork_CancunEIP7692-eof_test]\ntest_rjump_into_self_data_portion[fork_CancunEIP7692-eof_test-offset_1]\ntest_rjump_into_self_data_portion[fork_CancunEIP7692-eof_test-offset_2]\ntest_rjump_into_self_remaining_code[fork_CancunEIP7692-eof_test]\ntest_rjump_into_self[fork_CancunEIP7692-eof_test]\ntest_rjump_into_self_pre_code[fork_CancunEIP7692-eof_test]\ntest_rjump_into_stack_height_diff[fork_CancunEIP7692-eof_test]\ntest_rjump_into_stack_height_diff_2[fork_CancunEIP7692-eof_test]\ntest_rjump_into_stack_underflow[fork_CancunEIP7692-eof_test]\ntest_rjump_into_rjump[fork_CancunEIP7692-eof_test]\ntest_rjump_into_rjumpi[fork_CancunEIP7692-eof_test]\ntest_rjump_into_push_1[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD]\ntest_rjump_into_push_1[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH2]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH3]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH4]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH5]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH6]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH7]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH8]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH9]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH10]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH11]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH12]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH13]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH14]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH15]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH16]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH17]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH18]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH19]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH20]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH21]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH22]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH23]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH24]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH25]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH26]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH27]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH28]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH29]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH30]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH31]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH32]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH2]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH3]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH4]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH5]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH6]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH7]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH8]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH9]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH10]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH11]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH12]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH13]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH14]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH15]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH16]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH17]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH18]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH19]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH20]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH21]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH22]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH23]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH24]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH25]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH26]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH27]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH28]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH29]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH30]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH31]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH32]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH2]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH3]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH4]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH5]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH6]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH7]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH8]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH9]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH10]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH11]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH12]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH13]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH14]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH15]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH16]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH17]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH18]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH19]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH20]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH21]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH22]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH23]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH24]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH25]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH26]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH27]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH28]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH29]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH30]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH31]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH32]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH2]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH3]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH4]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH5]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH6]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH7]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH8]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH9]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH10]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH11]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH12]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH13]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH14]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH15]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH16]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH17]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH18]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH19]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH20]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH21]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH22]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH23]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH24]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH25]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH26]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH27]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH28]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH29]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH30]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH31]\ntest_rjump_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH32]\ntest_rjump_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_end-target_rjumpv_table_size_1]\ntest_rjump_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_end-target_rjumpv_table_size_256]\ntest_rjump_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_start-target_rjumpv_table_size_1]\ntest_rjump_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_start-target_rjumpv_table_size_256]\ntest_rjump_into_callf[fork_CancunEIP7692-eof_test-data_portion_end]\ntest_rjump_into_callf[fork_CancunEIP7692-eof_test-data_portion_start]\ntest_rjump_into_dupn[fork_CancunEIP7692-eof_test]\ntest_rjump_into_swapn[fork_CancunEIP7692-eof_test]\ntest_rjump_into_exchange[fork_CancunEIP7692-eof_test]\ntest_rjump_into_eofcreate[fork_CancunEIP7692-eof_test]\ntest_rjump_into_returncontract[fork_CancunEIP7692-eof_test]\ntest_rjump_unreachable_code[fork_CancunEIP7692-eof_test]\ntest_rjump_backwards_reference_only[fork_CancunEIP7692-eof_test]\ntest_rjump_backwards_illegal_stack_height[fork_CancunEIP7692-eof_test]\ntest_rjump_backwards_infinite_loop[fork_CancunEIP7692-eof_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/","title":"Test Rjumpi","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF JUMPF tests covering stack and code validation rules.

    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_condition_forwards","title":"test_rjumpi_condition_forwards(state_test, pre, calldata)","text":"

    Test RJUMPI contract switching based on external input

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    @pytest.mark.parametrize(\n    \"calldata\",\n    [pytest.param(b\"\\x00\", id=\"False\"), pytest.param(b\"\\x01\", id=\"True\")],\n)\ndef test_rjumpi_condition_forwards(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    calldata: bytes,\n):\n    \"\"\"Test RJUMPI contract switching based on external input\"\"\"\n    env = Environment()\n    sender = pre.fund_eoa(10**18)\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0)\n                    + Op.CALLDATALOAD\n                    + Op.RJUMPI[6]\n                    + Op.SSTORE(slot_conditional_result, value_calldata_false)\n                    + Op.STOP\n                    + Op.SSTORE(slot_conditional_result, value_calldata_true)\n                    + Op.STOP,\n                )\n            ]\n        ),\n    )\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        data=calldata,\n        sender=sender,\n    )\n    post = {\n        contract_address: Account(\n            storage={\n                slot_conditional_result: value_calldata_false\n                if calldata == b\"\\0\"\n                else value_calldata_true\n            }\n        )\n    }\n    state_test(env=env, tx=tx, pre=pre, post=post)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_condition_backwards","title":"test_rjumpi_condition_backwards(state_test, pre, calldata)","text":"

    Test RJUMPI contract switching based on external input

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    @pytest.mark.parametrize(\n    \"calldata\",\n    [pytest.param(b\"\\x00\", id=\"False\"), pytest.param(b\"\\x01\", id=\"True\")],\n)\ndef test_rjumpi_condition_backwards(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    calldata: bytes,\n):\n    \"\"\"Test RJUMPI contract switching based on external input\"\"\"\n    env = Environment()\n    sender = pre.fund_eoa(10**18)\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.RJUMPI[6]\n                    + Op.SSTORE(slot_conditional_result, value_calldata_true)\n                    + Op.STOP\n                    + Op.PUSH0\n                    + Op.CALLDATALOAD\n                    + Op.RJUMPI[-11]\n                    + Op.SSTORE(slot_conditional_result, value_calldata_false)\n                    + Op.STOP,\n                )\n            ]\n        )\n    )\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        data=calldata,\n        sender=sender,\n    )\n    post = {\n        contract_address: Account(\n            storage={\n                slot_conditional_result: value_calldata_false\n                if calldata == b\"\\0\"\n                else value_calldata_true\n            }\n        )\n    }\n    state_test(env=env, tx=tx, pre=pre, post=post)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_condition_zero","title":"test_rjumpi_condition_zero(state_test, pre, calldata)","text":"

    Test RJUMPI contract switching based on external input

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    @pytest.mark.parametrize(\n    \"calldata\",\n    [pytest.param(b\"\\x00\", id=\"False\"), pytest.param(b\"\\x01\", id=\"True\")],\n)\ndef test_rjumpi_condition_zero(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    calldata: bytes,\n):\n    \"\"\"Test RJUMPI contract switching based on external input\"\"\"\n    env = Environment()\n    sender = pre.fund_eoa(10**18)\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0\n                    + Op.CALLDATALOAD\n                    + Op.RJUMPI[0]\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ]\n        ),\n    )\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        data=calldata,\n        sender=sender,\n    )\n    post = {contract_address: Account(storage={slot_code_worked: value_code_worked})}\n    state_test(env=env, tx=tx, pre=pre, post=post)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_forwards","title":"test_rjumpi_forwards(eof_state_test)","text":"

    EOF1V4200_0004 (Valid) EOF code containing RJUMPI (Positive)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_forwards(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0004 (Valid) EOF code containing RJUMPI (Positive)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.RJUMPI[3]\n                    + Op.NOOP\n                    + Op.NOOP\n                    + Op.STOP\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_backwards","title":"test_rjumpi_backwards(eof_state_test)","text":"

    EOF1V4200_0005 (Valid) EOF code containing RJUMPI (Negative)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_backwards(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0005 (Valid) EOF code containing RJUMPI (Negative)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.RJUMPI[7]\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                    + Op.PUSH1(1)\n                    + Op.RJUMPI[-12]\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_zero","title":"test_rjumpi_zero(eof_state_test)","text":"

    EOF1V4200_0006 (Valid) EOF code containing RJUMPI (Zero)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_zero(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0006 (Valid) EOF code containing RJUMPI (Zero)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.RJUMPI[0]\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_max_forward","title":"test_rjumpi_max_forward(eof_state_test)","text":"

    EOF1V4200_0007 (Valid) EOF with RJUMPI containing the maximum offset (32767)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_max_forward(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0007 (Valid) EOF with RJUMPI containing the maximum offset (32767)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.RJUMPI[32767]\n                    + Op.NOOP * 32768\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_max_backward","title":"test_rjumpi_max_backward(eof_state_test)","text":"

    EOF with RJUMPI containing the maximum negative offset (-32768)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_max_backward(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF with RJUMPI containing the maximum negative offset (-32768)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0\n                    + Op.RJUMPI[0x7FFF]\n                    + Op.NOOP * (0x7FFF - 7)\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                    + Op.PUSH0\n                    + Op.RJUMPI[0x8000]\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    ),\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_max_bytecode_size","title":"test_rjumpi_max_bytecode_size(eof_test)","text":"

    EOF1V4200_0003 EOF with RJUMPI containing the maximum offset that does not exceed the maximum bytecode size

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_max_bytecode_size(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1V4200_0003 EOF with RJUMPI containing the maximum offset that does not exceed the maximum\n    bytecode size\n    \"\"\"\n    NOOP_COUNT = MAX_BYTECODE_SIZE - 24\n    code = Op.RJUMPI[len(Op.NOOP) * NOOP_COUNT](Op.ORIGIN) + (Op.NOOP * NOOP_COUNT) + Op.STOP\n    container = Container.Code(code=code)\n    assert len(container) == MAX_BYTECODE_SIZE\n    eof_test(data=container)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_truncated","title":"test_rjumpi_truncated(eof_test)","text":"

    EOF1I4200_0014 (Invalid) EOF code containing truncated RJUMPI

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_truncated(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF1I4200_0014 (Invalid) EOF code containing truncated RJUMPI\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0) + Op.RJUMPI,\n                )\n            ],\n        ),\n        expect_exception=EOFException.TRUNCATED_INSTRUCTION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_truncated_2","title":"test_rjumpi_truncated_2(eof_test)","text":"

    EOF1I4200_0015 (Invalid) EOF code containing truncated RJUMPI

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_truncated_2(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF1I4200_0015 (Invalid) EOF code containing truncated RJUMPI\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0) + Op.RJUMPI + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.TRUNCATED_INSTRUCTION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_header","title":"test_rjumpi_into_header(eof_test)","text":"

    EOF1I4200_0016 (Invalid) EOF code containing RJUMPI with target outside code bounds (Jumping into header)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_header(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0016 (Invalid) EOF code containing RJUMPI with target outside code bounds\n    (Jumping into header)\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPI[-7] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_jump_before_header","title":"test_rjumpi_jump_before_header(eof_test)","text":"

    EOF1I4200_0017 (Invalid) EOF code containing RJUMPI with target outside code bounds (Jumping to before code begin)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_jump_before_header(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0017 (Invalid) EOF code containing RJUMPI with target outside code bounds\n    (Jumping to before code begin)\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPI[-25] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_data","title":"test_rjumpi_into_data(eof_test)","text":"

    EOF1I4200_0018 (Invalid) EOF code containing RJUMPI with target outside code bounds (Jumping into data section)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_data(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0018 (Invalid) EOF code containing RJUMPI with target outside code bounds\n    (Jumping into data section)\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPI[2] + Op.STOP,\n                ),\n                Section.Data(data=b\"\\xaa\\xbb\\xcc\"),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_after_container","title":"test_rjumpi_after_container(eof_test)","text":"

    EOF1I4200_0019 (Invalid) EOF code containing RJUMPI with target outside code bounds (Jumping to after code end)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_after_container(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0019 (Invalid) EOF code containing RJUMPI with target outside code bounds\n    (Jumping to after code end)\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPI[2] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_to_code_end","title":"test_rjumpi_to_code_end(eof_test)","text":"

    EOF1I4200_0020 (Invalid) EOF code containing RJUMPI with target outside code bounds (Jumping to code end)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_to_code_end(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF1I4200_0020 (Invalid) EOF code containing RJUMPI with target outside code bounds\n    (Jumping to code end)\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPI[1] + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_self_data_portion","title":"test_rjumpi_into_self_data_portion(eof_test, offset)","text":"

    EOF1I4200_0021 (Invalid) EOF code containing RJUMPI with target same RJUMPI immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    @pytest.mark.parametrize(\"offset\", range(1, Op.RJUMP.data_portion_length + 1))\ndef test_rjumpi_into_self_data_portion(\n    eof_test: EOFTestFiller,\n    offset: int,\n):\n    \"\"\"EOF1I4200_0021 (Invalid) EOF code containing RJUMPI with target same RJUMPI immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPI[-offset] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_self","title":"test_rjumpi_into_self(eof_test)","text":"

    EOF1I4200_0021 (Invalid) EOF code containing RJUMPI with target same RJUMPI immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_self(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF1I4200_0021 (Invalid) EOF code containing RJUMPI with target same RJUMPI immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPI[-len(Op.RJUMPI[0])] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.STACK_HEIGHT_MISMATCH,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_stack_height_diff","title":"test_rjumpi_into_stack_height_diff(eof_test)","text":"

    EOF code containing RJUMPI with target instruction that causes stack height difference

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_stack_height_diff(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMPI with target instruction that causes stack height difference\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0)\n                    + Op.PUSH1(0)\n                    + Op.RJUMPI[-(len(Op.RJUMPI[0]) + len(Op.PUSH1(0)) + len(Op.PUSH1(0)))]\n                    + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.STACK_HEIGHT_MISMATCH,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_stack_underflow","title":"test_rjumpi_into_stack_underflow(eof_test)","text":"

    EOF code containing RJUMPI with target instruction that cause stack underflow

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_stack_underflow(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMPI with target instruction that cause stack underflow\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.ORIGIN + Op.RJUMPI[len(Op.STOP)] + Op.STOP + Op.POP + Op.STOP\n                ),\n            ],\n        ),\n        expect_exception=EOFException.STACK_UNDERFLOW,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_skips_stack_underflow","title":"test_rjumpi_skips_stack_underflow(eof_test)","text":"

    EOF code containing RJUMPI where the default path produces a stack underflow

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_skips_stack_underflow(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMPI where the default path produces a stack underflow\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.ORIGIN + Op.RJUMPI[len(Op.POP)] + Op.POP + Op.STOP),\n            ],\n        ),\n        expect_exception=EOFException.STACK_UNDERFLOW,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_rjump","title":"test_rjumpi_into_rjump(eof_test)","text":"

    EOF1I4200_0023 (Invalid) EOF code containing RJUMPI with target RJUMP immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_rjump(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF1I4200_0023 (Invalid) EOF code containing RJUMPI with target RJUMP immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPI[3] + Op.STOP + Op.RJUMP[-9],\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_rjumpi","title":"test_rjumpi_into_rjumpi(eof_test)","text":"

    EOF1I4200_0022 (Invalid) EOF code containing RJUMPI with target other RJUMPI immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_rjumpi(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF1I4200_0022 (Invalid) EOF code containing RJUMPI with target other RJUMPI immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.RJUMPI[5]\n                    + Op.STOP\n                    + Op.PUSH1(1)\n                    + Op.RJUMPI[-11]\n                    + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_push_1","title":"test_rjumpi_into_push_1(eof_test, jump)","text":"

    EOF1I4200_0024 (Invalid) EOF code containing RJUMPI with target PUSH1 immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    @pytest.mark.parametrize(\"jump\", [JumpDirection.FORWARD, JumpDirection.BACKWARD])\ndef test_rjumpi_into_push_1(\n    eof_test: EOFTestFiller,\n    jump: JumpDirection,\n):\n    \"\"\"EOF1I4200_0024 (Invalid) EOF code containing RJUMPI with target PUSH1 immediate\"\"\"\n    code = (\n        Op.PUSH1(1) + Op.RJUMPI[-4] + Op.STOP\n        if jump == JumpDirection.BACKWARD\n        else Op.PUSH1(1) + Op.RJUMPI[1] + Op.STOP\n    )\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=code),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_push_n","title":"test_rjumpi_into_push_n(eof_test, opcode, jump, data_portion_end)","text":"

    EOF1I4200_0024 (Invalid) EOF code containing RJUMPI with target PUSH2+ immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.PUSH2,\n        Op.PUSH3,\n        Op.PUSH4,\n        Op.PUSH5,\n        Op.PUSH6,\n        Op.PUSH7,\n        Op.PUSH8,\n        Op.PUSH9,\n        Op.PUSH10,\n        Op.PUSH11,\n        Op.PUSH12,\n        Op.PUSH13,\n        Op.PUSH14,\n        Op.PUSH15,\n        Op.PUSH16,\n        Op.PUSH17,\n        Op.PUSH18,\n        Op.PUSH19,\n        Op.PUSH20,\n        Op.PUSH21,\n        Op.PUSH22,\n        Op.PUSH23,\n        Op.PUSH24,\n        Op.PUSH25,\n        Op.PUSH26,\n        Op.PUSH27,\n        Op.PUSH28,\n        Op.PUSH29,\n        Op.PUSH30,\n        Op.PUSH31,\n        Op.PUSH32,\n    ],\n)\n@pytest.mark.parametrize(\"jump\", [JumpDirection.FORWARD, JumpDirection.BACKWARD])\n@pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjumpi_into_push_n(\n    eof_test: EOFTestFiller,\n    opcode: Op,\n    jump: JumpDirection,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0024 (Invalid) EOF code containing RJUMPI with target PUSH2+ immediate\"\"\"\n    data_portion_length = int.from_bytes(opcode, byteorder=\"big\") - 0x5F\n    if jump == JumpDirection.FORWARD:\n        offset = data_portion_length if data_portion_end else 1\n        code = Op.PUSH1(1) + Op.RJUMPI[offset] + opcode[0] + Op.STOP\n    else:\n        offset = -4 if data_portion_end else -4 - data_portion_length + 1\n        code = opcode[0] + Op.RJUMPI[offset] + Op.STOP\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=code),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_rjumpv","title":"test_rjumpi_into_rjumpv(eof_test, target_rjumpv_table_size, data_portion_end)","text":"

    EOF1I4200_0025 (Invalid) EOF code containing RJUMPI with target RJUMPV immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    @pytest.mark.parametrize(\"target_rjumpv_table_size\", [1, 256])\n@pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjumpi_into_rjumpv(\n    eof_test: EOFTestFiller,\n    target_rjumpv_table_size: int,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0025 (Invalid) EOF code containing RJUMPI with target RJUMPV immediate\"\"\"\n    invalid_destination = 4 + (2 * target_rjumpv_table_size) if data_portion_end else 4\n    target_jump_table = [0 for _ in range(target_rjumpv_table_size)]\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.RJUMPI[invalid_destination]\n                    + Op.STOP\n                    + Op.PUSH1(1)\n                    + Op.RJUMPV[target_jump_table]\n                    + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_callf","title":"test_rjumpi_into_callf(eof_test, data_portion_end)","text":"

    EOF1I4200_0026 (Invalid) EOF code containing RJUMPI with target CALLF immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    @pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjumpi_into_callf(\n    eof_test: EOFTestFiller,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0026 (Invalid) EOF code containing RJUMPI with target CALLF immediate\"\"\"\n    invalid_destination = 2 if data_portion_end else 1\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPI[invalid_destination] + Op.CALLF[1] + Op.STOP,\n                ),\n                Section.Code(\n                    code=Op.SSTORE(1, 1) + Op.RETF,\n                    code_outputs=0,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_dupn","title":"test_rjumpi_into_dupn(eof_test)","text":"

    EOF code containing RJUMP with target DUPN immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_dupn(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target DUPN immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.PUSH1(1)\n                    + Op.PUSH1(1)\n                    + Op.RJUMPI[1]\n                    + Op.DUPN[1]\n                    + Op.SSTORE\n                    + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_swapn","title":"test_rjumpi_into_swapn(eof_test)","text":"

    EOF code containing RJUMP with target SWAPN immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_swapn(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target SWAPN immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.PUSH1(1)\n                    + Op.PUSH1(1)\n                    + Op.RJUMPI[1]\n                    + Op.SWAPN[1]\n                    + Op.SSTORE\n                    + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_exchange","title":"test_rjumpi_into_exchange(eof_test)","text":"

    EOF code containing RJUMP with target EXCHANGE immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_exchange(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target EXCHANGE immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.PUSH1(2)\n                    + Op.PUSH1(3)\n                    + Op.PUSH1(1)\n                    + Op.RJUMPI[1]\n                    + Op.EXCHANGE[0x00]\n                    + Op.SSTORE\n                    + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_eofcreate","title":"test_rjumpi_into_eofcreate(eof_test)","text":"

    EOF code containing RJUMP with target EOFCREATE immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_eofcreate(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target EOFCREATE immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 + Op.RJUMPI[9] + Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP,\n                ),\n                Section.Container(\n                    container=Container(\n                        sections=[\n                            Section.Code(\n                                code=Op.RETURNCONTRACT[0](0, 0),\n                            ),\n                            Section.Container(\n                                container=Container(\n                                    sections=[\n                                        Section.Code(code=Op.STOP),\n                                    ]\n                                )\n                            ),\n                        ]\n                    )\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_into_returncontract","title":"test_rjumpi_into_returncontract(eof_test)","text":"

    EOF code containing RJUMP with target RETURNCONTRACT immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_into_returncontract(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF code containing RJUMP with target RETURNCONTRACT immediate\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP,\n                ),\n                Section.Container(\n                    container=Container(\n                        sections=[\n                            Section.Code(\n                                code=Op.PUSH0 + Op.RJUMPI[5] + Op.RETURNCONTRACT[0](0, 0),\n                            ),\n                            Section.Container(\n                                container=Container(\n                                    sections=[\n                                        Section.Code(code=Op.STOP),\n                                    ]\n                                )\n                            ),\n                        ]\n                    )\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_backwards_reference_only","title":"test_rjumpi_backwards_reference_only(eof_test)","text":"

    EOF code containing instructions only reachable by backwards RJUMPI

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_backwards_reference_only(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF code containing instructions only reachable by backwards RJUMPI\n    \"\"\"\n    container = Container.Code(\n        code=(\n            Op.RJUMP[RJUMP_LEN]\n            + Op.RJUMP[RJUMPI_LEN + len(Op.ORIGIN)]\n            + Op.ORIGIN\n            + Op.RJUMPI[-(RJUMP_LEN + RJUMPI_LEN + len(Op.ORIGIN))]\n            + Op.STOP\n        )\n    )\n    eof_test(\n        data=container,\n        expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_stack_validation","title":"test_rjumpi_stack_validation(eof_test)","text":"

    Check that you can get to the same opcode with two different stack heights Spec now allows this: 4.b in https://github.com/ipsilon/eof/blob/main/spec/eof.md#stack-validation

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_stack_validation(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    Check that you can get to the same opcode with two different stack heights\n    Spec now allows this:\n    4.b in https://github.com/ipsilon/eof/blob/main/spec/eof.md#stack-validation\n    \"\"\"\n    container = Container.Code(code=Op.RJUMPI[1](1) + Op.ADDRESS + Op.NOOP + Op.STOP)\n    eof_test(\n        data=container,\n        expect_exception=None,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_at_the_end","title":"test_rjumpi_at_the_end(eof_test)","text":"

    https://github.com/ipsilon/eof/blob/main/spec/eof.md#stack-validation 4.i: This implies that the last instruction may be a terminating instruction or RJUMP

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_at_the_end(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    https://github.com/ipsilon/eof/blob/main/spec/eof.md#stack-validation 4.i:\n    This implies that the last instruction may be a terminating instruction or RJUMP\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0) + Op.PUSH1(0) + Op.RJUMPI[1] + Op.STOP + Op.RJUMPI[-4],\n                )\n            ],\n        ),\n        expect_exception=EOFException.MISSING_STOP_OPCODE,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_tangled_rjumpi","title":"test_tangled_rjumpi(eof_test)","text":"

    EOF code containing tangled RJUMPI paths

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_tangled_rjumpi(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF code containing tangled RJUMPI paths\n    \"\"\"\n    container = Container.Code(\n        code=(\n            Op.PUSH0  # [0,0]\n            + Op.PUSH0  # [1,1]\n            + Op.RJUMPI[8]  # [2,2]\n            + Op.PUSH1(127)  # [1,1]\n            + Op.RJUMPI[7]  # [2,2]\n            + Op.RJUMP[5]  # [1,1]\n            + Op.PUSH0  # [1,1]\n            + Op.RJUMP[0]  # [2,1]\n            + Op.LT  # [1,x]\n            + Op.STOP  # [1,x]\n        )\n    )\n    eof_test(\n        data=container,\n        expect_exception=EOFException.STACK_UNDERFLOW,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_backwards_onto_dup","title":"test_rjumpi_backwards_onto_dup(eof_test)","text":"

    Backwards jumpi onto a dup

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
    def test_rjumpi_backwards_onto_dup(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    Backwards jumpi onto a dup\n    \"\"\"\n    container = Container.Code(\n        code=(Op.PUSH0 + Op.DUP1 + Op.RJUMPI[-4] + Op.STOP),\n        max_stack_height=2,\n    )\n    eof_test(\n        data=container,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/index/test_cases/","title":"Test Rjumpi - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py:

    test_rjumpi_condition_forwards[fork_CancunEIP7692-blockchain_test-False]\ntest_rjumpi_condition_forwards[fork_CancunEIP7692-blockchain_test-True]\ntest_rjumpi_condition_forwards[fork_CancunEIP7692-blockchain_test_engine-False]\ntest_rjumpi_condition_forwards[fork_CancunEIP7692-blockchain_test_engine-True]\ntest_rjumpi_condition_forwards[fork_CancunEIP7692-state_test-False]\ntest_rjumpi_condition_forwards[fork_CancunEIP7692-state_test-True]\ntest_rjumpi_condition_backwards[fork_CancunEIP7692-blockchain_test-False]\ntest_rjumpi_condition_backwards[fork_CancunEIP7692-blockchain_test-True]\ntest_rjumpi_condition_backwards[fork_CancunEIP7692-blockchain_test_engine-False]\ntest_rjumpi_condition_backwards[fork_CancunEIP7692-blockchain_test_engine-True]\ntest_rjumpi_condition_backwards[fork_CancunEIP7692-state_test-False]\ntest_rjumpi_condition_backwards[fork_CancunEIP7692-state_test-True]\ntest_rjumpi_condition_zero[fork_CancunEIP7692-blockchain_test-False]\ntest_rjumpi_condition_zero[fork_CancunEIP7692-blockchain_test-True]\ntest_rjumpi_condition_zero[fork_CancunEIP7692-blockchain_test_engine-False]\ntest_rjumpi_condition_zero[fork_CancunEIP7692-blockchain_test_engine-True]\ntest_rjumpi_condition_zero[fork_CancunEIP7692-state_test-False]\ntest_rjumpi_condition_zero[fork_CancunEIP7692-state_test-True]\ntest_rjumpi_forwards[fork_CancunEIP7692-eof_test]\ntest_rjumpi_forwards[fork_CancunEIP7692-state_test]\ntest_rjumpi_forwards[fork_CancunEIP7692-blockchain_test]\ntest_rjumpi_forwards[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpi_backwards[fork_CancunEIP7692-eof_test]\ntest_rjumpi_backwards[fork_CancunEIP7692-state_test]\ntest_rjumpi_backwards[fork_CancunEIP7692-blockchain_test]\ntest_rjumpi_backwards[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpi_zero[fork_CancunEIP7692-eof_test]\ntest_rjumpi_zero[fork_CancunEIP7692-state_test]\ntest_rjumpi_zero[fork_CancunEIP7692-blockchain_test]\ntest_rjumpi_zero[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpi_max_forward[fork_CancunEIP7692-eof_test]\ntest_rjumpi_max_forward[fork_CancunEIP7692-state_test]\ntest_rjumpi_max_forward[fork_CancunEIP7692-blockchain_test]\ntest_rjumpi_max_forward[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpi_max_backward[fork_CancunEIP7692-eof_test]\ntest_rjumpi_max_backward[fork_CancunEIP7692-state_test]\ntest_rjumpi_max_backward[fork_CancunEIP7692-blockchain_test]\ntest_rjumpi_max_backward[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpi_max_bytecode_size[fork_CancunEIP7692-eof_test]\ntest_rjumpi_truncated[fork_CancunEIP7692-eof_test]\ntest_rjumpi_truncated_2[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_header[fork_CancunEIP7692-eof_test]\ntest_rjumpi_jump_before_header[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_data[fork_CancunEIP7692-eof_test]\ntest_rjumpi_after_container[fork_CancunEIP7692-eof_test]\ntest_rjumpi_to_code_end[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_self_data_portion[fork_CancunEIP7692-eof_test-offset_1]\ntest_rjumpi_into_self_data_portion[fork_CancunEIP7692-eof_test-offset_2]\ntest_rjumpi_into_self[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_stack_height_diff[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_stack_underflow[fork_CancunEIP7692-eof_test]\ntest_rjumpi_skips_stack_underflow[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_rjump[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_rjumpi[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_push_1[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD]\ntest_rjumpi_into_push_1[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH2]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH3]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH4]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH5]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH6]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH7]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH8]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH9]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH10]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH11]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH12]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH13]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH14]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH15]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH16]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH17]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH18]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH19]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH20]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH21]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH22]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH23]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH24]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH25]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH26]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH27]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH28]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH29]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH30]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH31]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.FORWARD-opcode_PUSH32]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH2]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH3]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH4]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH5]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH6]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH7]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH8]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH9]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH10]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH11]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH12]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH13]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH14]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH15]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH16]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH17]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH18]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH19]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH20]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH21]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH22]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH23]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH24]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH25]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH26]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH27]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH28]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH29]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH30]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH31]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_end-jump_JumpDirection.BACKWARD-opcode_PUSH32]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH2]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH3]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH4]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH5]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH6]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH7]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH8]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH9]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH10]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH11]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH12]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH13]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH14]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH15]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH16]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH17]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH18]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH19]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH20]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH21]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH22]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH23]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH24]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH25]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH26]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH27]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH28]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH29]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH30]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH31]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.FORWARD-opcode_PUSH32]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH2]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH3]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH4]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH5]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH6]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH7]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH8]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH9]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH10]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH11]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH12]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH13]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH14]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH15]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH16]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH17]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH18]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH19]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH20]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH21]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH22]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH23]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH24]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH25]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH26]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH27]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH28]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH29]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH30]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH31]\ntest_rjumpi_into_push_n[fork_CancunEIP7692-eof_test-data_portion_start-jump_JumpDirection.BACKWARD-opcode_PUSH32]\ntest_rjumpi_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_end-target_rjumpv_table_size_1]\ntest_rjumpi_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_end-target_rjumpv_table_size_256]\ntest_rjumpi_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_start-target_rjumpv_table_size_1]\ntest_rjumpi_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_start-target_rjumpv_table_size_256]\ntest_rjumpi_into_callf[fork_CancunEIP7692-eof_test-data_portion_end]\ntest_rjumpi_into_callf[fork_CancunEIP7692-eof_test-data_portion_start]\ntest_rjumpi_into_dupn[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_swapn[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_exchange[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_eofcreate[fork_CancunEIP7692-eof_test]\ntest_rjumpi_into_returncontract[fork_CancunEIP7692-eof_test]\ntest_rjumpi_backwards_reference_only[fork_CancunEIP7692-eof_test]\ntest_rjumpi_stack_validation[fork_CancunEIP7692-eof_test]\ntest_rjumpi_at_the_end[fork_CancunEIP7692-eof_test]\ntest_tangled_rjumpi[fork_CancunEIP7692-eof_test]\ntest_rjumpi_backwards_onto_dup[fork_CancunEIP7692-eof_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/","title":"Test Rjumpv","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF JUMPF tests covering stack and code validation rules.

    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_condition","title":"test_rjumpv_condition(eof_state_test, calldata, table_size)","text":"

    Test RJUMPV contract switching based on external input

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"calldata\",\n    [\n        pytest.param(0, id=\"c0\"),\n        pytest.param(1, id=\"c1\"),\n        pytest.param(3, id=\"c3\"),\n        pytest.param(255, id=\"c255\"),\n        pytest.param(256, id=\"c256\"),\n        pytest.param(2**256 - 1, id=\"c2^256-1\"),\n    ],\n)\n@pytest.mark.parametrize(\n    \"table_size\",\n    [\n        pytest.param(1, id=\"t1\"),\n        pytest.param(3, id=\"t3\"),\n        pytest.param(256, id=\"t256\"),\n    ],\n)\ndef test_rjumpv_condition(\n    eof_state_test: EOFStateTestFiller,\n    calldata: int,\n    table_size: int,\n):\n    \"\"\"Test RJUMPV contract switching based on external input\"\"\"\n    value_fall_through = 0xFFFF\n    value_base = 0x1000  # Force a `PUSH2` instruction to be used on all targets\n    target_length = 7\n    jump_table = [(i + 1) * target_length for i in range(table_size)]\n\n    jump_targets = sum(\n        (Op.SSTORE(slot_conditional_result, i + value_base) + Op.STOP) for i in range(table_size)\n    )\n\n    fall_through_case = Op.SSTORE(slot_conditional_result, value_fall_through) + Op.STOP\n\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0\n                    + Op.CALLDATALOAD\n                    + Op.RJUMPV[jump_table]\n                    + fall_through_case\n                    + jump_targets,\n                )\n            ]\n        ),\n        tx_data=calldata.to_bytes(32, \"big\"),\n        container_post=Account(\n            storage={\n                slot_conditional_result: calldata + value_base\n                if calldata < table_size\n                else value_fall_through,\n            }\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_forwards","title":"test_rjumpv_forwards(eof_state_test)","text":"

    EOF1V4200_0008 (Valid) EOF with RJUMPV table size 1 (Positive)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_forwards(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0008 (Valid) EOF with RJUMPV table size 1 (Positive)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0)\n                    + Op.RJUMPV[3]\n                    + Op.NOOP\n                    + Op.NOOP\n                    + Op.STOP\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_backwards","title":"test_rjumpv_backwards(eof_state_test)","text":"

    EOF1V4200_0009 (Valid) EOF with RJUMPV table size 1 (Negative)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_backwards(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0009 (Valid) EOF with RJUMPV table size 1 (Negative)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0)\n                    + Op.RJUMPI[7]\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                    + Op.PUSH1(0)\n                    + Op.RJUMPV[-13]\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_backwards_onto_dup","title":"test_rjumpv_backwards_onto_dup(eof_test)","text":"

    Backwards jump vector onto a dup

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_backwards_onto_dup(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    Backwards jump vector onto a dup\n    \"\"\"\n    container = Container.Code(\n        code=(Op.PUSH0 + Op.DUP1 + Op.RJUMPV[-5] + Op.STOP),\n        max_stack_height=2,\n    )\n    eof_test(\n        data=container,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_backwards_large_table","title":"test_rjumpv_backwards_large_table(eof_test, len)","text":"

    Backwards jump vector with a large table

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\"len\", [8, 9])\ndef test_rjumpv_backwards_large_table(\n    eof_test: EOFTestFiller,\n    len: int,\n):\n    \"\"\"\n    Backwards jump vector with a large table\n    \"\"\"\n    jump_table = [0] * len\n    jump_table += [len * -2 - 6]\n    container = Container.Code(\n        code=(Op.RJUMPV[jump_table](len) + Op.STOP),\n        max_stack_height=1,\n    )\n    eof_test(\n        data=container,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_zero","title":"test_rjumpv_zero(eof_state_test)","text":"

    EOF1V4200_0010 (Valid) EOF with RJUMPV table size 1 (Zero)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_zero(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0010 (Valid) EOF with RJUMPV table size 1 (Zero)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0)\n                    + Op.RJUMPV[0]\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_size_3","title":"test_rjumpv_size_3(eof_state_test)","text":"

    EOF1V4200_0011 (Valid) EOF with RJUMPV table size 3

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_size_3(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0011 (Valid) EOF with RJUMPV table size 3\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0)\n                    + Op.RJUMPV[3, 0, -10]\n                    + Op.NOOP\n                    + Op.NOOP\n                    + Op.STOP\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_full_table","title":"test_rjumpv_full_table(eof_state_test)","text":"

    EOF1V4200_0012 (Valid) EOF with RJUMPV table size 256 (Target 0)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_full_table(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0012 (Valid) EOF with RJUMPV table size 256 (Target 0)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0)\n                    + Op.RJUMPV[range(256)]\n                    + Op.NOOP * 256\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_full_table_mid","title":"test_rjumpv_full_table_mid(eof_state_test)","text":"

    EOF1V4200_0013 (Valid) EOF with RJUMPV table size 256 (Target 100)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_full_table_mid(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0013 (Valid) EOF with RJUMPV table size 256 (Target 100)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(100)\n                    + Op.RJUMPV[range(256)]\n                    + Op.NOOP * 256\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_full_table_end","title":"test_rjumpv_full_table_end(eof_state_test)","text":"

    EOF1V4200_0014 (Valid) EOF with RJUMPV table size 256 (Target 254)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_full_table_end(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0014 (Valid) EOF with RJUMPV table size 256 (Target 254)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(254)\n                    + Op.RJUMPV[range(256)]\n                    + Op.NOOP * 256\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_full_table_last","title":"test_rjumpv_full_table_last(eof_state_test)","text":"

    EOF1V4200_0015 (Valid) EOF with RJUMPV table size 256 (Target 256)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_full_table_last(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0015 (Valid) EOF with RJUMPV table size 256 (Target 256)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH2(256)\n                    + Op.RJUMPV[range(256)]\n                    + Op.NOOP * 256\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_max_forwards","title":"test_rjumpv_max_forwards(eof_state_test)","text":"

    EOF1V4200_0016 (Valid) EOF with RJUMPV containing the maximum offset (32767)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_max_forwards(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"EOF1V4200_0016 (Valid) EOF with RJUMPV containing the maximum offset (32767)\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.RJUMPV[32767]\n                    + Op.NOOP * 32768\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_truncated_empty","title":"test_rjumpv_truncated_empty(eof_test)","text":"

    EOF1I4200_0027 (Invalid) EOF code containing RJUMPV with max_index 0 but no immediates

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_truncated_empty(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"EOF1I4200_0027 (Invalid) EOF code containing RJUMPV with max_index 0 but no immediates\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPV,\n                )\n            ],\n        ),\n        expect_exception=EOFException.TRUNCATED_INSTRUCTION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_truncated","title":"test_rjumpv_truncated(eof_test, branches, byte_count_last_branch)","text":"

    EOF1I4200_0028/29/30/31 (Invalid) EOF code containing truncated RJUMPV

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"branches\",\n    [1, 2, 256],\n)\n@pytest.mark.parametrize(\n    \"byte_count_last_branch\",\n    [0, 1],\n)\ndef test_rjumpv_truncated(\n    eof_test: EOFTestFiller,\n    branches: int,\n    byte_count_last_branch: int,\n):\n    \"\"\"EOF1I4200_0028/29/30/31 (Invalid) EOF code containing truncated RJUMPV\"\"\"\n    rjumpv_bytes = int.to_bytes(branches - 1, 1, \"big\")\n    rjumpv_bytes += b\"\\0\" * ((2 * (branches - 1)) + byte_count_last_branch)\n\n    eof_test(\n        data=Container.Code(code=Op.PUSH1(1) + Op.RJUMPV[rjumpv_bytes]),\n        expect_exception=EOFException.TRUNCATED_INSTRUCTION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_header","title":"test_rjumpv_into_header(eof_test, table_size, invalid_index)","text":"

    EOF1I4200_0031 (Invalid) EOF code containing RJUMPV with target outside code bounds (Jumping into header)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_into_header(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"\n    EOF1I4200_0031 (Invalid) EOF code containing RJUMPV with target outside code bounds\n    (Jumping into header)\n    \"\"\"\n    invalid_destination = -5 - (2 * table_size)\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_before_container","title":"test_rjumpv_before_container(eof_test, table_size, invalid_index)","text":"

    EOF1I4200_0032 (Invalid) EOF code containing RJUMPV with target outside code bounds (Jumping to before code begin)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_before_container(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"\n    EOF1I4200_0032 (Invalid) EOF code containing RJUMPV with target outside code bounds\n    (Jumping to before code begin)\n    \"\"\"\n    invalid_destination = -13 - (2 * table_size)\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_data","title":"test_rjumpv_into_data(eof_test, table_size, invalid_index)","text":"

    EOF1I4200_0033 (Invalid) EOF code containing RJUMPV with target outside code bounds (Jumping into data section)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_into_data(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"\n    EOF1I4200_0033 (Invalid) EOF code containing RJUMPV with target outside code bounds\n    (Jumping into data section)\n    \"\"\"\n    invalid_destination = 2\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP,\n                ),\n                Section.Data(data=b\"\\xaa\\xbb\\xcc\"),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_after_container","title":"test_rjumpv_after_container(eof_test, table_size, invalid_index)","text":"

    EOF1I4200_0034 (Invalid) EOF code containing RJUMPV with target outside code bounds (Jumping to after code end)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_after_container(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"\n    EOF1I4200_0034 (Invalid) EOF code containing RJUMPV with target outside code bounds\n    (Jumping to after code end)\n    \"\"\"\n    invalid_destination = 2\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_at_end","title":"test_rjumpv_at_end(eof_test, table_size, invalid_index)","text":"

    EOF1I4200_0035 (Invalid) EOF code containing RJUMPV with target outside code bounds (Jumping to code end)

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_at_end(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"\n    EOF1I4200_0035 (Invalid) EOF code containing RJUMPV with target outside code bounds\n    (Jumping to code end)\n    \"\"\"\n    invalid_destination = 1\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_self_data_portion","title":"test_rjumpv_into_self_data_portion(eof_test, table_size, invalid_index, data_portion_end)","text":"

    EOF1I4200_0036 (Invalid) EOF code containing RJUMPV with target same RJUMPV immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\n@pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjumpv_into_self_data_portion(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0036 (Invalid) EOF code containing RJUMPV with target same RJUMPV immediate\"\"\"\n    invalid_destination = -1 if data_portion_end else -(2 * table_size) - 1\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_self","title":"test_rjumpv_into_self(eof_test, table_size, invalid_index)","text":"

    EOF code containing RJUMPV with target same RJUMPV immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_into_self(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"EOF code containing RJUMPV with target same RJUMPV immediate\"\"\"\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = -len(Op.RJUMPV[jump_table])\n\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.STACK_HEIGHT_MISMATCH,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_stack_height_diff","title":"test_rjumpv_into_stack_height_diff(eof_test, table_size, invalid_index)","text":"

    EOF code containing RJUMPV with target instruction that causes stack height difference

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_into_stack_height_diff(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"EOF code containing RJUMPV with target instruction that causes stack height difference\"\"\"\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = -(len(Op.RJUMPV[jump_table]) + len(Op.PUSH1(0)) + len(Op.PUSH1(0)))\n\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0) + Op.PUSH1(0) + Op.RJUMPV[jump_table] + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.STACK_HEIGHT_MISMATCH,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_stack_underflow","title":"test_rjumpv_into_stack_underflow(eof_test, table_size, invalid_index)","text":"

    EOF code containing RJUMPV with target instruction that cause stack underflow

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_into_stack_underflow(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"EOF code containing RJUMPV with target instruction that cause stack underflow\"\"\"\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = 1\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.ORIGIN + Op.RJUMPV[jump_table] + Op.STOP + Op.POP + Op.STOP),\n            ],\n        ),\n        expect_exception=EOFException.STACK_UNDERFLOW,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_skips_stack_underflow","title":"test_rjumpv_skips_stack_underflow(eof_test, table_size)","text":"

    EOF code containing RJUMPV where the default path produces a stack underflow

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size\",\n    [\n        pytest.param(1, id=\"t1\"),\n        pytest.param(256, id=\"t256\"),\n    ],\n)\ndef test_rjumpv_skips_stack_underflow(\n    eof_test: EOFTestFiller,\n    table_size: int,\n):\n    \"\"\"EOF code containing RJUMPV where the default path produces a stack underflow\"\"\"\n    jump_table = [1 for _ in range(table_size)]\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(code=Op.ORIGIN + Op.RJUMPV[jump_table] + Op.POP + Op.STOP),\n            ],\n        ),\n        expect_exception=EOFException.STACK_UNDERFLOW,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_rjump","title":"test_rjumpv_into_rjump(eof_test, table_size, invalid_index, data_portion_end)","text":"

    EOF1I4200_0037 (Invalid) EOF code containing RJUMPV with target RJUMP immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\n@pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjumpv_into_rjump(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0037 (Invalid) EOF code containing RJUMPV with target RJUMP immediate\"\"\"\n    invalid_destination = 3 if data_portion_end else 2\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    if table_size > 1:\n        valid_index = 0\n        if valid_index == invalid_index:\n            valid_index += 1\n        jump_table[valid_index] = 1\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP + Op.RJUMP[0] + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_rjumpi","title":"test_rjumpv_into_rjumpi(eof_test, table_size, invalid_index, data_portion_end)","text":"

    EOF1I4200_0038 (Invalid) EOF code containing RJUMPV with target RJUMPI immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\n@pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjumpv_into_rjumpi(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0038 (Invalid) EOF code containing RJUMPV with target RJUMPI immediate\"\"\"\n    invalid_destination = 5 if data_portion_end else 4\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    if table_size > 1:\n        valid_index = 0\n        if valid_index == invalid_index:\n            valid_index += 1\n        jump_table[valid_index] = 1\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.RJUMPV[jump_table]\n                    + Op.STOP\n                    + Op.PUSH1(1)\n                    + Op.RJUMPI[0]\n                    + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_push_1","title":"test_rjumpv_into_push_1(eof_test, jump, table_size, invalid_index)","text":"

    EOF1I4200_0039 (Invalid) EOF code containing RJUMPV with target PUSH1 immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\n@pytest.mark.parametrize(\"jump\", [JumpDirection.FORWARD, JumpDirection.BACKWARD])\ndef test_rjumpv_into_push_1(\n    eof_test: EOFTestFiller,\n    jump: JumpDirection,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"EOF1I4200_0039 (Invalid) EOF code containing RJUMPV with target PUSH1 immediate\"\"\"\n    if jump == JumpDirection.FORWARD:\n        invalid_destination = 2\n        jump_table = [0 for _ in range(table_size)]\n        jump_table[invalid_index] = invalid_destination\n        code = (\n            Op.PUSH1(1)\n            + Op.RJUMPV[jump_table]\n            + Op.STOP\n            + Op.PUSH1(1)\n            + Op.PUSH1(1)\n            + Op.SSTORE\n            + Op.STOP\n        )\n    else:\n        invalid_destination = -(2 * table_size) - 3\n        jump_table = [0 for _ in range(table_size)]\n        jump_table[invalid_index] = invalid_destination\n        code = Op.PUSH1(1) + Op.RJUMPV[jump_table] + Op.STOP\n    eof_test(\n        data=Container(\n            sections=[Section.Code(code=code)],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_push_n","title":"test_rjumpv_into_push_n(eof_test, opcode, jump, table_size, invalid_index, data_portion_end)","text":"

    EOF1I4200_0039 (Invalid) EOF code containing RJUMPV with target PUSH1 immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.PUSH2,\n        Op.PUSH3,\n        Op.PUSH4,\n        Op.PUSH5,\n        Op.PUSH6,\n        Op.PUSH7,\n        Op.PUSH8,\n        Op.PUSH9,\n        Op.PUSH10,\n        Op.PUSH11,\n        Op.PUSH12,\n        Op.PUSH13,\n        Op.PUSH14,\n        Op.PUSH15,\n        Op.PUSH16,\n        Op.PUSH17,\n        Op.PUSH18,\n        Op.PUSH19,\n        Op.PUSH20,\n        Op.PUSH21,\n        Op.PUSH22,\n        Op.PUSH23,\n        Op.PUSH24,\n        Op.PUSH25,\n        Op.PUSH26,\n        Op.PUSH27,\n        Op.PUSH28,\n        Op.PUSH29,\n        Op.PUSH30,\n        Op.PUSH31,\n        Op.PUSH32,\n    ],\n)\n@pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\n@pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\n@pytest.mark.parametrize(\"jump\", [JumpDirection.FORWARD, JumpDirection.BACKWARD])\ndef test_rjumpv_into_push_n(\n    eof_test: EOFTestFiller,\n    opcode: Op,\n    jump: JumpDirection,\n    table_size: int,\n    invalid_index: int,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0039 (Invalid) EOF code containing RJUMPV with target PUSH1 immediate\"\"\"\n    data_portion_length = int.from_bytes(opcode, byteorder=\"big\") - 0x5F\n    if jump == JumpDirection.FORWARD:\n        invalid_destination = data_portion_length + 1 if data_portion_end else 2\n        jump_table = [0 for _ in range(table_size)]\n        jump_table[invalid_index] = invalid_destination\n        code = (\n            Op.PUSH1(1)\n            + Op.RJUMPV[jump_table]\n            + Op.STOP\n            + opcode[1]\n            + Op.PUSH1(1)\n            + Op.SSTORE\n            + Op.STOP\n        )\n    else:\n        invalid_destination = (\n            -(2 * table_size) - 3\n            if data_portion_end\n            else -(2 * table_size) - 2 - data_portion_length\n        )\n        jump_table = [0 for _ in range(table_size)]\n        jump_table[invalid_index] = invalid_destination\n        code = opcode[1] + Op.RJUMPV[jump_table] + Op.STOP\n    eof_test(\n        data=Container(\n            sections=[Section.Code(code=code)],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_rjumpv","title":"test_rjumpv_into_rjumpv(eof_test, source_table_size, target_table_size, invalid_index, data_portion_end)","text":"

    EOF1I4200_0040 (Invalid) EOF code containing RJUMPV with target other RJUMPV immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"source_table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"s1i0\"),\n        pytest.param(256, 0, id=\"s256i0\"),\n        pytest.param(256, 255, id=\"s256i255\"),\n    ],\n)\n@pytest.mark.parametrize(\"target_table_size\", [1, 256], ids=[\"t1\", \"t256\"])\n@pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjumpv_into_rjumpv(\n    eof_test: EOFTestFiller,\n    source_table_size: int,\n    target_table_size: int,\n    invalid_index: int,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0040 (Invalid) EOF code containing RJUMPV with target other RJUMPV immediate\"\"\"\n    invalid_destination = 4 + (2 * target_table_size) if data_portion_end else 4\n    source_jump_table = [0 for _ in range(source_table_size)]\n    source_jump_table[invalid_index] = invalid_destination\n    target_jump_table = [0 for _ in range(target_table_size)]\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.RJUMPV[source_jump_table]\n                    + Op.STOP\n                    + Op.PUSH1(1)\n                    + Op.RJUMPV[target_jump_table]\n                    + Op.STOP,\n                )\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_callf","title":"test_rjumpv_into_callf(eof_test, table_size, invalid_index, data_portion_end)","text":"

    EOF1I4200_0041 (Invalid) EOF code containing RJUMPV with target CALLF immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\n@pytest.mark.parametrize(\n    \"data_portion_end\",\n    [True, False],\n    ids=[\"data_portion_end\", \"data_portion_start\"],\n)\ndef test_rjumpv_into_callf(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n    data_portion_end: bool,\n):\n    \"\"\"EOF1I4200_0041 (Invalid) EOF code containing RJUMPV with target CALLF immediate\"\"\"\n    invalid_destination = 2 if data_portion_end else 1\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0) + Op.RJUMPV[jump_table] + Op.CALLF[1] + Op.STOP,\n                ),\n                Section.Code(\n                    code=Op.SSTORE(1, 1) + Op.RETF,\n                    code_outputs=0,\n                ),\n            ]\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_dupn","title":"test_rjumpv_into_dupn(eof_test, table_size, invalid_index)","text":"

    EOF code containing RJUMP with target DUPN immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_into_dupn(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"EOF code containing RJUMP with target DUPN immediate\"\"\"\n    invalid_destination = 1\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.PUSH1(1)\n                    + Op.PUSH1(0)\n                    + Op.RJUMPV[jump_table]\n                    + Op.DUPN[1]\n                    + Op.SSTORE\n                    + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_swapn","title":"test_rjumpv_into_swapn(eof_test, table_size, invalid_index)","text":"

    EOF code containing RJUMP with target SWAPN immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_into_swapn(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"EOF code containing RJUMP with target SWAPN immediate\"\"\"\n    invalid_destination = 1\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.PUSH1(1)\n                    + Op.PUSH1(0)\n                    + Op.RJUMPV[jump_table]\n                    + Op.SWAPN[1]\n                    + Op.SSTORE\n                    + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_exchange","title":"test_rjumpv_into_exchange(eof_test, table_size, invalid_index)","text":"

    EOF code containing RJUMP with target EXCHANGE immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_into_exchange(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"EOF code containing RJUMP with target EXCHANGE immediate\"\"\"\n    invalid_destination = 1\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(1)\n                    + Op.PUSH1(2)\n                    + Op.PUSH1(3)\n                    + Op.PUSH1(0)\n                    + Op.RJUMPV[1]\n                    + Op.EXCHANGE[0x00]\n                    + Op.SSTORE\n                    + Op.STOP,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_eofcreate","title":"test_rjumpv_into_eofcreate(eof_test, table_size, invalid_index)","text":"

    EOF code containing RJUMP with target EOFCREATE immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_into_eofcreate(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"EOF code containing RJUMP with target EOFCREATE immediate\"\"\"\n    invalid_destination = 9\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0)\n                    + Op.RJUMPV[jump_table]\n                    + Op.EOFCREATE[0](0, 0, 0, 0)\n                    + Op.STOP,\n                ),\n                Section.Container(\n                    container=Container(\n                        sections=[\n                            Section.Code(\n                                code=Op.RETURNCONTRACT[0](0, 0),\n                            ),\n                            Section.Container(\n                                container=Container(\n                                    sections=[\n                                        Section.Code(code=Op.STOP),\n                                    ]\n                                )\n                            ),\n                        ]\n                    )\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_into_returncontract","title":"test_rjumpv_into_returncontract(eof_test, table_size, invalid_index)","text":"

    EOF code containing RJUMP with target RETURNCONTRACT immediate

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    @pytest.mark.parametrize(\n    \"table_size,invalid_index\",\n    [\n        pytest.param(1, 0, id=\"t1i0\"),\n        pytest.param(256, 0, id=\"t256i0\"),\n        pytest.param(256, 255, id=\"t256i255\"),\n    ],\n)\ndef test_rjumpv_into_returncontract(\n    eof_test: EOFTestFiller,\n    table_size: int,\n    invalid_index: int,\n):\n    \"\"\"EOF code containing RJUMP with target RETURNCONTRACT immediate\"\"\"\n    invalid_destination = 5\n    jump_table = [0 for _ in range(table_size)]\n    jump_table[invalid_index] = invalid_destination\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP,\n                ),\n                Section.Container(\n                    container=Container(\n                        sections=[\n                            Section.Code(\n                                code=Op.PUSH1(0)\n                                + Op.RJUMPV[jump_table]\n                                + Op.RETURNCONTRACT[0](0, 0),\n                            ),\n                            Section.Container(\n                                container=Container(\n                                    sections=[\n                                        Section.Code(code=Op.STOP),\n                                    ]\n                                )\n                            ),\n                        ]\n                    )\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_RJUMP_DESTINATION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_backwards_reference_only","title":"test_rjumpv_backwards_reference_only(eof_test)","text":"

    EOF code containing instructions only reachable by backwards RJUMPV

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_backwards_reference_only(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    EOF code containing instructions only reachable by backwards RJUMPV\n    \"\"\"\n    RJUMPV_LEN = len(Op.RJUMPV[0])\n    container = Container.Code(\n        code=(\n            Op.RJUMP[RJUMP_LEN]\n            + Op.RJUMP[RJUMPV_LEN + len(Op.ORIGIN)]\n            + Op.ORIGIN\n            + Op.RJUMPV[-(RJUMP_LEN + RJUMPV_LEN + len(Op.ORIGIN))]\n            + Op.STOP\n        )\n    )\n    eof_test(\n        data=container,\n        expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_at_the_end","title":"test_rjumpv_at_the_end(eof_test)","text":"

    https://github.com/ipsilon/eof/blob/main/spec/eof.md#stack-validation 4.i: This implies that the last instruction may be a terminating instruction or RJUMP

    Source code in tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
    def test_rjumpv_at_the_end(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    https://github.com/ipsilon/eof/blob/main/spec/eof.md#stack-validation 4.i:\n    This implies that the last instruction may be a terminating instruction or RJUMP\n    \"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH1(0) + Op.PUSH1(0) + Op.RJUMPI[1] + Op.STOP + Op.RJUMPV[-7](1),\n                )\n            ],\n        ),\n        expect_exception=EOFException.MISSING_STOP_OPCODE,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/index/test_cases/","title":"Test Rjumpv - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py:

    test_rjumpv_condition[fork_CancunEIP7692-eof_test-t1-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t1-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t1-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t1-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t1-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t1-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t3-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t3-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t3-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t3-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t3-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t3-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t256-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t256-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t256-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t256-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t256-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-eof_test-t256-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t1-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t1-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t1-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t1-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t1-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t1-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t3-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t3-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t3-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t3-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t3-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t3-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t256-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t256-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t256-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t256-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t256-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-state_test-t256-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t1-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t1-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t1-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t1-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t1-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t1-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t3-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t3-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t3-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t3-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t3-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t3-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t256-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t256-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t256-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t256-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t256-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test-t256-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t1-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t1-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t1-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t1-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t1-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t1-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t3-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t3-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t3-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t3-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t3-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t3-c2^256-1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t256-c0]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t256-c1]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t256-c3]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t256-c255]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t256-c256]\ntest_rjumpv_condition[fork_CancunEIP7692-blockchain_test_engine-t256-c2^256-1]\ntest_rjumpv_forwards[fork_CancunEIP7692-eof_test]\ntest_rjumpv_forwards[fork_CancunEIP7692-state_test]\ntest_rjumpv_forwards[fork_CancunEIP7692-blockchain_test]\ntest_rjumpv_forwards[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpv_backwards[fork_CancunEIP7692-eof_test]\ntest_rjumpv_backwards[fork_CancunEIP7692-state_test]\ntest_rjumpv_backwards[fork_CancunEIP7692-blockchain_test]\ntest_rjumpv_backwards[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpv_backwards_onto_dup[fork_CancunEIP7692-eof_test]\ntest_rjumpv_backwards_large_table[fork_CancunEIP7692-eof_test-len_8]\ntest_rjumpv_backwards_large_table[fork_CancunEIP7692-eof_test-len_9]\ntest_rjumpv_zero[fork_CancunEIP7692-eof_test]\ntest_rjumpv_zero[fork_CancunEIP7692-state_test]\ntest_rjumpv_zero[fork_CancunEIP7692-blockchain_test]\ntest_rjumpv_zero[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpv_size_3[fork_CancunEIP7692-eof_test]\ntest_rjumpv_size_3[fork_CancunEIP7692-state_test]\ntest_rjumpv_size_3[fork_CancunEIP7692-blockchain_test]\ntest_rjumpv_size_3[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpv_full_table[fork_CancunEIP7692-eof_test]\ntest_rjumpv_full_table[fork_CancunEIP7692-state_test]\ntest_rjumpv_full_table[fork_CancunEIP7692-blockchain_test]\ntest_rjumpv_full_table[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpv_full_table_mid[fork_CancunEIP7692-eof_test]\ntest_rjumpv_full_table_mid[fork_CancunEIP7692-state_test]\ntest_rjumpv_full_table_mid[fork_CancunEIP7692-blockchain_test]\ntest_rjumpv_full_table_mid[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpv_full_table_end[fork_CancunEIP7692-eof_test]\ntest_rjumpv_full_table_end[fork_CancunEIP7692-state_test]\ntest_rjumpv_full_table_end[fork_CancunEIP7692-blockchain_test]\ntest_rjumpv_full_table_end[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpv_full_table_last[fork_CancunEIP7692-eof_test]\ntest_rjumpv_full_table_last[fork_CancunEIP7692-state_test]\ntest_rjumpv_full_table_last[fork_CancunEIP7692-blockchain_test]\ntest_rjumpv_full_table_last[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpv_max_forwards[fork_CancunEIP7692-eof_test]\ntest_rjumpv_max_forwards[fork_CancunEIP7692-state_test]\ntest_rjumpv_max_forwards[fork_CancunEIP7692-blockchain_test]\ntest_rjumpv_max_forwards[fork_CancunEIP7692-blockchain_test_engine]\ntest_rjumpv_truncated_empty[fork_CancunEIP7692-eof_test]\ntest_rjumpv_truncated[fork_CancunEIP7692-eof_test-byte_count_last_branch_0-branches_1]\ntest_rjumpv_truncated[fork_CancunEIP7692-eof_test-byte_count_last_branch_0-branches_2]\ntest_rjumpv_truncated[fork_CancunEIP7692-eof_test-byte_count_last_branch_0-branches_256]\ntest_rjumpv_truncated[fork_CancunEIP7692-eof_test-byte_count_last_branch_1-branches_1]\ntest_rjumpv_truncated[fork_CancunEIP7692-eof_test-byte_count_last_branch_1-branches_2]\ntest_rjumpv_truncated[fork_CancunEIP7692-eof_test-byte_count_last_branch_1-branches_256]\ntest_rjumpv_into_header[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_into_header[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_into_header[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_before_container[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_before_container[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_before_container[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_into_data[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_into_data[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_into_data[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_after_container[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_after_container[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_after_container[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_at_end[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_at_end[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_at_end[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_into_self_data_portion[fork_CancunEIP7692-eof_test-data_portion_end-t1i0]\ntest_rjumpv_into_self_data_portion[fork_CancunEIP7692-eof_test-data_portion_end-t256i0]\ntest_rjumpv_into_self_data_portion[fork_CancunEIP7692-eof_test-data_portion_end-t256i255]\ntest_rjumpv_into_self_data_portion[fork_CancunEIP7692-eof_test-data_portion_start-t1i0]\ntest_rjumpv_into_self_data_portion[fork_CancunEIP7692-eof_test-data_portion_start-t256i0]\ntest_rjumpv_into_self_data_portion[fork_CancunEIP7692-eof_test-data_portion_start-t256i255]\ntest_rjumpv_into_self[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_into_self[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_into_self[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_into_stack_height_diff[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_into_stack_height_diff[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_into_stack_height_diff[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_into_stack_underflow[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_into_stack_underflow[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_into_stack_underflow[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_skips_stack_underflow[fork_CancunEIP7692-eof_test-t1]\ntest_rjumpv_skips_stack_underflow[fork_CancunEIP7692-eof_test-t256]\ntest_rjumpv_into_rjump[fork_CancunEIP7692-eof_test-data_portion_end-t1i0]\ntest_rjumpv_into_rjump[fork_CancunEIP7692-eof_test-data_portion_end-t256i0]\ntest_rjumpv_into_rjump[fork_CancunEIP7692-eof_test-data_portion_end-t256i255]\ntest_rjumpv_into_rjump[fork_CancunEIP7692-eof_test-data_portion_start-t1i0]\ntest_rjumpv_into_rjump[fork_CancunEIP7692-eof_test-data_portion_start-t256i0]\ntest_rjumpv_into_rjump[fork_CancunEIP7692-eof_test-data_portion_start-t256i255]\ntest_rjumpv_into_rjumpi[fork_CancunEIP7692-eof_test-data_portion_end-t1i0]\ntest_rjumpv_into_rjumpi[fork_CancunEIP7692-eof_test-data_portion_end-t256i0]\ntest_rjumpv_into_rjumpi[fork_CancunEIP7692-eof_test-data_portion_end-t256i255]\ntest_rjumpv_into_rjumpi[fork_CancunEIP7692-eof_test-data_portion_start-t1i0]\ntest_rjumpv_into_rjumpi[fork_CancunEIP7692-eof_test-data_portion_start-t256i0]\ntest_rjumpv_into_rjumpi[fork_CancunEIP7692-eof_test-data_portion_start-t256i255]\ntest_rjumpv_into_push_1[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-t1i0]\ntest_rjumpv_into_push_1[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-t256i0]\ntest_rjumpv_into_push_1[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-t256i255]\ntest_rjumpv_into_push_1[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-t1i0]\ntest_rjumpv_into_push_1[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-t256i0]\ntest_rjumpv_into_push_1[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-t256i255]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t1i0-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i0-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_end-t256i255-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t1i0-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i0-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.FORWARD-data_portion_start-t256i255-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t1i0-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i0-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_end-t256i255-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t1i0-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i0-opcode_PUSH32]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH2]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH3]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH4]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH5]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH6]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH7]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH8]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH9]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH10]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH11]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH12]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH13]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH14]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH15]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH16]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH17]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH18]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH19]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH20]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH21]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH22]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH23]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH24]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH25]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH26]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH27]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH28]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH29]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH30]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH31]\ntest_rjumpv_into_push_n[fork_CancunEIP7692-eof_test-jump_JumpDirection.BACKWARD-data_portion_start-t256i255-opcode_PUSH32]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_end-t1-s1i0]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_end-t1-s256i0]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_end-t1-s256i255]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_end-t256-s1i0]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_end-t256-s256i0]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_end-t256-s256i255]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_start-t1-s1i0]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_start-t1-s256i0]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_start-t1-s256i255]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_start-t256-s1i0]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_start-t256-s256i0]\ntest_rjumpv_into_rjumpv[fork_CancunEIP7692-eof_test-data_portion_start-t256-s256i255]\ntest_rjumpv_into_callf[fork_CancunEIP7692-eof_test-data_portion_end-t1i0]\ntest_rjumpv_into_callf[fork_CancunEIP7692-eof_test-data_portion_end-t256i0]\ntest_rjumpv_into_callf[fork_CancunEIP7692-eof_test-data_portion_end-t256i255]\ntest_rjumpv_into_callf[fork_CancunEIP7692-eof_test-data_portion_start-t1i0]\ntest_rjumpv_into_callf[fork_CancunEIP7692-eof_test-data_portion_start-t256i0]\ntest_rjumpv_into_callf[fork_CancunEIP7692-eof_test-data_portion_start-t256i255]\ntest_rjumpv_into_dupn[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_into_dupn[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_into_dupn[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_into_swapn[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_into_swapn[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_into_swapn[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_into_exchange[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_into_exchange[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_into_exchange[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_into_eofcreate[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_into_eofcreate[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_into_eofcreate[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_into_returncontract[fork_CancunEIP7692-eof_test-t1i0]\ntest_rjumpv_into_returncontract[fork_CancunEIP7692-eof_test-t256i0]\ntest_rjumpv_into_returncontract[fork_CancunEIP7692-eof_test-t256i255]\ntest_rjumpv_backwards_reference_only[fork_CancunEIP7692-eof_test]\ntest_rjumpv_at_the_end[fork_CancunEIP7692-eof_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/","title":"EIP-4750 Functions","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip4750_functions.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip4750_functions --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip4750_functions --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF tests for EIP-4750 functions

    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/","title":"Test Callf Execution","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF CALLF execution tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/#tests.prague.eip7692_eof_v1.eip4750_functions.test_callf_execution.test_callf_stack_size_1024","title":"test_callf_stack_size_1024(eof_state_test)","text":"

    Test stack reaching 1024 items in called function

    Source code in tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py
    def test_callf_stack_size_1024(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack reaching 1024 items in called function\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1023\n                    + Op.CALLF[1]\n                    + Op.POP * 1023\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1023,\n                ),\n                Section.Code(\n                    Op.PUSH0 + Op.POP + Op.RETF,\n                    code_inputs=0,\n                    code_outputs=0,\n                    max_stack_height=1,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/#tests.prague.eip7692_eof_v1.eip4750_functions.test_callf_execution.test_callf_with_inputs_stack_size_1024","title":"test_callf_with_inputs_stack_size_1024(eof_state_test)","text":"

    Test stack reaching 1024 items in called function with inputs

    Source code in tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py
    def test_callf_with_inputs_stack_size_1024(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack reaching 1024 items in called function with inputs\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1023\n                    + Op.CALLF[1]\n                    + Op.POP * 1023\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1023,\n                ),\n                Section.Code(\n                    Op.PUSH0 + Op.POP + Op.RETF,\n                    code_inputs=3,\n                    code_outputs=3,\n                    max_stack_height=4,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/#tests.prague.eip7692_eof_v1.eip4750_functions.test_callf_execution.test_callf_stack_size_1024_at_callf","title":"test_callf_stack_size_1024_at_callf(eof_state_test)","text":"

    Test stack reaching 1024 items in called function at CALLF instruction

    Source code in tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py
    def test_callf_stack_size_1024_at_callf(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack reaching 1024 items in called function at CALLF instruction\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1023\n                    + Op.CALLF[1]\n                    + Op.POP * 1023\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1023,\n                ),\n                Section.Code(\n                    Op.CALLF[2] +\n                    # stack has 1024 items\n                    Op.POP + Op.RETF,\n                    code_inputs=0,\n                    code_outputs=0,\n                    max_stack_height=1,\n                ),\n                Section.Code(\n                    Op.PUSH0 + Op.RETF,  # stack has 1024 items\n                    code_inputs=0,\n                    code_outputs=1,\n                    max_stack_height=1,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/#tests.prague.eip7692_eof_v1.eip4750_functions.test_callf_execution.test_callf_stack_size_1024_at_push","title":"test_callf_stack_size_1024_at_push(eof_state_test)","text":"

    Test stack reaching 1024 items in nested called function at PUSH0 instruction

    Source code in tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py
    def test_callf_stack_size_1024_at_push(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack reaching 1024 items in nested called function at PUSH0 instruction\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1022\n                    + Op.CALLF[1]\n                    + Op.POP * 1022\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1022,\n                ),\n                Section.Code(\n                    Op.PUSH0 +\n                    # stack has 1023 items\n                    Op.CALLF[2] + Op.POP + Op.RETF,\n                    code_inputs=0,\n                    code_outputs=0,\n                    max_stack_height=1,\n                ),\n                Section.Code(\n                    Op.PUSH0 +\n                    # stack has 1024 items\n                    Op.POP + Op.RETF,\n                    code_inputs=0,\n                    code_outputs=0,\n                    max_stack_height=1,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/#tests.prague.eip7692_eof_v1.eip4750_functions.test_callf_execution.test_callf_stack_overflow","title":"test_callf_stack_overflow(eof_state_test)","text":"

    Test stack overflowing 1024 items in called function

    Source code in tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py
    def test_callf_stack_overflow(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack overflowing 1024 items in called function\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1023\n                    + Op.CALLF[1]\n                    + Op.POP * 1023\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1023,\n                ),\n                Section.Code(\n                    Op.PUSH0 +\n                    # Stack has 1024 items\n                    Op.CALLF[2] + Op.POP + Op.RETF,\n                    code_inputs=0,\n                    code_outputs=0,\n                    max_stack_height=1,\n                ),\n                Section.Code(\n                    Op.PUSH0 +\n                    # Runtime stack overflow\n                    Op.POP + Op.RETF,\n                    code_inputs=0,\n                    code_outputs=0,\n                    max_stack_height=1,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: 0}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/#tests.prague.eip7692_eof_v1.eip4750_functions.test_callf_execution.test_callf_with_inputs_stack_size_1024_at_push","title":"test_callf_with_inputs_stack_size_1024_at_push(eof_state_test)","text":"

    Test stack reaching 1024 items in nested called function with inputs at PUSH0 instruction

    Source code in tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py
    def test_callf_with_inputs_stack_size_1024_at_push(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack reaching 1024 items in nested called function with inputs at PUSH0 instruction\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1022\n                    + Op.CALLF[1]\n                    + Op.POP * 1022\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1022,\n                ),\n                Section.Code(\n                    Op.PUSH0 +\n                    # Stack has 1023 items\n                    Op.CALLF[2] + Op.POP + Op.RETF,\n                    code_inputs=3,\n                    code_outputs=3,\n                    max_stack_height=4,\n                ),\n                Section.Code(\n                    Op.PUSH0 +\n                    # Stack has 1024 items\n                    Op.POP + Op.RETF,\n                    code_inputs=3,\n                    code_outputs=3,\n                    max_stack_height=4,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/#tests.prague.eip7692_eof_v1.eip4750_functions.test_callf_execution.test_callf_with_inputs_stack_overflow","title":"test_callf_with_inputs_stack_overflow(eof_state_test)","text":"

    Test stack overflowing 1024 items in called function with inputs

    Source code in tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py
    def test_callf_with_inputs_stack_overflow(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack overflowing 1024 items in called function with inputs\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1023\n                    + Op.CALLF[1]\n                    + Op.POP * 1023\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1023,\n                ),\n                Section.Code(\n                    Op.PUSH0 +\n                    # Stack has 1024 items\n                    Op.CALLF[2] + Op.POP + Op.RETF,\n                    code_inputs=3,\n                    code_outputs=3,\n                    max_stack_height=4,\n                ),\n                Section.Code(\n                    Op.PUSH0 +\n                    # Runtime stackoverflow\n                    Op.POP + Op.RETF,\n                    code_inputs=3,\n                    code_outputs=3,\n                    max_stack_height=4,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: 0}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/index/test_cases/","title":"Test Callf Execution - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py:

    test_callf_stack_size_1024[fork_CancunEIP7692-eof_test]\ntest_callf_stack_size_1024[fork_CancunEIP7692-state_test]\ntest_callf_stack_size_1024[fork_CancunEIP7692-blockchain_test]\ntest_callf_stack_size_1024[fork_CancunEIP7692-blockchain_test_engine]\ntest_callf_with_inputs_stack_size_1024[fork_CancunEIP7692-eof_test]\ntest_callf_with_inputs_stack_size_1024[fork_CancunEIP7692-state_test]\ntest_callf_with_inputs_stack_size_1024[fork_CancunEIP7692-blockchain_test]\ntest_callf_with_inputs_stack_size_1024[fork_CancunEIP7692-blockchain_test_engine]\ntest_callf_stack_size_1024_at_callf[fork_CancunEIP7692-eof_test]\ntest_callf_stack_size_1024_at_callf[fork_CancunEIP7692-state_test]\ntest_callf_stack_size_1024_at_callf[fork_CancunEIP7692-blockchain_test]\ntest_callf_stack_size_1024_at_callf[fork_CancunEIP7692-blockchain_test_engine]\ntest_callf_stack_size_1024_at_push[fork_CancunEIP7692-eof_test]\ntest_callf_stack_size_1024_at_push[fork_CancunEIP7692-state_test]\ntest_callf_stack_size_1024_at_push[fork_CancunEIP7692-blockchain_test]\ntest_callf_stack_size_1024_at_push[fork_CancunEIP7692-blockchain_test_engine]\ntest_callf_stack_overflow[fork_CancunEIP7692-eof_test]\ntest_callf_stack_overflow[fork_CancunEIP7692-state_test]\ntest_callf_stack_overflow[fork_CancunEIP7692-blockchain_test]\ntest_callf_stack_overflow[fork_CancunEIP7692-blockchain_test_engine]\ntest_callf_with_inputs_stack_size_1024_at_push[fork_CancunEIP7692-eof_test]\ntest_callf_with_inputs_stack_size_1024_at_push[fork_CancunEIP7692-state_test]\ntest_callf_with_inputs_stack_size_1024_at_push[fork_CancunEIP7692-blockchain_test]\ntest_callf_with_inputs_stack_size_1024_at_push[fork_CancunEIP7692-blockchain_test_engine]\ntest_callf_with_inputs_stack_overflow[fork_CancunEIP7692-eof_test]\ntest_callf_with_inputs_stack_overflow[fork_CancunEIP7692-state_test]\ntest_callf_with_inputs_stack_overflow[fork_CancunEIP7692-blockchain_test]\ntest_callf_with_inputs_stack_overflow[fork_CancunEIP7692-blockchain_test_engine]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation/","title":"Test Code Validation","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Code validation of CALLF, RETF opcodes tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation/#tests.prague.eip7692_eof_v1.eip4750_functions.test_code_validation.test_eof_validity","title":"test_eof_validity(eof_test, container)","text":"

    Test EOF container validaiton for features around EIP-4750 / Functions / Code Sections

    Source code in tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation.py
    @pytest.mark.parametrize(\n    \"container\",\n    [*VALID, *INVALID],\n    ids=container_name,\n)\ndef test_eof_validity(\n    eof_test: EOFTestFiller,\n    container: Container,\n):\n    \"\"\"\n    Test EOF container validaiton for features around EIP-4750 / Functions / Code Sections\n    \"\"\"\n    eof_test(\n        data=bytes(container),\n        expect_exception=container.validity_error,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation/index/test_cases/","title":"Test Code Validation - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation.py:

    test_eof_validity[fork_CancunEIP7692-eof_test-retf_code_input_output]\ntest_eof_validity[fork_CancunEIP7692-eof_test-stack_height_equal_code_outputs_retf_zero_stop]\ntest_eof_validity[fork_CancunEIP7692-eof_test-callf_max_code_sections_1]\ntest_eof_validity[fork_CancunEIP7692-eof_test-callf_max_code_sections_2]\ntest_eof_validity[fork_CancunEIP7692-eof_test-function_underflow]\ntest_eof_validity[fork_CancunEIP7692-eof_test-stack_higher_than_code_outputs]\ntest_eof_validity[fork_CancunEIP7692-eof_test-stack_shorter_than_code_outputs]\ntest_eof_validity[fork_CancunEIP7692-eof_test-oob_callf_1]\ntest_eof_validity[fork_CancunEIP7692-eof_test-overflow_code_sections_1]\ntest_eof_validity[fork_CancunEIP7692-eof_test-callf_to_non_returning]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/","title":"EIP-6206 Jumpf","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip6206_jumpf.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip6206_jumpf --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip6206_jumpf --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF tests for EIP-6206 JUMPF

    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip6206_jumpf/spec.py.

    EOF V1 Constants used throughout all tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/","title":"Test Jumpf Execution","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF JUMPF tests covering simple cases.

    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_forward","title":"test_jumpf_forward(eof_state_test)","text":"

    Test JUMPF jumping forward

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_forward(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test JUMPF jumping forward\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.JUMPF[1],\n                ),\n                Section.Code(\n                    Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n        tx_data=b\"\\1\",\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_backward","title":"test_jumpf_backward(eof_state_test)","text":"

    Tests JUMPF jumping backward

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_backward(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Tests JUMPF jumping backward\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.CALLF[2] + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP,\n                ),\n                Section.Code(\n                    code=Op.RETF,\n                    code_outputs=0,\n                ),\n                Section.Code(\n                    code=Op.JUMPF[1],\n                    code_outputs=0,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n        tx_data=b\"\\1\",\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_to_self","title":"test_jumpf_to_self(eof_state_test)","text":"

    Tests JUMPF jumping to self

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_to_self(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Tests JUMPF jumping to self\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.SLOAD(slot_code_worked)\n                    + Op.ISZERO\n                    + Op.RJUMPI[1]\n                    + Op.STOP\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.JUMPF[0],\n                )\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n        tx_data=b\"\\1\",\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_too_large","title":"test_jumpf_too_large(eof_state_test)","text":"

    Tests JUMPF jumping to a section outside the max section range

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_too_large(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Tests JUMPF jumping to a section outside the max section range\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.JUMPF[1025],\n                )\n            ],\n            validity_error=EOFException.INVALID_CODE_SECTION_INDEX,\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_way_too_large","title":"test_jumpf_way_too_large(eof_state_test)","text":"

    Tests JUMPF jumping to uint64.MAX

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_way_too_large(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Tests JUMPF jumping to uint64.MAX\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.JUMPF[0xFFFF],\n                )\n            ],\n            validity_error=EOFException.INVALID_CODE_SECTION_INDEX,\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_to_nonexistent_section","title":"test_jumpf_to_nonexistent_section(eof_state_test)","text":"

    Tests JUMPF jumping to valid section number but where the section does not exist

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_to_nonexistent_section(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Tests JUMPF jumping to valid section number but where the section does not exist\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.JUMPF[5],\n                )\n            ],\n            validity_error=EOFException.INVALID_CODE_SECTION_INDEX,\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_callf_to_non_returning_section","title":"test_callf_to_non_returning_section(eof_state_test)","text":"

    Tests CALLF into a non-returning section

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_callf_to_non_returning_section(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Tests CALLF into a non-returning section\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.CALLF[1],\n                ),\n                Section.Code(\n                    code=Op.STOP,\n                    code_outputs=0,\n                ),\n            ],\n            validity_error=EOFException.MISSING_STOP_OPCODE,\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_stack_size_1024","title":"test_jumpf_stack_size_1024(eof_state_test)","text":"

    Test stack reaching 1024 items in target function of JUMPF

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_stack_size_1024(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack reaching 1024 items in target function of JUMPF\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1022 + Op.JUMPF[1],\n                    max_stack_height=1022,\n                ),\n                Section.Code(\n                    Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP,\n                    code_inputs=0,\n                    code_outputs=NON_RETURNING_SECTION,\n                    max_stack_height=2,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_with_inputs_stack_size_1024","title":"test_jumpf_with_inputs_stack_size_1024(eof_state_test)","text":"

    Test stack reaching 1024 items in target function of JUMPF with inputs

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_with_inputs_stack_size_1024(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack reaching 1024 items in target function of JUMPF with inputs\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1022 + Op.JUMPF[1],\n                    max_stack_height=1022,\n                ),\n                Section.Code(\n                    Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP,\n                    code_inputs=3,\n                    code_outputs=NON_RETURNING_SECTION,\n                    max_stack_height=5,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_stack_size_1024_at_push","title":"test_jumpf_stack_size_1024_at_push(eof_state_test)","text":"

    Test stack reaching 1024 items in JUMPF target function at PUSH0 instruction

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_stack_size_1024_at_push(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack reaching 1024 items in JUMPF target function at PUSH0 instruction\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1023\n                    + Op.CALLF[1]\n                    + Op.POP * 1023\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1023,\n                ),\n                Section.Code(\n                    # stack has 1023 items\n                    Op.JUMPF[2],\n                    code_inputs=0,\n                    code_outputs=0,\n                    max_stack_height=0,\n                ),\n                Section.Code(\n                    Op.PUSH0 +\n                    # stack has 1024 items\n                    Op.POP + Op.RETF,\n                    code_inputs=0,\n                    code_outputs=0,\n                    max_stack_height=1,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_stack_overflow","title":"test_jumpf_stack_overflow(eof_state_test)","text":"

    Test stack overflowing 1024 items in JUMPF target function

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_stack_overflow(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack overflowing 1024 items in JUMPF target function\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1023\n                    + Op.CALLF[1]\n                    + Op.POP * 1023\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1023,\n                ),\n                Section.Code(\n                    # Stack has 1023 items\n                    Op.JUMPF[2],\n                    code_inputs=0,\n                    code_outputs=0,\n                    max_stack_height=0,\n                ),\n                Section.Code(\n                    Op.PUSH0 + Op.PUSH0 +\n                    # Runtime stack overflow\n                    Op.POP + Op.POP + Op.RETF,\n                    code_inputs=0,\n                    code_outputs=0,\n                    max_stack_height=2,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: 0}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_with_inputs_stack_size_1024_at_push","title":"test_jumpf_with_inputs_stack_size_1024_at_push(eof_state_test)","text":"

    Test stack reaching 1024 items in JUMPF target function with inputs at PUSH0 instruction

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_with_inputs_stack_size_1024_at_push(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack reaching 1024 items in JUMPF target function with inputs at PUSH0 instruction\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1023\n                    + Op.CALLF[1]\n                    + Op.POP * 1023\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1023,\n                ),\n                Section.Code(\n                    # Stack has 1023 items\n                    Op.JUMPF[2],\n                    code_inputs=3,\n                    code_outputs=3,\n                    max_stack_height=3,\n                ),\n                Section.Code(\n                    Op.PUSH0 +\n                    # Stack has 1024 items\n                    Op.POP + Op.RETF,\n                    code_inputs=3,\n                    code_outputs=3,\n                    max_stack_height=4,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_execution.test_jumpf_with_inputs_stack_overflow","title":"test_jumpf_with_inputs_stack_overflow(eof_state_test)","text":"

    Test stack overflowing 1024 items in JUMPF target function with inputs

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py
    def test_jumpf_with_inputs_stack_overflow(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Test stack overflowing 1024 items in JUMPF target function with inputs\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 * 1023\n                    + Op.CALLF[1]\n                    + Op.POP * 1023\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.RETURN(0, 0),\n                    max_stack_height=1023,\n                ),\n                Section.Code(\n                    # Stack has 1023 items\n                    Op.JUMPF[2],\n                    code_inputs=3,\n                    code_outputs=3,\n                    max_stack_height=3,\n                ),\n                Section.Code(\n                    Op.PUSH0 + Op.PUSH0 +\n                    # Runtime stackoverflow\n                    Op.POP + Op.POP + Op.RETF,\n                    code_inputs=3,\n                    code_outputs=3,\n                    max_stack_height=5,\n                ),\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: 0}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/index/test_cases/","title":"Test Jumpf Execution - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py:

    test_jumpf_forward[fork_CancunEIP7692-eof_test]\ntest_jumpf_forward[fork_CancunEIP7692-state_test]\ntest_jumpf_forward[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_forward[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_backward[fork_CancunEIP7692-eof_test]\ntest_jumpf_backward[fork_CancunEIP7692-state_test]\ntest_jumpf_backward[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_backward[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_to_self[fork_CancunEIP7692-eof_test]\ntest_jumpf_to_self[fork_CancunEIP7692-state_test]\ntest_jumpf_to_self[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_to_self[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_too_large[fork_CancunEIP7692-eof_test]\ntest_jumpf_too_large[fork_CancunEIP7692-state_test]\ntest_jumpf_too_large[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_too_large[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_way_too_large[fork_CancunEIP7692-eof_test]\ntest_jumpf_way_too_large[fork_CancunEIP7692-state_test]\ntest_jumpf_way_too_large[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_way_too_large[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_to_nonexistent_section[fork_CancunEIP7692-eof_test]\ntest_jumpf_to_nonexistent_section[fork_CancunEIP7692-state_test]\ntest_jumpf_to_nonexistent_section[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_to_nonexistent_section[fork_CancunEIP7692-blockchain_test_engine]\ntest_callf_to_non_returning_section[fork_CancunEIP7692-eof_test]\ntest_callf_to_non_returning_section[fork_CancunEIP7692-state_test]\ntest_callf_to_non_returning_section[fork_CancunEIP7692-blockchain_test]\ntest_callf_to_non_returning_section[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_stack_size_1024[fork_CancunEIP7692-eof_test]\ntest_jumpf_stack_size_1024[fork_CancunEIP7692-state_test]\ntest_jumpf_stack_size_1024[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_stack_size_1024[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_with_inputs_stack_size_1024[fork_CancunEIP7692-eof_test]\ntest_jumpf_with_inputs_stack_size_1024[fork_CancunEIP7692-state_test]\ntest_jumpf_with_inputs_stack_size_1024[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_with_inputs_stack_size_1024[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_stack_size_1024_at_push[fork_CancunEIP7692-eof_test]\ntest_jumpf_stack_size_1024_at_push[fork_CancunEIP7692-state_test]\ntest_jumpf_stack_size_1024_at_push[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_stack_size_1024_at_push[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_stack_overflow[fork_CancunEIP7692-eof_test]\ntest_jumpf_stack_overflow[fork_CancunEIP7692-state_test]\ntest_jumpf_stack_overflow[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_stack_overflow[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_with_inputs_stack_size_1024_at_push[fork_CancunEIP7692-eof_test]\ntest_jumpf_with_inputs_stack_size_1024_at_push[fork_CancunEIP7692-state_test]\ntest_jumpf_with_inputs_stack_size_1024_at_push[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_with_inputs_stack_size_1024_at_push[fork_CancunEIP7692-blockchain_test_engine]\ntest_jumpf_with_inputs_stack_overflow[fork_CancunEIP7692-eof_test]\ntest_jumpf_with_inputs_stack_overflow[fork_CancunEIP7692-state_test]\ntest_jumpf_with_inputs_stack_overflow[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_with_inputs_stack_overflow[fork_CancunEIP7692-blockchain_test_engine]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack/","title":"Test Jumpf Stack","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF JUMPF tests covering stack validation rules.

    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_stack.test_jumpf_stack_non_returning_rules","title":"test_jumpf_stack_non_returning_rules(eof_state_test, target_inputs, stack_height)","text":"

    Tests for JUMPF validation stack rules. Non-returning section cases. Valid cases are executed.

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py
    @pytest.mark.parametrize(\n    \"target_inputs\",\n    [0, 2, 4],\n    ids=lambda x: \"ti-%d\" % x,\n)\n@pytest.mark.parametrize(\n    \"stack_height\",\n    [0, 2, 4],\n    ids=lambda x: \"h-%d\" % x,\n)\ndef test_jumpf_stack_non_returning_rules(\n    eof_state_test: EOFStateTestFiller,\n    target_inputs: int,\n    stack_height: int,\n):\n    \"\"\"\n    Tests for JUMPF validation stack rules.  Non-returning section cases.\n    Valid cases are executed.\n    \"\"\"\n    container = Container(\n        name=\"stack-non-retuning_h-%d_ti-%d\" % (stack_height, target_inputs),\n        sections=[\n            Section.Code(\n                code=Op.JUMPF[1],\n            ),\n            Section.Code(\n                code=Op.PUSH0 * stack_height + Op.JUMPF[2],\n                max_stack_height=stack_height,\n            ),\n            Section.Code(\n                code=Op.POP * target_inputs\n                + Op.SSTORE(slot_code_worked, value_code_worked)\n                + Op.STOP,\n                code_inputs=target_inputs,\n                max_stack_height=max(2, target_inputs),\n            ),\n        ],\n    )\n\n    if stack_height < target_inputs:\n        container.validity_error = EOFException.STACK_UNDERFLOW\n\n    eof_state_test(\n        data=container,\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n        tx_data=b\"\\1\",\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_stack.test_jumpf_stack_returning_rules","title":"test_jumpf_stack_returning_rules(eof_state_test, source_outputs, target_outputs, target_inputs, stack_diff)","text":"

    Tests for JUMPF validation stack rules. Returning section cases. Valid cases are executed.

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py
    @pytest.mark.parametrize(\n    \"source_outputs\",\n    [0, 2, 4],\n    ids=lambda x: \"so-%d\" % x,\n)\n@pytest.mark.parametrize(\n    \"target_outputs\",\n    [0, 2, 4],\n    ids=lambda x: \"to-%d\" % x,\n)\n@pytest.mark.parametrize(\n    \"target_inputs\",\n    [0, 2, 4],\n    ids=lambda x: \"to-%d\" % x,\n)\n@pytest.mark.parametrize(\"stack_diff\", [-1, 0, 1], ids=[\"less-stack\", \"same-stack\", \"more-stack\"])\ndef test_jumpf_stack_returning_rules(\n    eof_state_test: EOFStateTestFiller,\n    source_outputs: int,\n    target_outputs: int,\n    target_inputs: int,\n    stack_diff: int,\n):\n    \"\"\"\n    Tests for JUMPF validation stack rules.  Returning section cases.\n    Valid cases are executed.\n    \"\"\"\n    if target_outputs > source_outputs:\n        # These create invalid containers without JUMPF validation, Don't test.\n        return\n    if target_inputs == 0 and stack_diff < 0:\n        # Code generation is impossible for this configuration.  Don't test.\n        return\n\n    target_delta = target_outputs - target_inputs\n    container = Container(\n        name=\"stack-retuning_co-%d_to-%d_ti-%d_diff-%d\"\n        % (source_outputs, target_outputs, target_inputs, stack_diff),\n        sections=[\n            Section.Code(\n                code=Op.CALLF[1] + Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP,\n                max_stack_height=2 + source_outputs,\n            ),\n            Section.Code(\n                code=Op.PUSH0 * max(0, target_inputs + stack_diff) + Op.JUMPF[2],\n                code_outputs=source_outputs,\n                max_stack_height=target_inputs,\n            ),\n            Section.Code(\n                code=(Op.POP * -target_delta if target_delta < 0 else Op.PUSH0 * target_delta)\n                + Op.RETF,\n                code_inputs=target_inputs,\n                code_outputs=target_outputs,\n                max_stack_height=max(target_inputs, target_outputs),\n            ),\n        ],\n    )\n\n    if stack_diff < source_outputs - target_outputs:\n        container.validity_error = EOFException.STACK_UNDERFLOW\n    elif stack_diff > source_outputs - target_outputs:\n        container.validity_error = EOFException.STACK_HIGHER_THAN_OUTPUTS\n\n    eof_state_test(\n        data=container,\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n        tx_data=b\"\\1\",\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack/index/test_cases/","title":"Test Jumpf Stack - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py:

    test_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-0-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-0-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-0-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-2-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-2-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-2-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-4-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-4-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-4-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-state_test-h-0-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-state_test-h-0-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-state_test-h-0-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-state_test-h-2-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-state_test-h-2-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-state_test-h-2-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-state_test-h-4-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-state_test-h-4-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-state_test-h-4-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test-h-0-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test-h-0-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test-h-0-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test-h-2-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test-h-2-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test-h-2-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test-h-4-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test-h-4-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test-h-4-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test_engine-h-0-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test_engine-h-0-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test_engine-h-0-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test_engine-h-2-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test_engine-h-2-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test_engine-h-2-ti-4]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test_engine-h-4-ti-0]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test_engine-h-4-ti-2]\ntest_jumpf_stack_non_returning_rules[fork_CancunEIP7692-blockchain_test_engine-h-4-ti-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-to-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-to-4-to-4-so-4]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target/","title":"Test Jumpf Target","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF JUMPF tests covering JUMPF target rules.

    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_target.test_jumpf_target_rules","title":"test_jumpf_target_rules(eof_state_test, source_outputs, target_outputs)","text":"

    Validate the target section rules of JUMPF, and execute valid cases. We are not testing stack so a lot of the logic is to get correct stack values.

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py
    @pytest.mark.parametrize(\n    \"target_outputs\",\n    [NON_RETURNING_SECTION, 0, 2, 4, 127],\n    ids=lambda x: \"to-%s\" % (\"N\" if x == NON_RETURNING_SECTION else x),\n)\n@pytest.mark.parametrize(\n    \"source_outputs\",\n    [NON_RETURNING_SECTION, 0, 2, 4, 127],\n    ids=lambda x: \"so-%s\" % (\"N\" if x == NON_RETURNING_SECTION else x),\n)\ndef test_jumpf_target_rules(\n    eof_state_test: EOFStateTestFiller,\n    source_outputs: int,\n    target_outputs: int,\n):\n    \"\"\"\n    Validate the target section rules of JUMPF, and execute valid cases.\n    We are not testing stack so a lot of the logic is to get correct stack values.\n    \"\"\"\n    source_non_returning = source_outputs == NON_RETURNING_SECTION\n    source_height = 0 if source_non_returning else source_outputs\n    source_section_index = 1\n\n    target_non_returning = target_outputs == NON_RETURNING_SECTION\n    target_height = 0 if target_non_returning else target_outputs\n    target_section_index = 2\n\n    # Because we are testing the target and not the stack height validation we need to do some work\n    # to make sure the stack passes validation.\n\n    # `source_extra_push` is how many more pushes we need to match our stack commitments\n    source_extra_push = max(0, source_height - target_height)\n    source_section = Section.Code(\n        code=Op.PUSH0 * (source_height)\n        + Op.CALLDATALOAD(0)\n        + Op.RJUMPI[1]\n        + (Op.STOP if source_non_returning else Op.RETF)\n        + Op.PUSH0 * source_extra_push\n        + Op.JUMPF[target_section_index],\n        code_inputs=0,\n        code_outputs=source_outputs,\n        max_stack_height=source_height + max(1, source_extra_push),\n    )\n\n    # `delta` is how many stack items the target output is from the input height, and tracks the\n    # number of pushes or (if negative) pops the target needs to do to match output commitments\n    delta = 0 if target_non_returning or source_non_returning else target_outputs - source_height\n    target_section = Section.Code(\n        code=((Op.PUSH0 * delta) if delta >= 0 else (Op.POP * -delta))\n        + Op.CALLF[3]\n        + (Op.STOP if target_non_returning else Op.RETF),\n        code_inputs=source_height,\n        code_outputs=target_outputs,\n        max_stack_height=max(source_height, source_height + delta),\n    )\n\n    base_code = (\n        Op.JUMPF[source_section_index]\n        if source_non_returning\n        else (Op.CALLF[source_section_index](0, 0) + Op.STOP)\n    )\n    base_height = 0 if source_non_returning else 2 + source_outputs\n    container = Container(\n        name=\"so-%s_to-%s\"\n        % (\n            \"N\" if source_non_returning else source_outputs,\n            \"N\" if target_non_returning else target_outputs,\n        ),\n        sections=[\n            Section.Code(\n                code=base_code,\n                max_stack_height=base_height,\n            ),\n            source_section,\n            target_section,\n            Section.Code(\n                code=Op.SSTORE(slot_code_worked, value_code_worked) + Op.RETF,\n                code_outputs=0,\n            ),\n        ],\n    )\n    if target_non_returning or source_non_returning:\n        if not target_non_returning and source_non_returning:\n            # both as non-returning handled above\n            container.validity_error = EOFException.INVALID_NON_RETURNING_FLAG\n    elif source_outputs < target_outputs:\n        container.validity_error = EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS\n\n    eof_state_test(\n        data=container,\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n        tx_data=b\"\\1\",\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_target.test_jumpf_multi_target_rules","title":"test_jumpf_multi_target_rules(eof_state_test)","text":"

    NOT IMPLEMENTED: Test a section that contains multiple JUMPF to different targets with different outputs.

    Source code in tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py
    @pytest.mark.skip(\"Not implemented\")\ndef test_jumpf_multi_target_rules(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"\n    NOT IMPLEMENTED:\n    Test a section that contains multiple JUMPF to different targets with different outputs.\n    \"\"\"\n    pass\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target/index/test_cases/","title":"Test Jumpf Target - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py:

    test_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-N-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-N-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-N-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-N-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-N-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-0-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-0-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-0-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-0-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-0-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-2-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-2-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-2-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-2-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-2-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-4-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-4-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-4-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-4-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-4-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-127-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-127-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-127-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-127-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-127-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-N-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-N-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-N-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-N-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-N-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-0-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-0-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-0-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-0-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-0-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-2-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-2-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-2-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-2-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-2-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-4-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-4-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-4-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-4-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-4-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-127-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-127-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-127-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-127-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-state_test-so-127-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-N-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-N-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-N-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-N-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-N-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-0-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-0-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-0-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-0-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-0-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-2-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-2-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-2-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-2-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-2-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-4-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-4-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-4-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-4-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-4-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-127-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-127-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-127-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-127-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test-so-127-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-N-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-N-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-N-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-N-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-N-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-0-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-0-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-0-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-0-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-0-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-2-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-2-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-2-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-2-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-2-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-4-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-4-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-4-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-4-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-4-to-127]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-127-to-N]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-127-to-0]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-127-to-2]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-127-to-4]\ntest_jumpf_target_rules[fork_CancunEIP7692-blockchain_test_engine-so-127-to-127]\ntest_jumpf_multi_target_rules[fork_CancunEIP7692-eof_test]\ntest_jumpf_multi_target_rules[fork_CancunEIP7692-state_test]\ntest_jumpf_multi_target_rules[fork_CancunEIP7692-blockchain_test]\ntest_jumpf_multi_target_rules[fork_CancunEIP7692-blockchain_test_engine]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/","title":"EIP-663 DUPn Swapn Exchange","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-663: SWAPN, DUPN and EXCHANGE instructions

    Tests for EIP-663: SWAPN, DUPN and EXCHANGE instructions.

    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn/","title":"Test DUPn","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-663: SWAPN, DUPN and EXCHANGE instructions

    Tests for the DUPN instruction.

    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn/#tests.prague.eip7692_eof_v1.eip663_dupn_swapn_exchange.test_dupn.test_dupn_all_valid_immediates","title":"test_dupn_all_valid_immediates(eof_state_test)","text":"

    Test case for all valid DUPN immediates.

    Source code in tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py
    @pytest.mark.valid_from(EOF_FORK_NAME)\ndef test_dupn_all_valid_immediates(eof_state_test: EOFStateTestFiller):\n    \"\"\"\n    Test case for all valid DUPN immediates.\n    \"\"\"\n    n = 2**8\n    values = range(0xD00, 0xD00 + n)\n\n    eof_code = Container(\n        sections=[\n            Section.Code(\n                code=sum(Op.PUSH2[v] for v in values)\n                + sum(Op.SSTORE(x, Op.DUPN[x]) for x in range(0, n))\n                + Op.STOP,\n            )\n        ],\n    )\n\n    post = Account(storage=dict(zip(range(0, n), reversed(values))))\n\n    eof_state_test(\n        tx_sender_funding_amount=1_000_000_000,\n        data=eof_code,\n        container_post=post,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn/#tests.prague.eip7692_eof_v1.eip663_dupn_swapn_exchange.test_dupn.test_dupn_stack_underflow","title":"test_dupn_stack_underflow(stack_height, max_stack_height, eof_test)","text":"

    Test case out of bounds DUPN immediate.

    Source code in tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py
    @pytest.mark.parametrize(\n    \"stack_height,max_stack_height\",\n    [\n        [0, 0],\n        [0, 1],\n        [1, 1],\n        [1, 2],\n        [2**8 - 1, 2**8 - 1],\n        [2**8 - 1, 2**8],\n    ],\n)\n@pytest.mark.valid_from(EOF_FORK_NAME)\ndef test_dupn_stack_underflow(\n    stack_height: int,\n    max_stack_height: int,\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    Test case out of bounds DUPN immediate.\n    \"\"\"\n    eof_code = Container(\n        sections=[\n            Section.Code(\n                code=sum(Op.PUSH2[v] for v in range(0, stack_height))\n                + Op.DUPN[stack_height]\n                + Op.STOP,\n                max_stack_height=max_stack_height,\n            )\n        ],\n    )\n    eof_test(\n        data=eof_code,\n        expect_exception=EOFException.STACK_UNDERFLOW,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn/#tests.prague.eip7692_eof_v1.eip663_dupn_swapn_exchange.test_dupn.test_dupn_stack_overflow","title":"test_dupn_stack_overflow(dupn_operand, max_stack_height, expect_exception, eof_test)","text":"

    Test case where DUPN produces an stack overflow.

    Source code in tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py
    @pytest.mark.parametrize(\n    \"dupn_operand,max_stack_height,expect_exception\",\n    [\n        [0, MAX_OPERAND_STACK_HEIGHT, EOFException.INVALID_MAX_STACK_HEIGHT],\n        [0, MAX_OPERAND_STACK_HEIGHT + 1, EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT],\n        [2**8 - 1, MAX_OPERAND_STACK_HEIGHT, EOFException.INVALID_MAX_STACK_HEIGHT],\n        [2**8 - 1, MAX_OPERAND_STACK_HEIGHT + 1, EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT],\n    ],\n)\n@pytest.mark.valid_from(EOF_FORK_NAME)\ndef test_dupn_stack_overflow(\n    dupn_operand: int,\n    max_stack_height: int,\n    expect_exception: EOFException,\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    Test case where DUPN produces an stack overflow.\n    \"\"\"\n    eof_code = Container(\n        sections=[\n            Section.Code(\n                code=sum(Op.PUSH2[v] for v in range(0, MAX_OPERAND_STACK_HEIGHT))\n                + Op.DUPN[dupn_operand]\n                + Op.STOP,\n                max_stack_height=max_stack_height,\n            )\n        ],\n    )\n    eof_test(\n        data=eof_code,\n        expect_exception=expect_exception,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn/index/test_cases/","title":"Test DUPn - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py:

    test_dupn_all_valid_immediates[fork_CancunEIP7692-eof_test]\ntest_dupn_all_valid_immediates[fork_CancunEIP7692-state_test]\ntest_dupn_all_valid_immediates[fork_CancunEIP7692-blockchain_test]\ntest_dupn_all_valid_immediates[fork_CancunEIP7692-blockchain_test_engine]\ntest_dupn_stack_underflow[fork_CancunEIP7692-eof_test-stack_height_0-max_stack_height_0]\ntest_dupn_stack_underflow[fork_CancunEIP7692-eof_test-stack_height_0-max_stack_height_1]\ntest_dupn_stack_underflow[fork_CancunEIP7692-eof_test-stack_height_1-max_stack_height_1]\ntest_dupn_stack_underflow[fork_CancunEIP7692-eof_test-stack_height_1-max_stack_height_2]\ntest_dupn_stack_underflow[fork_CancunEIP7692-eof_test-stack_height_255-max_stack_height_255]\ntest_dupn_stack_underflow[fork_CancunEIP7692-eof_test-stack_height_255-max_stack_height_256]\ntest_dupn_stack_overflow[fork_CancunEIP7692-eof_test-dupn_operand_0-max_stack_height_1023-expect_exception_EOFException.INVALID_MAX_STACK_HEIGHT]\ntest_dupn_stack_overflow[fork_CancunEIP7692-eof_test-dupn_operand_0-max_stack_height_1024-expect_exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT]\ntest_dupn_stack_overflow[fork_CancunEIP7692-eof_test-dupn_operand_255-max_stack_height_1023-expect_exception_EOFException.INVALID_MAX_STACK_HEIGHT]\ntest_dupn_stack_overflow[fork_CancunEIP7692-eof_test-dupn_operand_255-max_stack_height_1024-expect_exception_EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange/","title":"Test Exchange","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-663: SWAPN, DUPN and EXCHANGE instructions

    Tests for the EXCHANGE instruction.

    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange/#tests.prague.eip7692_eof_v1.eip663_dupn_swapn_exchange.test_exchange.test_exchange_all_valid_immediates","title":"test_exchange_all_valid_immediates(eof_state_test)","text":"

    Test case for all valid EXCHANGE immediates.

    Source code in tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py
    @pytest.mark.valid_from(EOF_FORK_NAME)\ndef test_exchange_all_valid_immediates(eof_state_test: EOFStateTestFiller):\n    \"\"\"\n    Test case for all valid EXCHANGE immediates.\n    \"\"\"\n    n = 256\n    s = 34\n    values = range(0x3E8, 0x3E8 + s)\n\n    eof_code = Container(\n        sections=[\n            Section.Code(\n                code=sum(Op.PUSH2[v] for v in values)\n                + sum(Op.EXCHANGE[x] for x in range(0, n))\n                + sum((Op.PUSH1[x] + Op.SSTORE) for x in range(0, s))\n                + Op.STOP,\n            )\n        ],\n    )\n\n    # this does the same full-loop exchange\n    values_rotated = list(range(0x3E8, 0x3E8 + s))\n    for e in range(0, n):\n        a = (e >> 4) + 1\n        b = (e & 0x0F) + 1 + a\n        temp = values_rotated[a]\n        values_rotated[a] = values_rotated[b]\n        values_rotated[b] = temp\n\n    post = Account(storage=dict(zip(range(0, s), reversed(values_rotated))))\n\n    eof_state_test(\n        tx_sender_funding_amount=1_000_000_000,\n        data=eof_code,\n        container_post=post,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange/#tests.prague.eip7692_eof_v1.eip663_dupn_swapn_exchange.test_exchange.test_exchange_all_invalid_immediates","title":"test_exchange_all_invalid_immediates(eof_test, stack_height, x, y)","text":"

    Test case for all invalid EXCHANGE immediates.

    Source code in tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py
    @pytest.mark.parametrize(\n    \"stack_height,x,y\",\n    [\n        # 2 and 3 are the lowest valid values for x and y, which translates to a\n        # zero immediate value.\n        pytest.param(0, 2, 3, id=\"stack_height=0_n=1_m=1\"),\n        pytest.param(1, 2, 3, id=\"stack_height=1_n=1_m=1\"),\n        pytest.param(2, 2, 3, id=\"stack_height=2_n=1_m=1\"),\n        pytest.param(17, 2, 18, id=\"stack_height=17_n=1_m=16\"),\n        pytest.param(17, 17, 18, id=\"stack_height=17_n=16_m=1\"),\n        pytest.param(32, 17, 33, id=\"stack_height=32_n=16_m=16\"),\n    ],\n)\n@pytest.mark.valid_from(EOF_FORK_NAME)\ndef test_exchange_all_invalid_immediates(\n    eof_test: EOFTestFiller,\n    stack_height: int,\n    x: int,\n    y: int,\n):\n    \"\"\"\n    Test case for all invalid EXCHANGE immediates.\n    \"\"\"\n    eof_code = Container(\n        sections=[\n            Section.Code(\n                code=sum(Op.PUSH2[v] for v in range(stack_height))\n                + Op.EXCHANGE[x, y]\n                + Op.POP * stack_height\n                + Op.STOP,\n                max_stack_height=stack_height,\n            )\n        ],\n    )\n\n    eof_test(\n        data=eof_code,\n        expect_exception=EOFException.STACK_UNDERFLOW,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange/index/test_cases/","title":"Test Exchange - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py:

    test_exchange_all_valid_immediates[fork_CancunEIP7692-eof_test]\ntest_exchange_all_valid_immediates[fork_CancunEIP7692-state_test]\ntest_exchange_all_valid_immediates[fork_CancunEIP7692-blockchain_test]\ntest_exchange_all_valid_immediates[fork_CancunEIP7692-blockchain_test_engine]\ntest_exchange_all_invalid_immediates[fork_CancunEIP7692-eof_test-stack_height=0_n=1_m=1]\ntest_exchange_all_invalid_immediates[fork_CancunEIP7692-eof_test-stack_height=1_n=1_m=1]\ntest_exchange_all_invalid_immediates[fork_CancunEIP7692-eof_test-stack_height=2_n=1_m=1]\ntest_exchange_all_invalid_immediates[fork_CancunEIP7692-eof_test-stack_height=17_n=1_m=16]\ntest_exchange_all_invalid_immediates[fork_CancunEIP7692-eof_test-stack_height=17_n=16_m=1]\ntest_exchange_all_invalid_immediates[fork_CancunEIP7692-eof_test-stack_height=32_n=16_m=16]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn/","title":"Test Swapn","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-663: SWAPN, DUPN and EXCHANGE instructions

    Tests for the SWAPN instruction.

    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn/#tests.prague.eip7692_eof_v1.eip663_dupn_swapn_exchange.test_swapn.test_swapn_all_valid_immediates","title":"test_swapn_all_valid_immediates(eof_state_test)","text":"

    Test case for all valid SWAPN immediates.

    Source code in tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py
    @pytest.mark.valid_from(EOF_FORK_NAME)\ndef test_swapn_all_valid_immediates(eof_state_test: EOFStateTestFiller):\n    \"\"\"\n    Test case for all valid SWAPN immediates.\n    \"\"\"\n    n = 256\n    values = range(0x500, 0x500 + 257)\n\n    eof_code = Container(\n        sections=[\n            Section.Code(\n                code=sum(Op.PUSH2[v] for v in values)\n                + sum(Op.SSTORE(x, Op.SWAPN[0xFF - x]) for x in range(0, n))\n                + Op.STOP,\n            )\n        ],\n    )\n\n    values_rotated = list(values[1:]) + [values[0]]\n    post = Account(storage=dict(zip(range(0, n), reversed(values_rotated))))\n\n    eof_state_test(\n        tx_sender_funding_amount=1_000_000_000,\n        data=eof_code,\n        container_post=post,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn/#tests.prague.eip7692_eof_v1.eip663_dupn_swapn_exchange.test_swapn.test_swapn_on_max_stack","title":"test_swapn_on_max_stack(swapn_operand, eof_test)","text":"

    Test case out of bounds DUPN immediate.

    Source code in tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py
    @pytest.mark.parametrize(\n    \"swapn_operand\",\n    [\n        0,\n        2**8 - 1,\n    ],\n)\n@pytest.mark.valid_from(EOF_FORK_NAME)\ndef test_swapn_on_max_stack(\n    swapn_operand: int,\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    Test case out of bounds DUPN immediate.\n    \"\"\"\n    eof_code = Container(\n        sections=[\n            Section.Code(\n                code=sum(Op.PUSH2[v] for v in range(0, MAX_OPERAND_STACK_HEIGHT))\n                + Op.SWAPN[swapn_operand]\n                + Op.STOP,\n            )\n        ],\n    )\n    eof_test(\n        data=eof_code,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn/#tests.prague.eip7692_eof_v1.eip663_dupn_swapn_exchange.test_swapn.test_swapn_stack_underflow","title":"test_swapn_stack_underflow(stack_height, eof_test)","text":"

    Test case out of bounds DUPN immediate.

    Source code in tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py
    @pytest.mark.parametrize(\n    \"stack_height\",\n    [\n        0,\n        1,\n        21,\n        2**8 - 1,\n    ],\n)\n@pytest.mark.valid_from(EOF_FORK_NAME)\ndef test_swapn_stack_underflow(\n    stack_height: int,\n    eof_test: EOFTestFiller,\n):\n    \"\"\"\n    Test case out of bounds DUPN immediate.\n    \"\"\"\n    eof_code = Container(\n        sections=[\n            Section.Code(\n                code=sum(Op.PUSH2[v] for v in range(0, stack_height))\n                + Op.SWAPN[stack_height]\n                + Op.STOP,\n                max_stack_height=stack_height,\n            )\n        ],\n    )\n    eof_test(\n        data=eof_code,\n        expect_exception=EOFException.STACK_UNDERFLOW,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn/index/test_cases/","title":"Test Swapn - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py:

    test_swapn_all_valid_immediates[fork_CancunEIP7692-eof_test]\ntest_swapn_all_valid_immediates[fork_CancunEIP7692-state_test]\ntest_swapn_all_valid_immediates[fork_CancunEIP7692-blockchain_test]\ntest_swapn_all_valid_immediates[fork_CancunEIP7692-blockchain_test_engine]\ntest_swapn_on_max_stack[fork_CancunEIP7692-eof_test-swapn_operand_0]\ntest_swapn_on_max_stack[fork_CancunEIP7692-eof_test-swapn_operand_255]\ntest_swapn_stack_underflow[fork_CancunEIP7692-eof_test-stack_height_0]\ntest_swapn_stack_underflow[fork_CancunEIP7692-eof_test-stack_height_1]\ntest_swapn_stack_underflow[fork_CancunEIP7692-eof_test-stack_height_21]\ntest_swapn_stack_underflow[fork_CancunEIP7692-eof_test-stack_height_255]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/","title":"EIP-7069 Extcall","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Revamped Call Instructions Tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/spec.py.

    EOF V1 Constants used throughout all tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension/","title":"Test Address Space Extension","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests the \"Address Space Extension\" aspect of EXT*CALL

    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_address_space_extension.test_address_space_extension","title":"test_address_space_extension(state_test, pre, target_address, target_opcode, target_account_type)","text":"

    Test contacts with possibly extended address and fail if address is too large

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py
    @pytest.mark.parametrize(\n    \"target_address\",\n    (\n        pytest.param(b\"\", id=\"zero\"),\n        pytest.param(b\"\\xc0\\xde\", id=\"short\"),\n        pytest.param(b\"\\x78\" * 20, id=\"mid_20\"),\n        pytest.param(b\"\\xff\" * 20, id=\"max_20\"),\n        pytest.param(b\"\\x01\" + (b\"\\x00\" * 20), id=\"min_ase\"),\n        pytest.param(b\"\\x5a\" * 28, id=\"mid_ase\"),\n        pytest.param(b\"\\x5a\" * 32, id=\"full_ase\"),\n        pytest.param(b\"\\xff\" * 32, id=\"max_ase\"),\n    ),\n)\n@pytest.mark.parametrize(\n    \"target_account_type\",\n    (\n        \"empty\",\n        \"EOA\",\n        \"LegacyContract\",  # Hard-codes an address in pre-alloc\n        \"EOFContract\",  # Hard-codes an address in pre-alloc\n    ),\n    ids=lambda x: x,\n)\n@pytest.mark.parametrize(\n    \"target_opcode\",\n    (\n        Op.CALL,\n        Op.CALLCODE,\n        Op.STATICCALL,\n        Op.DELEGATECALL,\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ),\n)\ndef test_address_space_extension(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    target_address: bytes,\n    target_opcode: Op,\n    target_account_type: str,\n):\n    \"\"\"\n    Test contacts with possibly extended address and fail if address is too large\n    \"\"\"\n    env = Environment()\n\n    ase_address = len(target_address) > 20\n    stripped_address = target_address[-20:] if ase_address else target_address\n    if ase_address and target_address[0] == b\"00\":\n        raise ValueError(\"Test instrumentation requires target addresses trim leading zeros\")\n\n    ase_ready_opcode = (\n        False if target_opcode in [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL] else True\n    )\n\n    sender = pre.fund_eoa()\n\n    address_caller = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(\n                        slot_target_call_status,\n                        target_opcode(address=Op.CALLDATALOAD(0)),\n                    )\n                    + Op.RETURNDATACOPY(0, 0, Op.RETURNDATASIZE)\n                    + Op.SSTORE(slot_target_returndata, Op.MLOAD(0))\n                    + Op.STOP,\n                    code_inputs=0,\n                )\n            ],\n        )\n        if ase_ready_opcode\n        else Op.SSTORE(\n            slot_target_call_status,\n            target_opcode(address=Op.CALLDATALOAD(0)),\n        )\n        + Op.RETURNDATACOPY(0, 0, Op.RETURNDATASIZE)\n        + Op.SSTORE(slot_target_returndata, Op.MLOAD(0))\n        + Op.STOP,\n        storage={\n            slot_target_call_status: value_exceptional_abort_canary,\n            slot_target_returndata: value_exceptional_abort_canary,\n        },\n    )\n\n    address_entry_point = pre.deploy_contract(\n        Op.MSTORE(0, Op.PUSH32(target_address))\n        + Op.SSTORE(\n            slot_top_level_call_status,\n            Op.CALL(50000, address_caller, 0, 0, 32, 0, 0),\n        )\n        + Op.STOP(),\n        storage={\n            slot_top_level_call_status: value_exceptional_abort_canary,\n        },\n    )\n\n    match target_account_type:\n        case \"empty\":\n            # add no account\n            pass\n        case \"EOA\":\n            pre.fund_address(Address(stripped_address), 10**18)\n            # TODO: we could use pre.fund_eoa here with nonce!=0.\n        case \"LegacyContract\":\n            pre[Address(stripped_address)] = Account(\n                code=Op.MSTORE(0, Op.ADDRESS) + Op.RETURN(0, 32),\n                balance=0,\n                nonce=0,\n            )\n        case \"EOFContract\":\n            pre[Address(stripped_address)] = Account(\n                code=Container(\n                    sections=[\n                        Section.Code(\n                            code=Op.MSTORE(0, Op.ADDRESS) + Op.RETURN(0, 32),\n                        )\n                    ],\n                ),\n                balance=0,\n                nonce=0,\n            )\n\n    caller_storage: dict[int, int | bytes | Address] = {}\n    match target_account_type:\n        case \"empty\" | \"EOA\":\n            if ase_address and ase_ready_opcode:\n                caller_storage[slot_target_call_status] = value_exceptional_abort_canary\n                caller_storage[slot_target_returndata] = value_exceptional_abort_canary\n            elif target_opcode == Op.EXTDELEGATECALL:\n                caller_storage[slot_target_call_status] = EXTCALL_REVERT\n                caller_storage[slot_target_returndata] = 0\n            else:\n                caller_storage[slot_target_call_status] = (\n                    EXTCALL_SUCCESS if ase_ready_opcode else CALL_SUCCESS\n                )\n        case \"LegacyContract\" | \"EOFContract\":\n            match target_opcode:\n                case Op.CALL | Op.STATICCALL:\n                    caller_storage[slot_target_call_status] = CALL_SUCCESS\n                    # CALL and STATICCALL call will call the stripped address\n                    caller_storage[slot_target_returndata] = stripped_address\n                case Op.CALLCODE | Op.DELEGATECALL:\n                    caller_storage[slot_target_call_status] = CALL_SUCCESS\n                    # CALLCODE and DELEGATECALL call will call the stripped address\n                    # but will change the sender to self\n                    caller_storage[slot_target_returndata] = address_caller\n                case Op.EXTCALL | Op.EXTSTATICCALL:\n                    # EXTCALL and EXTSTATICCALL will fault if calling an ASE address\n                    if ase_address:\n                        caller_storage[slot_target_call_status] = value_exceptional_abort_canary\n                        caller_storage[slot_target_returndata] = value_exceptional_abort_canary\n                    else:\n                        caller_storage[slot_target_call_status] = EXTCALL_SUCCESS\n                        caller_storage[slot_target_returndata] = stripped_address\n                case Op.EXTDELEGATECALL:\n                    if ase_address:\n                        caller_storage[slot_target_call_status] = value_exceptional_abort_canary\n                        caller_storage[slot_target_returndata] = value_exceptional_abort_canary\n                    elif target_account_type == \"LegacyContract\":\n                        caller_storage[slot_target_call_status] = EXTCALL_REVERT\n                        caller_storage[slot_target_returndata] = 0\n                    else:\n                        caller_storage[slot_target_call_status] = EXTCALL_SUCCESS\n                        # EXTDELEGATECALL call will call the stripped address\n                        # but will change the sender to self\n                        caller_storage[slot_target_returndata] = address_caller\n\n    post = {\n        address_entry_point: Account(\n            storage={\n                slot_top_level_call_status: EXTCALL_SUCCESS\n                if ase_ready_opcode and ase_address\n                else CALL_SUCCESS\n            }\n        ),\n        address_caller: Account(storage=caller_storage),\n    }\n\n    tx = Transaction(\n        sender=sender,\n        to=address_entry_point,\n        gas_limit=50_000_000,\n        data=\"\",\n    )\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension/index/test_cases/","title":"Test Address Space Extension - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py:

    test_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALLCODE-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_STATICCALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_DELEGATECALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTCALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTDELEGATECALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_EXTSTATICCALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_CALLCODE-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_STATICCALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_DELEGATECALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTCALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTDELEGATECALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-blockchain_test_engine-target_opcode_EXTSTATICCALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_CALLCODE-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_STATICCALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_DELEGATECALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTCALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTDELEGATECALL-EOFContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-empty-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-empty-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-empty-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-empty-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-empty-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-empty-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-empty-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-empty-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOA-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOA-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOA-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOA-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOA-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOA-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOA-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOA-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-LegacyContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-LegacyContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-LegacyContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-LegacyContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-LegacyContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-LegacyContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-LegacyContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-LegacyContract-max_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOFContract-zero]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOFContract-short]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOFContract-mid_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOFContract-max_20]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOFContract-min_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOFContract-mid_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOFContract-full_ase]\ntest_address_space_extension[fork_CancunEIP7692-state_test-target_opcode_EXTSTATICCALL-EOFContract-max_ase]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/","title":"Test Calldata","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-7069: Revamped CALL instructions

    Tests for the RETURNDATALOAD instriction

    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calldata.test_extcalls_inputdata","title":"test_extcalls_inputdata(state_test, pre, value, memory, offset, length)","text":"

    Tests call data into EXT*CALL including multiple offset conditions.

    Caller pushes data into memory, then calls the target. Target writes 64 bytes of call data to storage and a success byte.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py
    @pytest.mark.parametrize(\"value\", [0, 1])\n@pytest.mark.parametrize(\n    \"memory\",\n    [\n        b\"\",\n        b\"1234567890abcdef\",\n        b\"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=-\",\n        b\"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=-\" * 4,\n    ],\n    ids=lambda x: \"size_%d\" % len(x),\n)\n@pytest.mark.parametrize(\"offset\", [0, 8, 24, 80])\n@pytest.mark.parametrize(\"length\", [0, 8, 32, 48])\ndef test_extcalls_inputdata(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    value: int,\n    memory: bytes,\n    offset: int,\n    length: int,\n):\n    \"\"\"\n    Tests call data into EXT*CALL including multiple offset conditions.\n\n    Caller pushes data into memory, then calls the target.  Target writes 64 bytes of call data\n    to storage and a success byte.\n    \"\"\"\n    env = Environment()\n\n    sender = pre.fund_eoa()\n\n    address_returner = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_calldata_1, Op.CALLDATALOAD(0))\n                    + Op.SSTORE(slot_calldata_2, Op.CALLDATALOAD(32))\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                ),\n            ]\n        ),\n    )\n    address_caller = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.DATACOPY(0, 0, len(memory))\n                    + Op.SSTORE(\n                        slot_call_status,\n                        Op.EXTCALL(address_returner, offset, length, value),\n                    )\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                ),\n                Section.Data(data=memory),\n            ]\n        ),\n        storage={slot_call_status: value_exceptional_abort_canary},\n        balance=10**9,\n    )\n\n    calldata = memory[offset : offset + length]\n    post = {\n        address_returner: Account(\n            storage={\n                slot_code_worked: value_code_worked,\n                slot_calldata_1: right_pad_32(calldata[0:32]),\n                slot_calldata_2: right_pad_32(calldata[32:64]),\n            }\n        ),\n        address_caller: Account(\n            storage={\n                slot_code_worked: value_code_worked,\n                slot_call_status: EXTCALL_SUCCESS,\n            }\n        ),\n    }\n\n    tx = Transaction(to=address_caller, gas_limit=2_000_000, sender=sender)\n\n    state_test(\n        env=env,\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calldata.test_extdelegatecall_inputdata","title":"test_extdelegatecall_inputdata(state_test, pre, memory, offset, length)","text":"

    Tests call data into EXT*CALL including multiple offset conditions.

    Caller pushes data into memory, then calls the target. Target writes 64 bytes of call data to storage and a success byte.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py
    @pytest.mark.parametrize(\n    \"memory\",\n    [\n        b\"\",\n        b\"1234567890abcdef\",\n        b\"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=-\",\n        b\"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=-\" * 4,\n    ],\n    ids=lambda x: \"size_%d\" % len(x),\n)\n@pytest.mark.parametrize(\"offset\", [0, 8, 24, 80])\n@pytest.mark.parametrize(\"length\", [0, 8, 32, 48])\ndef test_extdelegatecall_inputdata(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    memory: bytes,\n    offset: int,\n    length: int,\n):\n    \"\"\"\n    Tests call data into EXT*CALL including multiple offset conditions.\n\n    Caller pushes data into memory, then calls the target.  Target writes 64 bytes of call data\n    to storage and a success byte.\n    \"\"\"\n    env = Environment()\n\n    sender = pre.fund_eoa()\n\n    address_returner = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_calldata_1, Op.CALLDATALOAD(0))\n                    + Op.SSTORE(slot_calldata_2, Op.CALLDATALOAD(32))\n                    + Op.SSTORE(slot_delegate_code_worked, value_code_worked)\n                    + Op.STOP\n                ),\n            ]\n        ),\n    )\n    address_caller = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.DATACOPY(0, 0, len(memory))\n                    + Op.SSTORE(\n                        slot_call_status,\n                        Op.EXTDELEGATECALL(address_returner, offset, length),\n                    )\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                ),\n                Section.Data(data=memory),\n            ]\n        ),\n        storage={slot_call_status: value_exceptional_abort_canary},\n        balance=10**9,\n    )\n\n    calldata = memory[offset : offset + length]\n    post = {\n        address_returner: Account(storage={}),\n        address_caller: Account(\n            storage={\n                slot_code_worked: value_code_worked,\n                slot_delegate_code_worked: value_code_worked,\n                slot_call_status: EXTCALL_SUCCESS,\n                slot_calldata_1: right_pad_32(calldata[0:32]),\n                slot_calldata_2: right_pad_32(calldata[32:64]),\n            }\n        ),\n    }\n\n    tx = Transaction(to=address_caller, gas_limit=2_000_000, sender=sender)\n\n    state_test(\n        env=env,\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calldata.test_extstaticcall_inputdata","title":"test_extstaticcall_inputdata(state_test, pre, memory, offset, length)","text":"

    Tests call data into EXT*CALL including multiple offset conditions.

    Caller pushes data into memory, then calls the target. Target writes 64 bytes of call data to storage and a success byte.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py
    @pytest.mark.parametrize(\n    \"memory\",\n    [\n        b\"\",\n        b\"1234567890abcdef\",\n        b\"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=-\",\n        b\"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=-\" * 4,\n    ],\n    ids=lambda x: \"size_%d\" % len(x),\n)\n@pytest.mark.parametrize(\"offset\", [0, 8, 24, 80])\n@pytest.mark.parametrize(\"length\", [0, 8, 32, 48])\ndef test_extstaticcall_inputdata(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    memory: bytes,\n    offset: int,\n    length: int,\n):\n    \"\"\"\n    Tests call data into EXT*CALL including multiple offset conditions.\n\n    Caller pushes data into memory, then calls the target.  Target writes 64 bytes of call data\n    to storage and a success byte.\n    \"\"\"\n    env = Environment()\n\n    sender = pre.fund_eoa()\n\n    address_returner = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.RETURN(0, Op.CALLDATASIZE)\n                ),\n            ]\n        ),\n    )\n    address_caller = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.DATACOPY(0, 0, len(memory))\n                    + Op.SSTORE(\n                        slot_call_status,\n                        Op.EXTSTATICCALL(address_returner, offset, length),\n                    )\n                    + Op.SSTORE(slot_calldata_1, Op.RETURNDATALOAD(0))\n                    + Op.SSTORE(slot_calldata_2, Op.RETURNDATALOAD(32))\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                ),\n                Section.Data(data=memory),\n            ]\n        ),\n        storage={slot_call_status: value_exceptional_abort_canary},\n        balance=10**9,\n    )\n\n    calldata = memory[offset : offset + length]\n    post = {\n        address_returner: Account(storage={}),\n        address_caller: Account(\n            storage={\n                slot_code_worked: value_code_worked,\n                slot_call_status: EXTCALL_SUCCESS,\n                slot_calldata_1: right_pad_32(calldata[0:32]),\n                slot_calldata_2: right_pad_32(calldata[32:64]),\n            }\n        ),\n    }\n\n    tx = Transaction(to=address_caller, gas_limit=2_000_000, sender=sender)\n\n    state_test(\n        env=env,\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calldata.test_calldata_remains_after_subcall","title":"test_calldata_remains_after_subcall(state_test, pre, opcode)","text":"

    Tests call data remains after a call to another contract.

    Caller pushes data into memory, then calls the target. Target calls 3rd contract. 3rd contract returns. Target writes calldata to storage.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.CALL,\n        Op.CALLCODE,\n        Op.DELEGATECALL,\n        Op.STATICCALL,\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ],\n)\ndef test_calldata_remains_after_subcall(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    opcode: Op,\n):\n    \"\"\"\n    Tests call data remains after a call to another contract.\n\n    Caller pushes data into memory, then calls the target.  Target calls 3rd contract. 3rd contract\n    returns. Target writes calldata to storage.\n    \"\"\"\n    env = Environment()\n\n    sender = pre.fund_eoa()\n\n    address_sub_called = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_delegate_code_worked, value_code_worked) + Op.STOP\n                )\n            ]\n        ),\n        storage={slot_delegate_code_worked: value_exceptional_abort_canary},\n    )\n    called_code = (\n        Op.MSTORE(0, value_calldata_2)\n        + Op.SSTORE(slot_call_status, value_exceptional_abort_canary)\n        + Op.SSTORE(slot_calldata_1, value_exceptional_abort_canary)\n        + Op.SSTORE(slot_code_worked, value_exceptional_abort_canary)\n        + Op.SSTORE(\n            slot_call_status,\n            opcode(\n                address=address_sub_called,\n                args_offset=0,\n                args_size=size_calldata,\n            ),\n        )\n        + Op.SSTORE(slot_calldata_1, Op.CALLDATALOAD(0))\n        + Op.SSTORE(slot_code_worked, value_code_worked)\n        + Op.STOP\n    )\n    match opcode:\n        case Op.CALL | Op.CALLCODE | Op.DELEGATECALL | Op.STATICCALL:\n            address_called = pre.deploy_contract(code=called_code)\n        case Op.EXTCALL | Op.EXTDELEGATECALL | Op.EXTSTATICCALL:\n            address_called = pre.deploy_contract(\n                Container(\n                    sections=[\n                        Section.Code(code=called_code),\n                    ]\n                ),\n            )\n    address_caller = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.MSTORE(0, value_calldata_1)\n                    + Op.SSTORE(slot_calldata_1, value_exceptional_abort_canary)\n                    + Op.SSTORE(slot_code_worked, value_exceptional_abort_canary)\n                    + Op.SSTORE(\n                        slot_call_status,\n                        Op.EXTCALL(address_called, 0, size_calldata, 0),\n                    )\n                    + Op.SSTORE(slot_calldata_1, Op.RETURNDATALOAD(0))\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP\n                ),\n            ]\n        ),\n        storage={slot_call_status: value_exceptional_abort_canary},\n        balance=10**9,\n    )\n\n    match opcode:\n        case Op.STATICCALL:\n            called_storage = {\n                slot_code_worked: value_code_worked,\n                slot_call_status: CALL_FAILURE,\n                slot_calldata_1: value_calldata_1,\n            }\n            sub_called_storage = {\n                slot_delegate_code_worked: value_exceptional_abort_canary,\n            }\n        case Op.DELEGATECALL | Op.CALLCODE:\n            called_storage = {\n                slot_code_worked: value_code_worked,\n                slot_delegate_code_worked: value_code_worked,\n                slot_call_status: CALL_SUCCESS,\n                slot_calldata_1: value_calldata_1,\n            }\n            sub_called_storage = {\n                slot_delegate_code_worked: value_exceptional_abort_canary,\n            }\n        case Op.CALL:\n            called_storage = {\n                slot_code_worked: value_code_worked,\n                slot_call_status: CALL_SUCCESS,\n                slot_calldata_1: value_calldata_1,\n            }\n            sub_called_storage = {\n                slot_delegate_code_worked: value_code_worked,\n            }\n        case Op.EXTSTATICCALL:\n            called_storage = {\n                slot_code_worked: value_code_worked,\n                slot_call_status: EXTCALL_FAILED,\n                slot_calldata_1: value_calldata_1,\n            }\n            sub_called_storage = {\n                slot_delegate_code_worked: value_exceptional_abort_canary,\n            }\n        case Op.EXTDELEGATECALL:\n            called_storage = {\n                slot_code_worked: value_code_worked,\n                slot_delegate_code_worked: value_code_worked,\n                slot_call_status: EXTCALL_SUCCESS,\n                slot_calldata_1: value_calldata_1,\n            }\n            sub_called_storage = {\n                slot_delegate_code_worked: value_exceptional_abort_canary,\n            }\n        case Op.EXTCALL:\n            called_storage = {\n                slot_code_worked: value_code_worked,\n                slot_call_status: EXTCALL_SUCCESS,\n                slot_calldata_1: value_calldata_1,\n            }\n            sub_called_storage = {\n                slot_delegate_code_worked: value_code_worked,\n            }\n        case _:\n            raise ValueError(f\"Unexpected opcode: {opcode}\")\n\n    post = {\n        address_caller: Account(storage={slot_code_worked: value_code_worked}),\n        address_called: Account(storage=called_storage),\n        address_sub_called: Account(storage=sub_called_storage),\n    }\n\n    tx = Transaction(to=address_caller, gas_limit=4_000_000, sender=sender)\n\n    state_test(\n        env=env,\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/index/test_cases/","title":"Test Calldata - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py:

    test_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_256-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_0-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_0-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_16-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_16-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_64-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_64-value_1]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_256-value_0]\ntest_extcalls_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_256-value_1]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_256]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_0]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_16]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_64]\ntest_extdelegatecall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_8-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_32-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test-length_48-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_0-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_8-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_32-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-blockchain_test_engine-length_48-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_0-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_8-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_32-offset_80-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_0-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_8-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_24-size_256]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_0]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_16]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_64]\ntest_extstaticcall_inputdata[fork_CancunEIP7692-state_test-length_48-offset_80-size_256]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test-opcode_CALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test-opcode_CALLCODE]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test-opcode_DELEGATECALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test-opcode_STATICCALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test-opcode_EXTCALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test-opcode_EXTDELEGATECALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test-opcode_EXTSTATICCALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test_engine-opcode_CALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test_engine-opcode_CALLCODE]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test_engine-opcode_DELEGATECALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test_engine-opcode_STATICCALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTCALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTDELEGATECALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTSTATICCALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-state_test-opcode_CALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-state_test-opcode_CALLCODE]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-state_test-opcode_DELEGATECALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-state_test-opcode_STATICCALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-state_test-opcode_EXTCALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-state_test-opcode_EXTDELEGATECALL]\ntest_calldata_remains_after_subcall[fork_CancunEIP7692-state_test-opcode_EXTSTATICCALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/","title":"Test Calls","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    test calls across EOF and Legacy

    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_legacy_calls_eof_sstore","title":"test_legacy_calls_eof_sstore(state_test, pre, sender, opcode)","text":"

    Test legacy contracts calling EOF contracts that use SSTORE

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.CALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n        Op.STATICCALL,\n    ],\n)\ndef test_legacy_calls_eof_sstore(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n):\n    \"\"\"Test legacy contracts calling EOF contracts that use SSTORE\"\"\"\n    env = Environment()\n    destination_contract_address = pre.deploy_contract(contract_eof_sstore)\n\n    caller_contract = Op.SSTORE(\n        slot_call_result, opcode(address=destination_contract_address)\n    ) + Op.SSTORE(slot_code_worked, value_code_worked)\n\n    calling_contract_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=50000000,\n        data=\"\",\n    )\n\n    calling_storage = Storage(\n        {\n            slot_code_worked: value_code_worked,  # type: ignore\n            slot_call_result: value_legacy_call_worked,  # type: ignore\n        }\n    )\n    destination_storage = Storage()\n\n    if opcode == Op.CALL:\n        destination_storage[slot_caller] = calling_contract_address\n    elif opcode == Op.DELEGATECALL:\n        calling_storage[slot_caller] = sender\n    elif opcode == Op.CALLCODE:\n        calling_storage[slot_caller] = calling_contract_address\n    elif opcode == Op.STATICCALL:\n        calling_storage[slot_call_result] = value_legacy_call_failed\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n        destination_contract_address: Account(storage=destination_storage),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_legacy_calls_eof_mstore","title":"test_legacy_calls_eof_mstore(state_test, pre, sender, opcode)","text":"

    Test legacy contracts calling EOF contracts that only return data

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.CALL,\n        Op.DELEGATECALL,\n        Op.CALLCODE,\n        Op.STATICCALL,\n    ],\n)\ndef test_legacy_calls_eof_mstore(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n):\n    \"\"\"Test legacy contracts calling EOF contracts that only return data\"\"\"\n    env = Environment()\n    destination_contract_code = Container(\n        sections=[\n            Section.Code(\n                code=Op.MSTORE8(0, int.from_bytes(value_returndata_magic, \"big\"))\n                + Op.RETURN(0, len(value_returndata_magic)),\n            )\n        ]\n    )\n    destination_contract_address = pre.deploy_contract(destination_contract_code)\n\n    caller_contract = (\n        Op.SSTORE(slot_call_result, opcode(address=destination_contract_address))\n        + Op.SSTORE(slot_returndatasize, Op.RETURNDATASIZE)\n        + Op.RETURNDATACOPY(31, 0, 1)\n        + Op.SSTORE(slot_returndata, Op.MLOAD(0))\n        + Op.SSTORE(slot_code_worked, value_code_worked)\n    )\n    calling_contract_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=50000000,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_code_worked: value_code_worked,  # type: ignore\n        slot_call_result: value_legacy_call_worked,  # type: ignore\n        slot_returndatasize: len(value_returndata_magic),  # type: ignore\n        slot_returndata: value_returndata_magic,  # type: ignore\n    }\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n        destination_contract_address: Account(storage={}),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_eof_sstore","title":"test_eof_calls_eof_sstore(state_test, pre, sender, opcode)","text":"

    Test EOF contracts calling EOF contracts that use SSTORE

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ],\n)\ndef test_eof_calls_eof_sstore(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n):\n    \"\"\"Test EOF contracts calling EOF contracts that use SSTORE\"\"\"\n    env = Environment()\n    destination_contract_address = pre.deploy_contract(contract_eof_sstore)\n\n    caller_contract = Container(\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_call_result, opcode(address=destination_contract_address))\n                + Op.SSTORE(slot_code_worked, value_code_worked)\n                + Op.STOP,\n            )\n        ]\n    )\n    calling_contract_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=50000000,\n        data=\"\",\n    )\n\n    calling_storage = Storage(\n        {\n            slot_code_worked: value_code_worked,  # type: ignore\n            slot_call_result: value_eof_call_worked,  # type: ignore\n        }\n    )\n    destination_storage = Storage()\n\n    if opcode == Op.EXTCALL:\n        destination_storage[slot_caller] = calling_contract_address\n    elif opcode == Op.EXTDELEGATECALL:\n        calling_storage[slot_caller] = sender\n    elif opcode == Op.EXTSTATICCALL:\n        calling_storage[slot_call_result] = value_eof_call_failed\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n        destination_contract_address: Account(storage=destination_storage),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_eof_mstore","title":"test_eof_calls_eof_mstore(state_test, pre, sender, opcode)","text":"

    Test EOF contracts calling EOF contracts that return data

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ],\n)\ndef test_eof_calls_eof_mstore(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n):\n    \"\"\"Test EOF contracts calling EOF contracts that return data\"\"\"\n    env = Environment()\n    destination_contract_code = Container(\n        sections=[\n            Section.Code(\n                code=Op.MSTORE8(0, int.from_bytes(value_returndata_magic, \"big\"))\n                + Op.RETURN(0, 32),\n            )\n        ]\n    )\n    destination_contract_address = pre.deploy_contract(destination_contract_code)\n\n    caller_contract = Container(\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_call_result, opcode(address=destination_contract_address))\n                + Op.SSTORE(slot_returndatasize, Op.RETURNDATASIZE)\n                + Op.SSTORE(slot_returndata, Op.RETURNDATALOAD(0))\n                + Op.SSTORE(slot_code_worked, value_code_worked)\n                + Op.STOP,\n            )\n        ]\n    )\n    calling_contract_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=50000000,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_code_worked: value_code_worked,  # type: ignore\n        slot_call_result: value_eof_call_worked,  # type: ignore\n        slot_returndatasize: 0x20,  # type: ignore\n        slot_returndata: value_returndata_magic\n        + b\"\\0\" * (0x20 - len(value_returndata_magic)),  # type: ignore\n    }\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n        destination_contract_address: Account(storage={}),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_legacy_sstore","title":"test_eof_calls_legacy_sstore(state_test, pre, sender, opcode)","text":"

    Test EOF contracts calling Legacy contracts that use SSTORE

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ],\n)\ndef test_eof_calls_legacy_sstore(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n):\n    \"\"\"Test EOF contracts calling Legacy contracts that use SSTORE\"\"\"\n    env = Environment()\n    destination_contract_code = Op.SSTORE(slot_caller, Op.CALLER()) + Op.STOP\n    destination_contract_address = pre.deploy_contract(destination_contract_code)\n\n    caller_contract = Container(\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_call_result, opcode(address=destination_contract_address))\n                + Op.SSTORE(slot_code_worked, value_code_worked)\n                + Op.STOP,\n            )\n        ]\n    )\n    calling_contract_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=50000000,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_code_worked: value_code_worked,  # type: ignore\n        slot_call_result: value_eof_call_worked,  # type: ignore\n    }\n    destination_storage = {}\n\n    if opcode == Op.EXTCALL:\n        destination_storage[slot_caller] = calling_contract_address\n    elif opcode == Op.EXTDELEGATECALL:\n        # EOF delegate call to legacy is a light failure by rule\n        calling_storage[slot_call_result] = value_eof_call_reverted\n    elif opcode == Op.EXTSTATICCALL:\n        calling_storage[slot_call_result] = value_eof_call_failed\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n        destination_contract_address: Account(storage=destination_storage),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_legacy_mstore","title":"test_eof_calls_legacy_mstore(state_test, pre, sender, opcode)","text":"

    Test EOF contracts calling Legacy contracts that return data

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ],\n)\ndef test_eof_calls_legacy_mstore(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n):\n    \"\"\"Test EOF contracts calling Legacy contracts that return data\"\"\"\n    env = Environment()\n    destination_contract_code = Op.MSTORE8(\n        0, int.from_bytes(value_returndata_magic, \"big\")\n    ) + Op.RETURN(0, 32)\n    destination_contract_address = pre.deploy_contract(destination_contract_code)\n\n    caller_contract = Container(\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_call_result, opcode(address=destination_contract_address))\n                + Op.SSTORE(slot_returndatasize, Op.RETURNDATASIZE)\n                + Op.SSTORE(slot_returndata, Op.RETURNDATALOAD(0))\n                + Op.SSTORE(slot_code_worked, value_code_worked)\n                + Op.STOP,\n            )\n        ]\n    )\n    calling_contract_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=50000000,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_code_worked: value_code_worked,  # type: ignore\n        slot_call_result: value_eof_call_worked,  # type: ignore\n        slot_returndatasize: 0x20,  # type: ignore\n        slot_returndata: value_returndata_magic\n        + b\"\\0\" * (0x20 - len(value_returndata_magic)),  # type: ignore\n    }\n\n    if opcode == Op.EXTDELEGATECALL:\n        # EOF delegate call to legacy is a light failure by rule\n        calling_storage[slot_call_result] = value_eof_call_reverted\n        calling_storage[slot_returndatasize] = 0\n        calling_storage[slot_returndata] = 0\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n        destination_contract_address: Account(storage={}),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_revert_abort","title":"test_eof_calls_revert_abort(state_test, pre, sender, opcode, destination_opcode, destination_is_eof)","text":"

    Test EOF contracts calling contracts that revert or abort

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ],\n)\n@pytest.mark.parametrize(\n    \"destination_opcode\",\n    [Op.REVERT, Op.INVALID],\n)\n@pytest.mark.parametrize(\"destination_is_eof\", [True, False])\ndef test_eof_calls_revert_abort(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n    destination_opcode: Op,\n    destination_is_eof: bool,\n):\n    \"\"\"Test EOF contracts calling contracts that revert or abort\"\"\"\n    env = Environment()\n\n    destination_contract_address = pre.deploy_contract(\n        Container.Code(destination_opcode(offset=0, size=0))\n        if destination_is_eof\n        else destination_opcode(offset=0, size=0)\n    )\n\n    caller_contract = Container.Code(\n        Op.SSTORE(slot_call_result, opcode(address=destination_contract_address))\n        + Op.SSTORE(slot_code_worked, value_code_worked)\n        + Op.STOP,\n    )\n    calling_contract_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=50000000,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_code_worked: value_code_worked,\n        slot_call_result: value_eof_call_reverted\n        if destination_opcode == Op.REVERT\n        or (opcode == Op.EXTDELEGATECALL and not destination_is_eof)\n        else value_eof_call_failed,\n    }\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n        destination_contract_address: Account(storage={}),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_eof_then_fails","title":"test_eof_calls_eof_then_fails(state_test, pre, sender, opcode, fail_opcode)","text":"

    Test EOF contracts calling EOF contracts and failing after the call

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n    ],\n)\n@pytest.mark.parametrize(\"fail_opcode\", [Op.REVERT, Op.INVALID])\ndef test_eof_calls_eof_then_fails(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n    fail_opcode: Op,\n):\n    \"\"\"Test EOF contracts calling EOF contracts and failing after the call\"\"\"\n    env = Environment()\n    destination_contract_address = pre.deploy_contract(contract_eof_sstore)\n\n    caller_contract = Container.Code(\n        Op.SSTORE(slot_call_result, opcode(address=destination_contract_address))\n        + Op.SSTORE(slot_code_worked, value_code_worked)\n        + fail_opcode(offset=0, size=0),\n    )\n    calling_contract_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=50000000,\n        data=\"\",\n    )\n\n    post = {\n        calling_contract_address: Account(storage=Storage()),\n        destination_contract_address: Account(storage=Storage()),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_clear_return_buffer","title":"test_eof_calls_clear_return_buffer(state_test, pre, sender, opcode, target_account_type, value)","text":"

    Test EOF contracts calling clears returndata buffer

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ],\n)\n@pytest.mark.parametrize(\n    \"target_account_type\",\n    (\n        \"empty\",\n        \"EOA\",\n        \"LegacyContract\",\n        \"EOFContract\",\n        \"LegacyContractInvalid\",\n        \"EOFContractInvalid\",\n    ),\n    ids=lambda x: x,\n)\n@pytest.mark.parametrize(\"value\", [0, 1])\ndef test_eof_calls_clear_return_buffer(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n    target_account_type: str,\n    value: int,\n):\n    \"\"\"Test EOF contracts calling clears returndata buffer\"\"\"\n    env = Environment()\n    filling_contract_code = Container.Code(\n        Op.MSTORE8(0, int.from_bytes(value_returndata_magic, \"big\")) + Op.RETURN(0, 32),\n    )\n    filling_callee_address = pre.deploy_contract(filling_contract_code)\n\n    match target_account_type:\n        case \"empty\":\n            target_address = b\"\\x78\" * 20\n        case \"EOA\":\n            target_address = pre.fund_eoa()\n        case \"LegacyContract\":\n            target_address = pre.deploy_contract(\n                code=Op.STOP,\n            )\n        case \"EOFContract\":\n            target_address = pre.deploy_contract(\n                code=Container.Code(Op.STOP),\n            )\n        case \"LegacyContractInvalid\":\n            target_address = pre.deploy_contract(\n                code=Op.INVALID,\n            )\n        case \"EOFContractInvalid\":\n            target_address = pre.deploy_contract(\n                code=Container.Code(Op.INVALID),\n            )\n\n    caller_contract = Container.Code(\n        # First fill the return buffer and sanity check\n        Op.EXTCALL(filling_callee_address, 0, 0, 0)\n        + Op.SSTORE(slot_returndatasize_before_clear, Op.RETURNDATASIZE)\n        # Then call something that doesn't return and check returndata cleared\n        + opcode(address=target_address, value=value)\n        + Op.SSTORE(slot_returndatasize, Op.RETURNDATASIZE)\n        + Op.SSTORE(slot_code_worked, value_code_worked)\n        + Op.STOP,\n    )\n\n    calling_contract_address = pre.deploy_contract(caller_contract)\n\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=50000000,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_code_worked: value_code_worked,\n        # Sanity check\n        slot_returndatasize_before_clear: 0x20,\n        slot_returndatasize: 0,\n    }\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n        filling_callee_address: Account(storage={}),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_static_flag_with_value","title":"test_eof_calls_static_flag_with_value(state_test, pre, sender, opcode)","text":"

    Test EOF contracts calls handle static flag and sending value correctly

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.CALL,\n        Op.EXTCALL,\n    ],\n)\ndef test_eof_calls_static_flag_with_value(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n):\n    \"\"\"Test EOF contracts calls handle static flag and sending value correctly\"\"\"\n    env = Environment()\n\n    noop_callee_address = pre.deploy_contract(Container.Code(Op.STOP))\n\n    failing_contract_code = opcode(address=noop_callee_address, value=1) + Op.STOP\n    failing_contract_address = pre.deploy_contract(\n        Container.Code(\n            failing_contract_code,\n        )\n        if opcode == Op.EXTCALL\n        else failing_contract_code\n    )\n\n    calling_contract_address = pre.deploy_contract(\n        Container.Code(\n            Op.SSTORE(slot_call_result, Op.EXTSTATICCALL(address=failing_contract_address))\n            + Op.SSTORE(slot_code_worked, value_code_worked)\n            + Op.STOP\n        )\n    )\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=5_000_000,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_code_worked: value_code_worked,\n        slot_call_result: value_eof_call_failed,\n    }\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_min_callee_gas","title":"test_eof_calls_min_callee_gas(state_test, pre, sender, opcode, extra_gas_value_transfer, value, extra_gas_limit, reverts)","text":"

    Test EOF contracts calls do light failure when retained/callee gas is not enough.

    Premise of the test is that there exists a range of gas_limit values, which are enough for all instructions to execute, but call's returned value is 1, meaning not enough for gas allowances (MIN_RETAINED_GAS and MIN_CALLEE_GAS) - ones marked with reverts==False.

    Once we provide both allowances, the RJUMPI condition is no longer met and reverts==True.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    [\"opcode\", \"extra_gas_value_transfer\", \"value\"],\n    [\n        [Op.EXTCALL, 0, 0],\n        [Op.EXTCALL, 9_000, 1],\n        [Op.EXTSTATICCALL, 0, 0],\n        [Op.EXTDELEGATECALL, 0, 0],\n    ],\n    ids=[\"extcall_without_value\", \"extcall_with_value\", \"extstaticcall\", \"extdelegatecall\"],\n)\n@pytest.mark.parametrize(\n    [\"extra_gas_limit\", \"reverts\"],\n    [\n        [0, False],\n        [min_retained_gas, False],\n        [min_callee_gas, False],\n        [min_retained_gas + min_callee_gas, True],\n    ],\n    ids=[\"no_allowances\", \"only_retained\", \"only_callee\", \"both_allowances\"],\n)\ndef test_eof_calls_min_callee_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n    extra_gas_value_transfer: int,\n    value: int,\n    extra_gas_limit: int,\n    reverts: bool,\n):\n    \"\"\"\n    Test EOF contracts calls do light failure when retained/callee gas is not enough.\n\n    Premise of the test is that there exists a range of `gas_limit` values, which are enough\n    for all instructions to execute, but call's returned value is 1, meaning not enough for gas\n    allowances (MIN_RETAINED_GAS and MIN_CALLEE_GAS) - ones marked with `reverts==False`.\n\n    Once we provide both allowances, the RJUMPI condition is no longer met and `reverts==True`.\n    \"\"\"\n    env = Environment()\n\n    noop_callee_address = pre.deploy_contract(Container.Code(Op.STOP))\n\n    revert_block = Op.REVERT(0, 0)\n    calling_contract_address = pre.deploy_contract(\n        Container.Code(\n            Op.SSTORE(slot_code_worked, value_code_worked)\n            + Op.EQ(opcode(address=noop_callee_address, value=value), value_eof_call_reverted)\n            # If the return code isn't 1, it means gas was enough to cover the allowances.\n            + Op.RJUMPI[len(revert_block)]\n            + revert_block\n            + Op.STOP\n        ),\n        balance=value,\n    )\n\n    # `no_oog_gas` is minimum amount of gas_limit which makes the transaction not go oog.\n    push_operations = 3 + len(opcode.kwargs)  # type: ignore\n    no_oog_gas = (\n        21_000\n        + 20_000  # SSTORE\n        + 2_100  # SSTORE COLD_SLOAD_COST\n        + push_operations * 3  # PUSH operations\n        + 100  # WARM_STORAGE_READ_COST\n        + 2500  # COLD_ACCOUNT_ACCESS - WARM_STORAGE_READ_COST\n        + extra_gas_value_transfer\n        + 4  # RJUMPI\n        + 3  # EQ\n    )\n\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=no_oog_gas + extra_gas_limit,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_code_worked: 0 if reverts else value_code_worked,\n    }\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_with_value","title":"test_eof_calls_with_value(state_test, pre, sender, balance, value)","text":"

    Test EOF contracts calls handle value calls with and without enough balance

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"balance\", [0, 1, 2, pytest.param(2**256 - 1, marks=pytest.mark.pre_alloc_modify)]\n)\n@pytest.mark.parametrize(\"value\", [0, 1, 2, 2**256 - 1])\ndef test_eof_calls_with_value(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    balance: int,\n    value: int,\n):\n    \"\"\"Test EOF contracts calls handle value calls with and without enough balance\"\"\"\n    env = Environment()\n\n    noop_callee_address = pre.deploy_contract(Container.Code(Op.STOP))\n\n    calling_contract_address = pre.deploy_contract(\n        Container.Code(\n            Op.SSTORE(slot_call_result, Op.EXTCALL(address=noop_callee_address, value=value))\n            + Op.SSTORE(slot_code_worked, value_code_worked)\n            + Op.STOP\n        ),\n        balance=balance,\n    )\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=50000000,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_code_worked: value_code_worked,\n        slot_call_result: value_eof_call_reverted if balance < value else value_eof_call_worked,\n    }\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n        noop_callee_address: Account(balance=0 if balance < value else value),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_calls.test_eof_calls_msg_depth","title":"test_eof_calls_msg_depth(state_test, pre, sender, opcode)","text":"

    Test EOF contracts calls handle msg depth limit correctly (1024). NOTE: due to block gas limit and the 63/64th rule this limit is unlikely to be hit on mainnet.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ],\n)\ndef test_eof_calls_msg_depth(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    sender: EOA,\n    opcode: Op,\n):\n    \"\"\"\n    Test EOF contracts calls handle msg depth limit correctly (1024).\n    NOTE: due to block gas limit and the 63/64th rule this limit is unlikely to be hit\n          on mainnet.\n    \"\"\"\n    # Not a precise gas_limit formula, but enough to exclude risk of gas causing the failure.\n    gas_limit = int(200000 * (64 / 63) ** 1024)\n    env = Environment(gas_limit=gas_limit)\n\n    # Flow of the test:\n    # `callee_code` is recursively calling itself, passing msg depth as calldata\n    # (kept with the `MSTORE(0, ADD(...))`). When maximum msg depth is reached\n    # the call fails and starts returning. The deep-most frame returns:\n    #   - current reached msg depth (expected to be the maximum 1024), with the\n    #     `MSTORE(32, ADD(...))`\n    #   - the respective return code of the EXT*CALL (expected to be 1 - light failure), with the\n    #     `MSTORE(64, NOOP)`. Note the `NOOP` is just to appease the `Op.MSTORE` call, the return\n    #     code value is actually coming from the `Op.DUP1`\n    # When unwinding the msg call stack, the intermediate frames return whatever the deeper callee\n    # returned with the `RETURNDATACOPY` instruction.\n\n    # Memory offsets layout:\n    # - 0  - input - msg depth\n    # - 32 - output - msg depth\n    # - 64 - output - call result\n    returndatacopy_block = Op.RETURNDATACOPY(32, 0, 64) + Op.RETURN(32, 64)\n    deep_most_result_block = (\n        Op.MSTORE(32, Op.ADD(Op.CALLDATALOAD(0), 1)) + Op.MSTORE(64, Op.NOOP) + Op.RETURN(32, 64)\n    )\n    rjump_offset = len(returndatacopy_block)\n\n    callee_code = Container.Code(\n        # current stack depth in memory bytes 0-31\n        Op.MSTORE(0, Op.ADD(Op.CALLDATALOAD(0), 1))\n        # pass it along deeper as calldata\n        + opcode(address=Op.ADDRESS, args_size=32)\n        # duplicate return code for the `returndatacopy_block` below\n        + Op.DUP1\n        # if return code was:\n        #  - 1, we're in the deep-most frame, `deep_most_result_block` returns the actual result\n        #  - 0, we're in an intermediate frame, `returndatacopy_block` only passes on the result\n        + Op.RJUMPI[rjump_offset]\n        + returndatacopy_block\n        + deep_most_result_block\n    )\n\n    callee_address = pre.deploy_contract(callee_code)\n\n    calling_contract_address = pre.deploy_contract(\n        Container.Code(\n            Op.MSTORE(0, Op.CALLDATALOAD(0))\n            + Op.EXTCALL(address=callee_address, args_size=32)\n            + Op.SSTORE(slot_max_depth, Op.RETURNDATALOAD(0))\n            + Op.SSTORE(slot_call_result, Op.RETURNDATALOAD(32))\n            + Op.SSTORE(slot_code_worked, value_code_worked)\n            + Op.STOP\n        )\n    )\n    tx = Transaction(\n        sender=sender,\n        to=Address(calling_contract_address),\n        gas_limit=gas_limit,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_max_depth: 1024,\n        slot_code_worked: value_code_worked,\n        slot_call_result: value_eof_call_reverted,\n    }\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/index/test_cases/","title":"Test Calls - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py:

    test_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test-opcode_CALL]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test-opcode_DELEGATECALL]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test-opcode_CALLCODE]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test-opcode_STATICCALL]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test_engine-opcode_CALL]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test_engine-opcode_DELEGATECALL]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test_engine-opcode_CALLCODE]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test_engine-opcode_STATICCALL]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-state_test-opcode_CALL]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-state_test-opcode_DELEGATECALL]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-state_test-opcode_CALLCODE]\ntest_legacy_calls_eof_sstore[fork_CancunEIP7692-state_test-opcode_STATICCALL]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-blockchain_test-opcode_CALL]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-blockchain_test-opcode_DELEGATECALL]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-blockchain_test-opcode_CALLCODE]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-blockchain_test-opcode_STATICCALL]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-blockchain_test_engine-opcode_CALL]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-blockchain_test_engine-opcode_DELEGATECALL]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-blockchain_test_engine-opcode_CALLCODE]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-blockchain_test_engine-opcode_STATICCALL]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-state_test-opcode_CALL]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-state_test-opcode_DELEGATECALL]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-state_test-opcode_CALLCODE]\ntest_legacy_calls_eof_mstore[fork_CancunEIP7692-state_test-opcode_STATICCALL]\ntest_eof_calls_eof_sstore[fork_CancunEIP7692-blockchain_test-opcode_EXTCALL]\ntest_eof_calls_eof_sstore[fork_CancunEIP7692-blockchain_test-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_sstore[fork_CancunEIP7692-blockchain_test-opcode_EXTSTATICCALL]\ntest_eof_calls_eof_sstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTCALL]\ntest_eof_calls_eof_sstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_sstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTSTATICCALL]\ntest_eof_calls_eof_sstore[fork_CancunEIP7692-state_test-opcode_EXTCALL]\ntest_eof_calls_eof_sstore[fork_CancunEIP7692-state_test-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_sstore[fork_CancunEIP7692-state_test-opcode_EXTSTATICCALL]\ntest_eof_calls_eof_mstore[fork_CancunEIP7692-blockchain_test-opcode_EXTCALL]\ntest_eof_calls_eof_mstore[fork_CancunEIP7692-blockchain_test-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_mstore[fork_CancunEIP7692-blockchain_test-opcode_EXTSTATICCALL]\ntest_eof_calls_eof_mstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTCALL]\ntest_eof_calls_eof_mstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_mstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTSTATICCALL]\ntest_eof_calls_eof_mstore[fork_CancunEIP7692-state_test-opcode_EXTCALL]\ntest_eof_calls_eof_mstore[fork_CancunEIP7692-state_test-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_mstore[fork_CancunEIP7692-state_test-opcode_EXTSTATICCALL]\ntest_eof_calls_legacy_sstore[fork_CancunEIP7692-blockchain_test-opcode_EXTCALL]\ntest_eof_calls_legacy_sstore[fork_CancunEIP7692-blockchain_test-opcode_EXTDELEGATECALL]\ntest_eof_calls_legacy_sstore[fork_CancunEIP7692-blockchain_test-opcode_EXTSTATICCALL]\ntest_eof_calls_legacy_sstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTCALL]\ntest_eof_calls_legacy_sstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTDELEGATECALL]\ntest_eof_calls_legacy_sstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTSTATICCALL]\ntest_eof_calls_legacy_sstore[fork_CancunEIP7692-state_test-opcode_EXTCALL]\ntest_eof_calls_legacy_sstore[fork_CancunEIP7692-state_test-opcode_EXTDELEGATECALL]\ntest_eof_calls_legacy_sstore[fork_CancunEIP7692-state_test-opcode_EXTSTATICCALL]\ntest_eof_calls_legacy_mstore[fork_CancunEIP7692-blockchain_test-opcode_EXTCALL]\ntest_eof_calls_legacy_mstore[fork_CancunEIP7692-blockchain_test-opcode_EXTDELEGATECALL]\ntest_eof_calls_legacy_mstore[fork_CancunEIP7692-blockchain_test-opcode_EXTSTATICCALL]\ntest_eof_calls_legacy_mstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTCALL]\ntest_eof_calls_legacy_mstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTDELEGATECALL]\ntest_eof_calls_legacy_mstore[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTSTATICCALL]\ntest_eof_calls_legacy_mstore[fork_CancunEIP7692-state_test-opcode_EXTCALL]\ntest_eof_calls_legacy_mstore[fork_CancunEIP7692-state_test-opcode_EXTDELEGATECALL]\ntest_eof_calls_legacy_mstore[fork_CancunEIP7692-state_test-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_True-destination_opcode_REVERT-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_True-destination_opcode_REVERT-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_True-destination_opcode_REVERT-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_True-destination_opcode_INVALID-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_True-destination_opcode_INVALID-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_True-destination_opcode_INVALID-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_False-destination_opcode_REVERT-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_False-destination_opcode_REVERT-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_False-destination_opcode_REVERT-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_False-destination_opcode_INVALID-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_False-destination_opcode_INVALID-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test-destination_is_eof_False-destination_opcode_INVALID-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_True-destination_opcode_REVERT-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_True-destination_opcode_REVERT-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_True-destination_opcode_REVERT-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_True-destination_opcode_INVALID-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_True-destination_opcode_INVALID-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_True-destination_opcode_INVALID-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_False-destination_opcode_REVERT-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_False-destination_opcode_REVERT-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_False-destination_opcode_REVERT-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_False-destination_opcode_INVALID-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_False-destination_opcode_INVALID-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-blockchain_test_engine-destination_is_eof_False-destination_opcode_INVALID-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_True-destination_opcode_REVERT-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_True-destination_opcode_REVERT-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_True-destination_opcode_REVERT-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_True-destination_opcode_INVALID-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_True-destination_opcode_INVALID-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_True-destination_opcode_INVALID-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_False-destination_opcode_REVERT-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_False-destination_opcode_REVERT-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_False-destination_opcode_REVERT-opcode_EXTSTATICCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_False-destination_opcode_INVALID-opcode_EXTCALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_False-destination_opcode_INVALID-opcode_EXTDELEGATECALL]\ntest_eof_calls_revert_abort[fork_CancunEIP7692-state_test-destination_is_eof_False-destination_opcode_INVALID-opcode_EXTSTATICCALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-blockchain_test-fail_opcode_REVERT-opcode_EXTCALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-blockchain_test-fail_opcode_REVERT-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-blockchain_test-fail_opcode_INVALID-opcode_EXTCALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-blockchain_test-fail_opcode_INVALID-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-blockchain_test_engine-fail_opcode_REVERT-opcode_EXTCALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-blockchain_test_engine-fail_opcode_REVERT-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-blockchain_test_engine-fail_opcode_INVALID-opcode_EXTCALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-blockchain_test_engine-fail_opcode_INVALID-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-state_test-fail_opcode_REVERT-opcode_EXTCALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-state_test-fail_opcode_REVERT-opcode_EXTDELEGATECALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-state_test-fail_opcode_INVALID-opcode_EXTCALL]\ntest_eof_calls_eof_then_fails[fork_CancunEIP7692-state_test-fail_opcode_INVALID-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-empty-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-empty-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-empty-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-EOA-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-EOA-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-EOA-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-LegacyContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-LegacyContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-LegacyContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-EOFContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-EOFContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-EOFContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-LegacyContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-LegacyContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-LegacyContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-EOFContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-EOFContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_0-EOFContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-empty-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-empty-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-empty-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-EOA-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-EOA-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-EOA-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-LegacyContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-LegacyContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-LegacyContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-EOFContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-EOFContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-EOFContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-LegacyContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-LegacyContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-LegacyContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-EOFContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-EOFContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test-value_1-EOFContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-empty-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-empty-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-empty-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-EOA-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-EOA-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-EOA-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-LegacyContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-LegacyContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-LegacyContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-EOFContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-EOFContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-EOFContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-LegacyContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-LegacyContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-LegacyContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-EOFContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-EOFContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_0-EOFContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-empty-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-empty-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-empty-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-EOA-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-EOA-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-EOA-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-LegacyContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-LegacyContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-LegacyContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-EOFContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-EOFContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-EOFContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-LegacyContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-LegacyContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-LegacyContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-EOFContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-EOFContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-blockchain_test_engine-value_1-EOFContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-empty-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-empty-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-empty-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-EOA-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-EOA-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-EOA-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-LegacyContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-LegacyContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-LegacyContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-EOFContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-EOFContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-EOFContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-LegacyContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-LegacyContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-LegacyContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-EOFContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-EOFContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_0-EOFContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-empty-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-empty-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-empty-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-EOA-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-EOA-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-EOA-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-LegacyContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-LegacyContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-LegacyContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-EOFContract-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-EOFContract-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-EOFContract-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-LegacyContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-LegacyContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-LegacyContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-EOFContractInvalid-opcode_EXTCALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-EOFContractInvalid-opcode_EXTDELEGATECALL]\ntest_eof_calls_clear_return_buffer[fork_CancunEIP7692-state_test-value_1-EOFContractInvalid-opcode_EXTSTATICCALL]\ntest_eof_calls_static_flag_with_value[fork_CancunEIP7692-blockchain_test-opcode_CALL]\ntest_eof_calls_static_flag_with_value[fork_CancunEIP7692-blockchain_test-opcode_EXTCALL]\ntest_eof_calls_static_flag_with_value[fork_CancunEIP7692-blockchain_test_engine-opcode_CALL]\ntest_eof_calls_static_flag_with_value[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTCALL]\ntest_eof_calls_static_flag_with_value[fork_CancunEIP7692-state_test-opcode_CALL]\ntest_eof_calls_static_flag_with_value[fork_CancunEIP7692-state_test-opcode_EXTCALL]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-no_allowances-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-no_allowances-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-no_allowances-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-no_allowances-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-only_retained-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-only_retained-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-only_retained-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-only_retained-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-only_callee-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-only_callee-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-only_callee-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-only_callee-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-both_allowances-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-both_allowances-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-both_allowances-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test-both_allowances-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-no_allowances-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-no_allowances-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-no_allowances-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-no_allowances-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-only_retained-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-only_retained-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-only_retained-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-only_retained-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-only_callee-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-only_callee-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-only_callee-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-only_callee-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-both_allowances-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-both_allowances-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-both_allowances-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-blockchain_test_engine-both_allowances-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-no_allowances-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-no_allowances-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-no_allowances-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-no_allowances-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-only_retained-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-only_retained-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-only_retained-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-only_retained-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-only_callee-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-only_callee-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-only_callee-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-only_callee-extdelegatecall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-both_allowances-extcall_without_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-both_allowances-extcall_with_value]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-both_allowances-extstaticcall]\ntest_eof_calls_min_callee_gas[fork_CancunEIP7692-state_test-both_allowances-extdelegatecall]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_0-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_0-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_0-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_0-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_1-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_1-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_1-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_1-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_2-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_2-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_2-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_2-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_0-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_0-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_0-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_0-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_1-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_1-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_1-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_1-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_2-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_2-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_2-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_2-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-blockchain_test_engine-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_0-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_0-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_0-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_0-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_1-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_1-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_1-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_1-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_2-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_2-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_2-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_2-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_0]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_1]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_2]\ntest_eof_calls_with_value[fork_CancunEIP7692-state_test-value_115792089237316195423570985008687907853269984665640564039457584007913129639935-balance_115792089237316195423570985008687907853269984665640564039457584007913129639935]\ntest_eof_calls_msg_depth[fork_CancunEIP7692-blockchain_test-opcode_EXTCALL]\ntest_eof_calls_msg_depth[fork_CancunEIP7692-blockchain_test-opcode_EXTDELEGATECALL]\ntest_eof_calls_msg_depth[fork_CancunEIP7692-blockchain_test-opcode_EXTSTATICCALL]\ntest_eof_calls_msg_depth[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTCALL]\ntest_eof_calls_msg_depth[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTDELEGATECALL]\ntest_eof_calls_msg_depth[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTSTATICCALL]\ntest_eof_calls_msg_depth[fork_CancunEIP7692-state_test-opcode_EXTCALL]\ntest_eof_calls_msg_depth[fork_CancunEIP7692-state_test-opcode_EXTDELEGATECALL]\ntest_eof_calls_msg_depth[fork_CancunEIP7692-state_test-opcode_EXTSTATICCALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas/","title":"Test Gas","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-7069: Revamped CALL instructions

    Tests gas comsumption

    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_gas.test_ext_calls_gas","title":"test_ext_calls_gas(state_test, pre, state_env, opcode, pre_setup, cold_gas, warm_gas)","text":"

    Tests 4 variations of EXT*CALL gas, both warm and cold

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas.py
    @pytest.mark.parametrize(\n    [\"opcode\", \"pre_setup\", \"cold_gas\", \"warm_gas\"],\n    [\n        pytest.param(Op.EXTCALL, Op.PUSH0, 2600, 100, id=\"EXTCALL\"),\n        pytest.param(Op.EXTCALL, Op.PUSH1(1), 2600 + 9000, 100 + 9000, id=\"EXTCALL_with_value\"),\n        pytest.param(Op.EXTDELEGATECALL, Op.NOOP, 2600, 100, id=\"EXTSTATICCALL\"),\n        pytest.param(Op.EXTSTATICCALL, Op.NOOP, 2600, 100, id=\"EXTDELEGATECALL\"),\n    ],\n)\ndef test_ext_calls_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    state_env: Environment,\n    opcode: Op,\n    pre_setup: Op,\n    cold_gas: int,\n    warm_gas: int | None,\n):\n    \"\"\"Tests 4 variations of EXT*CALL gas, both warm and cold\"\"\"\n    address_target = pre.deploy_contract(Container(sections=[Section.Code(code=Op.STOP)]))\n\n    gas_test(\n        state_test,\n        state_env,\n        pre,\n        setup_code=pre_setup + Op.PUSH0 + Op.PUSH0 + Op.PUSH20(address_target),\n        subject_code=opcode,\n        tear_down_code=Op.STOP,\n        cold_gas=cold_gas,\n        warm_gas=warm_gas,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas/index/test_cases/","title":"Test Gas - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas.py:

    test_ext_calls_gas[fork_CancunEIP7692-blockchain_test-EXTCALL]\ntest_ext_calls_gas[fork_CancunEIP7692-blockchain_test-EXTCALL_with_value]\ntest_ext_calls_gas[fork_CancunEIP7692-blockchain_test-EXTSTATICCALL]\ntest_ext_calls_gas[fork_CancunEIP7692-blockchain_test-EXTDELEGATECALL]\ntest_ext_calls_gas[fork_CancunEIP7692-blockchain_test_engine-EXTCALL]\ntest_ext_calls_gas[fork_CancunEIP7692-blockchain_test_engine-EXTCALL_with_value]\ntest_ext_calls_gas[fork_CancunEIP7692-blockchain_test_engine-EXTSTATICCALL]\ntest_ext_calls_gas[fork_CancunEIP7692-blockchain_test_engine-EXTDELEGATECALL]\ntest_ext_calls_gas[fork_CancunEIP7692-state_test-EXTCALL]\ntest_ext_calls_gas[fork_CancunEIP7692-state_test-EXTCALL_with_value]\ntest_ext_calls_gas[fork_CancunEIP7692-state_test-EXTSTATICCALL]\ntest_ext_calls_gas[fork_CancunEIP7692-state_test-EXTDELEGATECALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion/","title":"Test Returndatacopy Memory Expansion","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Memory expansion tests for RETURNDATACOPY executing in EOF code

    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_returndatacopy_memory_expansion.test_returndatacopy_memory_expansion","title":"test_returndatacopy_memory_expansion(state_test, env, pre, post, tx)","text":"

    Perform RETURNDATACOPY operations that expand the memory, and verify the gas it costs to do so.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py
    @pytest.mark.parametrize(\n    \"dest,src,length\",\n    [\n        (0x00, 0x00, 0x01),\n        (0x100, 0x00, 0x01),\n        (0x1F, 0x00, 0x01),\n        (0x20, 0x00, 0x01),\n        (0x1000, 0x00, 0x01),\n        (0x1000, 0x00, 0x40),\n        (0x00, 0x00, 0x00),\n        (2**256 - 1, 0x00, 0x00),\n        (0x00, 2**256 - 1, 0x00),\n        (2**256 - 1, 2**256 - 1, 0x00),\n    ],\n    ids=[\n        \"single_byte_expansion\",\n        \"single_byte_expansion_2\",\n        \"single_byte_expansion_word_boundary\",\n        \"single_byte_expansion_word_boundary_2\",\n        \"multi_word_expansion\",\n        \"multi_word_expansion_2\",\n        \"zero_length_expansion\",\n        \"huge_dest_zero_length\",\n        \"huge_src_zero_length\",\n        \"huge_dest_huge_src_zero_length\",\n    ],\n)\n@pytest.mark.parametrize(\"successful\", [True, False])\n@pytest.mark.parametrize(\n    \"initial_memory\",\n    [\n        bytes(range(0x00, 0x100)),\n        bytes(),\n    ],\n    ids=[\n        \"from_existent_memory\",\n        \"from_empty_memory\",\n    ],\n)\ndef test_returndatacopy_memory_expansion(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    post: Mapping[str, Account],\n    tx: Transaction,\n):\n    \"\"\"\n    Perform RETURNDATACOPY operations that expand the memory, and verify the gas it costs to do so.\n    \"\"\"\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_returndatacopy_memory_expansion.test_returndatacopy_huge_memory_expansion","title":"test_returndatacopy_huge_memory_expansion(state_test, env, pre, post, tx)","text":"

    Perform RETURNDATACOPY operations that expand the memory by huge amounts, and verify that it correctly runs out of gas.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py
    @pytest.mark.parametrize(\n    \"dest,src,length\",\n    [\n        (2**256 - 1, 0x00, 0x01),\n        (2**256 - 2, 0x00, 0x01),\n        (2**255 - 1, 0x00, 0x01),\n        (0x00, 0x00, 2**256 - 1),\n        (0x00, 0x00, 2**256 - 2),\n        (0x00, 0x00, 2**255 - 1),\n    ],\n    ids=[\n        \"max_dest_single_byte_expansion\",\n        \"max_dest_minus_one_single_byte_expansion\",\n        \"half_max_dest_single_byte_expansion\",\n        \"max_length_expansion\",\n        \"max_length_minus_one_expansion\",\n        \"half_max_length_expansion\",\n    ],\n)\n@pytest.mark.parametrize(\n    \"subcall_exact_cost\",\n    [2**128 - 1],\n    ids=[\"\"],\n)  # Limit subcall gas, otherwise it would be impossibly large\n@pytest.mark.parametrize(\"successful\", [False])\n@pytest.mark.parametrize(\n    \"initial_memory\",\n    [\n        bytes(range(0x00, 0x100)),\n        bytes(),\n    ],\n    ids=[\n        \"from_existent_memory\",\n        \"from_empty_memory\",\n    ],\n)\ndef test_returndatacopy_huge_memory_expansion(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Mapping[str, Account],\n    post: Mapping[str, Account],\n    tx: Transaction,\n):\n    \"\"\"\n    Perform RETURNDATACOPY operations that expand the memory by huge amounts, and verify that it\n    correctly runs out of gas.\n    \"\"\"\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion/index/test_cases/","title":"Test Returndatacopy Memory Expansion - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py:

    test_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_True-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_True-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_True-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_True-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_True-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_True-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_True-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_True-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_True-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_True-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_True-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_True-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_True-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_True-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_True-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_True-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_True-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_True-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False-single_byte_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False-multi_word_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False-zero_length_expansion]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False-huge_src_zero_length]\ntest_returndatacopy_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False--max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_False--half_max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False--max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-from_empty_memory-successful_False--half_max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False--max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_existent_memory-successful_False--half_max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False--max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-from_empty_memory-successful_False--half_max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False--max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_existent_memory-successful_False--half_max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False--max_length_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_returndatacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-from_empty_memory-successful_False--half_max_length_expansion]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload/","title":"Test Returndataload","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests EIP-7069: Revamped CALL instructions

    Tests for the RETURNDATALOAD instriction

    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_returndataload.test_returndatacopy_handling","title":"test_returndatacopy_handling(state_test, pre, opcode, return_data, offset, size)","text":"

    Tests ReturnDataLoad including multiple offset conditions and differeing legacy vs. eof boundary conditions.

    entrypoint creates a \"0xff\" test area of memory, delegate calls to caller. Caller is either EOF or legacy, as per parameter. Calls returner and copies the return data based on offset and size params. Cases are expected to trigger boundary violations.

    Entrypoint copies the test area to storage slots, and the expected result is asserted.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.CALL,\n        Op.CALLCODE,\n        Op.DELEGATECALL,\n        Op.STATICCALL,\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ],\n)\n@pytest.mark.parametrize(\n    \"return_data\",\n    [\n        b\"\",\n        b\"\\x10\" * 0x10,\n        b\"\\x20\" * 0x20,\n        b\"\\x30\" * 0x30,\n    ],\n    ids=lambda x: \"len_%x\" % len(x),\n)\n@pytest.mark.parametrize(\n    \"offset\",\n    [\n        0,\n        0x10,\n        0x20,\n        0x30,\n    ],\n    ids=lambda x: \"offset_%x\" % x,\n)\n@pytest.mark.parametrize(\n    \"size\",\n    [\n        0,\n        0x10,\n        0x20,\n        0x30,\n    ],\n    ids=lambda x: \"size_%x\" % x,\n)\ndef test_returndatacopy_handling(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    opcode: Op,\n    return_data: bytes,\n    offset: int,\n    size: int,\n):\n    \"\"\"\n    Tests ReturnDataLoad including multiple offset conditions and differeing legacy vs. eof\n    boundary conditions.\n\n    entrypoint creates a \"0xff\" test area of memory, delegate calls to caller.\n    Caller is either EOF or legacy, as per parameter.  Calls returner and copies the return data\n    based on offset and size params.  Cases are expected to trigger boundary violations.\n\n    Entrypoint copies the test area to storage slots, and the expected result is asserted.\n    \"\"\"\n    env = Environment()\n\n    slot_result_start = 0x1000\n\n    sender = pre.fund_eoa()\n\n    address_returner = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.DATACOPY(0, 0, Op.DATASIZE) + Op.RETURN(0, Op.DATASIZE),\n                ),\n                Section.Data(data=return_data),\n            ]\n        )\n    )\n\n    result = [0xFF] * 0x40\n    result[0:size] = [0] * size\n    extent = size - max(0, size + offset - len(return_data))\n    if extent > 0 and len(return_data) > 0:\n        result[0:extent] = [return_data[0]] * extent\n\n    code_under_test = (\n        opcode(address=address_returner)\n        + Op.RETURNDATACOPY(0, offset, size)\n        + Op.SSTORE(slot_code_worked, value_code_worked)\n        + Op.RETURN(0, size)\n    )\n    match opcode:\n        case Op.EXTCALL | Op.EXTDELEGATECALL | Op.EXTSTATICCALL:\n            address_caller = pre.deploy_contract(\n                Container(\n                    sections=[\n                        Section.Code(\n                            code=code_under_test,\n                        )\n                    ]\n                )\n            )\n        case Op.CALL | Op.CALLCODE | Op.DELEGATECALL | Op.STATICCALL:\n            address_caller = pre.deploy_contract(code_under_test)\n\n    address_entry_point = pre.deploy_contract(\n        Op.NOOP\n        # First, create a \"dirty\" area, so we can check zero overwrite\n        + Op.MSTORE(0x00, -1)\n        + Op.MSTORE(0x20, -1)\n        # call the contract under test\n        + Op.DELEGATECALL(1_000_000, address_caller, 0, 0, 0, 0)\n        + Op.RETURNDATACOPY(0, 0, Op.RETURNDATASIZE)\n        # store the return data\n        + Op.SSTORE(slot_result_start, Op.MLOAD(0x0))\n        + Op.SSTORE(slot_result_start + 1, Op.MLOAD(0x20))\n        + Op.SSTORE(slot_code_worked, value_code_worked)\n        + Op.STOP,\n    )\n\n    post = {\n        address_entry_point: Account(\n            storage={\n                slot_code_worked: value_code_worked,\n                slot_result_start: bytes(result[:0x20]),\n                (slot_result_start + 0x1): bytes(result[0x20:]),\n            }\n        )\n    }\n    if opcode in [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL] and (\n        (offset + size) > len(return_data)\n    ):\n        post[address_entry_point] = Account(\n            storage={\n                slot_code_worked: value_code_worked,\n                slot_result_start: b\"\\xff\" * 32,\n                slot_result_start + 1: b\"\\xff\" * 32,\n            }\n        )\n\n    tx = Transaction(to=address_entry_point, gas_limit=2_000_000, sender=sender)\n\n    state_test(\n        env=env,\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_returndataload.test_returndataload_handling","title":"test_returndataload_handling(state_test, pre, opcode, return_data, offset)","text":"

    Much simpler than returndatacopy, no memory or boosted call. Returner is called and results are stored in storage slot, which is asserted for expected values. The parameters offset and return data are configured to test boundary conditions.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n        Op.EXTSTATICCALL,\n    ],\n)\n@pytest.mark.parametrize(\n    \"return_data\",\n    [\n        b\"\",\n        b\"\\x10\" * 0x10,\n        b\"\\x20\" * 0x20,\n        b\"\\x30\" * 0x30,\n    ],\n    ids=lambda x: \"len_%x\" % len(x),\n)\n@pytest.mark.parametrize(\n    \"offset\",\n    [\n        0,\n        0x10,\n        0x20,\n        0x30,\n    ],\n    ids=lambda x: \"offset_%x\" % x,\n)\ndef test_returndataload_handling(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    opcode: Op,\n    return_data: bytes,\n    offset: int,\n):\n    \"\"\"\n    Much simpler than returndatacopy, no memory or boosted call.  Returner is called\n    and results are stored in storage slot, which is asserted for expected values.\n    The parameters offset and return data are configured to test boundary conditions.\n    \"\"\"\n    env = Environment()\n\n    slot_result_start = 0x1000\n\n    sender = pre.fund_eoa()\n    address_returner = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.DATACOPY(0, 0, Op.DATASIZE) + Op.RETURN(0, Op.DATASIZE),\n                ),\n                Section.Data(data=return_data),\n            ]\n        )\n    )\n    address_entry_point = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=opcode(address=address_returner)\n                    + Op.SSTORE(slot_result_start, Op.RETURNDATALOAD(offset))\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                )\n            ]\n        )\n    )\n\n    result = [0] * 0x20\n    extent = 0x20 - max(0, 0x20 + offset - len(return_data))\n    if extent > 0 and len(return_data) > 0:\n        result[0:extent] = [return_data[0]] * extent\n    post = {\n        address_entry_point: Account(\n            storage={\n                slot_code_worked: value_code_worked,\n                slot_result_start: bytes(result),\n            }\n        )\n    }\n\n    tx = Transaction(to=address_entry_point, gas_limit=2_000_000, sender=sender)\n\n    state_test(\n        env=env,\n        pre=pre,\n        tx=tx,\n        post=post,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload/#tests.prague.eip7692_eof_v1.eip7069_extcall.test_returndataload.test_returndatacopy_oob","title":"test_returndatacopy_oob(state_test, pre, opcode)","text":"

    Extends the RETURNDATACOPY test for correct out-of-bounds behavior, by checking if the caller frame's context being EOF or legacy doesn't impact the execution logic of the RETURNDATACOPY instance under test.

    Source code in tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.CALL,\n        Op.EXTCALL,\n    ],\n)\ndef test_returndatacopy_oob(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    opcode: Op,\n):\n    \"\"\"\n    Extends the RETURNDATACOPY test for correct out-of-bounds behavior, by checking if the\n    caller frame's context being EOF or legacy doesn't impact the execution logic of the\n    RETURNDATACOPY instance under test.\n    \"\"\"\n    env = Environment()\n\n    sender = pre.fund_eoa()\n\n    # Both callee codes below make an OOB (out-of-bounds) RETURNDATACOPY of one byte,\n    # which they then attempt to return (Legacy should exceptionally halt on RETURNDATACOPY).\n    address_callee_eof = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RETURNDATACOPY(0, 0, 1) + Op.RETURN(0, 1),\n                    max_stack_height=3,\n                )\n            ]\n        )\n    )\n    address_callee_legacy = pre.deploy_contract(Op.RETURNDATACOPY(0, 0, 1) + Op.RETURN(0, 1))\n\n    # Caller code is selected to either be Legacy or EOF using params.\n    code_entry_point = (\n        Op.SSTORE(slot_eof_target_call_status, opcode(address=address_callee_eof))\n        + Op.SSTORE(slot_eof_target_returndatasize, Op.RETURNDATASIZE)\n        + Op.SSTORE(slot_eof_target_returndata, Op.RETURNDATACOPY(0, 0, 1) + Op.MLOAD(0))\n        + Op.SSTORE(\n            slot_legacy_target_call_status,\n            opcode(address=address_callee_legacy),\n        )\n        + Op.SSTORE(slot_legacy_target_returndatasize, Op.RETURNDATASIZE)\n        + Op.STOP\n    )\n\n    storage_entry_point = Storage(\n        {\n            slot_eof_target_call_status: value_exceptional_abort_canary,\n            slot_eof_target_returndata: value_exceptional_abort_canary,\n            slot_eof_target_returndatasize: value_exceptional_abort_canary,\n            slot_legacy_target_call_status: value_exceptional_abort_canary,\n            slot_legacy_target_returndatasize: value_exceptional_abort_canary,\n        }\n    )\n\n    address_entry_point = (\n        pre.deploy_contract(code=code_entry_point, storage=storage_entry_point)\n        if opcode == Op.CALL\n        else pre.deploy_contract(\n            Container(\n                sections=[\n                    Section.Code(\n                        code=code_entry_point,\n                        max_stack_height=4,\n                        storage=storage_entry_point,\n                    )\n                ]\n            )\n        )\n    )\n\n    tx = Transaction(to=address_entry_point, gas_limit=2_000_000, sender=sender)\n\n    post = {\n        address_entry_point: Account(\n            storage={\n                slot_eof_target_call_status: CALL_SUCCESS,\n                slot_eof_target_returndata: \"0x00\",\n                slot_eof_target_returndatasize: \"0x01\",\n                slot_legacy_target_call_status: CALL_FAILURE,\n                slot_legacy_target_returndatasize: \"0x00\",\n            }\n            if opcode == Op.CALL\n            else {\n                slot_eof_target_call_status: EXTCALL_SUCCESS,\n                slot_eof_target_returndata: \"0x00\",\n                slot_eof_target_returndatasize: \"0x01\",\n                slot_legacy_target_call_status: EXTCALL_FAILED,\n                slot_legacy_target_returndatasize: \"0x00\",\n            }\n        )\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload/index/test_cases/","title":"Test Returndataload - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py:

    test_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_10-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_20-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_30-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_0-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_10-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_20-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-blockchain_test_engine-size_30-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_0-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_10-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_20-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_0-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_0-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_0-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_0-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_0-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_10-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_10-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_10-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_10-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_10-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_20-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_20-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_20-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_20-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_20-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_30-opcode_CALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_30-opcode_CALLCODE]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_30-opcode_DELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_30-opcode_STATICCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_30-opcode_EXTCALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndatacopy_handling[fork_CancunEIP7692-state_test-size_30-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-blockchain_test_engine-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_0-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_10-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_20-len_30-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_0-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_0-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_0-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_10-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_10-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_10-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_20-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_20-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_20-opcode_EXTSTATICCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_30-opcode_EXTCALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_30-opcode_EXTDELEGATECALL]\ntest_returndataload_handling[fork_CancunEIP7692-state_test-offset_30-len_30-opcode_EXTSTATICCALL]\ntest_returndatacopy_oob[fork_CancunEIP7692-blockchain_test-opcode_CALL]\ntest_returndatacopy_oob[fork_CancunEIP7692-blockchain_test-opcode_EXTCALL]\ntest_returndatacopy_oob[fork_CancunEIP7692-blockchain_test_engine-opcode_CALL]\ntest_returndatacopy_oob[fork_CancunEIP7692-blockchain_test_engine-opcode_EXTCALL]\ntest_returndatacopy_oob[fork_CancunEIP7692-state_test-opcode_CALL]\ntest_returndatacopy_oob[fork_CancunEIP7692-state_test-opcode_EXTCALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/","title":"EIP-7480 Data Section","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7480_data_section.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7480_data_section --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7480_data_section --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Cross-client EVM Object Format Tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7480_data_section/spec.py.

    EOF V1 Constants used throughout all tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation/","title":"Test Code Validation","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF V1 Code Validation tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation/#tests.prague.eip7692_eof_v1.eip7480_data_section.test_code_validation.test_legacy_initcode_valid_eof_v1_contract","title":"test_legacy_initcode_valid_eof_v1_contract(eof_test, container)","text":"

    Test creating various types of valid EOF V1 contracts using legacy initcode and a contract creating transaction.

    Source code in tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py
    @pytest.mark.parametrize(\n    \"container\",\n    VALID,\n    ids=container_name,\n)\ndef test_legacy_initcode_valid_eof_v1_contract(\n    eof_test: EOFTestFiller,\n    container: Container,\n):\n    \"\"\"\n    Test creating various types of valid EOF V1 contracts using legacy\n    initcode and a contract creating transaction.\n    \"\"\"\n    assert (\n        container.validity_error is None\n    ), f\"Valid container with validity error: {container.validity_error}\"\n    eof_test(\n        data=container,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation/#tests.prague.eip7692_eof_v1.eip7480_data_section.test_code_validation.test_legacy_initcode_invalid_eof_v1_contract","title":"test_legacy_initcode_invalid_eof_v1_contract(eof_test, container)","text":"

    Test creating various types of valid EOF V1 contracts using legacy initcode and a contract creating transaction.

    Source code in tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py
    @pytest.mark.parametrize(\n    \"container\",\n    INVALID,\n    ids=container_name,\n)\ndef test_legacy_initcode_invalid_eof_v1_contract(\n    eof_test: EOFTestFiller,\n    container: Container,\n):\n    \"\"\"\n    Test creating various types of valid EOF V1 contracts using legacy\n    initcode and a contract creating transaction.\n    \"\"\"\n    assert container.validity_error is not None, \"Invalid container without validity error\"\n    eof_test(\n        data=container,\n        expect_exception=container.validity_error,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation/index/test_cases/","title":"Test Code Validation - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py:

    test_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-empty_data_section]\ntest_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-small_data_section]\ntest_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-large_data_section]\ntest_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-max_data_section]\ntest_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-DATALOADN_zero]\ntest_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-DATALOADN_middle]\ntest_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-DATALOADN_edge]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-DATALOADN_max_empty_data]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-DATALOADN_max_small_data]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-DATALOADN_max_half_data]\ntest_legacy_initcode_invalid_eof_v1_contract[fork_CancunEIP7692-eof_test-data_section_over_container_limit]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes/","title":"Test Data Opcodes","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Execution of DATA* opcodes within EOF V1 containers tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes/#tests.prague.eip7692_eof_v1.eip7480_data_section.test_data_opcodes.test_data_section_succeed","title":"test_data_section_succeed(state_test, pre, offset, datasize)","text":"

    Test simple contracts that are simply expected to succeed on call.

    Source code in tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py
    @pytest.mark.parametrize(\n    [\"offset\", \"datasize\"],\n    [\n        pytest.param(0, 0, id=\"empty_zero\"),\n        pytest.param(0, 2, id=\"short_zero\"),\n        pytest.param(0, 32, id=\"exact_zero\"),\n        pytest.param(0, 64, id=\"large_zero\"),\n        pytest.param(32, 0, id=\"empty_32\"),\n        pytest.param(32, 34, id=\"short_32\"),\n        pytest.param(32, 64, id=\"exact_32\"),\n        pytest.param(32, 96, id=\"large_32\"),\n        pytest.param(0x5BFE, 0, id=\"empty_23k\"),\n        pytest.param(0x5BFE, 0x5C00, id=\"short_23k\"),\n        pytest.param(0x5BE0, 0x5D00, id=\"exact_23k\"),\n        pytest.param(0x2345, 0x5C00, id=\"large_23k\"),\n    ],\n)\ndef test_data_section_succeed(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    offset: int,\n    datasize: int,\n):\n    \"\"\"\n    Test simple contracts that are simply expected to succeed on call.\n    \"\"\"\n    env = Environment()\n\n    (container, expected_storage) = create_data_test(offset, datasize)\n    callee_contract = pre.deploy_contract(code=container)\n    entry_point = pre.deploy_contract(\n        code=Op.SSTORE(0, Op.DELEGATECALL(Op.GAS, callee_contract, 0, 0, 0, 0)) + Op.STOP()\n    )\n    sender = pre.fund_eoa()\n\n    tx = Transaction(\n        to=entry_point,\n        gas_limit=50000000,\n        gas_price=10,\n        protected=False,\n        data=\"\",\n        sender=sender,\n    )\n\n    post = {entry_point: Account(storage=expected_storage)}\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes/index/test_cases/","title":"Test Data Opcodes - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py:

    test_data_section_succeed[fork_CancunEIP7692-blockchain_test-empty_zero]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-short_zero]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-exact_zero]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-large_zero]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-empty_32]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-short_32]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-exact_32]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-large_32]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-empty_23k]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-short_23k]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-exact_23k]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test-large_23k]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-empty_zero]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-short_zero]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-exact_zero]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-large_zero]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-empty_32]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-short_32]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-exact_32]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-large_32]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-empty_23k]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-short_23k]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-exact_23k]\ntest_data_section_succeed[fork_CancunEIP7692-blockchain_test_engine-large_23k]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-empty_zero]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-short_zero]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-exact_zero]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-large_zero]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-empty_32]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-short_32]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-exact_32]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-large_32]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-empty_23k]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-short_23k]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-exact_23k]\ntest_data_section_succeed[fork_CancunEIP7692-state_test-large_23k]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion/","title":"Test Datacopy Memory Expansion","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Memory expansion tests for DATACOPY

    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion/#tests.prague.eip7692_eof_v1.eip7480_data_section.test_datacopy_memory_expansion.test_datacopy_memory_expansion","title":"test_datacopy_memory_expansion(state_test, env, pre, post, tx)","text":"

    Perform DATACOPY operations that expand the memory, and verify the gas it costs to do so.

    Source code in tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py
    @pytest.mark.parametrize(\n    \"dest,src,length\",\n    [\n        (0x00, 0x00, 0x01),\n        (0x100, 0x00, 0x01),\n        (0x1F, 0x00, 0x01),\n        (0x20, 0x00, 0x01),\n        (0x1000, 0x00, 0x01),\n        (0x1000, 0x00, 0x40),\n        (0x00, 0x00, 0x00),\n        (2**256 - 1, 0x00, 0x00),\n        (0x00, 2**256 - 1, 0x00),\n        (2**256 - 1, 2**256 - 1, 0x00),\n    ],\n    ids=[\n        \"single_byte_expansion\",\n        \"single_byte_expansion_2\",\n        \"single_byte_expansion_word_boundary\",\n        \"single_byte_expansion_word_boundary_2\",\n        \"multi_word_expansion\",\n        \"multi_word_expansion_2\",\n        \"zero_length_expansion\",\n        \"huge_dest_zero_length\",\n        \"huge_src_zero_length\",\n        \"huge_dest_huge_src_zero_length\",\n    ],\n)\n@pytest.mark.parametrize(\"successful\", [True, False])\n@pytest.mark.parametrize(\n    \"initial_memory\",\n    [\n        bytes(range(0x00, 0x100)),\n        bytes(),\n    ],\n    ids=[\n        \"from_existent_memory\",\n        \"from_empty_memory\",\n    ],\n)\n@pytest.mark.parametrize(\n    \"data_section\",\n    [\n        bytes(),\n        b\"\\xfc\",\n        bytes(range(0x00, 0x20)),\n        bytes(range(0x00, 0x100)),\n    ],\n    ids=[\"empty_data_section\", \"byte_data_section\", \"word_data_section\", \"large_data_section\"],\n)\ndef test_datacopy_memory_expansion(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    post: Mapping[str, Account],\n    tx: Transaction,\n):\n    \"\"\"\n    Perform DATACOPY operations that expand the memory, and verify the gas it costs to do so.\n    \"\"\"\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion/#tests.prague.eip7692_eof_v1.eip7480_data_section.test_datacopy_memory_expansion.test_datacopy_huge_memory_expansion","title":"test_datacopy_huge_memory_expansion(state_test, env, pre, post, tx)","text":"

    Perform DATACOPY operations that expand the memory by huge amounts, and verify that it correctly runs out of gas.

    Source code in tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py
    @pytest.mark.parametrize(\n    \"dest,src,length\",\n    [\n        (2**256 - 1, 0x00, 0x01),\n        (2**256 - 2, 0x00, 0x01),\n        (2**255 - 1, 0x00, 0x01),\n        (0x00, 0x00, 2**256 - 1),\n        (0x00, 0x00, 2**256 - 2),\n        (0x00, 0x00, 2**255 - 1),\n    ],\n    ids=[\n        \"max_dest_single_byte_expansion\",\n        \"max_dest_minus_one_single_byte_expansion\",\n        \"half_max_dest_single_byte_expansion\",\n        \"max_length_expansion\",\n        \"max_length_minus_one_expansion\",\n        \"half_max_length_expansion\",\n    ],\n)\n@pytest.mark.parametrize(\n    \"subcall_exact_cost\",\n    [2**128 - 1],\n    ids=[\"\"],\n)  # Limit subcall gas, otherwise it would be impossibly large\n@pytest.mark.parametrize(\"successful\", [False])\n@pytest.mark.parametrize(\n    \"initial_memory\",\n    [\n        bytes(range(0x00, 0x100)),\n        bytes(),\n    ],\n    ids=[\n        \"from_existent_memory\",\n        \"from_empty_memory\",\n    ],\n)\n@pytest.mark.parametrize(\n    \"data_section\",\n    [\n        bytes(),\n        b\"\\xfc\",\n        bytes(range(0x00, 0x20)),\n        bytes(range(0x00, 0x100)),\n    ],\n    ids=[\"empty_data_section\", \"byte_data_section\", \"word_data_section\", \"large_data_section\"],\n)\ndef test_datacopy_huge_memory_expansion(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Mapping[str, Account],\n    post: Mapping[str, Account],\n    tx: Transaction,\n):\n    \"\"\"\n    Perform DATACOPY operations that expand the memory by huge amounts, and verify that it\n    correctly runs out of gas.\n    \"\"\"\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion/index/test_cases/","title":"Test Datacopy Memory Expansion - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py:

    test_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_True-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_True-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_True-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_True-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_True-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_True-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_True-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False-single_byte_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False-single_byte_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False-multi_word_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False-multi_word_expansion_2]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False-zero_length_expansion]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False-huge_dest_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False-huge_src_zero_length]\ntest_datacopy_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-byte_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-word_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test-large_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-empty_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-byte_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-word_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-blockchain_test_engine-large_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-empty_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-byte_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-word_data_section-from_empty_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_existent_memory-successful_False--half_max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False--max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False--max_length_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False--max_length_minus_one_expansion]\ntest_datacopy_huge_memory_expansion[fork_CancunEIP7692-state_test-large_data_section-from_empty_memory-successful_False--half_max_length_expansion]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/","title":"EIP-7620 Eof Create","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOFCREATE, RETURNCONTRACT, and container tests

    evmone tests not ported

    create_tx_with_eof_initcode - This calls it invalid, it is now the way to add EOF contacts to state eofcreate_extcall_returncontract - per the new initcode mode tests you cannot have RETURNCONTRACT in a deployed contract eofcreate_dataloadn_referring_to_auxdata - covered by tests.prague.eip7480_data_section.test_data_opcodes.test_data_section_succeed eofcreate_initcontainer_return - RETURN is banned in initcode containers eofcreate_initcontainer_stop - STOP is banned in initcode containers All TXCREATE tests - TXCREATE has been removed from Prague

    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/spec.py.

    EOF V1 Constants used throughout all tests

    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/","title":"Test Eofcreate","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Test good and bad EOFCREATE cases

    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate.test_simple_eofcreate","title":"test_simple_eofcreate(state_test, pre)","text":"

    Verifies a simple EOFCREATE case

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py
    def test_simple_eofcreate(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Verifies a simple EOFCREATE case\n    \"\"\"\n    env = Environment()\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(0, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.STOP,\n                ),\n                Section.Container(container=smallest_initcode_subcontainer),\n            ],\n            data=b\"abcdef\",\n        ),\n        storage={0: 0xB17D},  # a canary to be overwritten\n    )\n    # Storage in 0 should have the address,\n    post = {\n        contract_address: Account(\n            storage={\n                0: compute_eofcreate_address(contract_address, 0, smallest_initcode_subcontainer)\n            }\n        )\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate.test_eofcreate_then_call","title":"test_eofcreate_then_call(state_test, pre)","text":"

    Verifies a simple EOFCREATE case, and then calls the deployed contract

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py
    def test_eofcreate_then_call(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Verifies a simple EOFCREATE case, and then calls the deployed contract\n    \"\"\"\n    env = Environment()\n    callable_contract = Container(\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_code_worked, value_code_worked) + Op.STOP,\n            ),\n        ]\n    )\n    callable_contract_initcode = Container(\n        sections=[\n            Section.Code(\n                code=Op.RETURNCONTRACT[0](0, 0),\n            ),\n            Section.Container(container=callable_contract),\n        ]\n    )\n\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                    + Op.EXTCALL(Op.SLOAD(slot_create_address), 0, 0, 0)\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                ),\n                Section.Container(container=callable_contract_initcode),\n            ],\n        )\n    )\n\n    callable_address = compute_eofcreate_address(contract_address, 0, callable_contract_initcode)\n\n    # Storage in 0 should have the address,\n    #\n    post = {\n        contract_address: Account(\n            storage={slot_create_address: callable_address, slot_code_worked: value_code_worked}\n        ),\n        callable_address: Account(storage={slot_code_worked: value_code_worked}),\n    }\n\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate.test_auxdata_variations","title":"test_auxdata_variations(state_test, pre, auxdata_bytes)","text":"

    Verifies that auxdata bytes are correctly handled in RETURNCONTRACT

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py
    @pytest.mark.parametrize(\n    \"auxdata_bytes\",\n    [\n        pytest.param(b\"\", id=\"zero\"),\n        pytest.param(b\"aabbcc\", id=\"short\"),\n        pytest.param(b\"aabbccddeef\", id=\"one_byte_short\"),\n        pytest.param(b\"aabbccddeeff\", id=\"exact\"),\n        pytest.param(b\"aabbccddeeffg\", id=\"one_byte_long\"),\n        pytest.param(b\"aabbccddeeffgghhii\", id=\"extra\"),\n    ],\n)\ndef test_auxdata_variations(state_test: StateTestFiller, pre: Alloc, auxdata_bytes: bytes):\n    \"\"\"\n    Verifies that auxdata bytes are correctly handled in RETURNCONTRACT\n    \"\"\"\n    env = Environment()\n    auxdata_size = len(auxdata_bytes)\n    pre_deploy_header_data_size = 18\n    pre_deploy_data = b\"AABBCC\"\n    deploy_success = len(auxdata_bytes) + len(pre_deploy_data) >= pre_deploy_header_data_size\n\n    runtime_subcontainer = Container(\n        name=\"Runtime Subcontainer with truncated data\",\n        sections=[\n            Section.Code(code=Op.STOP),\n            Section.Data(data=pre_deploy_data, custom_size=pre_deploy_header_data_size),\n        ],\n    )\n\n    initcode_subcontainer = Container(\n        name=\"Initcode Subcontainer\",\n        sections=[\n            Section.Code(\n                code=Op.MSTORE(0, Op.PUSH32(auxdata_bytes.ljust(32, b\"\\0\")))\n                + Op.RETURNCONTRACT[0](0, auxdata_size),\n            ),\n            Section.Container(container=runtime_subcontainer),\n        ],\n    )\n\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0)) + Op.STOP,\n                ),\n                Section.Container(container=initcode_subcontainer),\n            ]\n        ),\n        storage={slot_create_address: value_canary_to_be_overwritten},\n    )\n\n    # Storage in 0 should have the address,\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: compute_eofcreate_address(\n                    contract_address, 0, initcode_subcontainer\n                )\n                if deploy_success\n                else b\"\\0\"\n            }\n        )\n    }\n\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate.test_calldata","title":"test_calldata(state_test, pre)","text":"

    Verifies CALLDATA passing through EOFCREATE

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py
    def test_calldata(state_test: StateTestFiller, pre: Alloc):\n    \"\"\"\n    Verifies CALLDATA passing through EOFCREATE\n    \"\"\"\n    env = Environment()\n\n    initcode_subcontainer = Container(\n        name=\"Initcode Subcontainer\",\n        sections=[\n            Section.Code(\n                code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n                + Op.SSTORE(slot_calldata, Op.MLOAD(0))\n                + Op.RETURNCONTRACT[0](0, Op.CALLDATASIZE),\n            ),\n            Section.Container(container=smallest_runtime_subcontainer),\n        ],\n    )\n\n    calldata_size = 32\n    calldata = b\"\\x45\" * calldata_size\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.MSTORE(0, Op.PUSH32(calldata))\n                    + Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, calldata_size))\n                    + Op.STOP,\n                ),\n                Section.Container(container=initcode_subcontainer),\n            ]\n        )\n    )\n\n    # deployed contract is smallest plus data\n    deployed_contract = Container(\n        name=\"deployed contract\",\n        sections=[\n            *smallest_runtime_subcontainer.sections,\n            Section.Data(data=calldata),\n        ],\n    )\n    # factory contract Storage in 0 should have the created address,\n    # created contract storage in 0 should have the calldata\n    created_address = compute_eofcreate_address(contract_address, 0, initcode_subcontainer)\n    post = {\n        contract_address: Account(storage={slot_create_address: created_address}),\n        created_address: Account(code=deployed_contract, storage={slot_calldata: calldata}),\n    }\n\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate.test_eofcreate_in_initcode","title":"test_eofcreate_in_initcode(state_test, pre)","text":"

    Verifies an EOFCREATE occuring within initcode creates that contract

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py
    def test_eofcreate_in_initcode(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Verifies an EOFCREATE occuring within initcode creates that contract\n    \"\"\"\n    nested_initcode_subcontainer = Container(\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                + Op.SSTORE(slot_code_worked, value_code_worked)\n                + Op.RETURNCONTRACT[1](0, 0),\n            ),\n            Section.Container(container=smallest_initcode_subcontainer),\n            Section.Container(container=smallest_runtime_subcontainer),\n        ]\n    )\n\n    env = Environment()\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                ),\n                Section.Container(container=nested_initcode_subcontainer),\n            ]\n        )\n    )\n\n    outer_address = compute_eofcreate_address(contract_address, 0, nested_initcode_subcontainer)\n    inner_address = compute_eofcreate_address(outer_address, 0, smallest_initcode_subcontainer)\n    post = {\n        contract_address: Account(\n            storage={slot_create_address: outer_address, slot_code_worked: value_code_worked}\n        ),\n        outer_address: Account(\n            storage={slot_create_address: inner_address, slot_code_worked: value_code_worked}\n        ),\n    }\n\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate.test_eofcreate_in_initcode_reverts","title":"test_eofcreate_in_initcode_reverts(state_test, pre)","text":"

    Verifies an EOFCREATE occuring in an initcode is rolled back when the initcode reverts

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py
    def test_eofcreate_in_initcode_reverts(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Verifies an EOFCREATE occuring in an initcode is rolled back when the initcode reverts\n    \"\"\"\n    nested_initcode_subcontainer = Container(\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                + Op.SSTORE(slot_code_worked, value_code_worked)\n                + Op.REVERT(0, 0),\n            ),\n            Section.Container(container=smallest_initcode_subcontainer),\n        ]\n    )\n\n    env = Environment()\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                ),\n                Section.Container(container=nested_initcode_subcontainer),\n            ]\n        ),\n        storage={slot_create_address: value_canary_to_be_overwritten},\n    )\n\n    outer_address = compute_eofcreate_address(contract_address, 0, nested_initcode_subcontainer)\n    inner_address = compute_eofcreate_address(outer_address, 0, smallest_initcode_subcontainer)\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: 0,\n                slot_code_worked: value_code_worked,\n            }\n        ),\n        outer_address: Account.NONEXISTENT,\n        inner_address: Account.NONEXISTENT,\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate.test_return_data_cleared","title":"test_return_data_cleared(state_test, pre)","text":"

    Verifies the return data is not re-used from a extcall but is cleared upon eofcreate

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py
    def test_return_data_cleared(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Verifies the return data is not re-used from a extcall but is cleared upon eofcreate\n    \"\"\"\n    env = Environment()\n    value_return_canary = 0x4158675309\n    value_return_canary_size = 5\n    callable_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.MSTORE(0, value_return_canary)\n                    + Op.RETURN(0, value_return_canary_size),\n                )\n            ]\n        )\n    )\n\n    slot_returndata_size_2 = slot_last_slot * 2 + slot_returndata_size\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_call_result, Op.EXTCALL(callable_address, 0, 0, 0))\n                    + Op.SSTORE(slot_returndata_size, Op.RETURNDATASIZE)\n                    + Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                    + Op.SSTORE(slot_returndata_size_2, Op.RETURNDATASIZE)\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                ),\n                Section.Container(container=smallest_initcode_subcontainer),\n            ],\n        )\n    )\n\n    new_contract_address = compute_eofcreate_address(\n        contract_address, 0, smallest_initcode_subcontainer\n    )\n    post = {\n        contract_address: Account(\n            storage={\n                slot_call_result: value_eof_call_result_success,\n                slot_returndata_size: value_return_canary_size,\n                slot_create_address: new_contract_address,\n                slot_returndata_size_2: 0,\n                slot_code_worked: value_code_worked,\n            },\n            nonce=2,\n        ),\n        callable_address: Account(nonce=1),\n        new_contract_address: Account(nonce=1),\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate.test_address_collision","title":"test_address_collision(state_test, pre)","text":"

    Verifies a simple EOFCREATE case

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py
    def test_address_collision(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Verifies a simple EOFCREATE case\n    \"\"\"\n    env = Environment()\n\n    slot_create_address_2 = slot_last_slot * 2 + slot_create_address\n    slot_create_address_3 = slot_last_slot * 3 + slot_create_address\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                    + Op.SSTORE(slot_create_address_2, Op.EOFCREATE[0](0, 0, 0, 0))\n                    + Op.SSTORE(slot_create_address_3, Op.EOFCREATE[0](0, 1, 0, 0))\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                ),\n                Section.Container(container=smallest_initcode_subcontainer),\n            ],\n        )\n    )\n    salt_zero_address = compute_eofcreate_address(\n        contract_address, 0, smallest_initcode_subcontainer\n    )\n    salt_one_address = compute_eofcreate_address(\n        contract_address, 1, smallest_initcode_subcontainer\n    )\n\n    # Hard-code address for collision, no other way to do this.\n    # We should mark tests that do this, and fail on unmarked tests.\n    pre[salt_one_address] = Account(balance=1, nonce=1)\n\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: salt_zero_address,\n                slot_create_address_2: value_create_failed,  # had an in-transaction collision\n                slot_create_address_3: value_create_failed,  # had a pre-existing collision\n                slot_code_worked: value_code_worked,\n            }\n        )\n    }\n\n    # Multiple create fails is expensive, use an absurd amount of gas\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=300_000_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate.test_eofcreate_revert_eof_returndata","title":"test_eofcreate_revert_eof_returndata(state_test, pre)","text":"

    Verifies the return data is not being deployed, even if happens to be valid EOF

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py
    def test_eofcreate_revert_eof_returndata(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Verifies the return data is not being deployed, even if happens to be valid EOF\n    \"\"\"\n    env = Environment()\n    code_reverts_with_calldata = Container(\n        name=\"Initcode Subcontainer reverting with its calldata\",\n        sections=[\n            Section.Code(\n                code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.REVERT(0, Op.CALLDATASIZE),\n            ),\n        ],\n    )\n\n    sender = pre.fund_eoa()\n    salt = 0\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n                    + Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, salt, 0, Op.CALLDATASIZE))\n                    + Op.SSTORE(slot_returndata_size, Op.RETURNDATASIZE)\n                    + Op.STOP,\n                ),\n                Section.Container(container=code_reverts_with_calldata),\n            ],\n        ),\n        storage={slot_create_address: value_canary_to_be_overwritten},\n    )\n    eof_create_address = compute_eofcreate_address(\n        contract_address, salt, code_reverts_with_calldata\n    )\n\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: 0,\n                slot_returndata_size: len(smallest_runtime_subcontainer),\n            },\n        ),\n        eof_create_address: Account.NONEXISTENT,\n    }\n\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=1_000_000,\n        sender=sender,\n        # Simplest possible valid EOF container, which is going to be\n        # revert-returned from initcode and must not end up being deployed.\n        data=smallest_runtime_subcontainer,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate.test_eofcreate_invalid_index","title":"test_eofcreate_invalid_index(eof_test, index)","text":"

    Referring to non-existent container section index

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py
    @pytest.mark.parametrize(\"index\", [1, 255], ids=lambda x: x)\ndef test_eofcreate_invalid_index(\n    eof_test: EOFTestFiller,\n    index: int,\n):\n    \"\"\"Referring to non-existent container section index\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.EOFCREATE[index](0, 0, 0, 0) + Op.STOP,\n                ),\n                Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)])),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_CONTAINER_SECTION_INDEX,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/index/test_cases/","title":"Test Eofcreate - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py:

    test_simple_eofcreate[fork_CancunEIP7692-blockchain_test]\ntest_simple_eofcreate[fork_CancunEIP7692-blockchain_test_engine]\ntest_simple_eofcreate[fork_CancunEIP7692-state_test]\ntest_eofcreate_then_call[fork_CancunEIP7692-blockchain_test]\ntest_eofcreate_then_call[fork_CancunEIP7692-blockchain_test_engine]\ntest_eofcreate_then_call[fork_CancunEIP7692-state_test]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test-zero]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test-short]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test-one_byte_short]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test-exact]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test-one_byte_long]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test-extra]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test_engine-zero]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test_engine-short]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test_engine-one_byte_short]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test_engine-exact]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test_engine-one_byte_long]\ntest_auxdata_variations[fork_CancunEIP7692-blockchain_test_engine-extra]\ntest_auxdata_variations[fork_CancunEIP7692-state_test-zero]\ntest_auxdata_variations[fork_CancunEIP7692-state_test-short]\ntest_auxdata_variations[fork_CancunEIP7692-state_test-one_byte_short]\ntest_auxdata_variations[fork_CancunEIP7692-state_test-exact]\ntest_auxdata_variations[fork_CancunEIP7692-state_test-one_byte_long]\ntest_auxdata_variations[fork_CancunEIP7692-state_test-extra]\ntest_calldata[fork_CancunEIP7692-blockchain_test]\ntest_calldata[fork_CancunEIP7692-blockchain_test_engine]\ntest_calldata[fork_CancunEIP7692-state_test]\ntest_eofcreate_in_initcode[fork_CancunEIP7692-blockchain_test]\ntest_eofcreate_in_initcode[fork_CancunEIP7692-blockchain_test_engine]\ntest_eofcreate_in_initcode[fork_CancunEIP7692-state_test]\ntest_eofcreate_in_initcode_reverts[fork_CancunEIP7692-blockchain_test]\ntest_eofcreate_in_initcode_reverts[fork_CancunEIP7692-blockchain_test_engine]\ntest_eofcreate_in_initcode_reverts[fork_CancunEIP7692-state_test]\ntest_return_data_cleared[fork_CancunEIP7692-blockchain_test]\ntest_return_data_cleared[fork_CancunEIP7692-blockchain_test_engine]\ntest_return_data_cleared[fork_CancunEIP7692-state_test]\ntest_address_collision[fork_CancunEIP7692-blockchain_test]\ntest_address_collision[fork_CancunEIP7692-blockchain_test_engine]\ntest_address_collision[fork_CancunEIP7692-state_test]\ntest_eofcreate_revert_eof_returndata[fork_CancunEIP7692-blockchain_test]\ntest_eofcreate_revert_eof_returndata[fork_CancunEIP7692-blockchain_test_engine]\ntest_eofcreate_revert_eof_returndata[fork_CancunEIP7692-state_test]\ntest_eofcreate_invalid_index[fork_CancunEIP7692-eof_test-1]\ntest_eofcreate_invalid_index[fork_CancunEIP7692-eof_test-255]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/","title":"Test Eofcreate Failures","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Test good and bad EOFCREATE cases

    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_initcode_revert","title":"test_initcode_revert(state_test, pre, revert)","text":"

    Verifies proper handling of REVERT in initcode

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    @pytest.mark.parametrize(\n    \"revert\",\n    [\n        pytest.param(b\"\", id=\"empty\"),\n        pytest.param(b\"\\x08\\xc3\\x79\\xa0\", id=\"Error(string)\"),\n    ],\n)\ndef test_initcode_revert(state_test: StateTestFiller, pre: Alloc, revert: bytes):\n    \"\"\"\n    Verifies proper handling of REVERT in initcode\n    \"\"\"\n    env = Environment()\n    revert_size = len(revert)\n\n    initcode_subcontainer = Container(\n        name=\"Initcode Subcontainer that reverts\",\n        sections=[\n            Section.Code(\n                code=Op.MSTORE(0, Op.PUSH32(revert)) + Op.REVERT(32 - revert_size, revert_size),\n            ),\n        ],\n    )\n\n    factory_contract = Container(\n        name=\"factory contract\",\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                + Op.SSTORE(slot_returndata_size, Op.RETURNDATASIZE)\n                + Op.RETURNDATACOPY(Op.SUB(32, Op.RETURNDATASIZE), 0, Op.RETURNDATASIZE)\n                + Op.SSTORE(slot_returndata, Op.MLOAD(0))\n                + Op.SSTORE(slot_code_worked, value_code_worked)\n                + Op.STOP,\n            ),\n            Section.Container(container=initcode_subcontainer),\n        ],\n    )\n\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(code=factory_contract)\n\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: value_create_failed,\n                slot_returndata_size: revert_size,\n                slot_returndata: revert,\n                slot_code_worked: value_code_worked,\n            }\n        )\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_initcode_aborts","title":"test_initcode_aborts(state_test, pre)","text":"

    Verifies correct handling of a halt in EOF initcode

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    def test_initcode_aborts(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Verifies correct handling of a halt in EOF initcode\n    \"\"\"\n    env = Environment()\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                ),\n                Section.Container(container=aborting_container),\n            ]\n        )\n    )\n    # Storage in slot_create_address should not have the address,\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: value_create_failed,\n                slot_code_worked: value_code_worked,\n            }\n        )\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_eofcreate_deploy_sizes","title":"test_eofcreate_deploy_sizes(state_test, pre, target_deploy_size)","text":"

    Verifies a mix of runtime contract sizes mixing success and multiple size failure modes.

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    @pytest.mark.parametrize(\n    \"target_deploy_size\",\n    [\n        pytest.param(0x4000, id=\"large\"),\n        pytest.param(MAX_BYTECODE_SIZE, id=\"max\"),\n        pytest.param(MAX_BYTECODE_SIZE + 1, id=\"overmax\"),\n        pytest.param(MAX_INITCODE_SIZE - factory_size, id=\"initcodemax\"),\n        pytest.param(\n            MAX_INITCODE_SIZE - factory_size + 1,\n            id=\"initcodeovermax\",\n            marks=pytest.mark.skip(\"Oversized container in pre-alloc\"),\n        ),\n        pytest.param(\n            0xFFFF - factory_size,\n            id=\"64k-1\",\n            marks=pytest.mark.skip(\"Oversized container in pre-alloc\"),\n        ),\n    ],\n)\ndef test_eofcreate_deploy_sizes(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    target_deploy_size: int,\n):\n    \"\"\"\n    Verifies a mix of runtime contract sizes mixing success and multiple size failure modes.\n    \"\"\"\n    env = Environment()\n\n    runtime_container = Container(\n        sections=[\n            Section.Code(\n                code=Op.JUMPDEST * (target_deploy_size - len(smallest_runtime_subcontainer))\n                + Op.STOP,\n            ),\n        ]\n    )\n\n    initcode_subcontainer = Container(\n        name=\"Initcode Subcontainer\",\n        sections=[\n            Section.Code(\n                code=Op.RETURNCONTRACT[0](0, 0),\n            ),\n            Section.Container(container=runtime_container),\n        ],\n    )\n\n    factory_container = Container(\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                + Op.SSTORE(slot_code_worked, value_code_worked)\n                + Op.STOP,\n            ),\n            Section.Container(container=initcode_subcontainer),\n        ]\n    )\n\n    assert factory_size == (\n        len(factory_container) - len(runtime_container)\n    ), \"factory_size is wrong, expected factory_size is %d, calculated is %d\" % (\n        factory_size,\n        len(factory_container),\n    )\n\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(code=factory_container)\n    # Storage in 0 should have the address,\n    # Storage 1 is a canary of 1 to make sure it tried to execute, which also covers cases of\n    #   data+code being greater than initcode_size_max, which is allowed.\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: compute_eofcreate_address(\n                    contract_address, 0, initcode_subcontainer\n                )\n                if target_deploy_size <= MAX_BYTECODE_SIZE\n                else value_create_failed,\n                slot_code_worked: value_code_worked,\n            }\n        )\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_eofcreate_deploy_sizes_tx","title":"test_eofcreate_deploy_sizes_tx(state_test, target_deploy_size)","text":"

    Verifies a mix of runtime contract sizes mixing success and multiple size failure modes where the initcontainer is included in a transaction

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    @pytest.mark.parametrize(\n    \"target_deploy_size\",\n    [\n        pytest.param(0x4000, id=\"large\"),\n        pytest.param(MAX_BYTECODE_SIZE, id=\"max\"),\n        pytest.param(MAX_BYTECODE_SIZE + 1, id=\"overmax\"),\n        pytest.param(MAX_INITCODE_SIZE - factory_size, id=\"initcodemax\"),\n        pytest.param(MAX_INITCODE_SIZE - factory_size + 1, id=\"initcodeovermax\"),\n        pytest.param(0xFFFF - factory_size, id=\"64k-1\"),\n    ],\n)\n@pytest.mark.skip(\"Not implemented\")\ndef test_eofcreate_deploy_sizes_tx(\n    state_test: StateTestFiller,\n    target_deploy_size: int,\n):\n    \"\"\"\n    Verifies a mix of runtime contract sizes mixing success and multiple size failure modes\n    where the initcontainer is included in a transaction\n    \"\"\"\n    raise NotImplementedError(\"Not implemented\")\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_auxdata_size_failures","title":"test_auxdata_size_failures(state_test, pre, auxdata_size)","text":"

    Exercises a number of auxdata size violations, and one maxcode success

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    @pytest.mark.parametrize(\n    \"auxdata_size\",\n    [\n        pytest.param(MAX_BYTECODE_SIZE - len(smallest_runtime_subcontainer), id=\"maxcode\"),\n        pytest.param(MAX_BYTECODE_SIZE - len(smallest_runtime_subcontainer) + 1, id=\"overmaxcode\"),\n        pytest.param(0x10000 - 60, id=\"almost64k\"),\n        pytest.param(0x10000 - 1, id=\"64k-1\"),\n        pytest.param(0x10000, id=\"64k\"),\n        pytest.param(0x10000 + 1, id=\"over64k\"),\n    ],\n)\ndef test_auxdata_size_failures(state_test: StateTestFiller, pre: Alloc, auxdata_size: int):\n    \"\"\"\n    Exercises a number of auxdata size violations, and one maxcode success\n    \"\"\"\n    env = Environment()\n    auxdata_bytes = b\"a\" * auxdata_size\n\n    initcode_subcontainer = Container(\n        name=\"Initcode Subcontainer\",\n        sections=[\n            Section.Code(\n                code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n                + Op.RETURNCONTRACT[0](0, Op.CALLDATASIZE),\n            ),\n            Section.Container(container=smallest_runtime_subcontainer),\n        ],\n    )\n\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n                    + Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, Op.CALLDATASIZE))\n                    + Op.SSTORE(slot_code_worked, value_code_worked)\n                    + Op.STOP,\n                ),\n                Section.Container(container=initcode_subcontainer),\n            ]\n        )\n    )\n\n    deployed_container_size = len(smallest_runtime_subcontainer) + auxdata_size\n\n    # Storage in 0 will have address in first test, 0 in all other cases indicating failure\n    # Storage 1 in 1 is a canary to see if EOFCREATE opcode halted\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: compute_eofcreate_address(\n                    contract_address, 0, initcode_subcontainer\n                )\n                if deployed_container_size <= MAX_BYTECODE_SIZE\n                else 0,\n                slot_code_worked: value_code_worked,\n            }\n        )\n    }\n\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n        data=auxdata_bytes,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_eofcreate_insufficient_stipend","title":"test_eofcreate_insufficient_stipend(state_test, pre, value)","text":"

    Exercises an EOFCREATE that fails because the calling account does not have enough ether to pay the stipend

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    @pytest.mark.parametrize(\n    \"value\",\n    [\n        pytest.param(1, id=\"1_wei\"),\n        pytest.param(10**9, id=\"1_gwei\"),\n    ],\n)\ndef test_eofcreate_insufficient_stipend(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    value: int,\n):\n    \"\"\"\n    Exercises an EOFCREATE that fails because the calling account does not have enough ether to\n    pay the stipend\n    \"\"\"\n    env = Environment()\n    initcode_container = Container(\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](value, 0, 0, 0))\n                + Op.SSTORE(slot_code_worked, value_code_worked)\n                + Op.STOP,\n            ),\n            Section.Container(container=smallest_initcode_subcontainer),\n        ]\n    )\n    sender = pre.fund_eoa(10**11)\n    contract_address = pre.deploy_contract(\n        code=initcode_container,\n        balance=value - 1,\n    )\n    # create will fail but not trigger a halt, so canary at storage 1 should be set\n    # also validate target created contract fails\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: value_create_failed,\n                slot_code_worked: value_code_worked,\n            }\n        ),\n        compute_eofcreate_address(contract_address, 0, initcode_container): Account.NONEXISTENT,\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_insufficient_initcode_gas","title":"test_insufficient_initcode_gas(state_test, pre)","text":"

    Excercises an EOFCREATE when there is not enough gas for the initcode charge

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    def test_insufficient_initcode_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Excercises an EOFCREATE when there is not enough gas for the initcode charge\n    \"\"\"\n    env = Environment()\n\n    initcode_data = b\"a\" * 0x5000\n    initcode_container = Container(\n        name=\"Large Initcode Subcontainer\",\n        sections=[\n            Section.Code(\n                code=Op.RETURNCONTRACT[0](0, 0),\n            ),\n            Section.Container(container=smallest_runtime_subcontainer),\n            Section.Data(data=initcode_data),\n        ],\n    )\n\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                    + Op.SSTORE(slot_code_should_fail, value_code_worked)\n                    + Op.STOP,\n                ),\n                Section.Container(container=initcode_container),\n            ],\n        ),\n        storage={\n            slot_create_address: value_canary_should_not_change,\n            slot_code_should_fail: value_canary_should_not_change,\n        },\n    )\n    # enough gas for everything but EVM opcodes and EIP-150 reserves\n    gas_limit = 21_000 + 32_000 + (len(initcode_data) + 31) // 32 * 6\n    # out_of_gas is triggered, so canary won't set value\n    # also validate target created contract fails\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: value_canary_should_not_change,\n                slot_code_should_fail: value_canary_should_not_change,\n            },\n        ),\n        compute_eofcreate_address(contract_address, 0, initcode_container): Account.NONEXISTENT,\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=gas_limit,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_insufficient_gas_memory_expansion","title":"test_insufficient_gas_memory_expansion(state_test, pre)","text":"

    Excercises an EOFCREATE when the memory for auxdata has not been expanded but is requested

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    def test_insufficient_gas_memory_expansion(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Excercises an EOFCREATE when the memory for auxdata has not been expanded but is requested\n    \"\"\"\n    env = Environment()\n\n    auxdata_size = 0x5000\n    initcode_container = Container(\n        sections=[\n            Section.Code(\n                code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, auxdata_size))\n                + Op.SSTORE(slot_code_should_fail, slot_code_worked)\n                + Op.STOP,\n            ),\n            Section.Container(container=smallest_initcode_subcontainer),\n        ],\n    )\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=initcode_container,\n        storage={\n            slot_create_address: value_canary_should_not_change,\n            slot_code_should_fail: value_canary_should_not_change,\n        },\n    )\n    # enough gas for everything but EVM opcodes and EIP-150 reserves\n    initcode_container_words = (len(initcode_container) + 31) // 32\n    auxdata_size_words = (auxdata_size + 31) // 32\n    gas_limit = (\n        21_000\n        + 32_000\n        + initcode_container_words * 6\n        + 3 * auxdata_size_words\n        + auxdata_size_words * auxdata_size_words // 512\n    )\n    # out_of_gas is triggered, so canary won't set value\n    # also validate target created contract fails\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: value_canary_should_not_change,\n                slot_code_should_fail: value_canary_should_not_change,\n            },\n        ),\n        compute_eofcreate_address(contract_address, 0, initcode_container): Account.NONEXISTENT,\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=gas_limit,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_insufficient_returncontract_auxdata_gas","title":"test_insufficient_returncontract_auxdata_gas(state_test, pre)","text":"

    Excercises an EOFCREATE when there is not enough gas for the initcode charge

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    def test_insufficient_returncontract_auxdata_gas(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Excercises an EOFCREATE when there is not enough gas for the initcode charge\n    \"\"\"\n    env = Environment()\n\n    auxdata_size = 0x5000\n    initcode_container = Container(\n        name=\"Large Initcode Subcontainer\",\n        sections=[\n            Section.Code(\n                code=Op.RETURNCONTRACT[0](0, auxdata_size),\n            ),\n            Section.Container(container=smallest_runtime_subcontainer),\n        ],\n    )\n\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.SSTORE(slot_create_address, Op.EOFCREATE[0](0, 0, 0, 0))\n                    + Op.SSTORE(slot_code_should_fail, value_code_worked)\n                    + Op.STOP,\n                ),\n                Section.Container(container=initcode_container),\n            ],\n        ),\n        storage={\n            slot_create_address: value_canary_should_not_change,\n            slot_code_should_fail: value_canary_should_not_change,\n        },\n    )\n    # enough gas for everything but EVM opcodes and EIP-150 reserves\n    initcode_container_words = (len(initcode_container) + 31) // 32\n    auxdata_size_words = (auxdata_size + 31) // 32\n    gas_limit = (\n        21_000\n        + 32_000\n        + initcode_container_words * 6\n        + 3 * auxdata_size_words\n        + auxdata_size_words * auxdata_size_words // 512\n    )\n    # out_of_gas is triggered, so canary won't set value\n    # also validate target created contract fails\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: value_canary_should_not_change,\n                slot_code_should_fail: value_canary_should_not_change,\n            },\n        ),\n        compute_eofcreate_address(contract_address, 0, initcode_container): Account.NONEXISTENT,\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=gas_limit,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_static_flag_eofcreate","title":"test_static_flag_eofcreate(state_test, pre, opcode, endowment, initcode)","text":"

    Verifies correct handling of the static call flag with EOFCREATE

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.STATICCALL,\n        Op.EXTSTATICCALL,\n    ],\n)\n@pytest.mark.parametrize(\"endowment\", [0, 1])  # included to verify static flag check comes first\n@pytest.mark.parametrize(\n    \"initcode\",\n    [smallest_initcode_subcontainer, aborting_container],\n    ids=[\"working_initcode\", \"aborting_code\"],\n)\ndef test_static_flag_eofcreate(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    opcode: Op,\n    endowment: int,\n    initcode: Container,\n):\n    \"\"\"\n    Verifies correct handling of the static call flag with EOFCREATE\n    \"\"\"\n    env = Environment()\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Container(\n            sections=[\n                Section.Code(\n                    code=Op.EOFCREATE[0](value=endowment) + Op.STOP,\n                ),\n                Section.Container(container=initcode),\n            ]\n        )\n    )\n    calling_code = (\n        Op.SSTORE(slot_call_result, opcode(address=contract_address))\n        + Op.SSTORE(slot_code_worked, value_code_worked)\n        + Op.STOP\n    )\n    calling_address = pre.deploy_contract(\n        Container.Code(calling_code) if opcode == Op.EXTSTATICCALL else calling_code\n    )\n\n    post = {\n        calling_address: Account(\n            storage={\n                slot_call_result: value_eof_call_result_failed\n                if opcode == Op.EXTSTATICCALL\n                else value_legacy_call_result_failed,\n                slot_code_worked: value_code_worked,\n            }\n        )\n    }\n    tx = Transaction(\n        to=calling_address,\n        gas_limit=10_000_000,\n        protected=False,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_eofcreate_failures.test_eof_eofcreate_msg_depth","title":"test_eof_eofcreate_msg_depth(state_test, pre, opcode, who_fails)","text":"

    Test EOFCREATE handles msg depth limit correctly (1024). NOTE: due to block gas limit and the 63/64th rule this limit is unlikely to be hit on mainnet. NOTE: See tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_msg_depth for more explanations and comments. Most notable deviation from that test is that here calls and EOFCREATEs alternate in order to reach the max depth. who_fails decides whether the failing depth 1024 will be on a call or on an EOFCREATE to happen.

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py
    @pytest.mark.parametrize(\n    \"opcode\",\n    [\n        Op.EXTCALL,\n        Op.EXTDELEGATECALL,\n    ],\n)\n@pytest.mark.parametrize(\n    \"who_fails\",\n    [magic_value_call, magic_value_create],\n    ids=[\"call_fails\", \"create_fails\"],\n)\n@pytest.mark.pre_alloc_modify\ndef test_eof_eofcreate_msg_depth(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    opcode: Op,\n    who_fails: int,\n):\n    \"\"\"\n    Test EOFCREATE handles msg depth limit correctly (1024).\n    NOTE: due to block gas limit and the 63/64th rule this limit is unlikely to be hit\n          on mainnet.\n    NOTE: See `tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_eof_calls_msg_depth`\n          for more explanations and comments. Most notable deviation from that test is that here\n          calls and `EOFCREATE`s alternate in order to reach the max depth. `who_fails` decides\n          whether the failing depth 1024 will be on a call or on an `EOFCREATE` to happen.\n    \"\"\"\n    # Not a precise gas_limit formula, but enough to exclude risk of gas causing the failure.\n    gas_limit = int(20000000 * (64 / 63) ** 1024)\n    env = Environment(gas_limit=gas_limit)\n    sender = pre.fund_eoa()\n\n    callee_address = Address(0x5000)\n\n    # Memory offsets layout:\n    # - 0  - input - msg depth\n    # - 32 - output - msg depth\n    # - 64 - output - call result\n    # - 96 - output - magic value: create or call\n    returndatacopy_block = Op.RETURNDATACOPY(32, 0, 96) + Op.REVERT(32, 96)\n    deep_most_result_block = (\n        Op.MSTORE(32, Op.ADD(Op.CALLDATALOAD(0), 1)) + Op.MSTORE(64, Op.NOOP) + Op.REVERT(32, 96)\n    )\n    rjump_offset = len(returndatacopy_block)\n\n    callee_code = Container(\n        sections=[\n            Section.Code(\n                Op.MSTORE(0, Op.ADD(Op.CALLDATALOAD(0), 1))\n                + Op.MSTORE(96, magic_value_create)\n                + Op.EOFCREATE[0](salt=Op.CALLDATALOAD(0), input_size=32)\n                + Op.RETURNDATASIZE\n                + Op.ISZERO\n                + Op.RJUMPI[rjump_offset]\n                + returndatacopy_block\n                + deep_most_result_block\n            ),\n            Section.Container(\n                Container.Code(\n                    Op.MSTORE(0, Op.ADD(Op.CALLDATALOAD(0), 1))\n                    + Op.MSTORE(96, magic_value_call)\n                    + opcode(address=callee_address, args_size=32)\n                    + Op.RETURNDATASIZE\n                    + Op.ISZERO\n                    + Op.RJUMPI[rjump_offset]\n                    + returndatacopy_block\n                    + deep_most_result_block\n                )\n            ),\n        ]\n    )\n\n    pre.deploy_contract(callee_code, address=callee_address)\n\n    calling_contract_address = pre.deploy_contract(\n        Container.Code(\n            Op.MSTORE(0, Op.CALLDATALOAD(0))\n            + opcode(address=callee_address, args_size=32)\n            + Op.SSTORE(slot_max_depth, Op.RETURNDATALOAD(0))\n            + Op.SSTORE(slot_call_result, Op.RETURNDATALOAD(32))\n            + Op.SSTORE(slot_call_or_create, Op.RETURNDATALOAD(64))\n            + Op.SSTORE(slot_code_worked, value_code_worked)\n            + Op.STOP\n        )\n    )\n\n    # Only bumps the msg call depth \"register\" and forwards to the `calling_contract_address`.\n    # If it is used it makes the \"failing\" depth of 1024 to happen on EOFCREATE, instead of CALL.\n    passthrough_address = pre.deploy_contract(\n        Container.Code(\n            Op.MSTORE(0, 1) + Op.EXTCALL(address=calling_contract_address, args_size=32) + Op.STOP\n        )\n    )\n\n    tx = Transaction(\n        sender=sender,\n        to=calling_contract_address if who_fails == magic_value_call else passthrough_address,\n        gas_limit=gas_limit,\n        data=\"\",\n    )\n\n    calling_storage = {\n        slot_max_depth: 1024,\n        slot_code_worked: value_code_worked,\n        slot_call_result: value_eof_call_result_reverted\n        if who_fails == magic_value_call\n        else value_create_failed,\n        slot_call_or_create: who_fails,\n    }\n\n    post = {\n        calling_contract_address: Account(storage=calling_storage),\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/index/test_cases/","title":"Test Eofcreate Failures - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py:

    test_initcode_revert[fork_CancunEIP7692-blockchain_test-empty]\ntest_initcode_revert[fork_CancunEIP7692-blockchain_test-Error(string)]\ntest_initcode_revert[fork_CancunEIP7692-blockchain_test_engine-empty]\ntest_initcode_revert[fork_CancunEIP7692-blockchain_test_engine-Error(string)]\ntest_initcode_revert[fork_CancunEIP7692-state_test-empty]\ntest_initcode_revert[fork_CancunEIP7692-state_test-Error(string)]\ntest_initcode_aborts[fork_CancunEIP7692-blockchain_test]\ntest_initcode_aborts[fork_CancunEIP7692-blockchain_test_engine]\ntest_initcode_aborts[fork_CancunEIP7692-state_test]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test-large]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test-max]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test-overmax]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test-initcodemax]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test-initcodeovermax]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test-64k-1]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test_engine-large]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test_engine-max]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test_engine-overmax]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test_engine-initcodemax]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test_engine-initcodeovermax]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-blockchain_test_engine-64k-1]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-state_test-large]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-state_test-max]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-state_test-overmax]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-state_test-initcodemax]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-state_test-initcodeovermax]\ntest_eofcreate_deploy_sizes[fork_CancunEIP7692-state_test-64k-1]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test-large]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test-max]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test-overmax]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test-initcodemax]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test-initcodeovermax]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test-64k-1]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test_engine-large]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test_engine-max]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test_engine-overmax]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test_engine-initcodemax]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test_engine-initcodeovermax]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-blockchain_test_engine-64k-1]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-state_test-large]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-state_test-max]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-state_test-overmax]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-state_test-initcodemax]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-state_test-initcodeovermax]\ntest_eofcreate_deploy_sizes_tx[fork_CancunEIP7692-state_test-64k-1]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test-maxcode]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test-overmaxcode]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test-almost64k]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test-64k-1]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test-64k]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test-over64k]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test_engine-maxcode]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test_engine-overmaxcode]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test_engine-almost64k]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test_engine-64k-1]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test_engine-64k]\ntest_auxdata_size_failures[fork_CancunEIP7692-blockchain_test_engine-over64k]\ntest_auxdata_size_failures[fork_CancunEIP7692-state_test-maxcode]\ntest_auxdata_size_failures[fork_CancunEIP7692-state_test-overmaxcode]\ntest_auxdata_size_failures[fork_CancunEIP7692-state_test-almost64k]\ntest_auxdata_size_failures[fork_CancunEIP7692-state_test-64k-1]\ntest_auxdata_size_failures[fork_CancunEIP7692-state_test-64k]\ntest_auxdata_size_failures[fork_CancunEIP7692-state_test-over64k]\ntest_eofcreate_insufficient_stipend[fork_CancunEIP7692-blockchain_test-1_wei]\ntest_eofcreate_insufficient_stipend[fork_CancunEIP7692-blockchain_test-1_gwei]\ntest_eofcreate_insufficient_stipend[fork_CancunEIP7692-blockchain_test_engine-1_wei]\ntest_eofcreate_insufficient_stipend[fork_CancunEIP7692-blockchain_test_engine-1_gwei]\ntest_eofcreate_insufficient_stipend[fork_CancunEIP7692-state_test-1_wei]\ntest_eofcreate_insufficient_stipend[fork_CancunEIP7692-state_test-1_gwei]\ntest_insufficient_initcode_gas[fork_CancunEIP7692-blockchain_test]\ntest_insufficient_initcode_gas[fork_CancunEIP7692-blockchain_test_engine]\ntest_insufficient_initcode_gas[fork_CancunEIP7692-state_test]\ntest_insufficient_gas_memory_expansion[fork_CancunEIP7692-blockchain_test]\ntest_insufficient_gas_memory_expansion[fork_CancunEIP7692-blockchain_test_engine]\ntest_insufficient_gas_memory_expansion[fork_CancunEIP7692-state_test]\ntest_insufficient_returncontract_auxdata_gas[fork_CancunEIP7692-blockchain_test]\ntest_insufficient_returncontract_auxdata_gas[fork_CancunEIP7692-blockchain_test_engine]\ntest_insufficient_returncontract_auxdata_gas[fork_CancunEIP7692-state_test]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test-working_initcode-endowment_0-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test-working_initcode-endowment_0-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test-working_initcode-endowment_1-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test-working_initcode-endowment_1-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test-aborting_code-endowment_0-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test-aborting_code-endowment_0-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test-aborting_code-endowment_1-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test-aborting_code-endowment_1-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test_engine-working_initcode-endowment_0-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test_engine-working_initcode-endowment_0-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test_engine-working_initcode-endowment_1-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test_engine-working_initcode-endowment_1-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test_engine-aborting_code-endowment_0-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test_engine-aborting_code-endowment_0-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test_engine-aborting_code-endowment_1-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-blockchain_test_engine-aborting_code-endowment_1-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-state_test-working_initcode-endowment_0-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-state_test-working_initcode-endowment_0-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-state_test-working_initcode-endowment_1-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-state_test-working_initcode-endowment_1-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-state_test-aborting_code-endowment_0-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-state_test-aborting_code-endowment_0-opcode_EXTSTATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-state_test-aborting_code-endowment_1-opcode_STATICCALL]\ntest_static_flag_eofcreate[fork_CancunEIP7692-state_test-aborting_code-endowment_1-opcode_EXTSTATICCALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-blockchain_test-call_fails-opcode_EXTCALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-blockchain_test-call_fails-opcode_EXTDELEGATECALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-blockchain_test-create_fails-opcode_EXTCALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-blockchain_test-create_fails-opcode_EXTDELEGATECALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-blockchain_test_engine-call_fails-opcode_EXTCALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-blockchain_test_engine-call_fails-opcode_EXTDELEGATECALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-blockchain_test_engine-create_fails-opcode_EXTCALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-blockchain_test_engine-create_fails-opcode_EXTDELEGATECALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-state_test-call_fails-opcode_EXTCALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-state_test-call_fails-opcode_EXTDELEGATECALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-state_test-create_fails-opcode_EXTCALL]\ntest_eof_eofcreate_msg_depth[fork_CancunEIP7692-state_test-create_fails-opcode_EXTDELEGATECALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates/","title":"Test Legacy Eof Creates","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Test interactions between CREATE, CREATE2, and EOFCREATE

    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_legacy_eof_creates.test_cross_version_creates_fail","title":"test_cross_version_creates_fail(state_test, pre, legacy_create_opcode, deploy_code)","text":"

    Verifies that CREATE and CREATE2 cannot create EOF contracts

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py
    @pytest.mark.parametrize(\n    \"legacy_create_opcode\",\n    [\n        pytest.param(Op.CREATE, id=\"CREATE\"),\n        pytest.param(Op.CREATE2, id=\"CREATE2\"),\n    ],\n)\n@pytest.mark.parametrize(\n    \"deploy_code\",\n    [\n        pytest.param(smallest_initcode_subcontainer, id=\"deploy_eof_initcontainer\"),\n        pytest.param(smallest_runtime_subcontainer, id=\"deploy_eof_container\"),\n    ],\n)\ndef test_cross_version_creates_fail(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    legacy_create_opcode: Opcodes,\n    deploy_code: Container,\n):\n    \"\"\"\n    Verifies that CREATE and CREATE2 cannot create EOF contracts\n    \"\"\"\n    env = Environment()\n    salt_param = [0] if legacy_create_opcode == Op.CREATE2 else []\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(\n        code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n        + Op.SSTORE(slot_create_address, legacy_create_opcode(0, 0, Op.CALLDATASIZE, *salt_param))\n        + Op.SSTORE(slot_code_worked, value_code_worked)\n        + Op.STOP\n    )\n\n    # Storage in 0 should be empty as the create/create2 should fail,\n    # and 1 in 1 to show execution continued and did not halt\n    post = {\n        contract_address: Account(\n            storage={\n                slot_create_address: value_create_failed,\n                slot_code_worked: value_code_worked,\n            }\n        )\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        sender=sender,\n        data=deploy_code,\n    )\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_legacy_eof_creates.test_legacy_initcode_eof_contract_fails","title":"test_legacy_initcode_eof_contract_fails(state_test, pre, legacy_create_opcode, deploy_code)","text":"

    Verifies that legacy initcode cannot create EOF

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py
    @pytest.mark.parametrize(\n    \"legacy_create_opcode\",\n    [\n        pytest.param(Op.CREATE, id=\"CREATE\"),\n        pytest.param(Op.CREATE2, id=\"CREATE2\"),\n    ],\n)\n@pytest.mark.parametrize(\n    \"deploy_code\",\n    [\n        pytest.param(smallest_initcode_subcontainer, id=\"deploy_eof_initcontainer\"),\n        pytest.param(smallest_runtime_subcontainer, id=\"deploy_eof_container\"),\n    ],\n)\ndef test_legacy_initcode_eof_contract_fails(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    legacy_create_opcode: Opcodes,\n    deploy_code: Container,\n):\n    \"\"\"\n    Verifies that legacy initcode cannot create EOF\n    \"\"\"\n    env = Environment()\n    init_code = LegacyInitcode(deploy_code=deploy_code)\n    salt_param = [0] if legacy_create_opcode == Op.CREATE2 else []\n    factory_code = (\n        Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n        + Op.SSTORE(slot_create_address, legacy_create_opcode(0, 0, Op.CALLDATASIZE, *salt_param))\n        + Op.SSTORE(slot_code_worked, value_code_worked)\n    )\n\n    sender = pre.fund_eoa()\n    contract_address = pre.deploy_contract(code=factory_code)\n\n    # Storage in 0 should be empty as the final CREATE filed\n    # and 1 in 1 to show execution continued and did not halt\n    post = {\n        contract_address: Account(\n            storage={slot_create_address: value_create_failed, slot_code_worked: value_code_worked}\n        )\n    }\n    tx = Transaction(\n        to=contract_address,\n        gas_limit=10_000_000,\n        gas_price=10,\n        protected=False,\n        data=init_code,\n        sender=sender,\n    )\n\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates/index/test_cases/","title":"Test Legacy Eof Creates - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py:

    test_cross_version_creates_fail[fork_CancunEIP7692-blockchain_test-deploy_eof_initcontainer-CREATE]\ntest_cross_version_creates_fail[fork_CancunEIP7692-blockchain_test-deploy_eof_initcontainer-CREATE2]\ntest_cross_version_creates_fail[fork_CancunEIP7692-blockchain_test-deploy_eof_container-CREATE]\ntest_cross_version_creates_fail[fork_CancunEIP7692-blockchain_test-deploy_eof_container-CREATE2]\ntest_cross_version_creates_fail[fork_CancunEIP7692-blockchain_test_engine-deploy_eof_initcontainer-CREATE]\ntest_cross_version_creates_fail[fork_CancunEIP7692-blockchain_test_engine-deploy_eof_initcontainer-CREATE2]\ntest_cross_version_creates_fail[fork_CancunEIP7692-blockchain_test_engine-deploy_eof_container-CREATE]\ntest_cross_version_creates_fail[fork_CancunEIP7692-blockchain_test_engine-deploy_eof_container-CREATE2]\ntest_cross_version_creates_fail[fork_CancunEIP7692-state_test-deploy_eof_initcontainer-CREATE]\ntest_cross_version_creates_fail[fork_CancunEIP7692-state_test-deploy_eof_initcontainer-CREATE2]\ntest_cross_version_creates_fail[fork_CancunEIP7692-state_test-deploy_eof_container-CREATE]\ntest_cross_version_creates_fail[fork_CancunEIP7692-state_test-deploy_eof_container-CREATE2]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-blockchain_test-deploy_eof_initcontainer-CREATE]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-blockchain_test-deploy_eof_initcontainer-CREATE2]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-blockchain_test-deploy_eof_container-CREATE]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-blockchain_test-deploy_eof_container-CREATE2]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-blockchain_test_engine-deploy_eof_initcontainer-CREATE]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-blockchain_test_engine-deploy_eof_initcontainer-CREATE2]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-blockchain_test_engine-deploy_eof_container-CREATE]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-blockchain_test_engine-deploy_eof_container-CREATE2]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-state_test-deploy_eof_initcontainer-CREATE]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-state_test-deploy_eof_initcontainer-CREATE2]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-state_test-deploy_eof_container-CREATE]\ntest_legacy_initcode_eof_contract_fails[fork_CancunEIP7692-state_test-deploy_eof_container-CREATE2]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/","title":"Test Returncontract","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests for RETURNCONTRACT instruction validation

    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_returncontract.test_returncontract_valid_index_0","title":"test_returncontract_valid_index_0(eof_test)","text":"

    Deploy container index 0

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py
    def test_returncontract_valid_index_0(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"Deploy container index 0\"\"\"\n    eof_test(\n        container_kind=ContainerKind.INITCODE,\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RETURNCONTRACT[0](0, 0),\n                ),\n                Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)])),\n            ],\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_returncontract.test_returncontract_valid_index_1","title":"test_returncontract_valid_index_1(eof_test)","text":"

    Deploy container index 1

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py
    def test_returncontract_valid_index_1(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"Deploy container index 1\"\"\"\n    eof_test(\n        container_kind=ContainerKind.INITCODE,\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RJUMPI[6](0) + Op.RETURNCONTRACT[0](0, 0) + Op.RETURNCONTRACT[1](0, 0),\n                    max_stack_height=2,\n                ),\n                Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)])),\n                Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)])),\n            ],\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_returncontract.test_returncontract_valid_index_255","title":"test_returncontract_valid_index_255(eof_test)","text":"

    Deploy container index 255

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py
    def test_returncontract_valid_index_255(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"Deploy container index 255\"\"\"\n    eof_test(\n        container_kind=ContainerKind.INITCODE,\n        data=Container(\n            sections=[\n                Section.Code(\n                    sum((Op.RJUMPI[6](0) + Op.RETURNCONTRACT[i](0, 0)) for i in range(256))\n                    + Op.REVERT(0, 0),\n                    max_stack_height=2,\n                )\n            ]\n            + [Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)]))]\n            * 256\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_returncontract.test_returncontract_invalid_truncated_immediate","title":"test_returncontract_invalid_truncated_immediate(eof_test)","text":"

    Truncated immediate

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py
    def test_returncontract_invalid_truncated_immediate(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"Truncated immediate\"\"\"\n    eof_test(\n        container_kind=ContainerKind.INITCODE,\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 + Op.PUSH0 + Op.RETURNCONTRACT,\n                ),\n            ],\n        ),\n        expect_exception=EOFException.TRUNCATED_INSTRUCTION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_returncontract.test_returncontract_invalid_index_0","title":"test_returncontract_invalid_index_0(eof_test)","text":"

    Referring to non-existent container section index 0

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py
    def test_returncontract_invalid_index_0(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"Referring to non-existent container section index 0\"\"\"\n    eof_test(\n        container_kind=ContainerKind.INITCODE,\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RETURNCONTRACT[0](0, 0),\n                ),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_CONTAINER_SECTION_INDEX,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_returncontract.test_returncontract_invalid_index_1","title":"test_returncontract_invalid_index_1(eof_test)","text":"

    Referring to non-existent container section index 1

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py
    def test_returncontract_invalid_index_1(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"Referring to non-existent container section index 1\"\"\"\n    eof_test(\n        container_kind=ContainerKind.INITCODE,\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RETURNCONTRACT[1](0, 0),\n                ),\n                Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)])),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_CONTAINER_SECTION_INDEX,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_returncontract.test_returncontract_invalid_index_255","title":"test_returncontract_invalid_index_255(eof_test)","text":"

    Referring to non-existent container section index 255

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py
    def test_returncontract_invalid_index_255(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"Referring to non-existent container section index 255\"\"\"\n    eof_test(\n        container_kind=ContainerKind.INITCODE,\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RETURNCONTRACT[255](0, 0),\n                ),\n                Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)])),\n            ],\n        ),\n        expect_exception=EOFException.INVALID_CONTAINER_SECTION_INDEX,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_returncontract.test_returncontract_terminating","title":"test_returncontract_terminating(eof_test)","text":"

    Unreachable code after RETURNCONTRACT

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py
    def test_returncontract_terminating(\n    eof_test: EOFTestFiller,\n):\n    \"\"\"Unreachable code after RETURNCONTRACT\"\"\"\n    eof_test(\n        container_kind=ContainerKind.INITCODE,\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.RETURNCONTRACT[0](0, 0) + Op.REVERT(0, 0),\n                ),\n                Section.Container(container=Container(sections=[Section.Code(code=Op.INVALID)])),\n            ],\n        ),\n        expect_exception=EOFException.UNREACHABLE_INSTRUCTIONS,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/index/test_cases/","title":"Test Returncontract - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py:

    test_returncontract_valid_index_0[fork_CancunEIP7692-eof_test]\ntest_returncontract_valid_index_1[fork_CancunEIP7692-eof_test]\ntest_returncontract_valid_index_255[fork_CancunEIP7692-eof_test]\ntest_returncontract_invalid_truncated_immediate[fork_CancunEIP7692-eof_test]\ntest_returncontract_invalid_index_0[fork_CancunEIP7692-eof_test]\ntest_returncontract_invalid_index_1[fork_CancunEIP7692-eof_test]\ntest_returncontract_invalid_index_255[fork_CancunEIP7692-eof_test]\ntest_returncontract_terminating[fork_CancunEIP7692-eof_test]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/","title":"Test Subcontainer Validation","text":"

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    EOF Subcontainer tests covering simple cases.

    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_simple_create_from_deployed","title":"test_simple_create_from_deployed(eof_state_test)","text":"

    Simple EOF creation from a deployed EOF container

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    def test_simple_create_from_deployed(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Simple EOF creation from a deployed EOF container\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                eofcreate_code_section,\n                returncontract_sub_container,\n            ],\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_simple_create_from_creation","title":"test_simple_create_from_creation(eof_state_test)","text":"

    Simple EOF creation from a create transaction container

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    def test_simple_create_from_creation(\n    eof_state_test: EOFStateTestFiller,\n):\n    \"\"\"Simple EOF creation from a create transaction container\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                returncontract_code_section,\n                stop_sub_container,\n            ],\n            kind=ContainerKind.INITCODE,\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_reverting_container","title":"test_reverting_container(eof_state_test, zero_section)","text":"

    Test revert containers

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    \"zero_section\",\n    [eofcreate_code_section, returncontract_code_section],\n    ids=[\"eofcreate\", \"returncontract\"],\n)\ndef test_reverting_container(\n    eof_state_test: EOFStateTestFiller,\n    zero_section: Container,\n):\n    \"\"\"Test revert containers\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                zero_section,\n                revert_sub_container,\n            ],\n            kind=(\n                ContainerKind.INITCODE\n                if zero_section == returncontract_code_section\n                else ContainerKind.RUNTIME\n            ),\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_orphan_container","title":"test_orphan_container(eof_test, code_section, first_sub_container, extra_sub_container, container_kind)","text":"

    Test orphaned containers

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    \"code_section,first_sub_container,container_kind\",\n    [\n        (eofcreate_code_section, returncontract_sub_container, ContainerKind.RUNTIME),\n        (returncontract_code_section, stop_sub_container, ContainerKind.INITCODE),\n    ],\n    ids=[\"eofcreate\", \"returncontract\"],\n)\n@pytest.mark.parametrize(\n    \"extra_sub_container\",\n    [stop_sub_container, revert_sub_container, returncontract_sub_container],\n    ids=[\"stop\", \"revert\", \"returncontract\"],\n)\ndef test_orphan_container(\n    eof_test: EOFTestFiller,\n    code_section: Section,\n    first_sub_container: Container,\n    extra_sub_container: Container,\n    container_kind: ContainerKind,\n):\n    \"\"\"Test orphaned containers\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                code_section,\n                first_sub_container,\n                extra_sub_container,\n            ],\n            kind=container_kind,\n        ),\n        expect_exception=EOFException.ORPHAN_SUBCONTAINER,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_container_combos_valid","title":"test_container_combos_valid(eof_state_test, code_section, sub_container, container_kind)","text":"

    Test valid subcontainer reference / opcode combos

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    \"code_section,sub_container,container_kind\",\n    [\n        pytest.param(\n            eofcreate_code_section,\n            returncontract_sub_container,\n            ContainerKind.RUNTIME,\n            id=\"EOFCREATE/RETURNCONTRACT\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            stop_sub_container,\n            ContainerKind.INITCODE,\n            id=\"RETURNCONTRACT/STOP\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            return_sub_container,\n            ContainerKind.INITCODE,\n            id=\"RETURNCONTRACT/RETURN\",\n        ),\n        pytest.param(\n            eofcreate_code_section,\n            revert_sub_container,\n            ContainerKind.RUNTIME,\n            id=\"EOFCREATE/REVERT\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            revert_sub_container,\n            ContainerKind.INITCODE,\n            id=\"RETURNCONTRACT/REVERT\",\n        ),\n    ],\n)\ndef test_container_combos_valid(\n    eof_state_test: EOFStateTestFiller,\n    code_section: Section,\n    sub_container: Container,\n    container_kind: ContainerKind,\n):\n    \"\"\"Test valid subcontainer reference / opcode combos\"\"\"\n    eof_state_test(\n        data=Container(\n            sections=[\n                code_section,\n                sub_container,\n            ],\n            kind=container_kind,\n        ),\n        container_post=Account(storage={slot_code_worked: value_code_worked}),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_container_combos_invalid","title":"test_container_combos_invalid(eof_test, code_section, first_sub_container, container_kind)","text":"

    Test invalid subcontainer reference / opcode combos

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    \"code_section,first_sub_container,container_kind\",\n    [\n        pytest.param(\n            eofcreate_code_section,\n            stop_sub_container,\n            ContainerKind.RUNTIME,\n            id=\"EOFCREATE/STOP\",\n        ),\n        pytest.param(\n            eofcreate_code_section,\n            return_sub_container,\n            ContainerKind.RUNTIME,\n            id=\"EOFCREATE/RETURN\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            returncontract_sub_container,\n            ContainerKind.INITCODE,\n            id=\"RETURNCONTRACT/RETURNCONTRACT\",\n        ),\n    ],\n)\ndef test_container_combos_invalid(\n    eof_test: EOFTestFiller,\n    code_section: Section,\n    first_sub_container: Container,\n    container_kind: ContainerKind,\n):\n    \"\"\"Test invalid subcontainer reference / opcode combos\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                code_section,\n                first_sub_container,\n            ],\n            kind=container_kind,\n        ),\n        expect_exception=EOFException.INCOMPATIBLE_CONTAINER_KIND,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_container_combos_deeply_nested_valid","title":"test_container_combos_deeply_nested_valid(eof_test, code_section, first_sub_container)","text":"

    Test valid subcontainer reference / opcode combos on a deep container nesting level

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    \"code_section,first_sub_container\",\n    [\n        pytest.param(\n            eofcreate_revert_code_section,\n            returncontract_sub_container,\n            id=\"EOFCREATE/RETURNCONTRACT\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            stop_sub_container,\n            id=\"RETURNCONTRACT/STOP\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            return_sub_container,\n            id=\"RETURNCONTRACT/RETURN\",\n        ),\n        pytest.param(\n            eofcreate_revert_code_section,\n            revert_sub_container,\n            id=\"EOFCREATE/REVERT\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            revert_sub_container,\n            id=\"RETURNCONTRACT/REVERT\",\n        ),\n    ],\n)\ndef test_container_combos_deeply_nested_valid(\n    eof_test: EOFTestFiller,\n    code_section: Section,\n    first_sub_container: Container,\n):\n    \"\"\"Test valid subcontainer reference / opcode combos on a deep container nesting level\"\"\"\n    valid_container = Container(\n        sections=[\n            code_section,\n            first_sub_container,\n        ],\n        kind=ContainerKind.INITCODE,\n    )\n\n    container = valid_container\n    while len(container) < MAX_BYTECODE_SIZE:\n        container = Container(\n            sections=[\n                eofcreate_revert_code_section,\n                Section.Container(container=container.copy()),\n            ],\n            kind=ContainerKind.INITCODE,\n        )\n\n    eof_test(data=container)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_container_combos_deeply_nested_invalid","title":"test_container_combos_deeply_nested_invalid(eof_test, code_section, first_sub_container)","text":"

    Test invalid subcontainer reference / opcode combos on a deep container nesting level

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    \"code_section,first_sub_container\",\n    [\n        pytest.param(\n            eofcreate_revert_code_section,\n            stop_sub_container,\n            id=\"EOFCREATE/STOP\",\n        ),\n        pytest.param(\n            eofcreate_revert_code_section,\n            return_sub_container,\n            id=\"EOFCREATE/RETURN\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            returncontract_sub_container,\n            id=\"RETURNCONTRACT/RETURNCONTRACT\",\n        ),\n    ],\n)\ndef test_container_combos_deeply_nested_invalid(\n    eof_test: EOFTestFiller,\n    code_section: Section,\n    first_sub_container: Container,\n):\n    \"\"\"Test invalid subcontainer reference / opcode combos on a deep container nesting level\"\"\"\n    invalid_container = Container(\n        sections=[\n            code_section,\n            first_sub_container,\n        ],\n        kind=ContainerKind.INITCODE,\n    )\n\n    container = invalid_container\n    while len(container) < MAX_BYTECODE_SIZE:\n        container = Container(\n            sections=[\n                eofcreate_revert_code_section,\n                Section.Container(container=container.copy()),\n            ],\n            kind=ContainerKind.INITCODE,\n        )\n\n    eof_test(\n        data=container,\n        expect_exception=EOFException.INCOMPATIBLE_CONTAINER_KIND,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_container_combos_non_first_code_sections_valid","title":"test_container_combos_non_first_code_sections_valid(eof_test, code_section, first_sub_container, container_kind)","text":"

    Test valid subcontainer reference / opcode combos in a non-first code section

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    \"code_section,first_sub_container,container_kind\",\n    [\n        pytest.param(\n            eofcreate_code_section,\n            returncontract_sub_container,\n            ContainerKind.RUNTIME,\n            id=\"EOFCREATE/RETURNCONTRACT\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            stop_sub_container,\n            ContainerKind.INITCODE,\n            id=\"RETURNCONTRACT/STOP\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            return_sub_container,\n            ContainerKind.INITCODE,\n            id=\"RETURNCONTRACT/RETURN\",\n        ),\n        pytest.param(\n            eofcreate_code_section,\n            revert_sub_container,\n            ContainerKind.RUNTIME,\n            id=\"EOFCREATE/REVERT\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            revert_sub_container,\n            ContainerKind.INITCODE,\n            id=\"RETURNCONTRACT/REVERT\",\n        ),\n    ],\n)\ndef test_container_combos_non_first_code_sections_valid(\n    eof_test: EOFTestFiller,\n    code_section: Section,\n    first_sub_container: Container,\n    container_kind: ContainerKind,\n):\n    \"\"\"Test valid subcontainer reference / opcode combos in a non-first code section\"\"\"\n    eof_test(\n        data=Container(\n            sections=[Section.Code(Op.JUMPF[i]) for i in range(1, 1024)]\n            + [code_section, first_sub_container],\n            kind=container_kind,\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_container_combos_non_first_code_sections_invalid","title":"test_container_combos_non_first_code_sections_invalid(eof_test, code_section, first_sub_container, container_kind)","text":"

    Test invalid subcontainer reference / opcode combos in a non-first code section

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    \"code_section,first_sub_container,container_kind\",\n    [\n        pytest.param(\n            eofcreate_code_section,\n            stop_sub_container,\n            ContainerKind.RUNTIME,\n            id=\"EOFCREATE/STOP\",\n        ),\n        pytest.param(\n            eofcreate_code_section,\n            return_sub_container,\n            ContainerKind.RUNTIME,\n            id=\"EOFCREATE/RETURN\",\n        ),\n        pytest.param(\n            returncontract_code_section,\n            returncontract_sub_container,\n            ContainerKind.INITCODE,\n            id=\"RETURNCONTRACT/RETURNCONTRACT\",\n        ),\n    ],\n)\ndef test_container_combos_non_first_code_sections_invalid(\n    eof_test: EOFTestFiller,\n    code_section: Section,\n    first_sub_container: Container,\n    container_kind: ContainerKind,\n):\n    \"\"\"Test invalid subcontainer reference / opcode combos in a non-first code section\"\"\"\n    eof_test(\n        data=Container(\n            sections=[Section.Code(Op.JUMPF[i]) for i in range(1, 1024)]\n            + [code_section, first_sub_container],\n            kind=container_kind,\n        ),\n        expect_exception=EOFException.INCOMPATIBLE_CONTAINER_KIND,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_container_both_kinds_same_sub","title":"test_container_both_kinds_same_sub(eof_test)","text":"

    Test subcontainer conflicts (both EOFCREATE and RETURNCONTRACT Reference)

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    def test_container_both_kinds_same_sub(eof_test: EOFTestFiller):\n    \"\"\"Test subcontainer conflicts (both EOFCREATE and RETURNCONTRACT Reference)\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.JUMPF[1],\n                ),\n                Section.Code(\n                    code=Op.RETURNCONTRACT[0](0, 0),\n                ),\n                revert_sub_container,\n            ],\n        ),\n        expect_exception=EOFException.INCOMPATIBLE_CONTAINER_KIND,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_container_both_kinds_different_sub","title":"test_container_both_kinds_different_sub(eof_test)","text":"

    Test multiple kinds of subcontainer at the same level

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    def test_container_both_kinds_different_sub(eof_test: EOFTestFiller):\n    \"\"\"Test multiple kinds of subcontainer at the same level\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.JUMPF[1],\n                ),\n                Section.Code(\n                    code=Op.RETURNCONTRACT[1](0, 0),\n                ),\n                returncontract_sub_container,\n                stop_sub_container,\n            ],\n            kind=ContainerKind.INITCODE,\n        ),\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_subcontainer_wrong_eof_version","title":"test_subcontainer_wrong_eof_version(eof_test, version)","text":"

    Test a subcontainer with the incorrect EOF version

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\"version\", [0, 255], ids=lambda x: x)\ndef test_subcontainer_wrong_eof_version(\n    eof_test: EOFTestFiller,\n    version: int,\n):\n    \"\"\"Test a subcontainer with the incorrect EOF version\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP,\n                ),\n                Section.Container(\n                    container=Container(version=[version], sections=[Section.Code(code=Op.STOP)])\n                ),\n            ],\n            kind=ContainerKind.RUNTIME,\n        ),\n        expect_exception=EOFException.INVALID_VERSION,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_subcontainer_wrong_size","title":"test_subcontainer_wrong_size(eof_test, delta, kind)","text":"

    Test a subcontainer with the incorrect size in the parent's header

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\"delta\", [-1, 1], ids=[\"smaller\", \"larger\"])\n@pytest.mark.parametrize(\"kind\", [ContainerKind.RUNTIME, ContainerKind.INITCODE])\ndef test_subcontainer_wrong_size(\n    eof_test: EOFTestFiller,\n    delta: int,\n    kind: ContainerKind,\n):\n    \"\"\"Test a subcontainer with the incorrect size in the parent's header\"\"\"\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP)\n                    if kind == ContainerKind.RUNTIME\n                    else (Op.RETURNCONTRACT[0](0, 0)),\n                ),\n                Section.Container(\n                    container=Container(sections=[Section.Code(code=Op.STOP)]),\n                    custom_size=len(stop_sub_container.data) + delta,\n                ),\n            ],\n            kind=kind,\n        ),\n        expect_exception=EOFException.INVALID_SECTION_BODIES_SIZE,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_deep_container","title":"test_deep_container(eof_test, deepest_container, exception)","text":"

    Test a very deeply nested container

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    [\"deepest_container\", \"exception\"],\n    [\n        pytest.param(Container.Code(Op.STOP), None, id=\"valid\"),\n        pytest.param(\n            Container.Code(code=Op.PUSH0),\n            EOFException.MISSING_STOP_OPCODE,\n            id=\"code-error\",\n        ),\n        pytest.param(\n            Container(raw_bytes=\"EF0100A94F5374FCE5EDBC8E2A8697C15331677E6EBF0B\"),\n            EOFException.INVALID_MAGIC,\n            id=\"structure-error\",\n        ),\n    ],\n)\ndef test_deep_container(\n    eof_test: EOFTestFiller, deepest_container: Container, exception: EOFException\n):\n    \"\"\"Test a very deeply nested container\"\"\"\n    container = deepest_container\n    last_container = deepest_container\n    while len(container) < MAX_INITCODE_SIZE:\n        last_container = container\n        container = Container(\n            sections=[\n                Section.Code(\n                    code=Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.PUSH0 + Op.EOFCREATE[0] + Op.STOP,\n                ),\n                Section.Container(\n                    container=Container(\n                        sections=[\n                            Section.Code(\n                                code=Op.PUSH0 + Op.PUSH0 + Op.RETURNCONTRACT[0],\n                            ),\n                            Section.Container(container=last_container),\n                        ]\n                    )\n                ),\n            ],\n        )\n\n    eof_test(data=last_container, expect_exception=exception)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_wide_container","title":"test_wide_container(eof_test, width, exception)","text":"

    Test a container with the maximum number of sub-containers

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    [\"width\", \"exception\"],\n    [\n        pytest.param(256, None, id=\"256\"),\n        pytest.param(257, EOFException.TOO_MANY_CONTAINERS, id=\"257\"),\n        pytest.param(0x8000, EOFException.CONTAINER_SIZE_ABOVE_LIMIT, id=\"negative_i16\"),\n        pytest.param(0xFFFF, EOFException.CONTAINER_SIZE_ABOVE_LIMIT, id=\"max_u16\"),\n    ],\n)\ndef test_wide_container(eof_test: EOFTestFiller, width: int, exception: EOFException):\n    \"\"\"Test a container with the maximum number of sub-containers\"\"\"\n    create_code: Bytecode = Op.STOP\n    for x in range(0, 256):\n        create_code = Op.EOFCREATE[x](0, 0, 0, 0) + create_code\n    eof_test(\n        data=Container(\n            sections=[\n                Section.Code(\n                    code=create_code,\n                ),\n                *(\n                    [\n                        Section.Container(\n                            container=Container(\n                                sections=[\n                                    Section.Code(\n                                        code=Op.PUSH0 + Op.PUSH0 + Op.RETURNCONTRACT[0],\n                                    ),\n                                    stop_sub_container,\n                                ]\n                            )\n                        )\n                    ]\n                    * width\n                ),\n            ]\n        ),\n        expect_exception=exception,\n    )\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/#tests.prague.eip7692_eof_v1.eip7620_eof_create.test_subcontainer_validation.test_migrated_eofcreate","title":"test_migrated_eofcreate(eof_test, container)","text":"

    Tests migrated from EOFTests/efValidation/EOF1_eofcreate_valid_.json.

    Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py
    @pytest.mark.parametrize(\n    \"container\",\n    [\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(\n                        Op.CALLDATASIZE\n                        + Op.PUSH1[0]\n                        + Op.PUSH1[255]\n                        + Op.PUSH1[0]\n                        + Op.EOFCREATE[0]\n                        + Op.POP\n                        + Op.STOP\n                    ),\n                    Section.Container(Container.Code(Op.INVALID)),\n                ],\n                expected_bytecode=\"\"\"\n                ef0001010004020001000b0300010014040000000080000436600060ff6000ec005000ef000101000402\n                000100010400000000800000fe\"\"\",\n            ),\n            id=\"eofcreate_0\",\n        ),\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(Op.PUSH1[0] + Op.RJUMP[0] + Op.STOP),\n                    Section.Container(Container.Code(Op.INVALID)),\n                ],\n                expected_bytecode=\"\"\"\n                ef00010100040200010006030001001404000000008000016000e0000000ef0001010004020001000104\n                00000000800000fe\"\"\",\n                # Originally this test was \"valid\" because it was created\n                # before \"orphan subcontainer\" rule was introduced.\n                validity_error=EOFException.ORPHAN_SUBCONTAINER,\n            ),\n            id=\"orphan_subcontainer_0\",\n        ),\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(Op.PUSH1[0] + Op.RJUMP[0] + Op.STOP),\n                    Section.Container(Container.Code(Op.INVALID)),\n                    Section.Data(custom_size=2),\n                ],\n                expected_bytecode=\"\"\"\n                ef00010100040200010006030001001404000200008000016000e0000000ef0001010004020001000104\n                00000000800000fe\"\"\",\n                # Originally this test was \"valid\" but against the current spec\n                # it contains two errors: data section truncated and orphan subcontainer.\n                validity_error=EOFException.TOPLEVEL_CONTAINER_TRUNCATED,\n            ),\n            id=\"orphan_subcontainer_0_and_truncated_data\",\n        ),\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(Op.PUSH1[0] + Op.RJUMP[0] + Op.STOP),\n                    Section.Container(Container.Code(Op.INVALID)),\n                    Section.Data(\"aabb\"),\n                ],\n                expected_bytecode=\"\"\"\n                ef00010100040200010006030001001404000200008000016000e0000000ef0001010004020001000104\n                00000000800000feaabb\"\"\",\n                # Originally this test was \"valid\" because it was created\n                # before \"orphan subcontainer\" rule was introduced.\n                validity_error=EOFException.ORPHAN_SUBCONTAINER,\n            ),\n            id=\"orphan_subcontainer_0_and_data\",\n        ),\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP),\n                    Section.Container(\"aabbccddeeff\"),\n                ],\n                # The original test has been modified to reference the subcontainer by EOFCREATE.\n                validity_error=EOFException.INVALID_MAGIC,\n            ),\n            id=\"subcontainer_0_with_invalid_prefix\",\n        ),\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(\n                        Op.CALLDATASIZE\n                        + Op.PUSH1[0]\n                        + Op.PUSH1[255]\n                        + Op.PUSH1[0]\n                        + Op.EOFCREATE[1]\n                        + Op.POP\n                        + Op.STOP\n                    )\n                ]\n                + 2 * [Section.Container(Container.Code(Op.INVALID))],\n                expected_bytecode=\"\"\"\n                ef0001010004020001000b03000200140014040000000080000436600060ff6000ec015000ef00010100\n                0402000100010400000000800000feef000101000402000100010400000000800000fe\"\"\",\n                # Originally this test was \"valid\" because it was created\n                # before \"orphan subcontainer\" rule was introduced.\n                validity_error=EOFException.ORPHAN_SUBCONTAINER,\n            ),\n            id=\"eofcreate_1_orphan_subcontainer_0\",\n        ),\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(Op.PUSH1[0] + Op.RJUMP[0] + Op.STOP),\n                    Section.Container(Container.Code(Op.INVALID)),\n                    Section.Container(Container.Code(Op.PUSH0 + Op.PUSH0 + Op.RETURN)),\n                ],\n                expected_bytecode=\"\"\"\n                ef000101000402000100060300020014001604000000008000016000e0000000ef000101000402000100\n                010400000000800000feef0001010004020001000304000000008000025f5ff3\"\"\",\n                # Originally this test was \"valid\" because it was created\n                # before \"orphan subcontainer\" rule was introduced.\n                validity_error=EOFException.ORPHAN_SUBCONTAINER,\n            ),\n            id=\"two_orphan_subcontainers\",\n        ),\n        pytest.param(\n            Container(\n                sections=[\n                    Section.Code(\n                        Op.CALLDATASIZE\n                        + Op.PUSH1[0]\n                        + Op.PUSH1[255]\n                        + Op.PUSH1[0]\n                        + Op.EOFCREATE[255]\n                        + Op.POP\n                        + Op.STOP\n                    )\n                ]\n                + 256 * [Section.Container(Container.Code(Op.INVALID))],\n                # Originally this test was \"valid\" because it was created\n                # before \"orphan subcontainer\" rule was introduced.\n                validity_error=EOFException.ORPHAN_SUBCONTAINER,\n            ),\n            id=\"eofcreate_255_max_orphan_subcontainers\",\n        ),\n        pytest.param(\n            Container(\n                sections=[Section.Code(Op.PUSH1[0] + Op.RJUMP[0] + Op.STOP)]\n                + 256 * [Section.Container(Container.Code(Op.INVALID))],\n                # Originally this test was \"valid\" because it was created\n                # before \"orphan subcontainer\" rule was introduced.\n                validity_error=EOFException.ORPHAN_SUBCONTAINER,\n            ),\n            id=\"max_orphan_subcontainers\",\n        ),\n    ],\n)\ndef test_migrated_eofcreate(eof_test: EOFTestFiller, container: Container):\n    \"\"\"\n    Tests migrated from EOFTests/efValidation/EOF1_eofcreate_valid_.json.\n    \"\"\"\n    eof_test(data=container, expect_exception=container.validity_error)\n
    "},{"location":"tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/index/test_cases/","title":"Test Subcontainer Validation - Test Cases","text":"

    Test cases generated from tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py:

    test_simple_create_from_deployed[fork_CancunEIP7692-eof_test]\ntest_simple_create_from_deployed[fork_CancunEIP7692-state_test]\ntest_simple_create_from_deployed[fork_CancunEIP7692-blockchain_test]\ntest_simple_create_from_deployed[fork_CancunEIP7692-blockchain_test_engine]\ntest_simple_create_from_creation[fork_CancunEIP7692-eof_test]\ntest_simple_create_from_creation[fork_CancunEIP7692-state_test]\ntest_simple_create_from_creation[fork_CancunEIP7692-blockchain_test]\ntest_simple_create_from_creation[fork_CancunEIP7692-blockchain_test_engine]\ntest_reverting_container[fork_CancunEIP7692-eof_test-eofcreate]\ntest_reverting_container[fork_CancunEIP7692-eof_test-returncontract]\ntest_reverting_container[fork_CancunEIP7692-state_test-eofcreate]\ntest_reverting_container[fork_CancunEIP7692-state_test-returncontract]\ntest_reverting_container[fork_CancunEIP7692-blockchain_test-eofcreate]\ntest_reverting_container[fork_CancunEIP7692-blockchain_test-returncontract]\ntest_reverting_container[fork_CancunEIP7692-blockchain_test_engine-eofcreate]\ntest_reverting_container[fork_CancunEIP7692-blockchain_test_engine-returncontract]\ntest_orphan_container[fork_CancunEIP7692-eof_test-stop-eofcreate]\ntest_orphan_container[fork_CancunEIP7692-eof_test-stop-returncontract]\ntest_orphan_container[fork_CancunEIP7692-eof_test-revert-eofcreate]\ntest_orphan_container[fork_CancunEIP7692-eof_test-revert-returncontract]\ntest_orphan_container[fork_CancunEIP7692-eof_test-returncontract-eofcreate]\ntest_orphan_container[fork_CancunEIP7692-eof_test-returncontract-returncontract]\ntest_container_combos_valid[fork_CancunEIP7692-eof_test-EOFCREATE/RETURNCONTRACT]\ntest_container_combos_valid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/STOP]\ntest_container_combos_valid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/RETURN]\ntest_container_combos_valid[fork_CancunEIP7692-eof_test-EOFCREATE/REVERT]\ntest_container_combos_valid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/REVERT]\ntest_container_combos_valid[fork_CancunEIP7692-state_test-EOFCREATE/RETURNCONTRACT]\ntest_container_combos_valid[fork_CancunEIP7692-state_test-RETURNCONTRACT/STOP]\ntest_container_combos_valid[fork_CancunEIP7692-state_test-RETURNCONTRACT/RETURN]\ntest_container_combos_valid[fork_CancunEIP7692-state_test-EOFCREATE/REVERT]\ntest_container_combos_valid[fork_CancunEIP7692-state_test-RETURNCONTRACT/REVERT]\ntest_container_combos_valid[fork_CancunEIP7692-blockchain_test-EOFCREATE/RETURNCONTRACT]\ntest_container_combos_valid[fork_CancunEIP7692-blockchain_test-RETURNCONTRACT/STOP]\ntest_container_combos_valid[fork_CancunEIP7692-blockchain_test-RETURNCONTRACT/RETURN]\ntest_container_combos_valid[fork_CancunEIP7692-blockchain_test-EOFCREATE/REVERT]\ntest_container_combos_valid[fork_CancunEIP7692-blockchain_test-RETURNCONTRACT/REVERT]\ntest_container_combos_valid[fork_CancunEIP7692-blockchain_test_engine-EOFCREATE/RETURNCONTRACT]\ntest_container_combos_valid[fork_CancunEIP7692-blockchain_test_engine-RETURNCONTRACT/STOP]\ntest_container_combos_valid[fork_CancunEIP7692-blockchain_test_engine-RETURNCONTRACT/RETURN]\ntest_container_combos_valid[fork_CancunEIP7692-blockchain_test_engine-EOFCREATE/REVERT]\ntest_container_combos_valid[fork_CancunEIP7692-blockchain_test_engine-RETURNCONTRACT/REVERT]\ntest_container_combos_invalid[fork_CancunEIP7692-eof_test-EOFCREATE/STOP]\ntest_container_combos_invalid[fork_CancunEIP7692-eof_test-EOFCREATE/RETURN]\ntest_container_combos_invalid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/RETURNCONTRACT]\ntest_container_combos_deeply_nested_valid[fork_CancunEIP7692-eof_test-EOFCREATE/RETURNCONTRACT]\ntest_container_combos_deeply_nested_valid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/STOP]\ntest_container_combos_deeply_nested_valid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/RETURN]\ntest_container_combos_deeply_nested_valid[fork_CancunEIP7692-eof_test-EOFCREATE/REVERT]\ntest_container_combos_deeply_nested_valid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/REVERT]\ntest_container_combos_deeply_nested_invalid[fork_CancunEIP7692-eof_test-EOFCREATE/STOP]\ntest_container_combos_deeply_nested_invalid[fork_CancunEIP7692-eof_test-EOFCREATE/RETURN]\ntest_container_combos_deeply_nested_invalid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/RETURNCONTRACT]\ntest_container_combos_non_first_code_sections_valid[fork_CancunEIP7692-eof_test-EOFCREATE/RETURNCONTRACT]\ntest_container_combos_non_first_code_sections_valid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/STOP]\ntest_container_combos_non_first_code_sections_valid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/RETURN]\ntest_container_combos_non_first_code_sections_valid[fork_CancunEIP7692-eof_test-EOFCREATE/REVERT]\ntest_container_combos_non_first_code_sections_valid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/REVERT]\ntest_container_combos_non_first_code_sections_invalid[fork_CancunEIP7692-eof_test-EOFCREATE/STOP]\ntest_container_combos_non_first_code_sections_invalid[fork_CancunEIP7692-eof_test-EOFCREATE/RETURN]\ntest_container_combos_non_first_code_sections_invalid[fork_CancunEIP7692-eof_test-RETURNCONTRACT/RETURNCONTRACT]\ntest_container_both_kinds_same_sub[fork_CancunEIP7692-eof_test]\ntest_container_both_kinds_different_sub[fork_CancunEIP7692-eof_test]\ntest_subcontainer_wrong_eof_version[fork_CancunEIP7692-eof_test-0]\ntest_subcontainer_wrong_eof_version[fork_CancunEIP7692-eof_test-255]\ntest_subcontainer_wrong_size[fork_CancunEIP7692-eof_test-kind_RUNTIME-smaller]\ntest_subcontainer_wrong_size[fork_CancunEIP7692-eof_test-kind_RUNTIME-larger]\ntest_subcontainer_wrong_size[fork_CancunEIP7692-eof_test-kind_INITCODE-smaller]\ntest_subcontainer_wrong_size[fork_CancunEIP7692-eof_test-kind_INITCODE-larger]\ntest_deep_container[fork_CancunEIP7692-eof_test-valid]\ntest_deep_container[fork_CancunEIP7692-eof_test-code-error]\ntest_deep_container[fork_CancunEIP7692-eof_test-structure-error]\ntest_wide_container[fork_CancunEIP7692-eof_test-256]\ntest_wide_container[fork_CancunEIP7692-eof_test-257]\ntest_wide_container[fork_CancunEIP7692-eof_test-negative_i16]\ntest_wide_container[fork_CancunEIP7692-eof_test-max_u16]\ntest_migrated_eofcreate[fork_CancunEIP7692-eof_test-eofcreate_0]\ntest_migrated_eofcreate[fork_CancunEIP7692-eof_test-orphan_subcontainer_0]\ntest_migrated_eofcreate[fork_CancunEIP7692-eof_test-orphan_subcontainer_0_and_truncated_data]\ntest_migrated_eofcreate[fork_CancunEIP7692-eof_test-orphan_subcontainer_0_and_data]\ntest_migrated_eofcreate[fork_CancunEIP7692-eof_test-subcontainer_0_with_invalid_prefix]\ntest_migrated_eofcreate[fork_CancunEIP7692-eof_test-eofcreate_1_orphan_subcontainer_0]\ntest_migrated_eofcreate[fork_CancunEIP7692-eof_test-two_orphan_subcontainers]\ntest_migrated_eofcreate[fork_CancunEIP7692-eof_test-eofcreate_255_max_orphan_subcontainers]\ntest_migrated_eofcreate[fork_CancunEIP7692-eof_test-max_orphan_subcontainers]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until CancunEIP7692 tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/","title":"EIP-7702 Eoa Code Tx","text":"

    Documentation for tests/prague/eip7702_eoa_code_tx.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7702_eoa_code_tx --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7702_eoa_code_tx --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Cross-client EIP-7702 Tests

    "},{"location":"tests/prague/eip7702_eoa_code_tx/spec/","title":"Spec","text":"

    Documentation for tests/prague/eip7702_eoa_code_tx/spec.py.

    Defines EIP-7702 specification constants and functions.

    "},{"location":"tests/prague/eip7702_eoa_code_tx/spec/#tests.prague.eip7702_eoa_code_tx.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-7702 specifications as defined at https://eips.ethereum.org/EIPS/eip-7702

    Source code in tests/prague/eip7702_eoa_code_tx/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-7702 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-7702\n    \"\"\"\n\n    SET_CODE_TX_TYPE = 0x04\n    MAGIC = 0x05\n    PER_AUTH_BASE_COST = 2500\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/","title":"Test Eoa Code Txs","text":"

    Documentation for tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py.

    Generate fixtures for these test cases for Prague with:

    Prague only:

    fill -v tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py --fork=Prague --evm-bin=/path/to/evm-tool-dev-version\n
    For all forks up to and including Prague:
    fill -v tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n

    Tests use of set-code transactions from EIP-7702: Set EOA account code for one transaction

    Tests use of set-code transactions from EIP-7702: Set EOA account code for one transaction.

    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_to_sstore","title":"test_set_code_to_sstore(state_test, pre, suffix, succeeds, eoa_balance)","text":"

    Test the executing a simple SSTORE in a set-code transaction.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    @pytest.mark.parametrize(\n    \"eoa_balance\",\n    [\n        pytest.param(0, marks=pytest.mark.xfail(reason=\"evm fails on zero balance\")),\n        pytest.param(1),\n    ],\n)\n@pytest.mark.parametrize(\n    \"suffix,succeeds\",\n    [\n        pytest.param(Op.STOP, True, id=\"stop\"),\n        pytest.param(Op.RETURN(0, 0), True, id=\"return\"),\n        pytest.param(Op.REVERT, False, id=\"revert\"),\n        pytest.param(Op.INVALID, False, id=\"invalid\"),\n    ],\n)\ndef test_set_code_to_sstore(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    suffix: Bytecode,\n    succeeds: bool,\n    eoa_balance: int,\n):\n    \"\"\"\n    Test the executing a simple SSTORE in a set-code transaction.\n    \"\"\"\n    storage = Storage()\n    auth_signer = pre.fund_eoa(eoa_balance)\n\n    set_code = (\n        Op.SSTORE(storage.store_next(1), 1)\n        + Op.SSTORE(storage.store_next(2), 2)\n        + Op.SSTORE(storage.store_next(3), 3)\n        + suffix\n    )\n    set_code_to_address = pre.deploy_contract(\n        set_code,\n    )\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer,\n        value=0,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_to_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            set_code_to_address: Account(storage={k: 0 for k in storage}),\n            auth_signer: Account(nonce=0, code=b\"\", storage=storage if succeeds else {}),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_to_sstore_then_sload","title":"test_set_code_to_sstore_then_sload(blockchain_test, pre)","text":"

    Test the executing a simple SSTORE then SLOAD in two separate set-code transactions.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    def test_set_code_to_sstore_then_sload(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Test the executing a simple SSTORE then SLOAD in two separate set-code transactions.\n    \"\"\"\n    auth_signer = pre.fund_eoa(auth_account_start_balance)\n    sender = pre.fund_eoa()\n\n    storage_key_1 = 0x1\n    storage_key_2 = 0x2\n    storage_value = 0x1234\n\n    set_code_1 = Op.SSTORE(storage_key_1, storage_value) + Op.STOP\n    set_code_1_address = pre.deploy_contract(set_code_1)\n\n    set_code_2 = Op.SSTORE(storage_key_2, Op.ADD(Op.SLOAD(storage_key_1), 1)) + Op.STOP\n    set_code_2_address = pre.deploy_contract(set_code_2)\n\n    tx_1 = Transaction(\n        gas_limit=50_000,\n        to=auth_signer,\n        value=0,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_1_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=sender,\n    )\n\n    tx_2 = Transaction(\n        gas_limit=50_000,\n        to=auth_signer,\n        value=0,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_2_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=sender,\n    )\n\n    block = Block(\n        txs=[tx_1, tx_2],\n    )\n\n    blockchain_test(\n        pre=pre,\n        post={\n            auth_signer: Account(\n                nonce=0,\n                code=b\"\",\n                storage={\n                    storage_key_1: storage_value,\n                    storage_key_2: storage_value + 1,\n                },\n            ),\n        },\n        blocks=[block],\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_to_tstore_reentry","title":"test_set_code_to_tstore_reentry(state_test, pre, call_opcode, return_opcode)","text":"

    Test the executing a simple TSTORE in a set-code transaction, which also performs a re-entry to TLOAD the value.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.CALL,\n        Op.DELEGATECALL,\n        Op.STATICCALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"return_opcode\",\n    [\n        Op.RETURN,\n        Op.REVERT,\n    ],\n)\ndef test_set_code_to_tstore_reentry(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    call_opcode: Op,\n    return_opcode: Op,\n):\n    \"\"\"\n    Test the executing a simple TSTORE in a set-code transaction, which also performs a\n    re-entry to TLOAD the value.\n    \"\"\"\n    auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n    tload_value = 0x1234\n    set_code = Conditional(\n        condition=Op.ISZERO(Op.TLOAD(1)),\n        if_true=Op.TSTORE(1, tload_value)\n        + call_opcode(address=Op.ADDRESS)\n        + Op.RETURNDATACOPY(0, 0, 32)\n        + Op.SSTORE(2, Op.MLOAD(0)),\n        if_false=Op.MSTORE(0, Op.TLOAD(1)) + return_opcode(size=32),\n    )\n    set_code_to_address = pre.deploy_contract(set_code)\n\n    tx = Transaction(\n        gas_limit=100_000,\n        to=auth_signer,\n        value=0,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_to_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            auth_signer: Account(nonce=0, code=b\"\", storage={2: tload_value}),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_to_self_destruct","title":"test_set_code_to_self_destruct(state_test, pre)","text":"

    Test the executing self-destruct opcode in a set-code transaction.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    def test_set_code_to_self_destruct(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Test the executing self-destruct opcode in a set-code transaction.\n    \"\"\"\n    auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n    set_code_to_address = pre.deploy_contract(Op.SELFDESTRUCT(Op.ADDRESS))\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer,\n        value=0,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_to_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={},\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_to_contract_creator","title":"test_set_code_to_contract_creator(state_test, pre, op)","text":"

    Test the executing a contract-creating opcode in a set-code transaction.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    @pytest.mark.parametrize(\n    \"op\",\n    [\n        Op.CREATE,\n        Op.CREATE2,\n    ],\n)\ndef test_set_code_to_contract_creator(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    op: Op,\n):\n    \"\"\"\n    Test the executing a contract-creating opcode in a set-code transaction.\n    \"\"\"\n    storage = Storage()\n    auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n    deployed_code = Op.STOP\n    initcode = Initcode(deploy_code=deployed_code)\n\n    deployed_contract_address = compute_create_address(\n        address=auth_signer, salt=0, initcode=initcode, opcode=op\n    )\n\n    set_code = Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE(\n        storage.store_next(deployed_contract_address),\n        op(value=0, offset=0, size=Op.CALLDATASIZE),\n    )\n    set_code_to_address = pre.deploy_contract(set_code)\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer,\n        value=0,\n        data=initcode,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_to_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            set_code_to_address: Account(storage={}),\n            auth_signer: Account(nonce=1, code=b\"\", storage=storage),\n            deployed_contract_address: Account(\n                code=deployed_code,\n                storage={},\n            ),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_to_self_caller","title":"test_set_code_to_self_caller(state_test, pre, op, value)","text":"

    Test the executing a self-call in a set-code transaction.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    @pytest.mark.parametrize(\n    \"op\",\n    [\n        Op.CALL,\n        Op.DELEGATECALL,\n        Op.STATICCALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"value\",\n    [\n        0,\n        10**18,\n    ],\n)\ndef test_set_code_to_self_caller(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    op: Op,\n    value: int,\n):\n    \"\"\"\n    Test the executing a self-call in a set-code transaction.\n    \"\"\"\n    storage = Storage()\n    auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n    first_entry_slot = storage.store_next(True)\n    re_entry_success_slot = storage.store_next(op != Op.STATICCALL)\n    re_entry_call_return_code_slot = storage.store_next(op != Op.STATICCALL)\n    set_code = Conditional(\n        condition=Op.ISZERO(Op.SLOAD(first_entry_slot)),\n        if_true=Op.SSTORE(first_entry_slot, 1)\n        + Op.SSTORE(re_entry_call_return_code_slot, op(address=auth_signer, value=value))\n        + Op.STOP,\n        if_false=Op.SSTORE(re_entry_success_slot, 1) + Op.STOP,\n    )\n    set_code_to_address = pre.deploy_contract(set_code)\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer,\n        value=value,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_to_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=pre.fund_eoa(10**21),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            set_code_to_address: Account(storage={}),\n            auth_signer: Account(\n                nonce=0,\n                code=b\"\",\n                storage=storage,\n                balance=auth_account_start_balance + value,\n            ),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_call_set_code","title":"test_set_code_call_set_code(state_test, pre, op, value)","text":"

    Test the calling a set-code account from another set-code account.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    @pytest.mark.parametrize(\n    \"op\",\n    [\n        Op.CALL,\n        Op.DELEGATECALL,\n        Op.STATICCALL,\n        Op.CALLCODE,\n    ],\n)\n@pytest.mark.parametrize(\n    \"value\",\n    [\n        0,\n        10**18,\n    ],\n)\ndef test_set_code_call_set_code(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    op: Op,\n    value: int,\n):\n    \"\"\"\n    Test the calling a set-code account from another set-code account.\n    \"\"\"\n    auth_signer_1 = pre.fund_eoa(auth_account_start_balance)\n    storage_1 = Storage()\n\n    set_code_1_call_result_slot = storage_1.store_next(op != Op.STATICCALL)\n    set_code_1_success = storage_1.store_next(True)\n\n    auth_signer_2 = pre.fund_eoa(auth_account_start_balance)\n    storage_2 = Storage().set_next_slot(storage_1.peek_slot())\n    set_code_2_success = storage_2.store_next(op != Op.STATICCALL)\n\n    set_code_1 = (\n        Op.SSTORE(set_code_1_call_result_slot, op(address=auth_signer_2, value=value))\n        + Op.SSTORE(set_code_1_success, 1)\n        + Op.STOP\n    )\n    set_code_to_address_1 = pre.deploy_contract(set_code_1)\n\n    set_code_2 = Op.SSTORE(set_code_2_success, 1) + Op.STOP\n    set_code_to_address_2 = pre.deploy_contract(set_code_2)\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer_1,\n        value=value,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_to_address_1,\n                nonce=0,\n                signer=auth_signer_1,\n            ),\n            AuthorizationTuple(\n                address=set_code_to_address_2,\n                nonce=0,\n                signer=auth_signer_2,\n            ),\n        ],\n        sender=pre.fund_eoa(10**21),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            set_code_to_address_1: Account(storage={k: 0 for k in storage_1}),\n            set_code_to_address_2: Account(storage={k: 0 for k in storage_2}),\n            auth_signer_1: Account(\n                nonce=0,\n                storage=storage_1 if op in [Op.CALL, Op.STATICCALL] else storage_1 + storage_2,\n                balance=(0 if op == Op.CALL else value) + auth_account_start_balance,\n            ),\n            auth_signer_2: Account(\n                nonce=0,\n                storage=storage_2 if op == Op.CALL else {},\n                balance=(value if op == Op.CALL else 0) + auth_account_start_balance,\n            ),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_address_from_set_code","title":"test_address_from_set_code(state_test, pre)","text":"

    Test the address opcode in a set-code transaction.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    def test_address_from_set_code(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Test the address opcode in a set-code transaction.\n    \"\"\"\n    storage = Storage()\n    auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n    set_code = Op.SSTORE(storage.store_next(auth_signer), Op.ADDRESS) + Op.STOP\n    set_code_to_address = pre.deploy_contract(set_code)\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer,\n        value=0,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_to_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            set_code_to_address: Account(storage={}),\n            auth_signer: Account(nonce=0, code=b\"\", storage=storage),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_ext_code_on_set_code","title":"test_ext_code_on_set_code(state_test, pre, balance)","text":"

    Test different ext*code operations on a set-code address.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    @pytest.mark.parametrize(\n    \"balance\",\n    [\n        pytest.param(0, marks=pytest.mark.xfail(reason=\"evm fails on zero balance\")),\n        pytest.param(10**18),\n    ],\n)\ndef test_ext_code_on_set_code(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    balance: int,\n):\n    \"\"\"\n    Test different ext*code operations on a set-code address.\n    \"\"\"\n    auth_signer = pre.fund_eoa(balance)\n\n    slot = count(1)\n    slot_call_success = next(slot)\n    slot_caller = next(slot)\n    slot_ext_code_size_result = next(slot)\n    slot_ext_code_hash_result = next(slot)\n    slot_ext_code_copy_result = next(slot)\n    slot_ext_balance_result = next(slot)\n\n    callee_code = (\n        Op.SSTORE(slot_caller, Op.CALLER)\n        + Op.SSTORE(slot_ext_code_size_result, Op.EXTCODESIZE(Op.CALLER))\n        + Op.SSTORE(slot_ext_code_hash_result, Op.EXTCODEHASH(Op.CALLER))\n        + Op.EXTCODECOPY(Op.CALLER, 0, 0, Op.EXTCODESIZE(Op.CALLER))\n        + Op.SSTORE(slot_ext_code_copy_result, Op.MLOAD(0))\n        + Op.SSTORE(slot_ext_balance_result, Op.BALANCE(Op.CALLER))\n        + Op.STOP\n    )\n    callee_address = pre.deploy_contract(callee_code)\n    callee_storage = Storage()\n\n    auth_signer_storage = Storage()\n    set_code = Op.SSTORE(slot_call_success, Op.CALL(address=callee_address)) + Op.STOP\n    auth_signer_storage[slot_call_success] = True\n    set_code_to_address = pre.deploy_contract(set_code)\n\n    callee_storage[slot_caller] = auth_signer\n    callee_storage[slot_ext_code_size_result] = len(set_code)\n    callee_storage[slot_ext_code_hash_result] = set_code.keccak256()\n    callee_storage[slot_ext_code_copy_result] = bytes(set_code).ljust(32, b\"\\x00\")[:32]\n    callee_storage[slot_ext_balance_result] = balance\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_to_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            set_code_to_address: Account(storage={}),\n            auth_signer: Account(nonce=0, code=b\"\", storage=auth_signer_storage, balance=balance),\n            callee_address: Account(storage=callee_storage),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_self_code_on_set_code","title":"test_self_code_on_set_code(state_test, pre, balance)","text":"

    Test codesize and codecopy operations on a set-code address.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    @pytest.mark.parametrize(\n    \"balance\",\n    [\n        pytest.param(0, marks=pytest.mark.xfail(reason=\"evm fails on zero balance\")),\n        pytest.param(10**18),\n    ],\n)\ndef test_self_code_on_set_code(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    balance: int,\n):\n    \"\"\"\n    Test codesize and codecopy operations on a set-code address.\n    \"\"\"\n    auth_signer = pre.fund_eoa(balance)\n\n    slot = count(1)\n    slot_code_size_result = next(slot)\n    slot_code_copy_result = next(slot)\n    slot_self_balance_result = next(slot)\n\n    set_code = (\n        Op.SSTORE(slot_code_size_result, Op.CODESIZE)\n        + Op.CODECOPY(0, 0, Op.CODESIZE)\n        + Op.SSTORE(slot_code_copy_result, Op.MLOAD(0))\n        + Op.SSTORE(slot_self_balance_result, Op.SELFBALANCE)\n        + Op.STOP\n    )\n    set_code_to_address = pre.deploy_contract(set_code)\n\n    storage = Storage()\n    storage[slot_code_size_result] = len(set_code)\n    storage[slot_code_copy_result] = bytes(set_code).ljust(32, b\"\\x00\")[:32]\n    storage[slot_self_balance_result] = balance\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_to_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            set_code_to_address: Account(storage={}),\n            auth_signer: Account(nonce=0, code=b\"\", storage=storage, balance=balance),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_to_account_deployed_in_same_tx","title":"test_set_code_to_account_deployed_in_same_tx(state_test, pre, create_op)","text":"

    Test setting the code of an account to an address that is deployed in the same transaction, and test calling the set-code address and the deployed contract.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    @pytest.mark.parametrize(\n    \"create_op\",\n    [\n        Op.CREATE,\n        Op.CREATE2,\n    ],\n)\ndef test_set_code_to_account_deployed_in_same_tx(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    create_op: Op,\n):\n    \"\"\"\n    Test setting the code of an account to an address that is deployed in the same transaction,\n    and test calling the set-code address and the deployed contract.\n    \"\"\"\n    auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n    success_slot = 1\n\n    deployed_code = Op.SSTORE(success_slot, 1) + Op.STOP\n    initcode = Initcode(deploy_code=deployed_code)\n\n    deployed_contract_address_slot = 1\n    signer_call_return_code_slot = 2\n    deployed_contract_call_return_code_slot = 3\n\n    contract_creator_code = (\n        Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n        + Op.SSTORE(deployed_contract_address_slot, create_op(offset=0, size=Op.CALLDATASIZE))\n        + Op.SSTORE(signer_call_return_code_slot, Op.CALL(address=auth_signer))\n        + Op.SSTORE(\n            deployed_contract_call_return_code_slot,\n            Op.CALL(address=Op.SLOAD(deployed_contract_address_slot)),\n        )\n        + Op.STOP()\n    )\n    contract_creator_address = pre.deploy_contract(contract_creator_code)\n\n    if create_op == Op.CREATE:\n        deployed_contract_address = compute_create_address(\n            address=contract_creator_address,\n            nonce=1,\n        )\n    else:\n        deployed_contract_address = compute_create2_address(\n            address=contract_creator_address,\n            salt=0,\n            initcode=initcode,\n        )\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=contract_creator_address,\n        value=0,\n        data=initcode,\n        authorization_list=[\n            AuthorizationTuple(\n                address=deployed_contract_address,\n                nonce=0,\n                signer=auth_signer,\n            ),\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            deployed_contract_address: Account(\n                storage={success_slot: 1},\n            ),\n            auth_signer: Account(\n                nonce=0,\n                code=b\"\",\n                storage={},\n            ),\n            contract_creator_address: Account(\n                storage={\n                    deployed_contract_address_slot: deployed_contract_address,\n                    signer_call_return_code_slot: 1,\n                    deployed_contract_call_return_code_slot: 1,\n                }\n            ),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_multiple_valid_authorization_tuples_same_signer","title":"test_set_code_multiple_valid_authorization_tuples_same_signer(state_test, pre)","text":"

    Test setting the code of an account with multiple authorization tuples from the same signer.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    def test_set_code_multiple_valid_authorization_tuples_same_signer(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Test setting the code of an account with multiple authorization tuples from the same signer.\n    \"\"\"\n    auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n    success_slot = 1\n\n    tuple_count = 10\n\n    addresses = [\n        pre.deploy_contract(Op.SSTORE(success_slot, i + 1) + Op.STOP) for i in range(tuple_count)\n    ]\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer,\n        value=0,\n        authorization_list=[\n            AuthorizationTuple(\n                address=address,\n                nonce=0,\n                signer=auth_signer,\n            )\n            for address in addresses\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            auth_signer: Account(\n                nonce=0,\n                code=b\"\",\n                storage={\n                    success_slot: 1,\n                },\n            ),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_multiple_valid_authorization_tuples_first_invalid_same_signer","title":"test_set_code_multiple_valid_authorization_tuples_first_invalid_same_signer(state_test, pre)","text":"

    Test setting the code of an account with multiple authorization tuples from the same signer but the first tuple is invalid.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    def test_set_code_multiple_valid_authorization_tuples_first_invalid_same_signer(\n    state_test: StateTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Test setting the code of an account with multiple authorization tuples from the same signer\n    but the first tuple is invalid.\n    \"\"\"\n    auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n    success_slot = 1\n\n    tuple_count = 10\n\n    addresses = [\n        pre.deploy_contract(Op.SSTORE(success_slot, i + 1) + Op.STOP) for i in range(tuple_count)\n    ]\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer,\n        value=0,\n        authorization_list=[\n            AuthorizationTuple(\n                address=address,\n                nonce=1 if i == 0 else 0,\n                signer=auth_signer,\n            )\n            for i, address in enumerate(addresses)\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            auth_signer: Account(\n                nonce=0,\n                code=b\"\",\n                storage={\n                    success_slot: 2,\n                },\n            ),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/#tests.prague.eip7702_eoa_code_tx.test_eoa_code_txs.test_set_code_invalid_authorization_tuple","title":"test_set_code_invalid_authorization_tuple(state_test, pre, invalidity_reason)","text":"

    Test attempting to set the code of an account with invalid authorization tuple.

    Source code in tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py
    @pytest.mark.parametrize(\n    \"invalidity_reason\",\n    [\n        InvalidityReason.NONCE,\n        pytest.param(\n            InvalidityReason.MULTIPLE_NONCE, marks=pytest.mark.xfail(reason=\"test issue\")\n        ),\n        pytest.param(InvalidityReason.CHAIN_ID, marks=pytest.mark.xfail(reason=\"evm issue\")),\n    ],\n)\ndef test_set_code_invalid_authorization_tuple(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    invalidity_reason: InvalidityReason,\n):\n    \"\"\"\n    Test attempting to set the code of an account with invalid authorization tuple.\n    \"\"\"\n    auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n    success_slot = 1\n\n    set_code = Op.SSTORE(success_slot, 1) + Op.STOP\n    set_code_to_address = pre.deploy_contract(set_code)\n\n    tx = Transaction(\n        gas_limit=10_000_000,\n        to=auth_signer,\n        value=0,\n        authorization_list=[\n            AuthorizationTuple(\n                address=set_code_to_address,\n                nonce=1\n                if invalidity_reason == InvalidityReason.NONCE\n                else [0, 1]\n                if invalidity_reason == InvalidityReason.MULTIPLE_NONCE\n                else 0,\n                chain_id=2 if invalidity_reason == InvalidityReason.CHAIN_ID else 0,\n                signer=auth_signer,\n            )\n        ],\n        sender=pre.fund_eoa(),\n    )\n\n    state_test(\n        env=Environment(),\n        pre=pre,\n        tx=tx,\n        post={\n            auth_signer: Account(\n                nonce=0,\n                code=b\"\",\n                storage={\n                    success_slot: 0,\n                },\n            ),\n        },\n    )\n
    "},{"location":"tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/index/test_cases/","title":"Test Eoa Code Txs - Test Cases","text":"

    Test cases generated from tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py

    Parametrized test cases generated from the test module tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py:

    test_set_code_to_sstore[fork_Prague-blockchain_test-stop-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-stop-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-return-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-return-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-revert-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-revert-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-invalid-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-invalid-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-stop-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-stop-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-return-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-return-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-revert-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-revert-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-invalid-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-invalid-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-state_test-stop-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-state_test-stop-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-state_test-return-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-state_test-return-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-state_test-revert-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-state_test-revert-eoa_balance_1]\ntest_set_code_to_sstore[fork_Prague-state_test-invalid-eoa_balance_0]\ntest_set_code_to_sstore[fork_Prague-state_test-invalid-eoa_balance_1]\ntest_set_code_to_sstore_then_sload[fork_Prague-blockchain_test]\ntest_set_code_to_sstore_then_sload[fork_Prague-blockchain_test_engine]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test-return_opcode_RETURN-call_opcode_CALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test-return_opcode_RETURN-call_opcode_DELEGATECALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test-return_opcode_RETURN-call_opcode_STATICCALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test-return_opcode_RETURN-call_opcode_CALLCODE]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test-return_opcode_REVERT-call_opcode_CALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test-return_opcode_REVERT-call_opcode_DELEGATECALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test-return_opcode_REVERT-call_opcode_STATICCALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test-return_opcode_REVERT-call_opcode_CALLCODE]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test_engine-return_opcode_RETURN-call_opcode_CALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test_engine-return_opcode_RETURN-call_opcode_DELEGATECALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test_engine-return_opcode_RETURN-call_opcode_STATICCALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test_engine-return_opcode_RETURN-call_opcode_CALLCODE]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test_engine-return_opcode_REVERT-call_opcode_CALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test_engine-return_opcode_REVERT-call_opcode_DELEGATECALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test_engine-return_opcode_REVERT-call_opcode_STATICCALL]\ntest_set_code_to_tstore_reentry[fork_Prague-blockchain_test_engine-return_opcode_REVERT-call_opcode_CALLCODE]\ntest_set_code_to_tstore_reentry[fork_Prague-state_test-return_opcode_RETURN-call_opcode_CALL]\ntest_set_code_to_tstore_reentry[fork_Prague-state_test-return_opcode_RETURN-call_opcode_DELEGATECALL]\ntest_set_code_to_tstore_reentry[fork_Prague-state_test-return_opcode_RETURN-call_opcode_STATICCALL]\ntest_set_code_to_tstore_reentry[fork_Prague-state_test-return_opcode_RETURN-call_opcode_CALLCODE]\ntest_set_code_to_tstore_reentry[fork_Prague-state_test-return_opcode_REVERT-call_opcode_CALL]\ntest_set_code_to_tstore_reentry[fork_Prague-state_test-return_opcode_REVERT-call_opcode_DELEGATECALL]\ntest_set_code_to_tstore_reentry[fork_Prague-state_test-return_opcode_REVERT-call_opcode_STATICCALL]\ntest_set_code_to_tstore_reentry[fork_Prague-state_test-return_opcode_REVERT-call_opcode_CALLCODE]\ntest_set_code_to_self_destruct[fork_Prague-blockchain_test]\ntest_set_code_to_self_destruct[fork_Prague-blockchain_test_engine]\ntest_set_code_to_self_destruct[fork_Prague-state_test]\ntest_set_code_to_contract_creator[fork_Prague-blockchain_test-op_CREATE]\ntest_set_code_to_contract_creator[fork_Prague-blockchain_test-op_CREATE2]\ntest_set_code_to_contract_creator[fork_Prague-blockchain_test_engine-op_CREATE]\ntest_set_code_to_contract_creator[fork_Prague-blockchain_test_engine-op_CREATE2]\ntest_set_code_to_contract_creator[fork_Prague-state_test-op_CREATE]\ntest_set_code_to_contract_creator[fork_Prague-state_test-op_CREATE2]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test-value_0-op_CALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test-value_0-op_DELEGATECALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test-value_0-op_STATICCALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test-value_0-op_CALLCODE]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test-value_1000000000000000000-op_CALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test-value_1000000000000000000-op_DELEGATECALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test-value_1000000000000000000-op_STATICCALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test-value_1000000000000000000-op_CALLCODE]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test_engine-value_0-op_CALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test_engine-value_0-op_DELEGATECALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test_engine-value_0-op_STATICCALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test_engine-value_0-op_CALLCODE]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test_engine-value_1000000000000000000-op_CALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test_engine-value_1000000000000000000-op_DELEGATECALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test_engine-value_1000000000000000000-op_STATICCALL]\ntest_set_code_to_self_caller[fork_Prague-blockchain_test_engine-value_1000000000000000000-op_CALLCODE]\ntest_set_code_to_self_caller[fork_Prague-state_test-value_0-op_CALL]\ntest_set_code_to_self_caller[fork_Prague-state_test-value_0-op_DELEGATECALL]\ntest_set_code_to_self_caller[fork_Prague-state_test-value_0-op_STATICCALL]\ntest_set_code_to_self_caller[fork_Prague-state_test-value_0-op_CALLCODE]\ntest_set_code_to_self_caller[fork_Prague-state_test-value_1000000000000000000-op_CALL]\ntest_set_code_to_self_caller[fork_Prague-state_test-value_1000000000000000000-op_DELEGATECALL]\ntest_set_code_to_self_caller[fork_Prague-state_test-value_1000000000000000000-op_STATICCALL]\ntest_set_code_to_self_caller[fork_Prague-state_test-value_1000000000000000000-op_CALLCODE]\ntest_set_code_call_set_code[fork_Prague-blockchain_test-value_0-op_CALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test-value_0-op_DELEGATECALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test-value_0-op_STATICCALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test-value_0-op_CALLCODE]\ntest_set_code_call_set_code[fork_Prague-blockchain_test-value_1000000000000000000-op_CALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test-value_1000000000000000000-op_DELEGATECALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test-value_1000000000000000000-op_STATICCALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test-value_1000000000000000000-op_CALLCODE]\ntest_set_code_call_set_code[fork_Prague-blockchain_test_engine-value_0-op_CALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test_engine-value_0-op_DELEGATECALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test_engine-value_0-op_STATICCALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test_engine-value_0-op_CALLCODE]\ntest_set_code_call_set_code[fork_Prague-blockchain_test_engine-value_1000000000000000000-op_CALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test_engine-value_1000000000000000000-op_DELEGATECALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test_engine-value_1000000000000000000-op_STATICCALL]\ntest_set_code_call_set_code[fork_Prague-blockchain_test_engine-value_1000000000000000000-op_CALLCODE]\ntest_set_code_call_set_code[fork_Prague-state_test-value_0-op_CALL]\ntest_set_code_call_set_code[fork_Prague-state_test-value_0-op_DELEGATECALL]\ntest_set_code_call_set_code[fork_Prague-state_test-value_0-op_STATICCALL]\ntest_set_code_call_set_code[fork_Prague-state_test-value_0-op_CALLCODE]\ntest_set_code_call_set_code[fork_Prague-state_test-value_1000000000000000000-op_CALL]\ntest_set_code_call_set_code[fork_Prague-state_test-value_1000000000000000000-op_DELEGATECALL]\ntest_set_code_call_set_code[fork_Prague-state_test-value_1000000000000000000-op_STATICCALL]\ntest_set_code_call_set_code[fork_Prague-state_test-value_1000000000000000000-op_CALLCODE]\ntest_address_from_set_code[fork_Prague-blockchain_test]\ntest_address_from_set_code[fork_Prague-blockchain_test_engine]\ntest_address_from_set_code[fork_Prague-state_test]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test-balance_0]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test-balance_1000000000000000000]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test_engine-balance_0]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test_engine-balance_1000000000000000000]\ntest_ext_code_on_set_code[fork_Prague-state_test-balance_0]\ntest_ext_code_on_set_code[fork_Prague-state_test-balance_1000000000000000000]\ntest_self_code_on_set_code[fork_Prague-blockchain_test-balance_0]\ntest_self_code_on_set_code[fork_Prague-blockchain_test-balance_1000000000000000000]\ntest_self_code_on_set_code[fork_Prague-blockchain_test_engine-balance_0]\ntest_self_code_on_set_code[fork_Prague-blockchain_test_engine-balance_1000000000000000000]\ntest_self_code_on_set_code[fork_Prague-state_test-balance_0]\ntest_self_code_on_set_code[fork_Prague-state_test-balance_1000000000000000000]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_op_CREATE]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_op_CREATE2]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_op_CREATE]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_op_CREATE2]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-state_test-create_op_CREATE]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-state_test-create_op_CREATE2]\ntest_set_code_multiple_valid_authorization_tuples_same_signer[fork_Prague-blockchain_test]\ntest_set_code_multiple_valid_authorization_tuples_same_signer[fork_Prague-blockchain_test_engine]\ntest_set_code_multiple_valid_authorization_tuples_same_signer[fork_Prague-state_test]\ntest_set_code_multiple_valid_authorization_tuples_first_invalid_same_signer[fork_Prague-blockchain_test]\ntest_set_code_multiple_valid_authorization_tuples_first_invalid_same_signer[fork_Prague-blockchain_test_engine]\ntest_set_code_multiple_valid_authorization_tuples_first_invalid_same_signer[fork_Prague-state_test]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test-invalidity_reason_InvalidityReason.NONCE]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test-invalidity_reason_InvalidityReason.MULTIPLE_NONCE]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test-invalidity_reason_InvalidityReason.CHAIN_ID]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test_engine-invalidity_reason_InvalidityReason.NONCE]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test_engine-invalidity_reason_InvalidityReason.MULTIPLE_NONCE]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test_engine-invalidity_reason_InvalidityReason.CHAIN_ID]\ntest_set_code_invalid_authorization_tuple[fork_Prague-state_test-invalidity_reason_InvalidityReason.NONCE]\ntest_set_code_invalid_authorization_tuple[fork_Prague-state_test-invalidity_reason_InvalidityReason.MULTIPLE_NONCE]\ntest_set_code_invalid_authorization_tuple[fork_Prague-state_test-invalidity_reason_InvalidityReason.CHAIN_ID]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py\n
    "},{"location":"tests/shanghai/","title":"Shanghai","text":"

    Documentation for tests/shanghai.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai\n

    Test cases for EVM functionality introduced in Shanghai.

    "},{"location":"tests/shanghai/eip3651_warm_coinbase/","title":"EIP-3651 Warm Coinbase","text":"

    Documentation for tests/shanghai/eip3651_warm_coinbase.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip3651_warm_coinbase\n
    Tests EIP-3651: Warm COINBASE

    Tests for EIP-3651: Warm COINBASE.

    "},{"location":"tests/shanghai/eip3651_warm_coinbase/spec/","title":"Spec","text":"

    Documentation for tests/shanghai/eip3651_warm_coinbase/spec.py.

    Defines EIP-3651 specification constants and functions.

    "},{"location":"tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase/","title":"Test Warm Coinbase","text":"

    Documentation for tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py\n
    Tests EIP-3651: Warm COINBASE

    Tests for EIP-3651: Warm COINBASE.

    Tests ported from:
    • ethereum/tests/pull/1082.
    "},{"location":"tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase/#tests.shanghai.eip3651_warm_coinbase.test_warm_coinbase.test_warm_coinbase_call_out_of_gas","title":"test_warm_coinbase_call_out_of_gas(state_test, env, pre, post, sender, fork, opcode, contract_under_test_code, call_gas_exact, use_sufficient_gas)","text":"

    Test that the coinbase is warm by accessing the COINBASE with each of the following opcodes:

    • CALL
    • CALLCODE
    • DELEGATECALL
    • STATICCALL
    Source code in tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py
    @pytest.mark.valid_from(\"Shanghai\")\n@pytest.mark.parametrize(\n    \"use_sufficient_gas\",\n    [True, False],\n    ids=[\"sufficient_gas\", \"insufficient_gas\"],\n)\n@pytest.mark.parametrize(\n    \"opcode,contract_under_test_code,call_gas_exact\",\n    [\n        (\n            \"call\",\n            Op.POP(Op.CALL(0, Op.COINBASE, 0, 0, 0, 0, 0)),\n            # Extra gas: COINBASE + 4*PUSH1 + 2*DUP1 + POP\n            GAS_REQUIRED_CALL_WARM_ACCOUNT + 22,\n        ),\n        (\n            \"callcode\",\n            Op.POP(Op.CALLCODE(0, Op.COINBASE, 0, 0, 0, 0, 0)),\n            # Extra gas: COINBASE + 4*PUSH1 + 2*DUP1 + POP\n            GAS_REQUIRED_CALL_WARM_ACCOUNT + 22,\n        ),\n        (\n            \"delegatecall\",\n            Op.POP(Op.DELEGATECALL(0, Op.COINBASE, 0, 0, 0, 0)),\n            # Extra: COINBASE + 3*PUSH1 + 2*DUP1 + POP\n            GAS_REQUIRED_CALL_WARM_ACCOUNT + 19,\n        ),\n        (\n            \"staticcall\",\n            Op.POP(Op.STATICCALL(0, Op.COINBASE, 0, 0, 0, 0)),\n            # Extra: COINBASE + 3*PUSH1 + 2*DUP1 + POP\n            GAS_REQUIRED_CALL_WARM_ACCOUNT + 19,\n        ),\n    ],\n    ids=[\"CALL\", \"CALLCODE\", \"DELEGATECALL\", \"STATICCALL\"],\n)\ndef test_warm_coinbase_call_out_of_gas(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    post: Alloc,\n    sender: Address,\n    fork: Fork,\n    opcode: str,\n    contract_under_test_code: Bytecode,\n    call_gas_exact: int,\n    use_sufficient_gas: bool,\n):\n    \"\"\"\n    Test that the coinbase is warm by accessing the COINBASE with each\n    of the following opcodes:\n\n    - CALL\n    - CALLCODE\n    - DELEGATECALL\n    - STATICCALL\n    \"\"\"\n    contract_under_test_address = pre.deploy_contract(contract_under_test_code)\n\n    if not use_sufficient_gas:\n        call_gas_exact -= 1\n\n    caller_code = Op.SSTORE(\n        0,\n        Op.CALL(call_gas_exact, contract_under_test_address, 0, 0, 0, 0, 0),\n    )\n    caller_address = pre.deploy_contract(caller_code)\n\n    tx = Transaction(\n        ty=0x0,\n        chain_id=0x01,\n        nonce=0,\n        to=caller_address,\n        gas_limit=100000000,\n        gas_price=10,\n        sender=sender,\n    )\n\n    if use_sufficient_gas and fork >= Shanghai:\n        post[caller_address] = Account(\n            storage={\n                # On shanghai and beyond, calls with only 100 gas to\n                # coinbase will succeed.\n                0: 1,\n            }\n        )\n    else:\n        post[caller_address] = Account(\n            storage={\n                # Before shanghai, calls with only 100 gas to\n                # coinbase will fail.\n                0: 0,\n            }\n        )\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n        tag=\"opcode_\" + opcode,\n    )\n
    "},{"location":"tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase/#tests.shanghai.eip3651_warm_coinbase.test_warm_coinbase.test_warm_coinbase_gas_usage","title":"test_warm_coinbase_gas_usage(state_test, env, pre, sender, fork, opcode, code_gas_measure)","text":"

    Test the gas usage of opcodes affected by assuming a warm coinbase:

    • EXTCODESIZE
    • EXTCODECOPY
    • EXTCODEHASH
    • BALANCE
    • CALL
    • CALLCODE
    • DELEGATECALL
    • STATICCALL
    Source code in tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py
    @pytest.mark.valid_from(\"Berlin\")  # these tests fill for fork >= Berlin\n@pytest.mark.parametrize(\n    \"opcode,code_gas_measure\",\n    gas_measured_opcodes,\n    ids=[i[0] for i in gas_measured_opcodes],\n)\ndef test_warm_coinbase_gas_usage(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    sender: Address,\n    fork: Fork,\n    opcode: str,\n    code_gas_measure: Bytecode,\n):\n    \"\"\"\n    Test the gas usage of opcodes affected by assuming a warm coinbase:\n\n    - EXTCODESIZE\n    - EXTCODECOPY\n    - EXTCODEHASH\n    - BALANCE\n    - CALL\n    - CALLCODE\n    - DELEGATECALL\n    - STATICCALL\n    \"\"\"\n    measure_address = pre.deploy_contract(\n        code=code_gas_measure,\n    )\n\n    if fork >= Shanghai:\n        expected_gas = GAS_REQUIRED_CALL_WARM_ACCOUNT  # Warm account access cost after EIP-3651\n    else:\n        expected_gas = 2600  # Cold account access cost before EIP-3651\n\n    tx = Transaction(\n        ty=0x0,\n        chain_id=0x01,\n        nonce=0,\n        to=measure_address,\n        gas_limit=100000000,\n        gas_price=10,\n        sender=sender,\n    )\n\n    post = {\n        measure_address: Account(\n            storage={\n                0x00: expected_gas,\n            }\n        )\n    }\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n        tag=\"opcode_\" + opcode.lower(),\n    )\n
    "},{"location":"tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase/index/test_cases/","title":"Test Warm Coinbase - Test Cases","text":"

    Test cases generated from tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py

    Parametrized test cases generated from the test module tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py:

    test_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-CALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-CALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-CALLCODE-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-CALLCODE-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-DELEGATECALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-DELEGATECALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-STATICCALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-STATICCALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test_engine-CALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test_engine-CALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test_engine-CALLCODE-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test_engine-CALLCODE-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test_engine-DELEGATECALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test_engine-DELEGATECALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test_engine-STATICCALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test_engine-STATICCALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-state_test-CALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-state_test-CALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-state_test-CALLCODE-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-state_test-CALLCODE-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-state_test-DELEGATECALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-state_test-DELEGATECALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-state_test-STATICCALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Shanghai-state_test-STATICCALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-CALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-CALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-CALLCODE-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-CALLCODE-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-DELEGATECALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-DELEGATECALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-STATICCALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-STATICCALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test_engine-CALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test_engine-CALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test_engine-CALLCODE-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test_engine-CALLCODE-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test_engine-DELEGATECALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test_engine-DELEGATECALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test_engine-STATICCALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test_engine-STATICCALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-state_test-CALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-state_test-CALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-state_test-CALLCODE-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-state_test-CALLCODE-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-state_test-DELEGATECALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-state_test-DELEGATECALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-state_test-STATICCALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Cancun-state_test-STATICCALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test-CALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test-CALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test-CALLCODE-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test-CALLCODE-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test-DELEGATECALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test-DELEGATECALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test-STATICCALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test-STATICCALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test_engine-CALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test_engine-CALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test_engine-CALLCODE-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test_engine-CALLCODE-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test_engine-DELEGATECALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test_engine-DELEGATECALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test_engine-STATICCALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-blockchain_test_engine-STATICCALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-state_test-CALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-state_test-CALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-state_test-CALLCODE-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-state_test-CALLCODE-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-state_test-DELEGATECALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-state_test-DELEGATECALL-insufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-state_test-STATICCALL-sufficient_gas]\ntest_warm_coinbase_call_out_of_gas[fork_Prague-state_test-STATICCALL-insufficient_gas]\ntest_warm_coinbase_gas_usage[fork_Berlin-blockchain_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Berlin-blockchain_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Berlin-blockchain_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Berlin-blockchain_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Berlin-blockchain_test-CALL]\ntest_warm_coinbase_gas_usage[fork_Berlin-blockchain_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Berlin-blockchain_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Berlin-blockchain_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Berlin-state_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Berlin-state_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Berlin-state_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Berlin-state_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Berlin-state_test-CALL]\ntest_warm_coinbase_gas_usage[fork_Berlin-state_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Berlin-state_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Berlin-state_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_London-blockchain_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_London-blockchain_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_London-blockchain_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_London-blockchain_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_London-blockchain_test-CALL]\ntest_warm_coinbase_gas_usage[fork_London-blockchain_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_London-blockchain_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_London-blockchain_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_London-state_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_London-state_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_London-state_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_London-state_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_London-state_test-CALL]\ntest_warm_coinbase_gas_usage[fork_London-state_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_London-state_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_London-state_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test-CALL]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test_engine-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test_engine-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test_engine-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test_engine-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test_engine-CALL]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test_engine-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test_engine-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Paris-blockchain_test_engine-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Paris-state_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Paris-state_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Paris-state_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Paris-state_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Paris-state_test-CALL]\ntest_warm_coinbase_gas_usage[fork_Paris-state_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Paris-state_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Paris-state_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-CALL]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test_engine-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test_engine-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test_engine-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test_engine-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test_engine-CALL]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test_engine-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test_engine-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test_engine-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Shanghai-state_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Shanghai-state_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Shanghai-state_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Shanghai-state_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Shanghai-state_test-CALL]\ntest_warm_coinbase_gas_usage[fork_Shanghai-state_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Shanghai-state_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Shanghai-state_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-CALL]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test_engine-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test_engine-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test_engine-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test_engine-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test_engine-CALL]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test_engine-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test_engine-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Cancun-blockchain_test_engine-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Cancun-state_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Cancun-state_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Cancun-state_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Cancun-state_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Cancun-state_test-CALL]\ntest_warm_coinbase_gas_usage[fork_Cancun-state_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Cancun-state_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Cancun-state_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test-CALL]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test_engine-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test_engine-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test_engine-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test_engine-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test_engine-CALL]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test_engine-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test_engine-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Prague-blockchain_test_engine-STATICCALL]\ntest_warm_coinbase_gas_usage[fork_Prague-state_test-EXTCODESIZE]\ntest_warm_coinbase_gas_usage[fork_Prague-state_test-EXTCODECOPY]\ntest_warm_coinbase_gas_usage[fork_Prague-state_test-EXTCODEHASH]\ntest_warm_coinbase_gas_usage[fork_Prague-state_test-BALANCE]\ntest_warm_coinbase_gas_usage[fork_Prague-state_test-CALL]\ntest_warm_coinbase_gas_usage[fork_Prague-state_test-CALLCODE]\ntest_warm_coinbase_gas_usage[fork_Prague-state_test-DELEGATECALL]\ntest_warm_coinbase_gas_usage[fork_Prague-state_test-STATICCALL]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py\n
    "},{"location":"tests/shanghai/eip3855_push0/","title":"EIP-3855 Push0","text":"

    Documentation for tests/shanghai/eip3855_push0.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip3855_push0\n
    Tests EIP-3855: PUSH0 Instruction

    Tests for EIP-3855: PUSH0 Instruction.

    "},{"location":"tests/shanghai/eip3855_push0/spec/","title":"Spec","text":"

    Documentation for tests/shanghai/eip3855_push0/spec.py.

    Defines EIP-3855 specification constants and functions.

    "},{"location":"tests/shanghai/eip3855_push0/test_push0/","title":"Test Push0","text":"

    Documentation for tests/shanghai/eip3855_push0/test_push0.py.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip3855_push0/test_push0.py\n
    Tests EIP-3855: PUSH0 Instruction

    Tests for EIP-3855: PUSH0 Instruction.

    Tests ported from:
    • ethereum/tests/pull/1033.
    "},{"location":"tests/shanghai/eip3855_push0/test_push0/#tests.shanghai.eip3855_push0.test_push0.test_push0_contracts","title":"test_push0_contracts(state_test, env, pre, post, sender, contract_code, expected_storage)","text":"

    Tests PUSH0 within various deployed contracts.

    Source code in tests/shanghai/eip3855_push0/test_push0.py
    @pytest.mark.parametrize(\n    \"contract_code,expected_storage\",\n    [\n        # Use PUSH0 to set a key for SSTORE.\n        pytest.param(\n            Op.SSTORE(Op.PUSH0, 1),\n            Account(storage={0x00: 0x01}),\n            id=\"key_sstore\",\n        ),\n        # Fill stack with PUSH0, then OR all values and save using SSTORE.\n        pytest.param(\n            (Op.PUSH0 * 1024) + (Op.OR * 1023) + Op.SSTORE(Op.SWAP1, 1),\n            Account(storage={0x00: 0x01}),\n            id=\"fill_stack\",\n        ),\n        # Stack overflow by using PUSH0 1025 times.\n        pytest.param(\n            Op.SSTORE(Op.PUSH0, 1) + (Op.PUSH0 * 1025),\n            Account(storage={0x00: 0x00}),\n            id=\"stack_overflow\",\n        ),\n        # Update an already existing storage value.\n        pytest.param(\n            Op.SSTORE(Op.PUSH0, 2) + Op.SSTORE(1, Op.PUSH0),\n            Account(storage={0x00: 0x02, 0x01: 0x00}),\n            id=\"storage_overwrite\",\n        ),\n        # Jump to a JUMPDEST next to a PUSH0, must succeed.\n        pytest.param(\n            Op.PUSH1(4) + Op.JUMP + Op.PUSH0 + Op.JUMPDEST + Op.SSTORE(Op.PUSH0, 1) + Op.STOP,\n            Account(storage={0x00: 0x01}),\n            id=\"before_jumpdest\",\n        ),\n        # Test PUSH0 gas cost.\n        pytest.param(\n            CodeGasMeasure(\n                code=Op.PUSH0,\n                extra_stack_items=1,\n            ),\n            Account(storage={0x00: 0x02}),\n            id=\"gas_cost\",\n        ),\n    ],\n)\ndef test_push0_contracts(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    post: Alloc,\n    sender: EOA,\n    contract_code: Bytecode,\n    expected_storage: Account,\n):\n    \"\"\"\n    Tests PUSH0 within various deployed contracts.\n    \"\"\"\n    push0_contract = pre.deploy_contract(contract_code)\n    tx = Transaction(to=push0_contract, gas_limit=100_000, sender=sender)\n    post[push0_contract] = expected_storage\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/shanghai/eip3855_push0/test_push0/#tests.shanghai.eip3855_push0.test_push0.TestPush0CallContext","title":"TestPush0CallContext","text":"

    Tests the PUSH0 operation during various call contexts including: - CALL - CALLCODE - DELEGATECALL - STATICCALL

    Source code in tests/shanghai/eip3855_push0/test_push0.py
    class TestPush0CallContext:\n    \"\"\"\n    Tests the PUSH0 operation during various call contexts including:\n    - CALL\n    - CALLCODE\n    - DELEGATECALL\n    - STATICCALL\n    \"\"\"\n\n    @pytest.fixture\n    def push0_contract_callee(self, pre: Alloc) -> Address:\n        \"\"\"\n        Deploys a PUSH0 contract callee to the pre alloc returning its address.\n        \"\"\"\n        push0_contract = pre.deploy_contract(Op.MSTORE8(Op.PUSH0, 0xFF) + Op.RETURN(Op.PUSH0, 1))\n        return push0_contract\n\n    @pytest.fixture\n    def push0_contract_caller(\n        self, pre: Alloc, call_opcode: Op, push0_contract_callee: Address\n    ) -> Address:\n        \"\"\"\n        Deploys a contract responsible for calling the callee PUSH0 contract returning its address.\n        \"\"\"\n        call_code = (\n            Op.SSTORE(0, call_opcode(gas=100_000, address=push0_contract_callee))\n            + Op.SSTORE(0, 1)\n            + Op.RETURNDATACOPY(0x1F, 0, 1)\n            + Op.SSTORE(1, Op.MLOAD(0))\n        )\n        return pre.deploy_contract(call_code)\n\n    @pytest.mark.parametrize(\n        \"call_opcode\",\n        [\n            Op.CALL,\n            Op.CALLCODE,\n            Op.DELEGATECALL,\n            Op.STATICCALL,\n        ],\n        ids=[\"call\", \"callcode\", \"delegatecall\", \"staticcall\"],\n    )\n    def test_push0_contract_during_call_contexts(\n        self,\n        state_test: StateTestFiller,\n        env: Environment,\n        pre: Alloc,\n        post: Alloc,\n        sender: EOA,\n        push0_contract_caller: Address,\n    ):\n        \"\"\"\n        Test PUSH0 during various call contexts.\n        \"\"\"\n        tx = Transaction(to=push0_contract_caller, gas_limit=100_000, sender=sender)\n        post[push0_contract_caller] = Account(storage={0x00: 0x01, 0x01: 0xFF})\n        state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/shanghai/eip3855_push0/test_push0/#tests.shanghai.eip3855_push0.test_push0.TestPush0CallContext.test_push0_contract_during_call_contexts","title":"test_push0_contract_during_call_contexts(state_test, env, pre, post, sender, push0_contract_caller)","text":"

    Test PUSH0 during various call contexts.

    Source code in tests/shanghai/eip3855_push0/test_push0.py
    @pytest.mark.parametrize(\n    \"call_opcode\",\n    [\n        Op.CALL,\n        Op.CALLCODE,\n        Op.DELEGATECALL,\n        Op.STATICCALL,\n    ],\n    ids=[\"call\", \"callcode\", \"delegatecall\", \"staticcall\"],\n)\ndef test_push0_contract_during_call_contexts(\n    self,\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    post: Alloc,\n    sender: EOA,\n    push0_contract_caller: Address,\n):\n    \"\"\"\n    Test PUSH0 during various call contexts.\n    \"\"\"\n    tx = Transaction(to=push0_contract_caller, gas_limit=100_000, sender=sender)\n    post[push0_contract_caller] = Account(storage={0x00: 0x01, 0x01: 0xFF})\n    state_test(env=env, pre=pre, post=post, tx=tx)\n
    "},{"location":"tests/shanghai/eip3855_push0/test_push0/index/test_cases/","title":"Test Push0 - Test Cases","text":"

    Test cases generated from tests/shanghai/eip3855_push0/test_push0.py

    Parametrized test cases generated from the test module tests/shanghai/eip3855_push0/test_push0.py:

    test_push0_contracts[fork_Shanghai-blockchain_test-key_sstore]\ntest_push0_contracts[fork_Shanghai-blockchain_test-fill_stack]\ntest_push0_contracts[fork_Shanghai-blockchain_test-stack_overflow]\ntest_push0_contracts[fork_Shanghai-blockchain_test-storage_overwrite]\ntest_push0_contracts[fork_Shanghai-blockchain_test-before_jumpdest]\ntest_push0_contracts[fork_Shanghai-blockchain_test-gas_cost]\ntest_push0_contracts[fork_Shanghai-blockchain_test_engine-key_sstore]\ntest_push0_contracts[fork_Shanghai-blockchain_test_engine-fill_stack]\ntest_push0_contracts[fork_Shanghai-blockchain_test_engine-stack_overflow]\ntest_push0_contracts[fork_Shanghai-blockchain_test_engine-storage_overwrite]\ntest_push0_contracts[fork_Shanghai-blockchain_test_engine-before_jumpdest]\ntest_push0_contracts[fork_Shanghai-blockchain_test_engine-gas_cost]\ntest_push0_contracts[fork_Shanghai-state_test-key_sstore]\ntest_push0_contracts[fork_Shanghai-state_test-fill_stack]\ntest_push0_contracts[fork_Shanghai-state_test-stack_overflow]\ntest_push0_contracts[fork_Shanghai-state_test-storage_overwrite]\ntest_push0_contracts[fork_Shanghai-state_test-before_jumpdest]\ntest_push0_contracts[fork_Shanghai-state_test-gas_cost]\ntest_push0_contracts[fork_Cancun-blockchain_test-key_sstore]\ntest_push0_contracts[fork_Cancun-blockchain_test-fill_stack]\ntest_push0_contracts[fork_Cancun-blockchain_test-stack_overflow]\ntest_push0_contracts[fork_Cancun-blockchain_test-storage_overwrite]\ntest_push0_contracts[fork_Cancun-blockchain_test-before_jumpdest]\ntest_push0_contracts[fork_Cancun-blockchain_test-gas_cost]\ntest_push0_contracts[fork_Cancun-blockchain_test_engine-key_sstore]\ntest_push0_contracts[fork_Cancun-blockchain_test_engine-fill_stack]\ntest_push0_contracts[fork_Cancun-blockchain_test_engine-stack_overflow]\ntest_push0_contracts[fork_Cancun-blockchain_test_engine-storage_overwrite]\ntest_push0_contracts[fork_Cancun-blockchain_test_engine-before_jumpdest]\ntest_push0_contracts[fork_Cancun-blockchain_test_engine-gas_cost]\ntest_push0_contracts[fork_Cancun-state_test-key_sstore]\ntest_push0_contracts[fork_Cancun-state_test-fill_stack]\ntest_push0_contracts[fork_Cancun-state_test-stack_overflow]\ntest_push0_contracts[fork_Cancun-state_test-storage_overwrite]\ntest_push0_contracts[fork_Cancun-state_test-before_jumpdest]\ntest_push0_contracts[fork_Cancun-state_test-gas_cost]\ntest_push0_contracts[fork_Prague-blockchain_test-key_sstore]\ntest_push0_contracts[fork_Prague-blockchain_test-fill_stack]\ntest_push0_contracts[fork_Prague-blockchain_test-stack_overflow]\ntest_push0_contracts[fork_Prague-blockchain_test-storage_overwrite]\ntest_push0_contracts[fork_Prague-blockchain_test-before_jumpdest]\ntest_push0_contracts[fork_Prague-blockchain_test-gas_cost]\ntest_push0_contracts[fork_Prague-blockchain_test_engine-key_sstore]\ntest_push0_contracts[fork_Prague-blockchain_test_engine-fill_stack]\ntest_push0_contracts[fork_Prague-blockchain_test_engine-stack_overflow]\ntest_push0_contracts[fork_Prague-blockchain_test_engine-storage_overwrite]\ntest_push0_contracts[fork_Prague-blockchain_test_engine-before_jumpdest]\ntest_push0_contracts[fork_Prague-blockchain_test_engine-gas_cost]\ntest_push0_contracts[fork_Prague-state_test-key_sstore]\ntest_push0_contracts[fork_Prague-state_test-fill_stack]\ntest_push0_contracts[fork_Prague-state_test-stack_overflow]\ntest_push0_contracts[fork_Prague-state_test-storage_overwrite]\ntest_push0_contracts[fork_Prague-state_test-before_jumpdest]\ntest_push0_contracts[fork_Prague-state_test-gas_cost]\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\nTestPush0CallContext\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/shanghai/eip3855_push0/test_push0.py\n
    "},{"location":"tests/shanghai/eip3860_initcode/","title":"EIP-3860 Initcode","text":"

    Documentation for tests/shanghai/eip3860_initcode.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip3860_initcode\n
    Test EIP-3860: Limit and meter initcode

    Tests for EIP-3860: Limit and meter initcode.

    "},{"location":"tests/shanghai/eip3860_initcode/spec/","title":"Spec","text":"

    Documentation for tests/shanghai/eip3860_initcode/spec.py.

    Defines EIP-3860 specification constants and functions.

    "},{"location":"tests/shanghai/eip3860_initcode/spec/#tests.shanghai.eip3860_initcode.spec.Spec","title":"Spec dataclass","text":"

    Parameters from the EIP-3860 specifications as defined at https://eips.ethereum.org/EIPS/eip-3860#parameters

    Source code in tests/shanghai/eip3860_initcode/spec.py
    @dataclass(frozen=True)\nclass Spec:\n    \"\"\"\n    Parameters from the EIP-3860 specifications as defined at\n    https://eips.ethereum.org/EIPS/eip-3860#parameters\n    \"\"\"\n\n    MAX_INITCODE_SIZE = 49152\n    INITCODE_WORD_COST = 2\n
    "},{"location":"tests/shanghai/eip3860_initcode/test_initcode/","title":"Test Initcode","text":"

    Documentation for tests/shanghai/eip3860_initcode/test_initcode.py.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip3860_initcode/test_initcode.py\n
    Test EIP-3860: Limit and meter initcode

    Tests for EIP-3860: Limit and meter initcode.

    Tests ported from:
    • ethereum/tests/pull/990
    • ethereum/tests/pull/1012
    "},{"location":"tests/shanghai/eip3860_initcode/test_initcode/#tests.shanghai.eip3860_initcode.test_initcode.test_contract_creating_tx","title":"test_contract_creating_tx(state_test, env, pre, post, sender, initcode)","text":"

    Tests creating a contract using a transaction with an initcode that is on/over the max allowed limit.

    Source code in tests/shanghai/eip3860_initcode/test_initcode.py
    @pytest.mark.parametrize(\n    \"initcode\",\n    [\n        INITCODE_ZEROS_MAX_LIMIT,\n        INITCODE_ONES_MAX_LIMIT,\n        INITCODE_ZEROS_OVER_LIMIT,\n        INITCODE_ONES_OVER_LIMIT,\n    ],\n    ids=get_initcode_name,\n)\ndef test_contract_creating_tx(\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    post: Alloc,\n    sender: EOA,\n    initcode: Initcode,\n):\n    \"\"\"\n    Tests creating a contract using a transaction with an initcode that is\n    on/over the max allowed limit.\n    \"\"\"\n    create_contract_address = compute_create_address(\n        address=sender,\n        nonce=0,\n    )\n\n    tx = Transaction(\n        nonce=0,\n        to=None,\n        data=initcode,\n        gas_limit=10000000,\n        gas_price=10,\n        sender=sender,\n    )\n\n    if len(initcode) > Spec.MAX_INITCODE_SIZE:\n        # Initcode is above the max size, tx inclusion in the block makes\n        # it invalid.\n        post[create_contract_address] = Account.NONEXISTENT\n        tx.error = TransactionException.INITCODE_SIZE_EXCEEDED\n    else:\n        # Initcode is at or below the max size, tx inclusion in the block\n        # is ok and the contract is successfully created.\n        post[create_contract_address] = Account(code=Op.STOP)\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/shanghai/eip3860_initcode/test_initcode/#tests.shanghai.eip3860_initcode.test_initcode.TestContractCreationGasUsage","title":"TestContractCreationGasUsage","text":"

    Tests the following cases that verify the gas cost behavior of a contract creating transaction:

    1. Test with exact intrinsic gas minus one, contract create fails and tx is invalid.
    2. Test with exact intrinsic gas, contract create fails, but tx is valid.
    3. Test with exact execution gas minus one, contract create fails, but tx is valid.
    4. Test with exact execution gas, contract create succeeds.

    Initcode must be within a valid EIP-3860 length.

    Source code in tests/shanghai/eip3860_initcode/test_initcode.py
    @pytest.mark.parametrize(\n    \"initcode\",\n    [\n        INITCODE_ZEROS_MAX_LIMIT,\n        INITCODE_ONES_MAX_LIMIT,\n        EMPTY_INITCODE,\n        SINGLE_BYTE_INITCODE,\n        INITCODE_ZEROS_32_BYTES,\n        INITCODE_ZEROS_33_BYTES,\n        INITCODE_ZEROS_49120_BYTES,\n        INITCODE_ZEROS_49121_BYTES,\n    ],\n    ids=get_initcode_name,\n)\n@pytest.mark.parametrize(\n    \"gas_test_case\",\n    [\n        \"too_little_intrinsic_gas\",\n        \"exact_intrinsic_gas\",\n        \"too_little_execution_gas\",\n        \"exact_execution_gas\",\n    ],\n    ids=lambda x: x,\n)\nclass TestContractCreationGasUsage:\n    \"\"\"\n    Tests the following cases that verify the gas cost behavior of a\n    contract creating transaction:\n\n    1. Test with exact intrinsic gas minus one, contract create fails\n        and tx is invalid.\n    2. Test with exact intrinsic gas, contract create fails,\n        but tx is valid.\n    3. Test with exact execution gas minus one, contract create fails,\n        but tx is valid.\n    4. Test with exact execution gas, contract create succeeds.\n\n    Initcode must be within a valid EIP-3860 length.\n    \"\"\"\n\n    @pytest.fixture\n    def exact_intrinsic_gas(self, initcode: Initcode) -> int:\n        \"\"\"\n        Calculates the intrinsic tx gas cost.\n        \"\"\"\n        return calculate_create_tx_intrinsic_cost(initcode)\n\n    @pytest.fixture\n    def exact_execution_gas(self, initcode: Initcode) -> int:\n        \"\"\"\n        Calculates the total execution gas cost.\n        \"\"\"\n        return calculate_create_tx_execution_cost(initcode)\n\n    @pytest.fixture\n    def tx_error(self, gas_test_case: str) -> TransactionException | None:\n        \"\"\"\n        Check that the transaction is invalid if too little intrinsic gas is\n        specified, otherwise the tx is valid and succeeds.\n        \"\"\"\n        if gas_test_case == \"too_little_intrinsic_gas\":\n            return TransactionException.INTRINSIC_GAS_TOO_LOW\n        return None\n\n    @pytest.fixture\n    def tx(\n        self,\n        sender: EOA,\n        initcode: Initcode,\n        gas_test_case: str,\n        tx_error: TransactionException | None,\n        exact_intrinsic_gas: int,\n        exact_execution_gas: int,\n    ) -> Transaction:\n        \"\"\"\n        Implement the gas_test_case by setting the gas_limit of the tx\n        appropriately and test whether the tx succeeds or fails with\n        appropriate error.\n        \"\"\"\n        if gas_test_case == \"too_little_intrinsic_gas\":\n            gas_limit = exact_intrinsic_gas - 1\n        elif gas_test_case == \"exact_intrinsic_gas\":\n            gas_limit = exact_intrinsic_gas\n        elif gas_test_case == \"too_little_execution_gas\":\n            gas_limit = exact_execution_gas - 1\n        elif gas_test_case == \"exact_execution_gas\":\n            gas_limit = exact_execution_gas\n        else:\n            pytest.fail(\"Invalid gas test case provided.\")\n\n        return Transaction(\n            nonce=0,\n            to=None,\n            data=initcode,\n            gas_limit=gas_limit,\n            gas_price=10,\n            error=tx_error,\n            sender=sender,\n        )\n\n    @pytest.fixture\n    def post(\n        self,\n        sender: EOA,\n        initcode: Initcode,\n        gas_test_case: str,\n        exact_intrinsic_gas: int,\n        exact_execution_gas: int,\n    ) -> Alloc:\n        \"\"\"\n        Test that contract creation fails unless enough execution gas is\n        provided.\n        \"\"\"\n        create_contract_address = compute_create_address(\n            address=sender,\n            nonce=0,\n        )\n        if gas_test_case == \"exact_intrinsic_gas\" and exact_intrinsic_gas == exact_execution_gas:\n            # Special scenario where the execution of the initcode and\n            # gas cost to deploy are zero\n            return Alloc({create_contract_address: Account(code=initcode.deploy_code)})\n        elif gas_test_case == \"exact_execution_gas\":\n            return Alloc({create_contract_address: Account(code=initcode.deploy_code)})\n        return Alloc({create_contract_address: Account.NONEXISTENT})\n\n    def test_gas_usage(\n        self,\n        state_test: StateTestFiller,\n        env: Environment,\n        pre: Alloc,\n        post: Alloc,\n        tx: Transaction,\n        gas_test_case: str,\n        initcode: Initcode,\n        exact_intrinsic_gas: int,\n        exact_execution_gas: int,\n    ):\n        \"\"\"\n        Test transaction and contract creation behavior for different gas\n        limits.\n        \"\"\"\n        if (gas_test_case == \"too_little_execution_gas\") and (\n            exact_execution_gas == exact_intrinsic_gas\n        ):\n            pytest.skip(\n                \"Special case, the execution of the initcode and gas \"\n                \"cost to deploy are zero: Then this test case is \"\n                \"equivalent to that of 'test_exact_intrinsic_gas'.\"\n            )\n\n        state_test(\n            env=env,\n            pre=pre,\n            post=post,\n            tx=tx,\n        )\n
    "},{"location":"tests/shanghai/eip3860_initcode/test_initcode/#tests.shanghai.eip3860_initcode.test_initcode.TestContractCreationGasUsage.test_gas_usage","title":"test_gas_usage(state_test, env, pre, post, tx, gas_test_case, initcode, exact_intrinsic_gas, exact_execution_gas)","text":"

    Test transaction and contract creation behavior for different gas limits.

    Source code in tests/shanghai/eip3860_initcode/test_initcode.py
    def test_gas_usage(\n    self,\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    post: Alloc,\n    tx: Transaction,\n    gas_test_case: str,\n    initcode: Initcode,\n    exact_intrinsic_gas: int,\n    exact_execution_gas: int,\n):\n    \"\"\"\n    Test transaction and contract creation behavior for different gas\n    limits.\n    \"\"\"\n    if (gas_test_case == \"too_little_execution_gas\") and (\n        exact_execution_gas == exact_intrinsic_gas\n    ):\n        pytest.skip(\n            \"Special case, the execution of the initcode and gas \"\n            \"cost to deploy are zero: Then this test case is \"\n            \"equivalent to that of 'test_exact_intrinsic_gas'.\"\n        )\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/shanghai/eip3860_initcode/test_initcode/#tests.shanghai.eip3860_initcode.test_initcode.TestCreateInitcode","title":"TestCreateInitcode","text":"

    Test contract creation via the CREATE/CREATE2 opcodes that have an initcode that is on/over the max allowed limit.

    Source code in tests/shanghai/eip3860_initcode/test_initcode.py
    @pytest.mark.parametrize(\n    \"initcode\",\n    [\n        INITCODE_ZEROS_MAX_LIMIT,\n        INITCODE_ONES_MAX_LIMIT,\n        INITCODE_ZEROS_OVER_LIMIT,\n        INITCODE_ONES_OVER_LIMIT,\n        EMPTY_INITCODE,\n        SINGLE_BYTE_INITCODE,\n        INITCODE_ZEROS_32_BYTES,\n        INITCODE_ZEROS_33_BYTES,\n        INITCODE_ZEROS_49120_BYTES,\n        INITCODE_ZEROS_49121_BYTES,\n    ],\n    ids=get_initcode_name,\n)\n@pytest.mark.parametrize(\"opcode\", [Op.CREATE, Op.CREATE2], ids=get_create_id)\nclass TestCreateInitcode:\n    \"\"\"\n    Test contract creation via the CREATE/CREATE2 opcodes that have an initcode\n    that is on/over the max allowed limit.\n    \"\"\"\n\n    @pytest.fixture\n    def create2_salt(self) -> int:\n        \"\"\"\n        Salt value used for CREATE2 contract creation.\n        \"\"\"\n        return 0xDEADBEEF\n\n    @pytest.fixture\n    def creator_code(self, opcode: Op, create2_salt: int) -> Bytecode:\n        \"\"\"\n        Generates the code for the creator contract which performs the CREATE/CREATE2 operation.\n        \"\"\"\n        return (\n            Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n            + Op.GAS\n            + opcode(size=Op.CALLDATASIZE, salt=create2_salt)\n            + Op.GAS\n            # stack: [Gas 2, Call Result, Gas 1]\n            + Op.SWAP1\n            # stack: [Call Result, Gas 2, Gas 1]\n            + Op.SSTORE(0, unchecked=True)\n            # stack: [Gas 2, Gas 1]\n            + Op.SWAP1\n            # stack: [Gas 1, Gas 2]\n            + Op.SUB\n            # stack: [Gas 1 - Gas 2]\n            + Op.SSTORE(1, unchecked=True)\n        )\n\n    @pytest.fixture\n    def creator_contract_address(self, pre: Alloc, creator_code: Bytecode) -> Address:\n        \"\"\"\n        Returns the address of creator contract.\n        \"\"\"\n        return pre.deploy_contract(creator_code)\n\n    @pytest.fixture\n    def created_contract_address(  # noqa: D103\n        self,\n        opcode: Op,\n        create2_salt: int,\n        initcode: Initcode,\n        creator_contract_address: Address,\n    ) -> Address:\n        \"\"\"\n        Calculates the address of the contract created by the creator contract.\n        \"\"\"\n        if opcode == Op.CREATE:\n            return compute_create_address(\n                address=creator_contract_address,\n                nonce=1,\n            )\n        if opcode == Op.CREATE2:\n            return compute_create2_address(\n                address=creator_contract_address,\n                salt=create2_salt,\n                initcode=initcode,\n            )\n        raise Exception(\"Invalid opcode for generator\")\n\n    @pytest.fixture\n    def caller_code(self, creator_contract_address: Address) -> Bytecode:\n        \"\"\"\n        Generates the code for the caller contract that calls the creator contract.\n        \"\"\"\n        return Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE(\n            Op.CALL(5000000, creator_contract_address, 0, 0, Op.CALLDATASIZE, 0, 0), 1\n        )\n\n    @pytest.fixture\n    def caller_contract_address(self, pre: Alloc, caller_code: Bytecode) -> Address:\n        \"\"\"\n        Returns the address of the caller contract.\n        \"\"\"\n        return pre.deploy_contract(caller_code)\n\n    @pytest.fixture\n    def tx(self, caller_contract_address: Address, initcode: Initcode, sender: EOA) -> Transaction:\n        \"\"\"\n        Generates the transaction that executes the caller contract.\n        \"\"\"\n        return Transaction(\n            nonce=0,\n            to=caller_contract_address,\n            data=initcode,\n            gas_limit=10000000,\n            gas_price=10,\n            sender=sender,\n        )\n\n    @pytest.fixture\n    def contract_creation_gas_cost(self, opcode: Op) -> int:\n        \"\"\"\n        Calculates the gas cost of the contract creation operation.\n        \"\"\"\n        CREATE_CONTRACT_BASE_GAS = 32000\n        GAS_OPCODE_GAS = 2\n        PUSH_DUP_OPCODE_GAS = 3\n        CALLDATASIZE_OPCODE_GAS = 2\n        contract_creation_gas_usage = (\n            CREATE_CONTRACT_BASE_GAS\n            + GAS_OPCODE_GAS\n            + (2 * PUSH_DUP_OPCODE_GAS)\n            + CALLDATASIZE_OPCODE_GAS\n        )\n        if opcode == Op.CREATE2:  # Extra push operation\n            contract_creation_gas_usage += PUSH_DUP_OPCODE_GAS\n        return contract_creation_gas_usage\n\n    def test_create_opcode_initcode(\n        self,\n        state_test: StateTestFiller,\n        env: Environment,\n        pre: Alloc,\n        post: Alloc,\n        tx: Transaction,\n        opcode: Op,\n        initcode: Initcode,\n        caller_contract_address: Address,\n        creator_contract_address: Address,\n        created_contract_address: Address,\n        contract_creation_gas_cost: int,\n    ):\n        \"\"\"\n        Test contract creation via the CREATE/CREATE2 opcodes that have an\n        initcode that is on/over the max allowed limit.\n        \"\"\"\n        if len(initcode) > Spec.MAX_INITCODE_SIZE:\n            # Call returns 0 as out of gas s[0]==1\n            post[caller_contract_address] = Account(\n                nonce=1,\n                storage={\n                    0: 1,\n                    1: 0,\n                },\n            )\n\n            post[created_contract_address] = Account.NONEXISTENT\n            post[creator_contract_address] = Account(\n                nonce=1,\n                storage={\n                    0: 0,\n                    1: 0,\n                },\n            )\n\n        else:\n            expected_gas_usage = contract_creation_gas_cost\n            # The initcode is only executed if the length check succeeds\n            expected_gas_usage += initcode.execution_gas\n            # The code is only deployed if the length check succeeds\n            expected_gas_usage += initcode.deployment_gas\n\n            if opcode == Op.CREATE2:\n                # CREATE2 hashing cost should only be deducted if the initcode\n                # does not exceed the max length\n                expected_gas_usage += calculate_create2_word_cost(len(initcode))\n\n            # Initcode word cost is only deducted if the length check\n            # succeeds\n            expected_gas_usage += calculate_initcode_word_cost(len(initcode))\n\n            # Call returns 1 as valid initcode length s[0]==1 && s[1]==1\n            post[caller_contract_address] = Account(\n                nonce=1,\n                storage={\n                    0: 0,\n                    1: 1,\n                },\n            )\n\n            post[created_contract_address] = Account(code=initcode.deploy_code)\n            post[creator_contract_address] = Account(\n                nonce=2,\n                storage={\n                    0: created_contract_address,\n                    1: expected_gas_usage,\n                },\n            )\n\n        state_test(\n            env=env,\n            pre=pre,\n            post=post,\n            tx=tx,\n        )\n
    "},{"location":"tests/shanghai/eip3860_initcode/test_initcode/#tests.shanghai.eip3860_initcode.test_initcode.TestCreateInitcode.test_create_opcode_initcode","title":"test_create_opcode_initcode(state_test, env, pre, post, tx, opcode, initcode, caller_contract_address, creator_contract_address, created_contract_address, contract_creation_gas_cost)","text":"

    Test contract creation via the CREATE/CREATE2 opcodes that have an initcode that is on/over the max allowed limit.

    Source code in tests/shanghai/eip3860_initcode/test_initcode.py
    def test_create_opcode_initcode(\n    self,\n    state_test: StateTestFiller,\n    env: Environment,\n    pre: Alloc,\n    post: Alloc,\n    tx: Transaction,\n    opcode: Op,\n    initcode: Initcode,\n    caller_contract_address: Address,\n    creator_contract_address: Address,\n    created_contract_address: Address,\n    contract_creation_gas_cost: int,\n):\n    \"\"\"\n    Test contract creation via the CREATE/CREATE2 opcodes that have an\n    initcode that is on/over the max allowed limit.\n    \"\"\"\n    if len(initcode) > Spec.MAX_INITCODE_SIZE:\n        # Call returns 0 as out of gas s[0]==1\n        post[caller_contract_address] = Account(\n            nonce=1,\n            storage={\n                0: 1,\n                1: 0,\n            },\n        )\n\n        post[created_contract_address] = Account.NONEXISTENT\n        post[creator_contract_address] = Account(\n            nonce=1,\n            storage={\n                0: 0,\n                1: 0,\n            },\n        )\n\n    else:\n        expected_gas_usage = contract_creation_gas_cost\n        # The initcode is only executed if the length check succeeds\n        expected_gas_usage += initcode.execution_gas\n        # The code is only deployed if the length check succeeds\n        expected_gas_usage += initcode.deployment_gas\n\n        if opcode == Op.CREATE2:\n            # CREATE2 hashing cost should only be deducted if the initcode\n            # does not exceed the max length\n            expected_gas_usage += calculate_create2_word_cost(len(initcode))\n\n        # Initcode word cost is only deducted if the length check\n        # succeeds\n        expected_gas_usage += calculate_initcode_word_cost(len(initcode))\n\n        # Call returns 1 as valid initcode length s[0]==1 && s[1]==1\n        post[caller_contract_address] = Account(\n            nonce=1,\n            storage={\n                0: 0,\n                1: 1,\n            },\n        )\n\n        post[created_contract_address] = Account(code=initcode.deploy_code)\n        post[creator_contract_address] = Account(\n            nonce=2,\n            storage={\n                0: created_contract_address,\n                1: expected_gas_usage,\n            },\n        )\n\n    state_test(\n        env=env,\n        pre=pre,\n        post=post,\n        tx=tx,\n    )\n
    "},{"location":"tests/shanghai/eip3860_initcode/test_initcode/index/test_cases/","title":"Test Initcode - Test Cases","text":"

    Test cases generated from tests/shanghai/eip3860_initcode/test_initcode.py

    Parametrized test cases generated from the test module tests/shanghai/eip3860_initcode/test_initcode.py:

    test_contract_creating_tx[fork_Shanghai-blockchain_test-max_size_zeros]\ntest_contract_creating_tx[fork_Shanghai-blockchain_test-max_size_ones]\ntest_contract_creating_tx[fork_Shanghai-blockchain_test-over_limit_zeros]\ntest_contract_creating_tx[fork_Shanghai-blockchain_test-over_limit_ones]\ntest_contract_creating_tx[fork_Shanghai-blockchain_test_engine-max_size_zeros]\ntest_contract_creating_tx[fork_Shanghai-blockchain_test_engine-max_size_ones]\ntest_contract_creating_tx[fork_Shanghai-blockchain_test_engine-over_limit_zeros]\ntest_contract_creating_tx[fork_Shanghai-blockchain_test_engine-over_limit_ones]\ntest_contract_creating_tx[fork_Shanghai-state_test-max_size_zeros]\ntest_contract_creating_tx[fork_Shanghai-state_test-max_size_ones]\ntest_contract_creating_tx[fork_Shanghai-state_test-over_limit_zeros]\ntest_contract_creating_tx[fork_Shanghai-state_test-over_limit_ones]\ntest_contract_creating_tx[fork_Cancun-blockchain_test-max_size_zeros]\ntest_contract_creating_tx[fork_Cancun-blockchain_test-max_size_ones]\ntest_contract_creating_tx[fork_Cancun-blockchain_test-over_limit_zeros]\ntest_contract_creating_tx[fork_Cancun-blockchain_test-over_limit_ones]\ntest_contract_creating_tx[fork_Cancun-blockchain_test_engine-max_size_zeros]\ntest_contract_creating_tx[fork_Cancun-blockchain_test_engine-max_size_ones]\ntest_contract_creating_tx[fork_Cancun-blockchain_test_engine-over_limit_zeros]\ntest_contract_creating_tx[fork_Cancun-blockchain_test_engine-over_limit_ones]\ntest_contract_creating_tx[fork_Cancun-state_test-max_size_zeros]\ntest_contract_creating_tx[fork_Cancun-state_test-max_size_ones]\ntest_contract_creating_tx[fork_Cancun-state_test-over_limit_zeros]\ntest_contract_creating_tx[fork_Cancun-state_test-over_limit_ones]\ntest_contract_creating_tx[fork_Prague-blockchain_test-max_size_zeros]\ntest_contract_creating_tx[fork_Prague-blockchain_test-max_size_ones]\ntest_contract_creating_tx[fork_Prague-blockchain_test-over_limit_zeros]\ntest_contract_creating_tx[fork_Prague-blockchain_test-over_limit_ones]\ntest_contract_creating_tx[fork_Prague-blockchain_test_engine-max_size_zeros]\ntest_contract_creating_tx[fork_Prague-blockchain_test_engine-max_size_ones]\ntest_contract_creating_tx[fork_Prague-blockchain_test_engine-over_limit_zeros]\ntest_contract_creating_tx[fork_Prague-blockchain_test_engine-over_limit_ones]\ntest_contract_creating_tx[fork_Prague-state_test-max_size_zeros]\ntest_contract_creating_tx[fork_Prague-state_test-max_size_ones]\ntest_contract_creating_tx[fork_Prague-state_test-over_limit_zeros]\ntest_contract_creating_tx[fork_Prague-state_test-over_limit_ones]\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestContractCreationGasUsage\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\nTestCreateInitcode\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/shanghai/eip3860_initcode/test_initcode.py\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/","title":"EIP-4895 Withdrawals","text":"

    Documentation for tests/shanghai/eip4895_withdrawals.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip4895_withdrawals\n
    Tests EIP-4895: Beacon chain withdrawals

    Test cases for EIP-4895: Beacon chain push withdrawals as operations.

    "},{"location":"tests/shanghai/eip4895_withdrawals/spec/","title":"Spec","text":"

    Documentation for tests/shanghai/eip4895_withdrawals/spec.py.

    Defines EIP-4895 specification constants and functions.

    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/","title":"Test Withdrawals","text":"

    Documentation for tests/shanghai/eip4895_withdrawals/test_withdrawals.py.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip4895_withdrawals/test_withdrawals.py\n
    Tests EIP-4895: Beacon chain withdrawals

    Test cases for EIP-4895: Beacon chain push withdrawals as operations.

    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.TestUseValueInTx","title":"TestUseValueInTx","text":"

    Test that the value from a withdrawal can be used in a transaction:

    1. tx_in_withdrawals_block: Test that the withdrawal value can not be used by a transaction in the same block as the withdrawal.

    2. tx_after_withdrawals_block: Test that the withdrawal value can be used by a transaction in the subsequent block.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    @pytest.mark.parametrize(\n    \"test_case\",\n    [\"tx_in_withdrawals_block\", \"tx_after_withdrawals_block\"],\n    ids=lambda x: x,\n)\nclass TestUseValueInTx:\n    \"\"\"\n    Test that the value from a withdrawal can be used in a transaction:\n\n    1. `tx_in_withdrawals_block`: Test that the withdrawal value can not be used by a transaction\n        in the same block as the withdrawal.\n\n    2. `tx_after_withdrawals_block`: Test that the withdrawal value can be used by a transaction\n        in the subsequent block.\n    \"\"\"\n\n    @pytest.fixture\n    def sender(self, pre: Alloc) -> EOA:\n        \"\"\"\n        Funded EOA used for sending transactions.\n        \"\"\"\n        return pre.fund_eoa(1)\n\n    @pytest.fixture\n    def recipient(self, pre: Alloc) -> EOA:\n        \"\"\"\n        Funded EOA used for sending transactions.\n        \"\"\"\n        return pre.fund_eoa(0)\n\n    @pytest.fixture\n    def tx(self, sender: EOA, recipient: EOA):  # noqa: D102\n        # Transaction sent from the `sender`, which has 1 wei balance at start\n        return Transaction(\n            gas_price=ONE_GWEI,\n            gas_limit=21000,\n            to=recipient,\n            sender=sender,\n        )\n\n    @pytest.fixture\n    def withdrawal(self, tx: Transaction, sender: EOA):  # noqa: D102\n        return Withdrawal(\n            index=0,\n            validator_index=0,\n            address=sender,\n            amount=tx.gas_limit + 1,\n        )\n\n    @pytest.fixture\n    def blocks(self, tx: Transaction, withdrawal: Withdrawal, test_case):  # noqa: D102\n        if test_case == \"tx_in_withdrawals_block\":\n            return [\n                Block(\n                    txs=[tx.with_error(TransactionException.INSUFFICIENT_ACCOUNT_FUNDS)],\n                    withdrawals=[\n                        withdrawal,\n                    ],\n                    exception=TransactionException.INSUFFICIENT_ACCOUNT_FUNDS,\n                )\n            ]\n        if test_case == \"tx_after_withdrawals_block\":\n            return [\n                Block(\n                    txs=[],\n                    withdrawals=[\n                        withdrawal,\n                    ],\n                ),\n                Block(\n                    txs=[tx],\n                    withdrawals=[],\n                ),\n            ]\n        raise Exception(\"Invalid test case.\")\n\n    @pytest.fixture\n    def post(self, sender: EOA, test_case: str) -> Dict:  # noqa: D102\n        if test_case == \"tx_in_withdrawals_block\":\n            return {}\n        if test_case == \"tx_after_withdrawals_block\":\n            return {sender: Account(balance=ONE_GWEI + 1)}\n        raise Exception(\"Invalid test case.\")\n\n    def test_use_value_in_tx(\n        self,\n        pre: Alloc,\n        blockchain_test: BlockchainTestFiller,\n        post: dict,\n        blocks: List[Block],\n    ):\n        \"\"\"\n        Test sending withdrawal value in a transaction.\n        \"\"\"\n        blockchain_test(pre=pre, post=post, blocks=blocks)\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.TestUseValueInTx.test_use_value_in_tx","title":"test_use_value_in_tx(pre, blockchain_test, post, blocks)","text":"

    Test sending withdrawal value in a transaction.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    def test_use_value_in_tx(\n    self,\n    pre: Alloc,\n    blockchain_test: BlockchainTestFiller,\n    post: dict,\n    blocks: List[Block],\n):\n    \"\"\"\n    Test sending withdrawal value in a transaction.\n    \"\"\"\n    blockchain_test(pre=pre, post=post, blocks=blocks)\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.test_use_value_in_contract","title":"test_use_value_in_contract(blockchain_test, pre)","text":"

    Test sending value from contract that has not received a withdrawal

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    def test_use_value_in_contract(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Test sending value from contract that has not received a withdrawal\n    \"\"\"\n    sender = pre.fund_eoa()\n    recipient = pre.fund_eoa(1)\n\n    contract_address = pre.deploy_contract(\n        Op.SSTORE(\n            Op.NUMBER,\n            Op.CALL(address=recipient, value=1000000000),\n        )\n    )\n    (tx_0, tx_1) = (\n        Transaction(\n            sender=sender,\n            value=0,\n            gas_limit=100_000,\n            to=contract_address,\n        )\n        for _ in range(2)\n    )\n\n    withdrawal = Withdrawal(\n        index=0,\n        validator_index=0,\n        address=contract_address,\n        amount=1,\n    )\n\n    blocks = [\n        Block(\n            txs=[tx_0],\n            withdrawals=[withdrawal],\n        ),\n        Block(\n            txs=[tx_1],  # Same tx again, just increase nonce\n        ),\n    ]\n    post = {\n        contract_address: Account(\n            storage={\n                0x1: 0x0,  # Call fails on the first attempt\n                0x2: 0x1,  # Succeeds on the second attempt\n            }\n        ),\n        recipient: Account(\n            balance=ONE_GWEI + 1,\n        ),\n    }\n\n    blockchain_test(pre=pre, post=post, blocks=blocks)\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.test_balance_within_block","title":"test_balance_within_block(blockchain_test, pre)","text":"

    Test Withdrawal balance increase within the same block, inside contract call.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    def test_balance_within_block(blockchain_test: BlockchainTestFiller, pre: Alloc):\n    \"\"\"\n    Test Withdrawal balance increase within the same block,\n    inside contract call.\n    \"\"\"\n    SAVE_BALANCE_ON_BLOCK_NUMBER = Op.SSTORE(\n        Op.NUMBER,\n        Op.BALANCE(Op.CALLDATALOAD(0)),\n    )\n    sender = pre.fund_eoa()\n    recipient = pre.fund_eoa(ONE_GWEI)\n    contract_address = pre.deploy_contract(SAVE_BALANCE_ON_BLOCK_NUMBER)\n\n    blocks = [\n        Block(\n            txs=[\n                Transaction(\n                    sender=sender,\n                    gas_limit=100000,\n                    to=contract_address,\n                    data=Hash(recipient),\n                )\n            ],\n            withdrawals=[\n                Withdrawal(\n                    index=0,\n                    validator_index=0,\n                    address=recipient,\n                    amount=1,\n                )\n            ],\n        ),\n        Block(\n            txs=[\n                Transaction(\n                    sender=sender,\n                    gas_limit=100000,\n                    to=contract_address,\n                    data=Hash(recipient),\n                )\n            ]\n        ),\n    ]\n\n    post = {\n        contract_address: Account(\n            storage={\n                1: ONE_GWEI,\n                2: 2 * ONE_GWEI,\n            }\n        )\n    }\n\n    blockchain_test(pre=pre, post=post, blocks=blocks)\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.TestMultipleWithdrawalsSameAddress","title":"TestMultipleWithdrawalsSameAddress","text":"

    Test that multiple withdrawals can be sent to the same address in:

    1. A single block.

    2. Multiple blocks.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    @pytest.mark.parametrize(\"test_case\", [\"single_block\", \"multiple_blocks\"])\nclass TestMultipleWithdrawalsSameAddress:\n    \"\"\"\n    Test that multiple withdrawals can be sent to the same address in:\n\n    1. A single block.\n\n    2. Multiple blocks.\n    \"\"\"\n\n    @pytest.fixture\n    def addresses(self, fork: Fork) -> List[Address]:  # noqa: D102\n        addresses = [Address(p) for p in fork.precompiles(block_number=0, timestamp=0)]\n        return addresses + [Address(2**160 - 1)]\n\n    @pytest.fixture\n    def blocks(self, addresses: Address, test_case: str):  # noqa: D102\n        if test_case == \"single_block\":\n            # Many repeating withdrawals of the same accounts in the same\n            # block.\n            return [\n                Block(\n                    withdrawals=[\n                        Withdrawal(\n                            index=i,\n                            validator_index=i,\n                            address=addresses[i % len(addresses)],\n                            amount=1,\n                        )\n                        for i in range(len(addresses) * 16)\n                    ],\n                ),\n            ]\n        if test_case == \"multiple_blocks\":\n            # Similar test but now use multiple blocks each with multiple\n            # withdrawals to the same withdrawal address.\n            return [\n                Block(\n                    withdrawals=[\n                        Withdrawal(\n                            index=i * 16 + j,\n                            validator_index=i,\n                            address=addresses[i],\n                            amount=1,\n                        )\n                        for j in range(16)\n                    ],\n                )\n                for i in range(len(addresses))\n            ]\n        raise Exception(\"Invalid test case.\")\n\n    def test_multiple_withdrawals_same_address(\n        self,\n        blockchain_test: BlockchainTestFiller,\n        test_case: str,\n        pre: Alloc,\n        addresses: List[Address],\n        blocks: List[Block],\n    ):\n        \"\"\"\n        Test Withdrawals can be done to the same address multiple times in\n        the same block.\n        \"\"\"\n        # Expected post is the same for both test cases.\n        post = {}\n        for addr in addresses:\n            post[addr] = Account(\n                balance=16 * ONE_GWEI,\n                storage={},\n            )\n\n        blockchain_test(pre=pre, post=post, blocks=blocks, tag=test_case)\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.TestMultipleWithdrawalsSameAddress.test_multiple_withdrawals_same_address","title":"test_multiple_withdrawals_same_address(blockchain_test, test_case, pre, addresses, blocks)","text":"

    Test Withdrawals can be done to the same address multiple times in the same block.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    def test_multiple_withdrawals_same_address(\n    self,\n    blockchain_test: BlockchainTestFiller,\n    test_case: str,\n    pre: Alloc,\n    addresses: List[Address],\n    blocks: List[Block],\n):\n    \"\"\"\n    Test Withdrawals can be done to the same address multiple times in\n    the same block.\n    \"\"\"\n    # Expected post is the same for both test cases.\n    post = {}\n    for addr in addresses:\n        post[addr] = Account(\n            balance=16 * ONE_GWEI,\n            storage={},\n        )\n\n    blockchain_test(pre=pre, post=post, blocks=blocks, tag=test_case)\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.test_many_withdrawals","title":"test_many_withdrawals(blockchain_test, pre)","text":"

    Test Withdrawals with a count of N withdrawals in a single block where N is a high number not expected to be seen in mainnet.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    def test_many_withdrawals(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Test Withdrawals with a count of N withdrawals in a single block where\n    N is a high number not expected to be seen in mainnet.\n    \"\"\"\n    N = 400\n    withdrawals = []\n    post = {}\n    for i in range(N):\n        addr = pre.deploy_contract(Op.SSTORE(Op.NUMBER, 1))\n        amount = i * 1\n        withdrawals.append(\n            Withdrawal(\n                index=i,\n                validator_index=i,\n                address=addr,\n                amount=amount,\n            )\n        )\n        post[addr] = Account(\n            code=Op.SSTORE(Op.NUMBER, 1),\n            balance=amount * ONE_GWEI,\n            storage={},\n        )\n\n    blocks = [\n        Block(\n            withdrawals=withdrawals,\n        ),\n    ]\n\n    blockchain_test(pre=pre, post=post, blocks=blocks)\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.test_self_destructing_account","title":"test_self_destructing_account(blockchain_test, pre, fork)","text":"

    Test withdrawals can be done to self-destructed accounts. Account 0x100 self-destructs and sends all its balance to 0x200. Then, a withdrawal is received at 0x100 with 99 wei.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    def test_self_destructing_account(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    fork: Fork,\n):\n    \"\"\"\n    Test withdrawals can be done to self-destructed accounts.\n    Account `0x100` self-destructs and sends all its balance to `0x200`.\n    Then, a withdrawal is received at `0x100` with 99 wei.\n    \"\"\"\n    self_destruct_code = Op.SELFDESTRUCT(Op.CALLDATALOAD(0))\n    sender = pre.fund_eoa()\n    recipient = pre.fund_eoa(1)\n    self_destruct_contract_address = pre.deploy_contract(\n        self_destruct_code,\n        balance=100 * ONE_GWEI,\n    )\n\n    tx_1 = Transaction(\n        # Transaction sent from the `sender`, that calls a\n        # self-destructing contract.\n        sender=sender,\n        gas_limit=100000,\n        to=self_destruct_contract_address,\n        data=Hash(recipient),\n    )\n\n    withdrawal = Withdrawal(\n        index=0,\n        validator_index=0,\n        address=self_destruct_contract_address,\n        amount=(99),\n    )\n\n    block = Block(\n        txs=[tx_1],\n        withdrawals=[withdrawal],\n    )\n\n    post = {\n        self_destruct_contract_address: Account(\n            code=self_destruct_code if fork >= Cancun else b\"\",\n            balance=(99 * ONE_GWEI),\n        ),\n        recipient: Account(\n            code=b\"\",\n            balance=(100 * ONE_GWEI) + 1,\n        ),\n    }\n\n    blockchain_test(pre=pre, post=post, blocks=[block])\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.test_newly_created_contract","title":"test_newly_created_contract(blockchain_test, pre, include_value_in_tx, request)","text":"

    Test Withdrawing to a newly created contract.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    @pytest.mark.parametrize(\n    \"include_value_in_tx\",\n    [False, True],\n    ids=[\"without_tx_value\", \"with_tx_value\"],\n)\ndef test_newly_created_contract(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    include_value_in_tx: bool,\n    request,\n):\n    \"\"\"\n    Test Withdrawing to a newly created contract.\n    \"\"\"\n    sender = pre.fund_eoa()\n    initcode = Op.RETURN(0, 1)\n    tx = Transaction(\n        # Transaction sent from the `sender`, that creates a\n        # new contract.\n        sender=sender,\n        gas_limit=1000000,\n        to=None,\n        value=ONE_GWEI if include_value_in_tx else 0,\n        data=initcode,\n    )\n    created_contract = tx.created_contract\n\n    withdrawal = Withdrawal(\n        index=0,\n        validator_index=0,\n        address=created_contract,\n        amount=1,\n    )\n\n    created_contract_balance = ONE_GWEI\n    if include_value_in_tx:\n        created_contract_balance = 2 * ONE_GWEI\n\n    post = {\n        created_contract: Account(\n            code=Op.STOP,\n            balance=created_contract_balance,\n        ),\n    }\n\n    block = Block(\n        txs=[tx],\n        withdrawals=[withdrawal],\n    )\n\n    blockchain_test(pre=pre, post=post, blocks=[block])\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.test_no_evm_execution","title":"test_no_evm_execution(blockchain_test, pre)","text":"

    Test Withdrawals don't trigger EVM execution.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    def test_no_evm_execution(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Test Withdrawals don't trigger EVM execution.\n    \"\"\"\n    sender = pre.fund_eoa()\n    contracts = [pre.deploy_contract(Op.SSTORE(Op.NUMBER, 1)) for _ in range(4)]\n    blocks = [\n        Block(\n            txs=[\n                Transaction(\n                    sender=sender,\n                    gas_limit=100000,\n                    to=contracts[2],\n                ),\n                Transaction(\n                    sender=sender,\n                    gas_limit=100000,\n                    to=contracts[3],\n                ),\n            ],\n            withdrawals=[\n                Withdrawal(\n                    index=0,\n                    validator_index=0,\n                    address=contracts[0],\n                    amount=1,\n                ),\n                Withdrawal(\n                    index=1,\n                    validator_index=1,\n                    address=contracts[1],\n                    amount=1,\n                ),\n            ],\n        ),\n        Block(\n            txs=[\n                Transaction(\n                    sender=sender,\n                    gas_limit=100000,\n                    to=contracts[0],\n                ),\n                Transaction(\n                    sender=sender,\n                    gas_limit=100000,\n                    to=contracts[1],\n                ),\n            ],\n            withdrawals=[\n                Withdrawal(\n                    index=0,\n                    validator_index=0,\n                    address=contracts[2],\n                    amount=1,\n                ),\n                Withdrawal(\n                    index=1,\n                    validator_index=1,\n                    address=contracts[3],\n                    amount=1,\n                ),\n            ],\n        ),\n    ]\n\n    post = {\n        contracts[0]: Account(storage={2: 1}),\n        contracts[1]: Account(storage={2: 1}),\n        contracts[2]: Account(storage={1: 1}),\n        contracts[3]: Account(storage={1: 1}),\n    }\n\n    blockchain_test(pre=pre, post=post, blocks=blocks)\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.test_zero_amount","title":"test_zero_amount(blockchain_test, pre, test_case)","text":"

    Test withdrawals with zero amount for the following cases, all withdrawals are included in one block:

    1. Two withdrawals of zero amount to two different addresses; one to an untouched account, one to an account with a balance.
    2. As 1., but with an additional withdrawal with positive value.
    3. As 2., but with an additional withdrawal containing the maximum value possible.
    4. As 3., but with order of withdrawals in the block reversed.
    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    @pytest.mark.parametrize(\n    \"test_case\",\n    [case for case in ZeroAmountTestCases],\n    ids=[case.value for case in ZeroAmountTestCases],\n)\ndef test_zero_amount(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    test_case: ZeroAmountTestCases,\n):\n    \"\"\"\n    Test withdrawals with zero amount for the following cases, all withdrawals\n    are included in one block:\n\n    1. Two withdrawals of zero amount to two different addresses; one to an\n       untouched account, one to an account with a balance.\n    2. As 1., but with an additional withdrawal with positive value.\n    3. As 2., but with an additional withdrawal containing the maximum value\n       possible.\n    4. As 3., but with order of withdrawals in the block reversed.\n\n    \"\"\"\n    empty_accounts = [pre.fund_eoa(0) for _ in range(3)]\n    zero_balance_contract = pre.deploy_contract(Op.STOP)\n\n    all_withdrawals = [\n        # No value, untouched account\n        Withdrawal(\n            index=0,\n            validator_index=0,\n            address=empty_accounts[0],\n            amount=0,\n        ),\n        # No value, touched account\n        Withdrawal(\n            index=0,\n            validator_index=0,\n            address=zero_balance_contract,\n            amount=0,\n        ),\n        # Withdrawal with value\n        Withdrawal(\n            index=1,\n            validator_index=0,\n            address=empty_accounts[1],\n            amount=1,\n        ),\n        # Withdrawal with maximum amount\n        Withdrawal(\n            index=2,\n            validator_index=0,\n            address=empty_accounts[2],\n            amount=2**64 - 1,\n        ),\n    ]\n    all_post = {\n        empty_accounts[0]: Account.NONEXISTENT,\n        zero_balance_contract: Account(code=Op.STOP, balance=0),\n        empty_accounts[1]: Account(balance=ONE_GWEI),\n        empty_accounts[2]: Account(balance=(2**64 - 1) * ONE_GWEI),\n    }\n\n    withdrawals: List[Withdrawal] = []\n    post: Mapping[Address, Account | object] = {}\n    if test_case == ZeroAmountTestCases.TWO_ZERO:\n        withdrawals = all_withdrawals[0:2]\n        post = {\n            account: all_post[account]\n            for account in post\n            if account in [empty_accounts[0], zero_balance_contract]\n        }\n    elif test_case == ZeroAmountTestCases.THREE_ONE_WITH_VALUE:\n        withdrawals = all_withdrawals[0:3]\n        post = {\n            account: all_post[account]\n            for account in post\n            if account\n            in [\n                empty_accounts[0],\n                zero_balance_contract,\n                empty_accounts[1],\n            ]\n        }\n    elif test_case == ZeroAmountTestCases.FOUR_ONE_WITH_MAX:\n        withdrawals = all_withdrawals\n        post = all_post\n    elif test_case == ZeroAmountTestCases.FOUR_ONE_WITH_MAX_REVERSED:\n        for i, w in enumerate(reversed(all_withdrawals)):\n            withdrawals.append(\n                Withdrawal(\n                    index=i,\n                    validator_index=w.validator_index,\n                    address=w.address,\n                    amount=w.amount,\n                )\n            )\n        post = all_post\n\n    blockchain_test(\n        pre=pre,\n        # TODO: Fix in BlockchainTest? post: Mapping[str, Account | object]\n        # to allow for Account.NONEXISTENT\n        post=post,  # type: ignore\n        blocks=[Block(withdrawals=withdrawals)],\n        tag=test_case.value,\n    )\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.test_large_amount","title":"test_large_amount(blockchain_test, pre)","text":"

    Test Withdrawals that have a large gwei amount, so that (gwei * 1e9) could overflow uint64 but not uint256.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    def test_large_amount(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n):\n    \"\"\"\n    Test Withdrawals that have a large gwei amount, so that (gwei * 1e9)\n    could overflow uint64 but not uint256.\n    \"\"\"\n    withdrawals: List[Withdrawal] = []\n    amounts: List[int] = [\n        (2**35),\n        (2**64) - 1,\n        (2**63) + 1,\n        (2**63),\n        (2**63) - 1,\n    ]\n\n    post = {}\n\n    for i, amount in enumerate(amounts):\n        addr = pre.fund_eoa(0)\n        withdrawals.append(\n            Withdrawal(\n                index=i,\n                validator_index=i,\n                address=addr,\n                amount=amount,\n            )\n        )\n        post[addr] = Account(balance=(amount * ONE_GWEI))\n\n    blocks = [\n        Block(\n            withdrawals=withdrawals,\n        )\n    ]\n    blockchain_test(pre=pre, post=post, blocks=blocks)\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/#tests.shanghai.eip4895_withdrawals.test_withdrawals.test_withdrawing_to_precompiles","title":"test_withdrawing_to_precompiles(blockchain_test, pre, precompile, amount, t8n)","text":"

    Test withdrawing to all precompiles for a given fork.

    Source code in tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    @pytest.mark.parametrize(\"amount\", [0, 1])\n@pytest.mark.with_all_precompiles\ndef test_withdrawing_to_precompiles(\n    blockchain_test: BlockchainTestFiller,\n    pre: Alloc,\n    precompile: int,\n    amount: int,\n    t8n: TransitionTool,\n):\n    \"\"\"\n    Test withdrawing to all precompiles for a given fork.\n    \"\"\"\n    if precompile == 3 and str(t8n.default_binary) == \"ethereum-spec-evm\":\n        pytest.xfail(\"ethereum-spec-evm doesn't support hash type ripemd160\")\n    sender = pre.fund_eoa()\n    post: Dict = {}\n\n    blocks = [\n        # First block performs the withdrawal\n        Block(\n            withdrawals=[\n                Withdrawal(\n                    index=0,\n                    validator_index=0,\n                    address=Address(precompile),\n                    amount=amount,\n                )\n            ]\n        ),\n        # Second block sends a transaction to the precompile\n        Block(\n            txs=[\n                Transaction(\n                    sender=sender,\n                    gas_limit=100000,\n                    to=Address(precompile),\n                ),\n            ],\n        ),\n    ]\n    blockchain_test(pre=pre, post=post, blocks=blocks)\n
    "},{"location":"tests/shanghai/eip4895_withdrawals/test_withdrawals/index/test_cases/","title":"Test Withdrawals - Test Cases","text":"

    Test cases generated from tests/shanghai/eip4895_withdrawals/test_withdrawals.py

    Parametrized test cases generated from the test module tests/shanghai/eip4895_withdrawals/test_withdrawals.py:

    TestUseValueInTx\nTestUseValueInTx\nTestUseValueInTx\nTestUseValueInTx\nTestUseValueInTx\nTestUseValueInTx\nTestUseValueInTx\nTestUseValueInTx\nTestUseValueInTx\nTestUseValueInTx\nTestUseValueInTx\nTestUseValueInTx\ntest_use_value_in_contract[fork_Shanghai-blockchain_test]\ntest_use_value_in_contract[fork_Shanghai-blockchain_test_engine]\ntest_use_value_in_contract[fork_Cancun-blockchain_test]\ntest_use_value_in_contract[fork_Cancun-blockchain_test_engine]\ntest_use_value_in_contract[fork_Prague-blockchain_test]\ntest_use_value_in_contract[fork_Prague-blockchain_test_engine]\ntest_balance_within_block[fork_Shanghai-blockchain_test]\ntest_balance_within_block[fork_Shanghai-blockchain_test_engine]\ntest_balance_within_block[fork_Cancun-blockchain_test]\ntest_balance_within_block[fork_Cancun-blockchain_test_engine]\ntest_balance_within_block[fork_Prague-blockchain_test]\ntest_balance_within_block[fork_Prague-blockchain_test_engine]\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\nTestMultipleWithdrawalsSameAddress\ntest_many_withdrawals[fork_Shanghai-blockchain_test]\ntest_many_withdrawals[fork_Shanghai-blockchain_test_engine]\ntest_many_withdrawals[fork_Cancun-blockchain_test]\ntest_many_withdrawals[fork_Cancun-blockchain_test_engine]\ntest_many_withdrawals[fork_Prague-blockchain_test]\ntest_many_withdrawals[fork_Prague-blockchain_test_engine]\ntest_self_destructing_account[fork_Shanghai-blockchain_test]\ntest_self_destructing_account[fork_Shanghai-blockchain_test_engine]\ntest_self_destructing_account[fork_Cancun-blockchain_test]\ntest_self_destructing_account[fork_Cancun-blockchain_test_engine]\ntest_self_destructing_account[fork_Prague-blockchain_test]\ntest_self_destructing_account[fork_Prague-blockchain_test_engine]\ntest_newly_created_contract[fork_Shanghai-blockchain_test-without_tx_value]\ntest_newly_created_contract[fork_Shanghai-blockchain_test-with_tx_value]\ntest_newly_created_contract[fork_Shanghai-blockchain_test_engine-without_tx_value]\ntest_newly_created_contract[fork_Shanghai-blockchain_test_engine-with_tx_value]\ntest_newly_created_contract[fork_Cancun-blockchain_test-without_tx_value]\ntest_newly_created_contract[fork_Cancun-blockchain_test-with_tx_value]\ntest_newly_created_contract[fork_Cancun-blockchain_test_engine-without_tx_value]\ntest_newly_created_contract[fork_Cancun-blockchain_test_engine-with_tx_value]\ntest_newly_created_contract[fork_Prague-blockchain_test-without_tx_value]\ntest_newly_created_contract[fork_Prague-blockchain_test-with_tx_value]\ntest_newly_created_contract[fork_Prague-blockchain_test_engine-without_tx_value]\ntest_newly_created_contract[fork_Prague-blockchain_test_engine-with_tx_value]\ntest_no_evm_execution[fork_Shanghai-blockchain_test]\ntest_no_evm_execution[fork_Shanghai-blockchain_test_engine]\ntest_no_evm_execution[fork_Cancun-blockchain_test]\ntest_no_evm_execution[fork_Cancun-blockchain_test_engine]\ntest_no_evm_execution[fork_Prague-blockchain_test]\ntest_no_evm_execution[fork_Prague-blockchain_test_engine]\ntest_zero_amount[fork_Shanghai-blockchain_test-two_withdrawals_no_value]\ntest_zero_amount[fork_Shanghai-blockchain_test-three_withdrawals_one_with_value]\ntest_zero_amount[fork_Shanghai-blockchain_test-four_withdrawals_one_with_value_one_with_max]\ntest_zero_amount[fork_Shanghai-blockchain_test-four_withdrawals_one_with_value_one_with_max_reversed_order]\ntest_zero_amount[fork_Shanghai-blockchain_test_engine-two_withdrawals_no_value]\ntest_zero_amount[fork_Shanghai-blockchain_test_engine-three_withdrawals_one_with_value]\ntest_zero_amount[fork_Shanghai-blockchain_test_engine-four_withdrawals_one_with_value_one_with_max]\ntest_zero_amount[fork_Shanghai-blockchain_test_engine-four_withdrawals_one_with_value_one_with_max_reversed_order]\ntest_zero_amount[fork_Cancun-blockchain_test-two_withdrawals_no_value]\ntest_zero_amount[fork_Cancun-blockchain_test-three_withdrawals_one_with_value]\ntest_zero_amount[fork_Cancun-blockchain_test-four_withdrawals_one_with_value_one_with_max]\ntest_zero_amount[fork_Cancun-blockchain_test-four_withdrawals_one_with_value_one_with_max_reversed_order]\ntest_zero_amount[fork_Cancun-blockchain_test_engine-two_withdrawals_no_value]\ntest_zero_amount[fork_Cancun-blockchain_test_engine-three_withdrawals_one_with_value]\ntest_zero_amount[fork_Cancun-blockchain_test_engine-four_withdrawals_one_with_value_one_with_max]\ntest_zero_amount[fork_Cancun-blockchain_test_engine-four_withdrawals_one_with_value_one_with_max_reversed_order]\ntest_zero_amount[fork_Prague-blockchain_test-two_withdrawals_no_value]\ntest_zero_amount[fork_Prague-blockchain_test-three_withdrawals_one_with_value]\ntest_zero_amount[fork_Prague-blockchain_test-four_withdrawals_one_with_value_one_with_max]\ntest_zero_amount[fork_Prague-blockchain_test-four_withdrawals_one_with_value_one_with_max_reversed_order]\ntest_zero_amount[fork_Prague-blockchain_test_engine-two_withdrawals_no_value]\ntest_zero_amount[fork_Prague-blockchain_test_engine-three_withdrawals_one_with_value]\ntest_zero_amount[fork_Prague-blockchain_test_engine-four_withdrawals_one_with_value_one_with_max]\ntest_zero_amount[fork_Prague-blockchain_test_engine-four_withdrawals_one_with_value_one_with_max_reversed_order]\ntest_large_amount[fork_Shanghai-blockchain_test]\ntest_large_amount[fork_Shanghai-blockchain_test_engine]\ntest_large_amount[fork_Cancun-blockchain_test]\ntest_large_amount[fork_Cancun-blockchain_test_engine]\ntest_large_amount[fork_Prague-blockchain_test]\ntest_large_amount[fork_Prague-blockchain_test_engine]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000009-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000009-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000009-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000009-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000005-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000005-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000005-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000005-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000006-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000006-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000006-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000006-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000007-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000007-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000007-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000007-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000008-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000008-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000008-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000008-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000001-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000001-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000001-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000001-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000002-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000002-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000002-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000002-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000003-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000003-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000003-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000003-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000004-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000004-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000004-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Shanghai-precompile_0x0000000000000000000000000000000000000004-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x000000000000000000000000000000000000000a-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x000000000000000000000000000000000000000a-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x000000000000000000000000000000000000000a-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x000000000000000000000000000000000000000a-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000009-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000009-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000009-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000009-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000005-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000005-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000005-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000005-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000006-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000006-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000006-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000006-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000007-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000007-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000007-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000007-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000008-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000008-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000008-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000008-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000001-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000001-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000001-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000001-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000002-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000002-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000002-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000002-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000003-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000003-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000003-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000003-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000004-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000004-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000004-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Cancun-precompile_0x0000000000000000000000000000000000000004-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000b-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000b-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000b-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000b-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000c-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000c-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000c-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000c-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000d-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000d-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000d-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000d-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000e-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000e-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000e-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000e-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000f-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000f-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000f-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000f-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000010-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000010-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000010-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000010-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000011-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000011-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000011-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000011-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000012-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000012-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000012-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000012-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000013-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000013-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000013-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000013-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000a-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000a-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000a-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x000000000000000000000000000000000000000a-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000009-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000009-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000009-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000009-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000005-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000005-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000005-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000005-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000006-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000006-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000006-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000006-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000007-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000007-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000007-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000007-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000008-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000008-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000008-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000008-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000001-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000001-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000001-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000001-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000002-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000002-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000002-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000002-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000003-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000003-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000003-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000003-blockchain_test_engine-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000004-blockchain_test-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000004-blockchain_test-amount_1]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000004-blockchain_test_engine-amount_0]\ntest_withdrawing_to_precompiles[fork_Prague-precompile_0x0000000000000000000000000000000000000004-blockchain_test_engine-amount_1]\n

    This output was extracted from the result of:

    fill -p pytest_plugins.filler.pre_alloc -p pytest_plugins.filler.solc -p pytest_plugins.filler.filler -p pytest_plugins.forks.forks -p pytest_plugins.spec_version_checker.spec_version_checker -p pytest_plugins.help.help -m not eip_version_check --tb short --dist loadscope --ignore tests/cancun/eip4844_blobs/point_evaluation_vectors/ --collect-only -q --until Prague tests/shanghai/eip4895_withdrawals/test_withdrawals.py\n
    "},{"location":"tutorials/blockchain/","title":"Blockchain Tests","text":"

    This tutorial teaches you to create a blockchain execution specification test. These tests verify that a blockchain, starting from a defined pre-state, will process given blocks and arrive at a defined post-state.

    "},{"location":"tutorials/blockchain/#pre-requisites","title":"Pre-requisites","text":"

    Before proceeding with this tutorial, it is assumed that you have prior knowledge and experience with the following:

    • Set up and run an execution specification test as outlined in the quick start guide.
    • Understand how to read a blockchain test.
    • Know the basics of Yul, which is an EVM assembly language.
    • Familiarity with Python.
    • Understand how to write an execution spec state transition test.
    "},{"location":"tutorials/blockchain/#example-tests","title":"Example Tests","text":"

    In this tutorial we will go over [test_block_number] in test_block_example.py(https://github.com/ethereum/execution-spec-tests/tree/main/tests/example/test_block_example.py#L19).

    It is assumed you have already gone through the state transition test tutorial. Only new concepts will be discussed.

    "},{"location":"tutorials/blockchain/#smart-contract","title":"Smart Contract","text":"

    A smart contract is defined that is called by each transaction in the test. It stores a pointer to storage at storage[0]. When it is called storage cell 0 gets the current block number, and the pointer is incremented to the next value.

    contract_addr: Account(\n    balance=1000000000000000000000,\n    code=Yul(\n        \"\"\"\n        {\n            let next_slot := sload(0)\n            sstore(next_slot, number())\n            sstore(0, add(next_slot, 1))\n        }\n        \"\"\"\n    ),\n    storage={\n        0x00: 0x01,\n    },\n),\n
    "},{"location":"tutorials/blockchain/#transaction-generator","title":"Transaction Generator","text":"

    The transactions used in this test are nearly identical. Their only difference is the nonce value which needs to be incremented.

    def tx_generator():\n    nonce = 0  # Initial value\n    while True:\n        tx = Transaction(\n            ty=0x0,\n            chain_id=0x0,\n            nonce=nonce,\n            to=contractAddr,\n            gas_limit=500000,\n            gas_price=10,\n        )\n        nonce = nonce + 1\n        yield tx\n\ntx_generator = tx_generator()\n

    This looks like an infinite loop but it isn't because this is a generator function. When generator encounters the yield keyword it returns the value and stops execution, keeping a copy of all the local variables, until it is called again. Hence infinite loops inside a generator are not a problem as long as they include yield. This code section is responsible for creating the Transaction object and incrementing the nonce.

    Every time the function tx_generator() is called, it returns a new generator with a nonce of zero. To increment the nonce we need to use the same generator. We assign this generator to tx_generator.

    "},{"location":"tutorials/blockchain/#blocks","title":"Blocks","text":"

    Each integer in the tx_per_block array is the number of transactions in a block. The genesis block is block 0 (no transactions). It follows that we have 2 transactions in block 1, 0 in block two, 4 in block 3, ..., and 50 in block 9.

    tx_per_block = [2, 0, 4, 8, 0, 0, 20, 1, 50]\n

    The code section that creates the blocks is a bit complex in this test. For some simpler definitions of Block creation you can browse tests within test_withdrawals.py.

    blocks = map(\n    lambda len: Block(\n        txs=list(map(lambda x: next(tx_generator), range(len)))\n    ),\n    tx_per_block,\n)\n

    We use lambda notation to specify short functions. In this case, the function doesn't actually care about its input, it just returns the next transaction from the generator.

    lambda x: next(tx_generator)\n

    Python uses range(n) to create a list of numbers from 0 to n-1. Among other things, it's a simple way to create a list of n values.

    range(len)\n

    The map function runs the function (the first parameter) on every element of the list (the second parameter). Putting together what we know, it means that it runs next(tx_generator) len times, giving us len transactions. We then use list to turn the transactions into a list that we can provide as the txs parameter to the Block constructor.

    list(map(lambda x: next(tx_generator), range(len)))\n

    The outer lambda function takes an integer, len, and creates a Block object with len transactions. This function is then run on every value of tx_per_block to generate the blocks.

    blocks = map(\n    lambda len: Block(\n        txs=list of len transactions\n    ),\n    tx_per_block,\n)\n

    For example, if we had tx_per_block = [0,2,4], we'd get this result:

    blocks = [\n    Blocks(txs=[]),\n    Blocks(txs=[next(tx_generator), next(tx_generator)]),\n    Blocks(txs=[next(tx_generator), next(tx_generator), next(tx_generator), next(tx_generator)])        \n]\n
    "},{"location":"tutorials/blockchain/#post-state","title":"Post State","text":"

    Recall that storage slot 0 retains the value of the next slot that the block number is written into. It starts at one and is incremented after each transaction. Hence it's the total number of transactions plus 1.

    storage = {0: sum(tx_per_block) + 1}\n

    For every block and transaction within the block, we write the block number and increment the next slot number in storage slot 0. As Python lists are 0 indexed, we must increment the block number by 1.

    next_slot = 1\nfor blocknum in range(len(tx_per_block)):\n    for _ in range(tx_per_block[blocknum]):\n        storage[next_slot] = blocknum + 1\n        next_slot = next_slot + 1\n

    Now that the expected storage values are calculated, the post state can be defined and yielded within the BlockchainTest, synonymous to the state test example.

    post = {contract_addr: Account(storage=storage)}\n\nyield BlockchainTest(\n    genesis_environment=env,\n    pre=pre,\n    blocks=blocks,\n    post=post,\n)\n

    Note that because of the yield we could have multiple tests under the same name.

    "},{"location":"tutorials/blockchain/#conclusion","title":"Conclusion","text":"

    At this point you should be able to write blockchain tests.

    "},{"location":"tutorials/state_transition/","title":"State Transition Tests","text":"

    This tutorial teaches you to create a state transition execution specification test. These tests verify that a starting pre-state will reach a specified post-state after executing a single transaction.

    "},{"location":"tutorials/state_transition/#pre-requisites","title":"Pre-requisites","text":"

    Before proceeding with this tutorial, it is assumed that you have prior knowledge and experience with the following:

    • Set up and run an execution specification test as outlined in the quick start guide.
    • Understand how to read a static state transition test.
    • Know the basics of Yul, which is an EVM assembly language.
    • Familiarity with Python.
    "},{"location":"tutorials/state_transition/#example-tests","title":"Example Tests","text":"

    The most effective method of learning how to write tests is to study a couple of straightforward examples. In this tutorial we will go over the Yul state test.

    "},{"location":"tutorials/state_transition/#yul-test","title":"Yul Test","text":"

    You can find the source code for the Yul test in tests/homestead/yul/test_yul_example.py. It is the spec test equivalent of this static test.

    Lets examine each section.

    \"\"\"\nTest Yul Source Code Examples\n\"\"\"\n

    In Python, multi-line strings are denoted using \"\"\". As a convention, a file's purpose is often described in the opening string of the file.

    from ethereum_test_forks import Fork, Frontier, Homestead\nfrom ethereum_test_tools import (\n    Account,\n    Alloc,\n    Environment,\n    StateTestFiller,\n    Transaction,\n    YulCompiler,\n)\n

    In this snippet the required constants, types and helper functions are imported from ethereum_test_tools and ethereum_test_forks. We will go over these as we come across them.

    @pytest.mark.valid_from(\"Homestead\")\n

    In Python this kind of definition is called a decorator. It modifies the action of the function after it. In this case, the decorator is a custom pytest fixture defined by the execution-specs-test framework that specifies that the test is valid for the Homestead fork and all forks after it. The framework will then execute this test case for all forks in the fork range specified by the command-line arguments.

    Executing the test

    To execute this test for all the specified forks, we can specify pytest's -k flag that filters test cases by keyword expression:

    fill -k test_yul\n

    and to execute it for a specific fork range, we can provide the --from and --until command-line arguments:

    fill -k test_yul --from London --until Paris\n
    def test_yul(state_test: StateTestFiller, pre: Alloc, yul: YulCompiler, fork: Fork):\n    \"\"\"\n    Test YUL compiled bytecode.\n    \"\"\"\n

    This is the format of a Python function. It starts with def <function name>(<parameters>):, and then has indented code for the function. The function definition ends when there is a line that is no longer indented. As with files, by convention functions start with a string that explains what the function does.

    The state_test function argument

    This test defines a state test and, as such, must include the state_test in its function arguments. This is a callable object (actually a wrapper class to the StateTest); we will see how it is called later.

    The pre function argument

    For all types of tests, it is highly encouraged that we define the pre allocation as a function argument, which will be populated with the pre-state requirements during the execution of the test function (see below).

        env = Environment()\n

    This line specifies that env is an Environment object, and that we just use the default parameters. If necessary we can modify the environment to have different block gas limits, block numbers, etc. In most tests the defaults are good enough.

    For more information, see the static test documentation.

    "},{"location":"tutorials/state_transition/#pre-state","title":"Pre State","text":"

    For every test we need to define the pre-state requirements, so we are certain of what is on the \"blockchain\" before the test executes. It can be used as a dictionary, which is the Python term for an associative array, but the appropriate way to populate it is by using the methods fund_eoa, deploy_contract or fund_address from the Alloc object.

    In this example we are using the deploy_contract method to deploy a contract to some address available in the pre-state.

        contract_address = pre.deploy_contract(\n        code=yul(\n            \"\"\"\n            {\n                function f(a, b) -> c {\n                    c := add(a, b)\n                }\n\n                sstore(0, f(1, 2))\n                return(0, 32)\n            }\n            \"\"\"\n        ),\n        balance=0x0BA1A9CE0BA1A9CE,\n    )\n

    Specifically we deploy a contract with yul code that adds two numbers and stores the result in storage.

                balance=0x0BA1A9CE0BA1A9CE,\n

    This field is the balance: the amount of Wei that the account has. It usually doesn't matter what its value is in the case of state test contracts.

        contract_address = pre.deploy_contract(\n

    As return value of the deploy_contract method we get the address where the contract was deployed and put it in the contract_address variable, which will later be used in the transaction.

            storage={\n            0x00: 0x00,\n        },\n

    We could also specify a starting storage for the contract, which is done by adding a storage parameter to the deploy_contract method.

                code=yul(\n

    Here we define the Yul code for the contract. It is defined as a multi-line string and starts and ends with curly braces ({ <yul> }).

    When running the test filler fill, the solidity compiler solc will automatically translate the Yul to EVM opcode at runtime.

    Note

    Currently Yul and direct EVM opcode are supported in execution spec tests.

                    \"\"\"\n                {\n                    function f(a, b) -> c {\n                        c := add(a, b)\n                    }\n                    sstore(0, f(1, 2))\n                    return(0, 32)\n                }\n                \"\"\"\n

    Within this example test Yul code we have a function definition, and inside it we are using the Yul add instruction. When compiled with solc it translates the instruction directly to the ADD opcode. For further Yul instructions see here. Notice that function is utilized with the Yul sstore instruction, which stores the result of add(1, 2) to the storage address 0x00.

    Generally for execution spec tests the sstore instruction acts as a high-level assertion method to check pre to post-state changes. The test filler achieves this by verifying that the correct value is held within post-state storage, hence we can validate that the Yul code has run successfully.

        sender = pre.fund_eoa(amount=0x0BA1A9CE0BA1A9CE)\n

    In this line we specify that we require a single externally owned account (EOA) with a balance of 0x0BA1A9CE0BA1A9CE Wei.

    The returned object, which includes a private key, an address, and a nonce, is stored in the sender variable and will later be used as the sender of the transaction.

    "},{"location":"tutorials/state_transition/#transactions","title":"Transactions","text":"
        tx = Transaction(\n        ty=0x0,\n        chain_id=0x01,\n        sender=sender,\n        to=contract_address,\n        gas_limit=500000,\n        gas_price=10,\n        protected=False if fork in [Frontier, Homestead] else True,\n    )\n

    With the pre-state built, we can add a description for the Transaction.

                sender=sender,\n

    We use the sender variable from the pre-state to specify the sender of the transaction, which already has the necessary information to sign the transaction, and also contains the correct nonce for the transaction.

    The nonce is a protection mechanism to prevent replay attacks, and the current rules of Ethereum require that the nonce of a transaction is equal to the number of transactions sent from the sender's address, starting from zero. This means that the first transaction sent from an address must have a nonce of zero, the second transaction must have a nonce of one, and so on.

    The nonce field of the sender variable is automatically incremented for us by the Transaction object when the transaction is signed, so if we were to create another transaction with the same sender, the nonce would be incremented by one yet another time.

                to=contract_address,\n

    The to field specifies the address of the contract we want to call and, in this case, it is the address of the contract we deployed earlier.

    For more information, see the static test documentation

    "},{"location":"tutorials/state_transition/#post-state","title":"Post State","text":"
        post = {\n        contract_address: Account(\n            storage={\n                0x00: 0x03,\n            },\n        ),\n    }\n

    This is the post-state which is equivalent to expect in static tests, but without the indexes. It is similar to the pre-state, except that we do not need to specify everything, only those accounts and fields we wish to test.

    In this case, we look at the storage of the contract we called and add to it what we expect to see. In this example storage cell 0x00 should be 0x03 as in the pre-state we essentially stored the result of the Yul instruction add(1, 2).

    "},{"location":"tutorials/state_transition/#state-test","title":"State Test","text":"
        state_test(env=env, pre=pre, post=post, tx=tx)\n

    This line calls the wrapper to the StateTest object that provides all the objects required (for example, the fork parameter) in order to fill the test, generate the test fixtures and write them to file (by default, ./fixtures/<blockchain,state>_tests/example/yul_example/test_yul.json).

    "},{"location":"tutorials/state_transition/#conclusion","title":"Conclusion","text":"

    At this point you should be able to state transition tests within a single block.

    "},{"location":"tutorials/state_transition_bad_opcode/","title":"Bad Opcode Test","text":"

    The source code for this test is here. We will only go over the parts that are new.

    We use Python string templates, so we need to import that library.

    from string import Template\n

    In this test we need a couple of addresses, so we create them here. Python lets us specify <string>*<number> when we need a string repeated multiple times, which makes for more readable code than 0x00...000C0DE.

        code_addr = \"0x\" + \"0\"*(40-4) + \"C0DE\"\n    goat_addr = \"0x\" + \"0\"*(40-4) + \"60A7\"\n

    We create env and tx first because they are constant. This function will yield multiple tests, but always with the same env and tx values.

        env = Environment()\n\n    tx = Transaction(\n           .\n           .\n           .\n        )\n

    Here we create two post states. We will use whichever one is appropriate to the test we create.

        post_valid = {\n       code_addr: Account(\n         storage={0x00: 1},\n       ),\n    }\n\n    post_invalid = {\n       code_addr: Account(\n         storage={0x00: 0},\n       ),\n    }\n

    Here we define a function (opc_valid) inside another function. Python supports this, and it has two advantages:

    • Avoid namespace pollution by restricting the function to where it is needed.
    • Functions defined inside other functions can use the parameters and local variables of those functions. In this case, we need to use fork.
        # Check if an Opcode is valid\n    def opc_valid(opc):\n        \"\"\"\n        Return whether opc will be evaluated as valid by the test or not.\n        Note that some opcodes are evaluated as invalid because of the way they act\n        \"\"\"\n

    This is the syntax for Python comments, # <rest of the line>.

            # PUSH0 is only valid Shanghai and later\n

    Opcode 0x5F (PUSH0) is only valid starting with the Shanghai fork. We don't know what will be the fork names after Shanghai, so it is easiest to specify that prior to Shanghai it is invalid. We don't need to worry about forks prior to London because the decorator for this test says it is only valid from London.

            if fork in {\"london\", \"paris\"} and opc==0x5F:\n

    Python has a set data structure. We use this structure when the order of the values are irrelevant, and we just want to be able to check if something is a member or not.

    Note that if statements are also followed by a colon (:) and the code inside them indented. That is the general Python syntax.

                return False\n

    Boolean values in Python are either True or False.

    This test works by running an opcode and then does a SSTORE. Opcodes that terminate execution, such as STOP and RETURN also cause the SSTORE not to happen, so they must be treated as invalid. The same is true for JUMP.

            # Valid opcodes, but they are terminal, and so cause\n        # the SSTORE not to happen\n        if opc in {0x00, 0xF3, 0xFD, 0xFF}:\n            return False\n\n\n        # Jumps. If you jump to a random location, you skip the SSTORE\n        if opc in {0x56}:\n            return False\n

    Next we return True for supported opcodes.

            # Opcodes that aren't part of a range\n        # 0x20 - SHA3\n        # 0xFA - STATICCALL\n        if opc in {0x20, 0xFA}:\n            return True\n

    In Python, as in math, you can use a < b < c for a < b and b < c.

            # Arithmetic opcodes\n        if 0x01 <= opc <= 0x0b:\n            return True\n\n        .\n        .\n        .\n

    The last part the function returns False. If we got here, then this is not a valid opcode.

            return False\n        # End of opc_valid\n

    As this is the end of the function, the next code line is no longer indented (compared to the function definition code).

    This is a for loop. For loops iterate over a sequence, and the range function, in this case, gives us the range 0..255. As with functions and if statements, the for loop has a colon and includes the indented code.

        # For every possible opcode\n    for opc in range(256):\n

    We have two post states. One, post_valid, has the value of 1 in storage location 0. The other, post_invalid has the value of 0 in storage location 0. But SELFDESTRUCT destroys the contract so there is no longer an account at that address. Neither is valid, so we just skip that test case.

            # We can't check SELFDESTRUCT using this technique\n        if opc in {0xFF}:\n           continue\n

    We need the opcode in hexadecimal. The function hex gives us the hexadecimal number in hex. However, it also gives us a 0x prefix, which we don't want, so we use a slice to remove the first two characters.

            opc_hex = hex(opc)[2:]\n

    We need opc_hex to be two characters. If the length is only one, prepend a zero.

            if len(opc_hex) == 1:\n          opc_hex = \"0\" + opc_hex\n

    This is a Template string. This means we'll be able to substitute template variables (${<var name>}) with values to produce the actual code.

            yul_code = Template(\"\"\"\n        {\n

    We start with a call 0x00...0060A7 (a.k.a. goat_addr) so we'll have some return data. Otherwise, RETURNDATACOPY will fail and appear like it is not an opcode.

               pop(call(gas(), 0x60A7, 0, 0, 0, 0, 0))\n\n           // fails on opcodes with >20 inputs\n           // (currently dup16, at 17 inputs, is the\n           // one that goes deepest)\n           //\n           // Follow with 32 NOPs (0x5B) to handle PUSH, which has an immediate\n           // operand\n

    Opcodes can have two types of operands:

    • Immediate operands, which are part of the bytecode. For example, 6001 is PUSH1 with the value 0x01.
    • Implied operands (a.k.a. stack operands), which come from the stack.

    This verbatim code provides both operand types. The code, ${opcode}${nop32} is the opcode we are testing, followed by 32 copies of 0x5B. When 0x5B is not used as an operand, it is JUMPDEST and does nothing.

               verbatim_20i_0o(hex\"${opcode}${nop32}\",\n

    The opcode string is followed by the input parameters (in this case, twenty of them). These can be Yul expressions, but for the sake of simplicity here we just use constant values.

                  0x00, 0x00, 0x00, 0xFF, 0xFF,\n              0xFF, 0xFF, 0xFF, 0xFF, 0xFF,\n              0xFF, 0xFF, 0xFF, 0xFF, 0xFF,\n              0xFF, 0xFF, 0xFF, 0xFF, 0xFF)\n

    If the opcode terminates the smart contract execution (as invalid opcodes do), we don't get here. If we do get here, write to storage cell 0x00 to record that fact.

    Note the syntax let <var> := <value>. This is how you specify variables in Yul.

               // We only get here is the opcode is legit (and it doesn't terminate\n           // execution like STOP and RETURN)\n           let zero := 0\n           let one := 1\n           sstore(zero, one)\n        }\n

    Replace ${opcode} with the one byte hex code, and ${nop32} with 32 copies of 5b (for NOP).

            \"\"\").substitute(opcode=opc_hex, nop32=\"5B\"*32)\n        pre = {\n           TestAddress: Account(balance=0x0BA1A9CE0BA1A9CE),\n           codeAddr: Account(\n  balance=0,\n  nonce=1,\n  code=Yul(yul_code)\n           ),\n

    This is the account for 0x00..0060A7. It just returns data (all zeros).

               goat_addr: Account(\n                balance=0,\n                nonce=1,\n                code=Yul(\"{ return(0, 0x100) }\"),\n           )\n        }\n

    Every time the for loop gets here, it yields a separate test. Over the entire for loop, it yields 255 different tests.

        yield StateTest(\n        env=env, \n        pre=pre, \n        tx=tx,\n        post=(post_valid if opc_valid(opc) else post_invalid),\n    )\n

    The Python format for the ternary operation is a bit different from C-like languages. In C like languages the syntax is <condition> ? <yes value> : <no value>. In Python it is <yes value> if <condition> else <no value>.

    "},{"location":"writing_tests/","title":"Writing Tests","text":"

    The best way to get started is to use one of the existing test modules for inspiration. A good simple example is tests.berlin.eip2930_access_list.test_acl.test_access_list.

    Please check that your code adheres to the repo's Coding Standards and read the other pages in this section for more background and an explanation of how to implement state transition and blockchain tests.

    "},{"location":"writing_tests/adding_a_new_test/","title":"Adding a New Test","text":"

    All test cases are located underneath the tests directory, which are then organized by fork. Each fork contains sub-directories containing test sub-categories.

    \ud83d\udcc1 execution-test-specs/\n\u251c\u2500\u2574\ud83d\udcc1 tests/\n|   \u251c\u2500\u2500 \ud83d\udcc4 __init__.py\n\u2502   \u251c\u2500\u2500 \ud83d\udcc1 cancun/\n|   |    \u251c\u2500\u2500 \ud83d\udcc4 __init__.py\n\u2502   |    \u2514\u2500\u2500 \ud83d\udcc1 eip4844_blobs/\n|   |        \u251c\u2500\u2500 \ud83d\udcc4 __init__.py\n|   |        \u251c\u2500\u2500 \ud83d\udcc4 test_blobhash_opcode.py\n|   |        \u251c\u2500\u2500 \ud83d\udcc4 test_excess_blob_gas.py\n|   |        \u2514\u2500\u2500 \ud83d\udcc4 ...\n|   \u251c\u2500\u2500 \ud83d\udcc1 shanghai\n|   |    \u251c\u2500\u2500 \ud83d\udcc1 eip3651_warm_coinbase\n|   |    |   \u251c\u2500\u2500 \ud83d\udcc4 __init__.py\n|   |    |   \u2514\u2500\u2500 \ud83d\udcc4 test_warm_coinbase.py\n|   |    \u251c\u2500\u2500 \ud83d\udcc1 eip3855_push0\n|   |    |   \u251c\u2500\u2500 \ud83d\udcc4 __init__.py\n|   |    |   \u2514\u2500\u2500 \ud83d\udcc4 test_push0.py\n|   |    \u251c\u2500\u2500 \ud83d\udcc1...\n|   |    ...\n\u2502   \u2514\u2500\u2500 \ud83d\udcc1 ...\n

    Each category/sub-directory may have multiple Python test modules (*.py) which in turn may contain many test functions. The test functions themselves are always parametrized by fork (by the framework).

    A new test can be added by either:

    • Adding a new test_ python function to an existing file in any of the existing category subdirectories within tests.
    • Creating a new source file in an existing category, and populating it with the new test function(s).
    • Creating an entirely new category by adding a subdirectory in tests with the appropriate source files and test functions.
    "},{"location":"writing_tests/code_standards/","title":"Code Standards","text":"

    The Python code in the tests subdirectory ./tests must fulfill the following checks:

    Command Explanation 1 fname8 tests Spell check passes using the ./whitelist.txt dictionary file. 2 isort tests --check --diff Python imports ordered and arranged according to isort's standards. 3 black tests --check --diff Python source must be black-formatted. 4 flake8 tests Python lint and spell-checked. 5 mypy tests Objects that provide typehints pass type-checking via mypy. 6 fill All tests must execute correctly. 7 mkdocs build --strict Documentation generated without warnings. 8 pyspelling Markdown spell-check. 9 markdownlint-cli2 Markdown lint check.

    While this seems like a long list, a correctly configured editor (see VS Code Setup) essentially assures:

    1. Points 2 and 3 are automatically covered.
    2. Points 1, 4, 5, 8 & 9 are mostly covered. Additionally, if you skip type hints, they won't be checked; we can help you add these in the PR.

    These checks must pass in order for the execution-spec-tests Github Actions to pass upon pushing to remote.

    Running the checks with tox

    All these checks can be executed locally in a single command, tox, see Verifying Changes.

    If you need help, get in touch!

    "},{"location":"writing_tests/exception_tests/","title":"Exception Tests","text":"

    Exception tests are a special type of test which verify that an invalid transaction or an invalid block are correctly rejected with the expected error.

    "},{"location":"writing_tests/exception_tests/#creating-an-exception-test","title":"Creating an Exception Test","text":"

    To test for an exception, the test can use either of the following types from ethereum_test_exceptions library:

    1. TransactionException: To be added to the error field of the Transaction object, and to the exception field of the Block object that includes the transaction; this exception type is used when a transaction is invalid, and therefore when included in a block, the block is expected to be invalid too. This is different from valid transactions where an exception during EVM execution is expected (e.g. a revert, or out-of-gas), which can be included in valid blocks.

      For an example, see eip3860_initcode.test_initcode.test_contract_creating_tx which raises TransactionException.INITCODE_SIZE_EXCEEDED in the case that the initcode size exceeds the maximum allowed size.

    2. BlockException: To be added to the exception field of the Block object; this exception type is used when a block is expected to be invalid, but the exception is related to a block property, e.g. an invalid value of the block header.

      For an example, see eip4844_blobs.test_excess_blob_gas.test_invalid_static_excess_blob_gas which raises BlockException.INCORRECT_EXCESS_BLOB_GAS in the case that the excessBlobGas remains unchanged but the parent blobs included are not TARGET_BLOBS_PER_BLOCK.

    Although exceptions can be combined with the | operator to indicate that a test vector can throw either one of multiple exceptions, ideally the tester should aim to use only one exception per test vector, and only use multiple exceptions on the rare instance when it is not possible to know which exception will be thrown because it depends on client implementation.

    "},{"location":"writing_tests/exception_tests/#adding-a-new-exception","title":"Adding a new exception","text":"

    If a test requires a new exception, because none of the existing ones is suitable for the test, a new exception can be added to either TransactionException or BlockException classes.

    The new exception should be added as a new enum value, and the docstring of the attribute should be a string that describes the exception.

    The name of the exception should be unique, and should not be used by any other exception.

    "},{"location":"writing_tests/exception_tests/#test-runner-behavior-on-exception-tests","title":"Test runner behavior on exception tests","text":"

    When an exception is added to a test vector, the test runner must check that the transaction or block is rejected with the expected exception.

    The test runner must map the exception key to the corresponding error string that is expected to be returned by the client.

    Exception mapping are particularly important in blockchain tests because the block can be invalid for multiple reasons, and the client returning a different error can mean that a verification in the client is faulty.

    "},{"location":"writing_tests/reference_specification/","title":"Referencing an EIP Spec Version","text":"

    An Ethereum Improvement Proposal (ethereum/EIPs) and its SHA digest can be directly referenced within a python test module in order to check whether the test implementation could be out-dated. The test framework automatically generates tests for every module that defines a spec version. If the spec is out-of-date because the SHA of the specified file in the remote repo changes, the corresponding test_eip_spec_version() test fails.

    <-snip->

    The SHA value is the output from git's hash-object command, for example:

    git clone git@github.com:ethereum/EIPs\ngit hash-object EIPS/EIPS/eip-3651.md\n# output: d94c694c6f12291bb6626669c3e8587eef3adff1\n

    and can be retrieved from the remote repo via the Github API on the command-line as following:

    sudo apt install jq\ncurl -s -H \"Accept: application/vnd.github.v3+json\" \\\nhttps://api.github.com/repos/ethereum/EIPs/contents/EIPS/eip-3651.md |\\\njq -r '.sha'\n# output: d94c694c6f12291bb6626669c3e8587eef3adff1\n
    "},{"location":"writing_tests/reference_specification/#how-to-add-a-spec-version-check","title":"How to Add a Spec Version Check","text":"

    This check accomplished by adding the following two global variables anywhere in the Python source file:

    Variable Name Explanation REFERENCE_SPEC_GIT_PATH The relative path of the EIP markdown file in the ethereum/EIPs repository, e.g. \"EIPS/eip-1234.md\" REFERENCE_SPEC_VERSION The SHA hash of the latest version of the file retrieved from the Github API:https://api.github.com/repos/ethereum/EIPs/contents/EIPS/eip-<EIP Number>.md"},{"location":"writing_tests/reference_specification/#example","title":"Example","text":"

    Here is an example from ./tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py:

    REFERENCE_SPEC_GIT_PATH = \"EIPS/eip-3651.md\"\nREFERENCE_SPEC_VERSION = \"d94c694c6f12291bb6626669c3e8587eef3adff1\"\n

    The SHA digest was retrieved from here.

    "},{"location":"writing_tests/test_markers/","title":"Test Markers","text":"

    Test markers are used to categorize tests and to run specific subsets of tests. They are defined in the test files using the pytest.mark decorator.

    The examples below use StateTestFiller tests, but the same markers can also be applied to BlockchainTestFiller tests.

    "},{"location":"writing_tests/test_markers/#fork-markers","title":"Fork Markers","text":"

    These markers are used to specify the forks for which a test is valid.

    "},{"location":"writing_tests/test_markers/#pytestmarkvalid_fromfork_name","title":"@pytest.mark.valid_from(\"FORK_NAME\")","text":"

    This marker is used to specify the fork from which the test is valid. The test will not be filled for forks before the specified fork.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\n\n@pytest.mark.valid_from(\"London\")\ndef test_something_only_valid_after_london(\n    state_test: StateTestFiller, \n    pre: Alloc\n):\n    pass\n

    In this example, the test will only be filled for the London fork and after, e.g. London, Paris, Shanghai, Cancun, etc.

    "},{"location":"writing_tests/test_markers/#pytestmarkvalid_untilfork_name","title":"@pytest.mark.valid_until(\"FORK_NAME\")","text":"

    This marker is used to specify the fork until which the test is valid. The test will not be filled for forks after the specified fork.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\n\n@pytest.mark.valid_until(\"London\")\ndef test_something_only_valid_until_london(\n    state_test: StateTestFiller, \n    pre: Alloc\n):\n    pass\n

    In this example, the test will only be filled for the London fork and before, e.g. London, Berlin, Istanbul, etc.

    "},{"location":"writing_tests/test_markers/#pytestmarkvalid_at_transition_tofork_name","title":"@pytest.mark.valid_at_transition_to(\"FORK_NAME\")","text":"

    This marker is used to specify that a test is only meant to be filled at the transition to the specified fork.

    The test usually starts at the fork prior to the specified fork at genesis and at block 5 (for pre-merge forks) or at timestamp 15,000 (for post-merge forks) the fork transition occurs.

    "},{"location":"writing_tests/test_markers/#fork-covariant-markers","title":"Fork Covariant Markers","text":"

    These markers are used in conjunction with the fork validity markers to automatically parameterize tests with values that are valid for the fork being tested.

    "},{"location":"writing_tests/test_markers/#pytestmarkwith_all_tx_types","title":"@pytest.mark.with_all_tx_types","text":"

    This marker is used to automatically parameterize a test with all transaction types that are valid for the fork being tested.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\n\n@pytest.mark.with_all_tx_types\n@pytest.mark.valid_from(\"Berlin\")\ndef test_something_with_all_tx_types(\n    state_test: StateTestFiller, \n    pre: Alloc,\n    tx_type: int\n):\n    pass\n

    In this example, the test will be parameterized for parameter tx_type with values [0, 1] for fork Berlin, but with values [0, 1, 2] for fork London (because of EIP-1559).

    "},{"location":"writing_tests/test_markers/#pytestmarkwith_all_contract_creating_tx_types","title":"@pytest.mark.with_all_contract_creating_tx_types","text":"

    This marker is used to automatically parameterize a test with all contract creating transaction types that are valid for the fork being tested.

    This marker only differs from pytest.mark.with_all_tx_types in that it does not include transaction type 3 (Blob Transaction type) on fork Cancun and after.

    "},{"location":"writing_tests/test_markers/#pytestmarkwith_all_precompiles","title":"@pytest.mark.with_all_precompiles","text":"

    This marker is used to automatically parameterize a test with all precompiles that are valid for the fork being tested.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\n\n@pytest.mark.with_all_precompiles\n@pytest.mark.valid_from(\"Shanghai\")\ndef test_something_with_all_precompiles(\n    state_test: StateTestFiller, \n    pre: Alloc,\n    precompile: int,\n):\n    pass\n

    In this example, the test will be parameterized for parameter precompile with values [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] for fork Shanghai, but with values [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] for fork Cancun which introduced the point evaluation precompile defined in EIP-4844.

    "},{"location":"writing_tests/test_markers/#pytestmarkwith_all_evm_code_types","title":"@pytest.mark.with_all_evm_code_types","text":"

    This marker is used to automatically parameterize a test with all EVM code types that are valid for the fork being tested.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\n\n@pytest.mark.with_all_evm_code_types\n@pytest.mark.valid_from(\"Frontier\")\ndef test_something_with_all_evm_code_types(\n    state_test: StateTestFiller,     \n    pre: Alloc,\n):\n    pass\n

    In this example, the test will be parameterized for parameter evm_code_type only with value [EVMCodeType.LEGACY] starting on fork Frontier, and eventually it will be parametrized with with values [EVMCodeType.LEGACY, EVMCodeType.EOF_V1] on the EOF activation fork.

    In all calls to pre.deploy_contract, if the code parameter is Bytecode type, and evm_code_type==EVMCodeType.EOF_V1, the bytecode will be automatically wrapped in an EOF V1 container.

    Code wrapping might fail in the following circumstances:

    • The code contains invalid EOF V1 opcodes.
    • The code does not end with a valid EOF V1 terminating opcode (such as Op.STOP or Op.REVERT or Op.RETURN).

    In the case where the code wrapping fails, evm_code_type can be added as a parameter to the test and the bytecode can be dynamically modified to be compatible with the EOF V1 container.

    One thing to note is that evm_code_type is not necessary to be added as a parameter to the test because the pre: Alloc fixture automatically consumes this fixture, and therefore it only needs to be added to the test signature if the test's logic needs it.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\nfrom ethereum_test_vm import EVMCodeType\nfrom ethereum_test_vm import Opcodes as Op\n\n@pytest.mark.with_all_evm_code_types\n@pytest.mark.valid_from(\"Frontier\")\ndef test_something_with_all_evm_code_types(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    evm_code_type: EVMCodeType\n):\n    code = Op.SSTORE(1, 1)\n    if evm_code_type == EVMCodeType.EOF_V1:\n        # Modify the bytecode to be compatible with EOF V1 container\n        code += Op.STOP\n    pre.deploy_contract(code)\n    ...\n
    "},{"location":"writing_tests/test_markers/#pytestmarkwith_all_call_opcodes","title":"@pytest.mark.with_all_call_opcodes","text":"

    This marker is used to automatically parameterize a test with all EVM call opcodes that are valid for the fork being tested.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\nfrom ethereum_test_vm import Opcodes as Op\n\n@pytest.mark.with_all_call_opcodes\n@pytest.mark.valid_from(\"Frontier\")\ndef test_something_with_all_call_opcodes(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    call_opcode: Op\n):\n    pass\n

    In this example, the test will be parametrized for parameter call_opcode with values [Op.CALL, Op.CALLCODE] starting on fork Frontier, [Op.CALL, Op.CALLCODE, Op.DELEGATECALL] on fork Homestead, [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL] on fork Byzantium, and eventually it will be parametrized with with values [Op.CALL, Op.CALLCODE, Op.DELEGATECALL, Op.STATICCALL, Op.EXTCALL, Op.EXTSTATICCALL, Op.EXTDELEGATECALL] on the EOF activation fork.

    Parameter evm_code_type will also be parametrized with the correct EVM code type for the opcode under test.

    "},{"location":"writing_tests/test_markers/#pytestmarkwith_all_create_opcodes","title":"@pytest.mark.with_all_create_opcodes","text":"

    This marker is used to automatically parameterize a test with all EVM create opcodes that are valid for the fork being tested.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\nfrom ethereum_test_vm import Opcodes as Op\n\n@pytest.mark.with_all_create_opcodes\n@pytest.mark.valid_from(\"Frontier\")\ndef test_something_with_all_create_opcodes(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    create_opcode: Op\n):\n    pass\n

    In this example, the test will be parametrized for parameter create_opcode with values [Op.CREATE] starting on fork Frontier, [Op.CREATE, Op.CREATE2] starting on fork Constantinople, and eventually it will be parametrized with with values [Op.CREATE, Op.CREATE2, Op.EOFCREATE] on the EOF activation fork.

    Parameter evm_code_type will also be parametrized with the correct EVM code type for the opcode under test.

    "},{"location":"writing_tests/test_markers/#pytestmarkwith_all_system_contracts","title":"@pytest.mark.with_all_system_contracts","text":"

    This marker is used to automatically parameterize a test with all system contracts that are valid for the fork being tested.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\nfrom ethereum_test_base_types import Address\n\n@pytest.mark.with_all_system_contracts\n@pytest.mark.valid_from(\"Cancun\")\ndef test_something_with_all_system_contracts(\n    state_test: StateTestFiller,\n    pre: Alloc,\n    system_contract: Address,\n):\n    pass\n

    In this example, the test will be parameterized for parameter system_contract with value [0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02] for fork Cancun.

    "},{"location":"writing_tests/test_markers/#covariant-marker-keyword-arguments","title":"Covariant Marker Keyword Arguments","text":"

    All fork covariant markers accept the following keyword arguments:

    "},{"location":"writing_tests/test_markers/#selector","title":"selector","text":"

    A lambda function that can be used to filter the fork covariant values that are valid for this specific test.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\n\n@pytest.mark.with_all_tx_types(selector=lambda tx_type: tx_type != 2)\n@pytest.mark.valid_from(\"London\")\ndef test_something_with_all_tx_types(\n    state_test: StateTestFiller, \n    pre: Alloc,\n    tx_type: int\n):\n    pass\n

    Ideally, the lambda function should be used to explicitly filter out values that are not compatible with the test (exclusive filter), rather than explicitly selecting values (inclusive filter), as the parametrized values might change with future forks.

    "},{"location":"writing_tests/test_markers/#marks","title":"marks","text":"

    A marker, list of markers, or a lambda function that can be used to add additional markers to the test.

    import pytest\n\n@pytest.mark.with_all_tx_types(\n    marks=lambda tx_type: pytest.mark.skip(\"incompatible\") if tx_type == 1 else None,\n)\n@pytest.mark.valid_from(\"London\")\ndef test_something_with_all_tx_types_but_skip_type_1(state_test_only, tx_type):\n    assert tx_type != 1\n    ...\n

    In this example, the test will be skipped if tx_type is equal to 1 by returning a pytest.mark.skip marker, and return None otherwise.

    "},{"location":"writing_tests/test_markers/#other-markers","title":"Other Markers","text":""},{"location":"writing_tests/test_markers/#pytestmarkslow","title":"@pytest.mark.slow","text":"

    This marker is used to mark tests that are slow to run. These tests are not run during tox testing, and are only run when a release is being prepared.

    "},{"location":"writing_tests/test_markers/#pytestmarkpre_alloc_modify","title":"@pytest.mark.pre_alloc_modify","text":"

    This marker is used to mark tests that modify the pre-alloc in a way that would be impractical to reproduce in a real-world scenario.

    Examples of this include:

    • Modifying the pre-alloc to have a balance of 2^256 - 1.
    • Address collisions that would require hash collisions.
    "},{"location":"writing_tests/test_markers/#pytestmarkskip","title":"@pytest.mark.skip()","text":"

    This marker can be used to skip a test.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\n\n@pytest.mark.skip(reason=\"Not implemented\")\ndef test_something(state_test: StateTestFiller, pre: Alloc):\n    pass\n
    "},{"location":"writing_tests/test_markers/#pytestmarkxfail","title":"@pytest.mark.xfail()","text":"

    This marker can be used to mark a test as expected to fail.

    import pytest\n\nfrom ethereum_test_tools import Alloc, StateTestFiller\n\n@pytest.mark.xfail(reason=\"EVM binary doesn't support this opcode\")\ndef test_something(state_test: StateTestFiller, pre: Alloc):\n    pass\n
    "},{"location":"writing_tests/types_of_tests/","title":"Types of tests","text":"

    There are currently two types of tests that can be produced by a test spec:

    1. State Tests
    2. Blockchain Tests
    "},{"location":"writing_tests/types_of_tests/#state-tests","title":"State Tests","text":"

    State tests span a single block and, ideally, a single transaction. For example:

    • Test a single opcode behavior.
    • Verify opcode gas costs.
    • Test interactions between multiple smart contracts.
    • Test creation of smart contracts.
    "},{"location":"writing_tests/types_of_tests/#blockchain-tests","title":"Blockchain Tests","text":"

    Blockchain tests span multiple blocks which may or may not contain transactions and mainly focus on the block to block effects to the Ethereum state. For example:

    • Verify system-level operations such as coinbase balance updates or withdrawals.
    • Verify fork transitions.
    • Verify blocks with invalid transactions/properties are rejected.
    "},{"location":"writing_tests/types_of_tests/#fork-transition-tests","title":"Fork Transition Tests","text":"

    There is a special type of blockchain test that is used to test a fork transition. It's not executed for all possible forks, rather it targets exactly the blocks at the point of transition from one evm implementation to the next. This type of test must be marked with the valid_at_transition_to marker, for example:

    @pytest.mark.valid_at_transition_to(\"Cancun\")\ndef test_blob_type_tx_pre_fork(\n    blockchain_test: BlockchainTestFiller,\n    pre: Dict,\n    env: Environment,\n    blocks: List[Block],\n):\n    \"\"\"\n    Reject blocks with blobs before blobs fork\n    \"\"\"\n
    "},{"location":"writing_tests/verifying_changes/","title":"Verifying Changes","text":"

    The tox tool can be executed locally to check that local changes won't cause Github Actions Checks to fail.

    Pre-commit

    Tox can be ran as a git pre-commit hook, see Enabling Pre-Commit Checks.

    "},{"location":"writing_tests/verifying_changes/#executing-tox","title":"Executing tox","text":""},{"location":"writing_tests/verifying_changes/#prerequisites","title":"Prerequisites","text":"
    python -m venv ./venv/\nsource ./venv/bin/activate\npip install tox\n
    "},{"location":"writing_tests/verifying_changes/#execution","title":"Execution","text":"

    Run tox, as executed in Github Actions, with:

    tox run-parallel\n

    or, with sequential test environment execution and verbose output as:

    tox\n

    This executes all the environments described in the next section.

    Tox Virtual Environment

    The checks performed by tox are sandboxed in their own virtual environments (which are created automatically in the .tox/ subdirectory). These can be used to debug errors encountered during tox execution.

    Whilst we create a virtual environment in the code snippet above, it's only to install the tox tool itself.

    "},{"location":"writing_tests/verifying_changes/#executing-tox-environments-individually","title":"Executing tox Environments Individually","text":"

    There are three tox environments available:

    1. framework: Lint and test framework and libraries related code in src/.
    2. tests: Lint and test the test cases in tests/ (runs fill on all forks deployed to mainnet).
    3. docs: Lint and spell-check markdown in docs/; build docs.

    For targeted tox runs locally, each environment can be ran separately as described below.

    "},{"location":"writing_tests/verifying_changes/#test-case-verification-tests","title":"Test Case Verification: tests","text":"

    Verify:

    tox -e tests\n
    "},{"location":"writing_tests/verifying_changes/#framework-verification-framework","title":"Framework Verification: framework","text":"

    Verify:

    tox -e framework\n
    "},{"location":"writing_tests/verifying_changes/#documentation-verification-docs","title":"Documentation Verification: docs","text":"

    This environment runs pyspelling and markdownlint-cli2 in a \"soft fail\" mode because they require external (non-python) packages. This allows developers who aren't working on documentation to execute tox locally without additional overhead. These commands are, however, ran as part of the checks in Github Actions.

    Additional, optional prerequisites:

    1. pyspelling:

      sudo apt-get install aspell aspell-en\n
    2. markdownlint-cli2:

      sudo apt install nodejs\nsudo npm install markdownlint-cli2 --global\n

      Or use a specific node version using nvm, for example.

    Verify:

    tox -e docs\n
    "},{"location":"writing_tests/verifying_changes/#verifying-fixture-changes","title":"Verifying Fixture Changes","text":"

    When writing a PR that modifies either the framework or test cases, it is important to verify that the changes do not cause any issues with the existing test cases.

    All filled fixtures contain a hash field in the _info object, which is the hash of the json string of the fixture. This hash can be used to verify that the fixture has not changed.

    The hasher command can be used to bulk-verify the hashes of all fixtures in a directory.

    It has the following options:

    Flag Description --files / -f Prints a single combined hash per each JSON fixture file recursively contained in a directory. --tests / -t Prints the hash of every single test vector in every JSON fixture file recursively contained in a directory. --root / -r Prints a single combined hash for all JSON fixture files recursively contained in a directory.

    For a quick comparison between two fixture directories, the --root option can be used and if the output matches, it means the fixtures in the directories are identical:

    hasher --root fixtures/\nhasher --root fixtures_new/\n

    If the output does not match, the --files option can be used to identify which files are different:

    diff <(hasher --files fixtures/) <(hasher --files fixtures_new/)\n

    And the --tests option can be used for an even more granular comparison:

    diff <(hasher --tests fixtures/) <(hasher --tests fixtures_new/)\n
    "},{"location":"writing_tests/writing_a_new_test/","title":"Writing a New Test","text":""},{"location":"writing_tests/writing_a_new_test/#test-functions","title":"Test Functions","text":"

    Every test case is defined as a python function that defines a single StateTest or BlockchainTest by using one of the state_test or blockchain_test objects made available by the framework. Test cases, respectively test modules, must fulfill the following requirements:

    Requirement When Be decorated with validity markers If the test case is not valid for all forks Use one of state_test or blockchain_test in its function arguments Always Call the state_test or blockchain_test in its test body Always Add a reference version of the EIP spec under test Test path contains eip"},{"location":"writing_tests/writing_a_new_test/#specifying-which-forks-tests-are-valid-for","title":"Specifying which Forks Tests are Valid For","text":"

    Test cases can (and it most cases should) be decorated with one or more \"validity markers\" that define which the forks the test is valid for. This is achieved by applying:

    • pytest.mark.valid_from(FORK) and/or pytest.mark.valid_until(FORK)

    or

    • pytest.mark.valid_at_transition_to(FORK)

    markers on either the test function, test class or test module level:

    FunctionClassModule
    import pytest\n\n@pytest.mark.valid_from(\"Berlin\")\n@pytest.mark.valid_until(\"London\")\ndef test_access_list(state_test: StateTestFiller, fork: Fork):\n
    import pytest\n\n\n@pytest.mark.valid_from(\"Shanghai\")\nclass TestMultipleWithdrawalsSameAddress:\n
    import pytest\n\npytestmark = pytest.mark.valid_from(\"Shanghai\")\n

    The ethereum_test_forks package defines the available forks and provides the following helpers that return all forks within the specified range:

    • forks_from
    • forks_from_until
    "},{"location":"writing_tests/writing_a_new_test/#the-state_test-and-blockchain_test-test-function-arguments","title":"The state_test and blockchain_test Test Function Arguments","text":"

    The test function's signature must contain exactly one of either a state_test or blockchain_test argument.

    For example, for state tests:

    def test_access_list(state_test: StateTestFiller):\n

    and for blockchain tests:

    def test_contract_creating_tx(\n    blockchain_test: BlockchainTestFiller, fork: Fork, initcode: Initcode\n):\n

    The state_test and blockchain_test objects are actually wrapper classes to the StateTest, respectively BlockchainTest objects, that once called actually instantiate a new instance of these objects and fill the test case using the evm tool according to the pre and post states and the transactions defined within the test.

    "},{"location":"writing_tests/writing_a_new_test/#statetest-object","title":"StateTest Object","text":"

    The StateTest object represents a single test vector, and contains the following attributes:

    • env: Environment object which describes the global state of the blockchain before the test starts.
    • pre: Pre-State containing the information of all Ethereum accounts that exist before any transaction is executed.
    • post: Post-State containing the information of all Ethereum accounts that are created or modified after all transactions are executed.
    • txs: All transactions to be executed during test execution.
    "},{"location":"writing_tests/writing_a_new_test/#blockchaintest-object","title":"BlockchainTest Object","text":"

    The BlockchainTest object represents a single test vector that evaluates the Ethereum VM by attempting to append multiple blocks to the chain:

    • pre: Pre-State containing the information of all Ethereum accounts that exist before any block is executed.
    • post: Post-State containing the information of all Ethereum accounts that are created or modified after all blocks are executed.
    • blocks: All blocks to be appended to the blockchain during the test.
    "},{"location":"writing_tests/writing_a_new_test/#prepost-state-of-the-test","title":"Pre/Post State of the Test","text":"

    The pre and post states are elemental to setup and then verify the outcome of the state test.

    Both pre and post are mappings of account addresses to account structures (see more info).

    A single test vector can contain as many accounts in the pre and post states as required, and they can be also filled dynamically.

    storage of an account is a key/value dictionary, and its values are integers within range of [0, 2**256 - 1].

    txs are the steps which transform the pre-state into the post-state and must perform specific actions within the accounts (smart contracts) that result in verifiable changes to the balance, nonce, and/or storage in each of them.

    post is compared against the outcome of the client after the execution of each transaction, and any differences are considered a failure

    When designing a test, all the changes must be ideally saved into the contract's storage to be able to verify them in the post-state.

    "},{"location":"writing_tests/writing_a_new_test/#test-transactions","title":"Test Transactions","text":"

    Transactions can be crafted by sending them with specific data or to a specific account, which contains the code to be executed

    Transactions can also create more accounts, by setting the to field to an empty string.

    Transactions can be designed to fail, and a verification must be made that the transaction fails with the specific error that matches what is expected by the test.

    "},{"location":"writing_tests/writing_a_new_test/#writing-code-for-the-accounts-in-the-test","title":"Writing code for the accounts in the test","text":"

    Account bytecode can be embedded in the test accounts by adding it to the code field of the account object, or the data field of the tx object if the bytecode is meant to be treated as init code or call data.

    The code can be in either of the following formats:

    • bytes object, representing the raw opcodes in binary format.
    • str, representing an hexadecimal format of the opcodes.
    • Code compilable object.

    Currently supported built-in compilable objects are:

    • Yul object containing Yul source code.

    Code objects can be concatenated together by using the + operator.

    "},{"location":"writing_tests/writing_a_new_test/#verifying-the-accounts-post-states","title":"Verifying the Accounts' Post States","text":"

    The state of the accounts after all blocks/transactions have been executed is the way of verifying that the execution client actually behaves like the test expects.

    During their filling process, all tests automatically verify that the accounts specified in their post property actually match what was returned by the transition tool.

    Within the post dictionary object, an account address can be:

    • None: The account will not be checked for absence or existence in the result returned by the transition tool.
    • Account object: The test expects that this account exists and also has properties equal to the properties specified by the Account object.
    • Account.NONEXISTENT: The test expects that this account does not exist in the result returned by the transition tool, and if the account exists, it results in error. E.g. when the transaction creating a contract is expected to fail and the test wants to verify that the address where the contract was supposed to be created is indeed empty.
    "},{"location":"writing_tests/writing_a_new_test/#the-account-object","title":"The Account object","text":"

    The Account object is used to specify the properties of an account to be verified in the post state.

    The python representation can be found in src/ethereum_test_types/types.py.

    It can verify the following properties of an account:

    • nonce: the scalar value equal to a) the number of transactions sent by an Externally Owned Account, b) the amount of contracts created by a contract.

    • balance: the amount of Wei (10-18 Eth) the account has.

    • code: Bytecode contained by the account. To verify that an account contains no code, this property needs to be set to \"0x\" or \"\".

    It is not recommended to verify Yul compiled code in the output account, because the bytecode can change from version to version.

    • storage: Storage within the account represented as a dict object. All storage keys that are expected to be set must be specified, and if a key is skipped, it is implied that its expected value is zero. Setting this property to {} (empty dict), means that all the keys in the account must be unset (equal to zero).

    All account's properties are optional, and they can be skipped or set to None, which means that no check will be performed on that specific account property.

    "},{"location":"writing_tests/writing_a_new_test/#verifying-correctness-of-the-new-test","title":"Verifying correctness of the new test","text":"

    A well written test performs a single verification output at a time.

    A verification output can be a single storage slot, the balance of an account, or a newly created contract.

    It is not recommended to use balance changes to verify test correctness, as it can be easily affected by gas cost changes in future EIPs.

    The best way to verify a transaction/block execution outcome is to check its storage.

    A test can be written as a negative verification. E.g. a contract is not created, or a transaction fails to execute or runs out of gas.

    This kind of verification must be carefully crafted because it is possible to end up having a false positive result, which means that the test passed but the intended verification was never made.

    To avoid these scenarios, it is important to have a separate verification to check that test is effective. E.g. when a transaction is supposed to fail, it is necessary to check that the failure error is actually the one expected by the test.

    "},{"location":"writing_tests/writing_a_new_test/#failing-or-invalid-transactions","title":"Failing or invalid transactions","text":"

    Transactions included in a StateTest are expected to be intrinsically valid, i.e. the account sending the transaction must have enough funds to cover the gas costs, the max fee of the transaction must be equal or higher than the base fee of the block, etc.

    An intrinsically valid transaction can still revert during its execution.

    Blocks in a BlockchainTest can contain intrinsically invalid transactions but in this case the block is expected to be completely rejected, along with all transactions in it, including other valid transactions.

    "},{"location":"writing_tests/writing_a_new_test/#parametrizing-tests","title":"Parametrizing tests","text":"

    Tests can be parametrized by using the @pytest.mark.parametrize decorator.

    Example:

    import pytest\n\n@pytest.mark.parametrize(\n    \"tx_value,expected_balance\",\n    [\n        pytest.param(0, 0, id=\"zero-value\"),\n        pytest.param(100, 100, id=\"non-zero-value\"),\n    ],\n)\ndef test_contract_creating_tx(\n    blockchain_test: BlockchainTestFiller, fork: Fork, tx_value: int, expected_balance: int\n):\n

    This will run the test twice, once with tx_value set to 0 and expected_balance set to 0, and once with tx_value set to 100 and expected_balance set to 100.

    The fork fixture is automatically provided by the framework and contains the current fork under test, and does not need to be parametrized.

    Tests can also be automatically parametrized with appropriate fork covariant values using the with_all_* markers listed in the Test Markers page.

    "},{"location":"writing_tests/writing_a_new_test/#the-extend_with_defaults-utility","title":"The extend_with_defaults Utility","text":"

    Extends test cases with default parameter values.

    This utility function extends test case parameters by adding default values from the defaults dictionary to each case in the cases list. If a case already specifies a value for a parameter, its default is ignored.

    This function is particularly useful in scenarios where you want to define a common set of default values but allow individual test cases to override them as needed.

    The function returns a dictionary that can be directly unpacked and passed to the @pytest.mark.parametrize decorator.

    Parameters:

    Name Type Description Default defaults Dict[str, Any]

    A dictionary of default parameter names and their values. These values will be added to each case unless the case already defines a value for each parameter.

    required cases List[ParameterSet]

    A list of pytest.param objects representing different test cases. Its first argument must be a dictionary defining parameter names and values.

    required parametrize_kwargs Any

    Additional keyword arguments to be passed to @pytest.mark.parametrize. These arguments are not modified by this function and are passed through unchanged.

    {}

    Returns:

    Type Description Dict[str, Any]

    Dict[str, Any]: A dictionary with the following structure: argnames: A list of parameter names. argvalues: A list of test cases with modified parameter values. parametrize_kwargs: Additional keyword arguments passed through unchanged.

    Example
    @pytest.mark.parametrize(**extend_with_defaults(\n    defaults=dict(\n        min_value=0,  # default minimum value is 0\n        max_value=100,  # default maximum value is 100\n        average=50,  # default average value is 50\n    ),\n    cases=[\n        pytest.param(\n            dict(),  # use default values\n            id='default_case',\n        ),\n        pytest.param(\n            dict(min_value=10),  # override with min_value=10\n            id='min_value_10',\n        ),\n        pytest.param(\n            dict(max_value=200),  # override with max_value=200\n            id='max_value_200',\n        ),\n        pytest.param(\n            dict(min_value=-10, max_value=50),  # override both min_value\n            # and max_value\n            id='min_-10_max_50',\n        ),\n        pytest.param(\n            dict(min_value=20, max_value=80, average=50),  # all defaults\n            # are overridden\n            id=\"min_20_max_80_avg_50\",\n        ),\n        pytest.param(\n            dict(min_value=100, max_value=0),  # invalid range\n            id='invalid_range',\n            marks=pytest.mark.xfail(reason='invalid range'),\n        )\n    ],\n))\ndef test_range(min_value, max_value, average):\n    assert min_value <= max_value\n    assert min_value <= average <= max_value\n

    The above test will execute with the following sets of parameters:

    \"default_case\": {\"min_value\": 0, \"max_value\": 100, \"average\": 50}\n\"min_value_10\": {\"min_value\": 10, \"max_value\": 100, \"average\": 50}\n\"max_value_200\": {\"min_value\": 0, \"max_value\": 200, \"average\": 50}\n\"min_-10_max_50\": {\"min_value\": -10, \"max_value\": 50, \"average\": 50}\n\"min_20_max_80_avg_50\": {\"min_value\": 20, \"max_value\": 80, \"average\": 50}\n\"invalid_range\": {\"min_value\": 100, \"max_value\": 0, \"average\": 50}  # expected to fail\n
    Notes
    • Each case in cases must contain exactly one value, which is a dictionary of parameter values.
    • The function performs an in-place update of the cases list, so the original cases list is modified.
    Source code in src/ethereum_test_tools/utility/pytest.py
    def extend_with_defaults(\n    defaults: Dict[str, Any], cases: List[ParameterSet], **parametrize_kwargs: Any\n) -> Dict[str, Any]:\n    \"\"\"\n    Extends test cases with default parameter values.\n\n    This utility function extends test case parameters by adding default values\n    from the `defaults` dictionary to each case in the `cases` list. If a case\n    already specifies a value for a parameter, its default is ignored.\n\n    This function is particularly useful in scenarios where you want to define\n    a common set of default values but allow individual test cases to override\n    them as needed.\n\n    The function returns a dictionary that can be directly unpacked and passed\n    to the `@pytest.mark.parametrize` decorator.\n\n    Args:\n        defaults (Dict[str, Any]): A dictionary of default parameter names and\n            their values. These values will be added to each case unless the case\n            already defines a value for each parameter.\n        cases (List[ParameterSet]): A list of `pytest.param` objects representing\n            different test cases. Its first argument must be a dictionary defining\n            parameter names and values.\n        parametrize_kwargs (Any): Additional keyword arguments to be passed to\n            `@pytest.mark.parametrize`. These arguments are not modified by this\n            function and are passed through unchanged.\n\n    Returns:\n        Dict[str, Any]: A dictionary with the following structure:\n            `argnames`: A list of parameter names.\n            `argvalues`: A list of test cases with modified parameter values.\n            `parametrize_kwargs`: Additional keyword arguments passed through unchanged.\n\n\n    Example:\n        ```python\n        @pytest.mark.parametrize(**extend_with_defaults(\n            defaults=dict(\n                min_value=0,  # default minimum value is 0\n                max_value=100,  # default maximum value is 100\n                average=50,  # default average value is 50\n            ),\n            cases=[\n                pytest.param(\n                    dict(),  # use default values\n                    id='default_case',\n                ),\n                pytest.param(\n                    dict(min_value=10),  # override with min_value=10\n                    id='min_value_10',\n                ),\n                pytest.param(\n                    dict(max_value=200),  # override with max_value=200\n                    id='max_value_200',\n                ),\n                pytest.param(\n                    dict(min_value=-10, max_value=50),  # override both min_value\n                    # and max_value\n                    id='min_-10_max_50',\n                ),\n                pytest.param(\n                    dict(min_value=20, max_value=80, average=50),  # all defaults\n                    # are overridden\n                    id=\"min_20_max_80_avg_50\",\n                ),\n                pytest.param(\n                    dict(min_value=100, max_value=0),  # invalid range\n                    id='invalid_range',\n                    marks=pytest.mark.xfail(reason='invalid range'),\n                )\n            ],\n        ))\n        def test_range(min_value, max_value, average):\n            assert min_value <= max_value\n            assert min_value <= average <= max_value\n        ```\n\n    The above test will execute with the following sets of parameters:\n\n    ```python\n    \"default_case\": {\"min_value\": 0, \"max_value\": 100, \"average\": 50}\n    \"min_value_10\": {\"min_value\": 10, \"max_value\": 100, \"average\": 50}\n    \"max_value_200\": {\"min_value\": 0, \"max_value\": 200, \"average\": 50}\n    \"min_-10_max_50\": {\"min_value\": -10, \"max_value\": 50, \"average\": 50}\n    \"min_20_max_80_avg_50\": {\"min_value\": 20, \"max_value\": 80, \"average\": 50}\n    \"invalid_range\": {\"min_value\": 100, \"max_value\": 0, \"average\": 50}  # expected to fail\n    ```\n\n    Notes:\n        - Each case in `cases` must contain exactly one value, which is a dictionary\n          of parameter values.\n        - The function performs an in-place update of the `cases` list, so the\n          original `cases` list is modified.\n    \"\"\"\n    for i, case in enumerate(cases):\n        if not (len(case.values) == 1 and isinstance(case.values[0], dict)):\n            raise ValueError(\n                \"each case must contain exactly one value; a dict of parameter values\"\n            )\n        if set(case.values[0].keys()) - set(defaults.keys()):\n            raise UnknownParameterInCasesError()\n        # Overwrite values in defaults if the parameter is present in the test case values\n        merged_params = {**defaults, **case.values[0]}  # type: ignore\n        cases[i] = pytest.param(*merged_params.values(), id=case.id, marks=case.marks)\n\n    return {\"argnames\": list(defaults), \"argvalues\": cases, **parametrize_kwargs}\n
    "}]} \ No newline at end of file diff --git a/main/sitemap.xml b/main/sitemap.xml index b28fea35d6..8101c6d61b 100644 --- a/main/sitemap.xml +++ b/main/sitemap.xml @@ -2,1552 +2,1242 @@ https://ethereum.github.io/execution-spec-tests/main/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/CHANGELOG/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/changelog_section_template/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/navigation/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/consuming_tests/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/consuming_tests/blockchain_test/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/consuming_tests/blockchain_test_engine/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/consuming_tests/common_types/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/consuming_tests/eof_test/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/consuming_tests/exceptions/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/consuming_tests/state_test/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/dev/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/dev/coding_style/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/dev/docs/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/dev/precommit/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/dev/test_actions_locally/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/getting_help/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/getting_started/debugging_t8n_tools/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/getting_started/executing_tests_command_line/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/getting_started/executing_tests_dev_fork/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/getting_started/executing_tests_vs_code/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/getting_started/installation_troubleshooting/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/getting_started/quick_start/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/getting_started/repository_overview/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/getting_started/setup_vs_code/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/library/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/library/ethereum_test_base_types/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/library/ethereum_test_exceptions/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/library/ethereum_test_fixtures/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/library/ethereum_test_forks/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/library/ethereum_test_specs/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/library/ethereum_test_tools/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/library/ethereum_test_types/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/library/ethereum_test_vm/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/library/evm_transition_tool/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/library/pytest_plugins/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/library/pytest_plugins/filler/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/library/pytest_plugins/forks/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/library/pytest_plugins/navigation/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/library/pytest_plugins/spec_version_checker/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/berlin/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/berlin/eip2930_access_list/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/berlin/eip2930_access_list/test_acl/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/berlin/eip2930_access_list/test_acl/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/byzantium/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/byzantium/eip198_modexp_precompile/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/byzantium/eip198_modexp_precompile/test_modexp/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/byzantium/eip198_modexp_precompile/test_modexp/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip1153_tstore/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip1153_tstore/spec/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip1153_tstore/test_basic_tload/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip1153_tstore/test_basic_tload/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip1153_tstore/test_tload_calls/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip1153_tstore/test_tload_calls/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip1153_tstore/test_tload_reentrancy/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip1153_tstore/test_tload_reentrancy/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip1153_tstore/test_tstorage/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip1153_tstore/test_tstorage/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip1153_tstore/test_tstorage_create_contexts/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip1153_tstore/test_tstorage_create_contexts/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip1153_tstore/test_tstorage_execution_contexts/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip1153_tstore/test_tstorage_execution_contexts/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip1153_tstore/test_tstorage_selfdestruct/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip1153_tstore/test_tstorage_selfdestruct/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip1153_tstore/test_tstore_reentrancy/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip1153_tstore/test_tstore_reentrancy/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4788_beacon_root/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4788_beacon_root/spec/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4788_beacon_root/test_beacon_root_contract/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4788_beacon_root/test_beacon_root_contract/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4844_blobs/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4844_blobs/point_evaluation_vectors/README_./ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4844_blobs/spec/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4844_blobs/test_blob_txs/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4844_blobs/test_blob_txs/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4844_blobs/test_blob_txs_full/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4844_blobs/test_blob_txs_full/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4844_blobs/test_blobhash_opcode/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4844_blobs/test_blobhash_opcode/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4844_blobs/test_excess_blob_gas/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4844_blobs/test_excess_blob_gas/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4844_blobs/test_point_evaluation_precompile/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4844_blobs/test_point_evaluation_precompile/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip5656_mcopy/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip5656_mcopy/test_mcopy/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip5656_mcopy/test_mcopy/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip5656_mcopy/test_mcopy_contexts/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip5656_mcopy/test_mcopy_contexts/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip6780_selfdestruct/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip7516_blobgasfee/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/constantinople/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/constantinople/eip1014_create2/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/constantinople/eip1014_create2/spec/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/constantinople/eip1014_create2/test_create_returndata/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/constantinople/eip1014_create2/test_create_returndata/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/constantinople/eip1014_create2/test_recreate/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/constantinople/eip1014_create2/test_recreate/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/frontier/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/frontier/opcodes/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/frontier/opcodes/test_all_opcodes/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/frontier/opcodes/test_all_opcodes/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/frontier/opcodes/test_call_and_callcode_gas_calculation/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/frontier/opcodes/test_call_and_callcode_gas_calculation/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/frontier/opcodes/test_dup/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/frontier/opcodes/test_dup/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/frontier/opcodes/test_selfdestruct/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/frontier/opcodes/test_selfdestruct/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/homestead/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/homestead/coverage/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/homestead/coverage/test_coverage/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/homestead/coverage/test_coverage/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/homestead/yul/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/homestead/yul/test_yul_example/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/homestead/yul/test_yul_example/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/istanbul/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/istanbul/eip1344_chainid/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/istanbul/eip1344_chainid/test_chainid/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/istanbul/eip1344_chainid/test_chainid/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/paris/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/paris/security/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/paris/security/test_selfdestruct_balance_bug/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/paris/security/test_selfdestruct_balance_bug/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/spec/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2537_bls_12_381_precompiles/vectors/test-vectors./ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2935_historical_block_hashes_from_state/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2935_historical_block_hashes_from_state/spec/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip6110_deposits/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip6110_deposits/spec/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip6110_deposits/test_deposits/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip6110_deposits/test_deposits/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7002_el_triggerable_withdrawals/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7002_el_triggerable_withdrawals/spec/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7251_consolidations/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7251_consolidations/spec/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7251_consolidations/test_consolidations/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7251_consolidations/test_consolidations/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7685_general_purpose_el_requests/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7685_general_purpose_el_requests/spec/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/tracker./ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/spec/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip4750_functions/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/spec/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7069_extcall/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7069_extcall/spec/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7480_data_section/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7480_data_section/spec/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/spec/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7702_eoa_code_tx/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7702_eoa_code_tx/spec/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/shanghai/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/shanghai/eip3651_warm_coinbase/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/shanghai/eip3651_warm_coinbase/spec/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/shanghai/eip3855_push0/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/shanghai/eip3855_push0/spec/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/shanghai/eip3855_push0/test_push0/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/shanghai/eip3855_push0/test_push0/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/shanghai/eip3860_initcode/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/shanghai/eip3860_initcode/spec/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/shanghai/eip3860_initcode/test_initcode/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/shanghai/eip3860_initcode/test_initcode/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/shanghai/eip4895_withdrawals/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/shanghai/eip4895_withdrawals/spec/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/shanghai/eip4895_withdrawals/test_withdrawals/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tests/shanghai/eip4895_withdrawals/test_withdrawals/index/test_cases/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tutorials/blockchain/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tutorials/state_transition/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/tutorials/state_transition_bad_opcode/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/writing_tests/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/writing_tests/adding_a_new_test/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/writing_tests/code_standards/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/writing_tests/exception_tests/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/writing_tests/reference_specification/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/writing_tests/test_markers/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/writing_tests/types_of_tests/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/writing_tests/verifying_changes/ - 2024-08-29 - daily + 2024-08-30 https://ethereum.github.io/execution-spec-tests/main/writing_tests/writing_a_new_test/ - 2024-08-29 - daily + 2024-08-30 \ No newline at end of file diff --git a/main/sitemap.xml.gz b/main/sitemap.xml.gz index d2b0c09c1a7fdbc2d58fc93db3f19faf21484e01..cc33ea651088b685bc15f42a6938c35fb8b859b6 100644 GIT binary patch literal 2453 zcmV;G32OEqiwFpS3(;l*|8r?{Wo=<_E_iKh0NtI-a^tuahWGOnUEW)wu9j2Xo|;NJ zlSM97sbq};!9xl$NN@m9mwEaCpsuz&lHFdM121fnqUi6(e*oe_0$+dL)auI$jFr0i zb~hSicVD0px{yuv?e4$-`Ro1S?&qhUzIH}ga9{k%js14Fbguo=aJXKt2Ua?$d20vS zR6{G4e#Z`X2Z!0<@$TuTFa9T7px=r=UzHY5;VRZ&2HX-1boHQ;ZrSAnsfVxu(K(NF zZ(9)e4y?1on#*SRbr`;SdL?dMt&68|HlE&Ri~C9DPuU&o|Ml?jzdw!Q&wu;npTB

    2bfXv3LU)6Y6z@L@{90#=Af`nx-`ZmR$hR-uJO zgwq-bMTNu^L$P$_@dj_1zYuBu`&vG6wlt(8Se zx;t}Ups^5$yeXK%b6dTJ?8B9n+B_4%U4=w0uqLi-{FYL@uh|>ju?fM-rDnf49fm4r1?Qs46KT4W)rWNx_GBBR-Vsc(nm+ybhK{$)&b_36u) zrQEpAAWzG1%fU?;&caQIsb=&BA^JSMsWdV|3zGy^qfNFdws<0NBT2(Z?- zrqOf|Ud7z?{3vp~vMFHG?+RZXM;5Bv-+AL?S0knJDLZ;xF#kVc)3UxtvXy9hZEwbn z_Vq|y zo$Lmn32j-iCCg3LfUwOgAjeBR!I>}+o@x-faj&qn# z6`#yt7YRDthnm>$Ej8zeBok;|Nj2VU;go(4e(3AoH>t_eN_8R<~EiZ zF1?I*#?Q)5DU!^D6Mo6iEMyH z^_S%h%Dc$kgmu_5GJIVAuQ%0tIrzmL1y_(pi# z0i(kd3XPMEZn5>YoTG*3AF|POU%#M)if>@@k9qr8?Vn3D;5yS3-0=hyP|AuIB^l^< z>4KxSpfuXcK=uyn0jj^BSln>^3yw-LnzS^+^9(<{xx&IMSYacMl!l=pzau)u(G6~W zR0Ba{imoL>NicEIHt=u2MV;JBUHiX)?6t`wl?aoPVSCf+0$y(~NmwHBx$P8UvY32+ zgTaQ^*xJ@tP*Def42_K(nfC{%(E6E7ed{Mo`z;F^kiFAniBX4Z%Z~#=`5sNRty7SYoGr+ztsj(-m@Q-ah1fX3LTpUG5F000h>htNV&n7*v6{E6 zY{$%LFE1r2DcTgJjS^ClmPsv_2G0sIKPVzGYmSFm4rQ4A2GMFtpDZdZ>sH)Io-1Gq zn#wJiY})QPr%U4E60mYVAx!wr{cdM~RmbCG#+EWnk0k|HEUv`L!fXOQi?lJ=aKNCZD**_eT1&d90) z6Ys`rf1SecHCI%r5l8to^cXS61I)m09lBL{K0ywZ{4t)5LXFgFB@2#eUBz2SG3SE| zxVs1Hh$i+WdMZ&qU(8qqjnBY}wVm%FYBa??7 z{hd&kY&9Z47|sp*N{tzU0MZzpjJ746;}KK0yw_BIc65 z_zu{L?~BevR3u~0F4~xtze5@#lCvg(%yU6XA~uC>jPC_~OhGE999DfQyG9VsITwT^ zW06BQA<+Bj6EUNfmEjJGzI^u8(D*kkF^O1ZAr=E{3B2$()La)^uh`byiDinC60=R4 zf^19mTti~U5N`jRNuX)Vbev_(K$szB1?+!a-4X`xr^yQ2NoYtXqK=|u8X{7(W|f8r zqSidjvO`moCi7tyvhvt^PDe-*VMTXb;1(e?Et-$Bc`U|Ca=diLGEbmme8f#^#nd$s z^YI&_gzVj6;-MDT2gw>hovV{nLC!VZy?`w&eoCM}TiB!B3ErK)yJ1 zub^8I}L-Q6V*2P|E1)KP82X!epzoKWFKrul5d*4)%SL1mNs1f+zD zF3Vlv?I%5?n%WoWX=J`2XEB?xwzJEO0wV6XK5|Cm$)xHDEupxbXG}H{-$V^>QzDPv zQ`8s%#FF=%nM@>47mqWvGf4j-DC&5AMf+l6WlNYGYixI6-GTrZmnMkoW}`!k3n(yW z!iWu~{){&PSLJQ7zDTgD2e;&1CV;!@=Eqjr3&4d!-C+J9%|mW zJ7cSn6U%VoM%%i<0{Bc9_`T(}JQC0J20>Sojist+q9!>V###{rG;Of3ocdn zG&)Kdia6Sr@w=7wkAL~;?>~S0>py-@tlYzIC{r;9BIaO0&_;0&iGgUok`<31rKW(< zuC0R?vLP|;(&ynyFX4x!?h|m)Fwm9MkT{eubshb@Yan%N15;u!GuQ}dV$Rg{a6UXZ zQdFdXRe~iRYH!T>PC%6D z(LaY=6K!+u9tbQt3fBcw=~bI9p#^thrLix_uvSsDB6YE( z4o6Dyp+##=n=5cjV`8Sn(SB*Acp1(TC$Z2NC%v&9Gb^ww3G2j(9Qd|L)P-FZ4H+$fj(ta>L(hj^(0I%%K+8o%Kqf52S&G7F4;xR1 zlZ?RoYv9-T3@RC!4-X&wI-g@DBeVlm79qv9!qb2xAuV989=`!ZCh7EHv0ypy5RI5M z#$&@l&_ncwY3NHiB=nCG%Y~-{ip>ib(<#f9$q|7xMrzMs#Z@~@-(GxCRU4*uL52PiA>u0!y>~p5dD^?m#XMAucg?| z9h#iv2yUyCL}0@zElnN%LZZv397-?ZV(O`` zRB#4kFe}th$o!{k6#{}@j&Q(W!|PQ0vMwN@FgzI>&v~LYw=aBb_1{lJt3PfxC<|OL zgN30dL*Y&hw=(6DyO7CB-(f&_JE)m+#kByIw-tUs9R3ulcrBz{^tdka?EZn}%CYf; z-7m&Rv%(!>vSi1_uEX1oL%Z-%HReS@2^CXl`3QUMYD%bNWlpp?^hs2rGEe9P?Fr$a zJ)sk{CxnCcgig?&&<)x(Z&=w(m^a}zP(-FIdw&bY1c_;i-f(Ht+j0DN!V;DGkj!!@ zn1^ra)JI$)s-D!y2UjzX|Z51x(|2Znr0Qsq;SG&)8DN zWv->*D!$DmURYecErfv5nwmME>U8{%Q(_n=xDs{u?%MuCvfRib*nB+BSOJZ3(&J)5 z;GL&H!?bCPQk{|^^RS03n=nw!TUk|L``XbuT&J*n%@uY!1YURvvA5Ji0tOK3~AzAwmkL_p@n+Ppem8D1z?0 zbgvglU~=AQO{4 z9;f`?`sYZgiM+cKD_boHc=j1!a+3RG7sUNIB{6YpSy}F(7@k|9Inw{72~A9T2YonW zOW;MQxa6kj!kuw7_hLyIov0ZYTcGcGIb|g(G=cW_2`X-xr;{vW7UBw|D`5X=>xKZ} zusn4>dcdU28UHxuHNdzfpHH%R zAGS-hT=?di9KrQ=*&kvJ%a>ru_~#M5^IW{p0i`Ih=e7b*h!nZV^ZU3li)L=k!~d`u z%0vTlw=IpPhD+0?w?oe4EPQ`PSoS`R94~IcAF}ylKZS%Vg_sOqJMjc>n4Mn~7Mx?Q z;R51EpdGpv`j)$;8^@b7u82OdV)O>g787AQi3+XSzd;t#ObNdzH?nP$`YQAEn<)^3ctPBNhEmdfO(krOA=#G+!LKBpJ z=v&xrkUfO z!kLD3pOiFB--Q;;Oc&f1X$u1z0Zs2E=^L4aGJI8wpiRgpODR$uSUF`H7E9*#1#H^l p_^tuROo_nGR$yh>#q;5})27*-{V!v4|HpxU{x9J}@K&G{0RT3o&U*j= diff --git a/main/tests/berlin/eip2930_access_list/index.html b/main/tests/berlin/eip2930_access_list/index.html index fde8e5b9f2..2f48c8b21d 100644 --- a/main/tests/berlin/eip2930_access_list/index.html +++ b/main/tests/berlin/eip2930_access_list/index.html @@ -20,7 +20,7 @@ - + @@ -13623,7 +13623,7 @@

    EIP-2930 Access List

    -

    Documentation for tests/berlin/eip2930_access_list.

    +

    Documentation for tests/berlin/eip2930_access_list.

    Generate fixtures for these test cases with:

    fill -v tests/berlin/eip2930_access_list
    diff --git a/main/tests/berlin/eip2930_access_list/test_acl/index.html b/main/tests/berlin/eip2930_access_list/test_acl/index.html
    index 2292b5f9a4..8264fcc866 100644
    --- a/main/tests/berlin/eip2930_access_list/test_acl/index.html
    +++ b/main/tests/berlin/eip2930_access_list/test_acl/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test ACL

    -

    Documentation for tests/berlin/eip2930_access_list/test_acl.py.

    +

    Documentation for tests/berlin/eip2930_access_list/test_acl.py.

    Generate fixtures for these test cases with:

    fill -v tests/berlin/eip2930_access_list/test_acl.py
    diff --git a/main/tests/berlin/eip2930_access_list/test_acl/index/test_cases/index.html b/main/tests/berlin/eip2930_access_list/test_acl/index/test_cases/index.html
    index fe03a9d8db..6ecf0c7c63 100644
    --- a/main/tests/berlin/eip2930_access_list/test_acl/index/test_cases/index.html
    +++ b/main/tests/berlin/eip2930_access_list/test_acl/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test ACL - Test Cases

    Test cases generated from tests/berlin/eip2930_access_list/test_acl.py

    -

    Parametrized test cases generated from the test module tests/berlin/eip2930_access_list/test_acl.py:

    +

    Parametrized test cases generated from the test module tests/berlin/eip2930_access_list/test_acl.py:

    test_access_list[fork_Berlin-blockchain_test]
     test_access_list[fork_Berlin-state_test]
     test_access_list[fork_London-blockchain_test]
    diff --git a/main/tests/berlin/index.html b/main/tests/berlin/index.html
    index 86b09fd530..d41f4cec0d 100644
    --- a/main/tests/berlin/index.html
    +++ b/main/tests/berlin/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13621,7 +13621,7 @@
     
     
     

    Berlin

    -

    Documentation for tests/berlin.

    +

    Documentation for tests/berlin.

    Generate fixtures for these test cases with:

    fill -v tests/berlin
    diff --git a/main/tests/byzantium/eip198_modexp_precompile/index.html b/main/tests/byzantium/eip198_modexp_precompile/index.html
    index 95c4d345b1..f3bff7258c 100644
    --- a/main/tests/byzantium/eip198_modexp_precompile/index.html
    +++ b/main/tests/byzantium/eip198_modexp_precompile/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    EIP-198 Modexp Precompile

    -

    Documentation for tests/byzantium/eip198_modexp_precompile.

    +

    Documentation for tests/byzantium/eip198_modexp_precompile.

    Generate fixtures for these test cases with:

    fill -v tests/byzantium/eip198_modexp_precompile
    diff --git a/main/tests/byzantium/eip198_modexp_precompile/test_modexp/index.html b/main/tests/byzantium/eip198_modexp_precompile/test_modexp/index.html
    index 1855b71021..13fa055899 100644
    --- a/main/tests/byzantium/eip198_modexp_precompile/test_modexp/index.html
    +++ b/main/tests/byzantium/eip198_modexp_precompile/test_modexp/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test Modexp

    -

    Documentation for tests/byzantium/eip198_modexp_precompile/test_modexp.py.

    +

    Documentation for tests/byzantium/eip198_modexp_precompile/test_modexp.py.

    Generate fixtures for these test cases with:

    fill -v tests/byzantium/eip198_modexp_precompile/test_modexp.py
    diff --git a/main/tests/byzantium/eip198_modexp_precompile/test_modexp/index/test_cases/index.html b/main/tests/byzantium/eip198_modexp_precompile/test_modexp/index/test_cases/index.html
    index 7238d4192a..9467a1972a 100644
    --- a/main/tests/byzantium/eip198_modexp_precompile/test_modexp/index/test_cases/index.html
    +++ b/main/tests/byzantium/eip198_modexp_precompile/test_modexp/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Modexp - Test Cases

    Test cases generated from tests/byzantium/eip198_modexp_precompile/test_modexp.py

    -

    Parametrized test cases generated from the test module tests/byzantium/eip198_modexp_precompile/test_modexp.py:

    +

    Parametrized test cases generated from the test module tests/byzantium/eip198_modexp_precompile/test_modexp.py:

    test_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]
     test_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]
     test_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]
    diff --git a/main/tests/byzantium/index.html b/main/tests/byzantium/index.html
    index 068c3470d5..75230220b2 100644
    --- a/main/tests/byzantium/index.html
    +++ b/main/tests/byzantium/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13621,7 +13621,7 @@
     
     
     

    Byzantium

    -

    Documentation for tests/byzantium.

    +

    Documentation for tests/byzantium.

    Generate fixtures for these test cases with:

    fill -v tests/byzantium
    diff --git a/main/tests/cancun/eip1153_tstore/index.html b/main/tests/cancun/eip1153_tstore/index.html
    index dae5fd983f..770f509543 100644
    --- a/main/tests/cancun/eip1153_tstore/index.html
    +++ b/main/tests/cancun/eip1153_tstore/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    EIP-1153 Tstore

    -

    Documentation for tests/cancun/eip1153_tstore.

    +

    Documentation for tests/cancun/eip1153_tstore.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore
    diff --git a/main/tests/cancun/eip1153_tstore/spec/index.html b/main/tests/cancun/eip1153_tstore/spec/index.html
    index f8bbadaadc..8026502460 100644
    --- a/main/tests/cancun/eip1153_tstore/spec/index.html
    +++ b/main/tests/cancun/eip1153_tstore/spec/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13690,7 +13690,7 @@
     
     
     

    Spec

    -

    Documentation for tests/cancun/eip1153_tstore/spec.py.

    +

    Documentation for tests/cancun/eip1153_tstore/spec.py.

    diff --git a/main/tests/cancun/eip1153_tstore/test_basic_tload/index.html b/main/tests/cancun/eip1153_tstore/test_basic_tload/index.html index 4efe9ff1a7..edadd0bc4c 100644 --- a/main/tests/cancun/eip1153_tstore/test_basic_tload/index.html +++ b/main/tests/cancun/eip1153_tstore/test_basic_tload/index.html @@ -20,7 +20,7 @@ - + @@ -13670,7 +13670,7 @@

    Test Basic Tload

    -

    Documentation for tests/cancun/eip1153_tstore/test_basic_tload.py.

    +

    Documentation for tests/cancun/eip1153_tstore/test_basic_tload.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_basic_tload.py
    diff --git a/main/tests/cancun/eip1153_tstore/test_basic_tload/index/test_cases/index.html b/main/tests/cancun/eip1153_tstore/test_basic_tload/index/test_cases/index.html
    index cdad43d15d..214a063d1e 100644
    --- a/main/tests/cancun/eip1153_tstore/test_basic_tload/index/test_cases/index.html
    +++ b/main/tests/cancun/eip1153_tstore/test_basic_tload/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Basic Tload - Test Cases

    Test cases generated from tests/cancun/eip1153_tstore/test_basic_tload.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_basic_tload.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_basic_tload.py:

    test_basic_tload_transaction_begin[fork_Cancun-blockchain_test]
     test_basic_tload_transaction_begin[fork_Cancun-blockchain_test_engine]
     test_basic_tload_transaction_begin[fork_Cancun-state_test]
    diff --git a/main/tests/cancun/eip1153_tstore/test_tload_calls/index.html b/main/tests/cancun/eip1153_tstore/test_tload_calls/index.html
    index a2f9fd680d..73e2a25b02 100644
    --- a/main/tests/cancun/eip1153_tstore/test_tload_calls/index.html
    +++ b/main/tests/cancun/eip1153_tstore/test_tload_calls/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test Tload Calls

    -

    Documentation for tests/cancun/eip1153_tstore/test_tload_calls.py.

    +

    Documentation for tests/cancun/eip1153_tstore/test_tload_calls.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tload_calls.py
    diff --git a/main/tests/cancun/eip1153_tstore/test_tload_calls/index/test_cases/index.html b/main/tests/cancun/eip1153_tstore/test_tload_calls/index/test_cases/index.html
    index d07edab7ac..74722e1089 100644
    --- a/main/tests/cancun/eip1153_tstore/test_tload_calls/index/test_cases/index.html
    +++ b/main/tests/cancun/eip1153_tstore/test_tload_calls/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Tload Calls - Test Cases

    Test cases generated from tests/cancun/eip1153_tstore/test_tload_calls.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tload_calls.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tload_calls.py:

    test_tload_calls[fork_Cancun-blockchain_test-call_type_CALL]
     test_tload_calls[fork_Cancun-blockchain_test-call_type_CALLCODE]
     test_tload_calls[fork_Cancun-blockchain_test-call_type_DELEGATECALL]
    diff --git a/main/tests/cancun/eip1153_tstore/test_tload_reentrancy/index.html b/main/tests/cancun/eip1153_tstore/test_tload_reentrancy/index.html
    index 97a8be5fea..0c14f00ce5 100644
    --- a/main/tests/cancun/eip1153_tstore/test_tload_reentrancy/index.html
    +++ b/main/tests/cancun/eip1153_tstore/test_tload_reentrancy/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test Tload Reentrancy

    -

    Documentation for tests/cancun/eip1153_tstore/test_tload_reentrancy.py.

    +

    Documentation for tests/cancun/eip1153_tstore/test_tload_reentrancy.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tload_reentrancy.py
    diff --git a/main/tests/cancun/eip1153_tstore/test_tload_reentrancy/index/test_cases/index.html b/main/tests/cancun/eip1153_tstore/test_tload_reentrancy/index/test_cases/index.html
    index 155bec9879..2c46473524 100644
    --- a/main/tests/cancun/eip1153_tstore/test_tload_reentrancy/index/test_cases/index.html
    +++ b/main/tests/cancun/eip1153_tstore/test_tload_reentrancy/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Tload Reentrancy - Test Cases

    Test cases generated from tests/cancun/eip1153_tstore/test_tload_reentrancy.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tload_reentrancy.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tload_reentrancy.py:

    test_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]
     test_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]
     test_tload_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]
    diff --git a/main/tests/cancun/eip1153_tstore/test_tstorage/index.html b/main/tests/cancun/eip1153_tstore/test_tstorage/index.html
    index f3505b08cf..22ed91774f 100644
    --- a/main/tests/cancun/eip1153_tstore/test_tstorage/index.html
    +++ b/main/tests/cancun/eip1153_tstore/test_tstorage/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13679,7 +13679,7 @@
     
     
     

    Test Tstorage

    -

    Documentation for tests/cancun/eip1153_tstore/test_tstorage.py.

    +

    Documentation for tests/cancun/eip1153_tstore/test_tstorage.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tstorage.py
    diff --git a/main/tests/cancun/eip1153_tstore/test_tstorage/index/test_cases/index.html b/main/tests/cancun/eip1153_tstore/test_tstorage/index/test_cases/index.html
    index d7e81dd8e3..39f475427c 100644
    --- a/main/tests/cancun/eip1153_tstore/test_tstorage/index/test_cases/index.html
    +++ b/main/tests/cancun/eip1153_tstore/test_tstorage/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Tstorage - Test Cases

    Test cases generated from tests/cancun/eip1153_tstore/test_tstorage.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstorage.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstorage.py:

    test_transient_storage_unset_values[fork_Cancun-blockchain_test]
     test_transient_storage_unset_values[fork_Cancun-blockchain_test_engine]
     test_transient_storage_unset_values[fork_Cancun-state_test]
    diff --git a/main/tests/cancun/eip1153_tstore/test_tstorage_create_contexts/index.html b/main/tests/cancun/eip1153_tstore/test_tstorage_create_contexts/index.html
    index 5d7f5cb339..5dd60afbc8 100644
    --- a/main/tests/cancun/eip1153_tstore/test_tstorage_create_contexts/index.html
    +++ b/main/tests/cancun/eip1153_tstore/test_tstorage_create_contexts/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13649,7 +13649,7 @@
     
     
     

    Test Tstorage Create Contexts

    -

    Documentation for tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py.

    +

    Documentation for tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py
    diff --git a/main/tests/cancun/eip1153_tstore/test_tstorage_create_contexts/index/test_cases/index.html b/main/tests/cancun/eip1153_tstore/test_tstorage_create_contexts/index/test_cases/index.html
    index 747d10a7f7..b53dcbfe45 100644
    --- a/main/tests/cancun/eip1153_tstore/test_tstorage_create_contexts/index/test_cases/index.html
    +++ b/main/tests/cancun/eip1153_tstore/test_tstorage_create_contexts/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Tstorage Create Contexts - Test Cases

    Test cases generated from tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py:

    TestTransientStorageInContractCreation
     TestTransientStorageInContractCreation
     TestTransientStorageInContractCreation
    diff --git a/main/tests/cancun/eip1153_tstore/test_tstorage_execution_contexts/index.html b/main/tests/cancun/eip1153_tstore/test_tstorage_execution_contexts/index.html
    index b5715edb8e..cb4c7ef3b5 100644
    --- a/main/tests/cancun/eip1153_tstore/test_tstorage_execution_contexts/index.html
    +++ b/main/tests/cancun/eip1153_tstore/test_tstorage_execution_contexts/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test Tstorage Execution Contexts

    -

    Documentation for tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py.

    +

    Documentation for tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py
    diff --git a/main/tests/cancun/eip1153_tstore/test_tstorage_execution_contexts/index/test_cases/index.html b/main/tests/cancun/eip1153_tstore/test_tstorage_execution_contexts/index/test_cases/index.html
    index 1c033912a9..5b701c1fe9 100644
    --- a/main/tests/cancun/eip1153_tstore/test_tstorage_execution_contexts/index/test_cases/index.html
    +++ b/main/tests/cancun/eip1153_tstore/test_tstorage_execution_contexts/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Tstorage Execution Contexts - Test Cases

    Test cases generated from tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py:

    test_subcall[fork_Cancun-blockchain_test-call]
     test_subcall[fork_Cancun-blockchain_test-staticcall_cant_call_tstore]
     test_subcall[fork_Cancun-blockchain_test-staticcall_cant_call_tstore_with_stack_underflow]
    diff --git a/main/tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts/index.html b/main/tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts/index.html
    index a96bb75a10..3ca1f3279b 100644
    --- a/main/tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts/index.html
    +++ b/main/tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test Tstorage Reentrancy Contexts

    -

    Documentation for tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py.

    +

    Documentation for tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py
    diff --git a/main/tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts/index/test_cases/index.html b/main/tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts/index/test_cases/index.html
    index 101634d942..8b8e8f9012 100644
    --- a/main/tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts/index/test_cases/index.html
    +++ b/main/tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Tstorage Reentrancy Contexts - Test Cases

    Test cases generated from tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py:

    test_reentrant_call[fork_Cancun-blockchain_test-tstore_in_reentrant_call]
     test_reentrant_call[fork_Cancun-blockchain_test-tload_after_reentrant_tstore]
     test_reentrant_call[fork_Cancun-blockchain_test-manipulate_in_reentrant_call]
    diff --git a/main/tests/cancun/eip1153_tstore/test_tstorage_selfdestruct/index.html b/main/tests/cancun/eip1153_tstore/test_tstorage_selfdestruct/index.html
    index 3593881ac5..fa75e0ce32 100644
    --- a/main/tests/cancun/eip1153_tstore/test_tstorage_selfdestruct/index.html
    +++ b/main/tests/cancun/eip1153_tstore/test_tstorage_selfdestruct/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test Tstorage Selfdestruct

    -

    Documentation for tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py.

    +

    Documentation for tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py
    diff --git a/main/tests/cancun/eip1153_tstore/test_tstorage_selfdestruct/index/test_cases/index.html b/main/tests/cancun/eip1153_tstore/test_tstorage_selfdestruct/index/test_cases/index.html
    index 2ae4c2be53..ad5db2a829 100644
    --- a/main/tests/cancun/eip1153_tstore/test_tstorage_selfdestruct/index/test_cases/index.html
    +++ b/main/tests/cancun/eip1153_tstore/test_tstorage_selfdestruct/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Tstorage Selfdestruct - Test Cases

    Test cases generated from tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py:

    test_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tload_after_selfdestruct_pre_existing_contract]
     test_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tload_after_selfdestruct_new_contract]
     test_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tload_after_inner_selfdestruct_pre_existing_contract]
    diff --git a/main/tests/cancun/eip1153_tstore/test_tstore_reentrancy/index.html b/main/tests/cancun/eip1153_tstore/test_tstore_reentrancy/index.html
    index b5806b9c83..887e903703 100644
    --- a/main/tests/cancun/eip1153_tstore/test_tstore_reentrancy/index.html
    +++ b/main/tests/cancun/eip1153_tstore/test_tstore_reentrancy/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test Tstore Reentrancy

    -

    Documentation for tests/cancun/eip1153_tstore/test_tstore_reentrancy.py.

    +

    Documentation for tests/cancun/eip1153_tstore/test_tstore_reentrancy.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip1153_tstore/test_tstore_reentrancy.py
    diff --git a/main/tests/cancun/eip1153_tstore/test_tstore_reentrancy/index/test_cases/index.html b/main/tests/cancun/eip1153_tstore/test_tstore_reentrancy/index/test_cases/index.html
    index 7c86b75013..eb777d7967 100644
    --- a/main/tests/cancun/eip1153_tstore/test_tstore_reentrancy/index/test_cases/index.html
    +++ b/main/tests/cancun/eip1153_tstore/test_tstore_reentrancy/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Tstore Reentrancy - Test Cases

    Test cases generated from tests/cancun/eip1153_tstore/test_tstore_reentrancy.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstore_reentrancy.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip1153_tstore/test_tstore_reentrancy.py:

    test_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALL]
     test_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_CALLCODE]
     test_tstore_reentrancy[fork_Cancun-blockchain_test-call_dest_type_CallDestType.REENTRANCY-call_return_RETURN-call_type_DELEGATECALL]
    diff --git a/main/tests/cancun/eip4788_beacon_root/index.html b/main/tests/cancun/eip4788_beacon_root/index.html
    index 5c1515bdef..a3f9097746 100644
    --- a/main/tests/cancun/eip4788_beacon_root/index.html
    +++ b/main/tests/cancun/eip4788_beacon_root/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    EIP-4788 Beacon Root

    -

    Documentation for tests/cancun/eip4788_beacon_root.

    +

    Documentation for tests/cancun/eip4788_beacon_root.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4788_beacon_root
    diff --git a/main/tests/cancun/eip4788_beacon_root/spec/index.html b/main/tests/cancun/eip4788_beacon_root/spec/index.html
    index faf3697dd7..74f68c5b9d 100644
    --- a/main/tests/cancun/eip4788_beacon_root/spec/index.html
    +++ b/main/tests/cancun/eip4788_beacon_root/spec/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13708,7 +13708,7 @@
     
     
     

    Spec

    -

    Documentation for tests/cancun/eip4788_beacon_root/spec.py.

    +

    Documentation for tests/cancun/eip4788_beacon_root/spec.py.

    diff --git a/main/tests/cancun/eip4788_beacon_root/test_beacon_root_contract/index.html b/main/tests/cancun/eip4788_beacon_root/test_beacon_root_contract/index.html index af8ccc92a4..9000efd8db 100644 --- a/main/tests/cancun/eip4788_beacon_root/test_beacon_root_contract/index.html +++ b/main/tests/cancun/eip4788_beacon_root/test_beacon_root_contract/index.html @@ -20,7 +20,7 @@ - + @@ -13724,7 +13724,7 @@

    Test Beacon Root Contract

    -

    Documentation for tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py.

    +

    Documentation for tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py
    diff --git a/main/tests/cancun/eip4788_beacon_root/test_beacon_root_contract/index/test_cases/index.html b/main/tests/cancun/eip4788_beacon_root/test_beacon_root_contract/index/test_cases/index.html
    index 1e20a7db01..de713c9171 100644
    --- a/main/tests/cancun/eip4788_beacon_root/test_beacon_root_contract/index/test_cases/index.html
    +++ b/main/tests/cancun/eip4788_beacon_root/test_beacon_root_contract/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Beacon Root Contract - Test Cases

    Test cases generated from tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py:

    test_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALL-call_value_1-valid_input_True-call_gas_100000-valid_call_True]
     test_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALL-call_value_1-valid_input_True-call_gas_1000-valid_call_False]
     test_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALL-call_value_0-valid_input_True-call_gas_100000-valid_call_True]
    diff --git a/main/tests/cancun/eip4844_blobs/index.html b/main/tests/cancun/eip4844_blobs/index.html
    index 368ccb712e..c5feba110f 100644
    --- a/main/tests/cancun/eip4844_blobs/index.html
    +++ b/main/tests/cancun/eip4844_blobs/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    EIP-4844 Blobs

    -

    Documentation for tests/cancun/eip4844_blobs.

    +

    Documentation for tests/cancun/eip4844_blobs.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs
    diff --git a/main/tests/cancun/eip4844_blobs/point_evaluation_vectors/README_./index.html b/main/tests/cancun/eip4844_blobs/point_evaluation_vectors/README_./index.html
    index 510787148b..24e4602d6a 100644
    --- a/main/tests/cancun/eip4844_blobs/point_evaluation_vectors/README_./index.html
    +++ b/main/tests/cancun/eip4844_blobs/point_evaluation_vectors/README_./index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    diff --git a/main/tests/cancun/eip4844_blobs/spec/index.html b/main/tests/cancun/eip4844_blobs/spec/index.html
    index c6e72c984c..cecabf99d5 100644
    --- a/main/tests/cancun/eip4844_blobs/spec/index.html
    +++ b/main/tests/cancun/eip4844_blobs/spec/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13708,7 +13708,7 @@
     
     
     

    Spec

    -

    Documentation for tests/cancun/eip4844_blobs/spec.py.

    +

    Documentation for tests/cancun/eip4844_blobs/spec.py.

    diff --git a/main/tests/cancun/eip4844_blobs/test_blob_txs/index.html b/main/tests/cancun/eip4844_blobs/test_blob_txs/index.html index b7a9dac524..fa6a8a005b 100644 --- a/main/tests/cancun/eip4844_blobs/test_blob_txs/index.html +++ b/main/tests/cancun/eip4844_blobs/test_blob_txs/index.html @@ -20,7 +20,7 @@ - + @@ -13796,7 +13796,7 @@

    Test Blob Txs

    -

    Documentation for tests/cancun/eip4844_blobs/test_blob_txs.py.

    +

    Documentation for tests/cancun/eip4844_blobs/test_blob_txs.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_blob_txs.py
    diff --git a/main/tests/cancun/eip4844_blobs/test_blob_txs/index/test_cases/index.html b/main/tests/cancun/eip4844_blobs/test_blob_txs/index/test_cases/index.html
    index ef66b494f5..ba3100faeb 100644
    --- a/main/tests/cancun/eip4844_blobs/test_blob_txs/index/test_cases/index.html
    +++ b/main/tests/cancun/eip4844_blobs/test_blob_txs/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Blob Txs - Test Cases

    Test cases generated from tests/cancun/eip4844_blobs/test_blob_txs.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_blob_txs.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_blob_txs.py:

    test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 1, 1, 1)]
     test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 1, 1)]
     test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 1, 2)]
    diff --git a/main/tests/cancun/eip4844_blobs/test_blob_txs_full/index.html b/main/tests/cancun/eip4844_blobs/test_blob_txs_full/index.html
    index 06109b18cf..321fde5947 100644
    --- a/main/tests/cancun/eip4844_blobs/test_blob_txs_full/index.html
    +++ b/main/tests/cancun/eip4844_blobs/test_blob_txs_full/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test Blob Txs Full

    -

    Documentation for tests/cancun/eip4844_blobs/test_blob_txs_full.py.

    +

    Documentation for tests/cancun/eip4844_blobs/test_blob_txs_full.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_blob_txs_full.py
    diff --git a/main/tests/cancun/eip4844_blobs/test_blob_txs_full/index/test_cases/index.html b/main/tests/cancun/eip4844_blobs/test_blob_txs_full/index/test_cases/index.html
    index 19ebb55e58..ddddb83688 100644
    --- a/main/tests/cancun/eip4844_blobs/test_blob_txs_full/index/test_cases/index.html
    +++ b/main/tests/cancun/eip4844_blobs/test_blob_txs_full/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Blob Txs Full - Test Cases

    Test cases generated from tests/cancun/eip4844_blobs/test_blob_txs_full.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_blob_txs_full.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_blob_txs_full.py:

    test_reject_valid_full_blob_in_block_rlp[fork_Cancun-blockchain_test-one_full_blob_one_tx]
     test_reject_valid_full_blob_in_block_rlp[fork_Cancun-blockchain_test-one_full_blob_max_txs]
     test_reject_valid_full_blob_in_block_rlp[fork_Cancun-blockchain_test-one_full_blob_at_the_end_max_txs]
    diff --git a/main/tests/cancun/eip4844_blobs/test_blobhash_opcode/index.html b/main/tests/cancun/eip4844_blobs/test_blobhash_opcode/index.html
    index dfdff7c8ad..674475d47e 100644
    --- a/main/tests/cancun/eip4844_blobs/test_blobhash_opcode/index.html
    +++ b/main/tests/cancun/eip4844_blobs/test_blobhash_opcode/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13661,7 +13661,7 @@
     
     
     

    Test Blobhash Opcode

    -

    Documentation for tests/cancun/eip4844_blobs/test_blobhash_opcode.py.

    +

    Documentation for tests/cancun/eip4844_blobs/test_blobhash_opcode.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_blobhash_opcode.py
    diff --git a/main/tests/cancun/eip4844_blobs/test_blobhash_opcode/index/test_cases/index.html b/main/tests/cancun/eip4844_blobs/test_blobhash_opcode/index/test_cases/index.html
    index f0574af460..565491fcab 100644
    --- a/main/tests/cancun/eip4844_blobs/test_blobhash_opcode/index/test_cases/index.html
    +++ b/main/tests/cancun/eip4844_blobs/test_blobhash_opcode/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Blobhash Opcode - Test Cases

    Test cases generated from tests/cancun/eip4844_blobs/test_blobhash_opcode.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_blobhash_opcode.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_blobhash_opcode.py:

    test_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test-blobhash_index_0]
     test_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test-blobhash_index_1]
     test_blobhash_gas_cost[fork_Cancun-tx_type_3-blockchain_test-blobhash_index_2]
    diff --git a/main/tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts/index.html b/main/tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts/index.html
    index a774bbcbe4..7bcf7e0993 100644
    --- a/main/tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts/index.html
    +++ b/main/tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test Blobhash Opcode Contexts

    -

    Documentation for tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py.

    +

    Documentation for tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py
    diff --git a/main/tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts/index/test_cases/index.html b/main/tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts/index/test_cases/index.html
    index 95a55be4d7..47d2d2eca3 100644
    --- a/main/tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts/index/test_cases/index.html
    +++ b/main/tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Blobhash Opcode Contexts - Test Cases

    Test cases generated from tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py:

    test_blobhash_opcode_contexts[opcode_context_on_top_level_call_stack-fork_Cancun-blockchain_test]
     test_blobhash_opcode_contexts[opcode_context_on_top_level_call_stack-fork_Cancun-blockchain_test_engine]
     test_blobhash_opcode_contexts[opcode_context_on_top_level_call_stack-fork_Prague-blockchain_test]
    diff --git a/main/tests/cancun/eip4844_blobs/test_excess_blob_gas/index.html b/main/tests/cancun/eip4844_blobs/test_excess_blob_gas/index.html
    index c03f4ce850..526e38d850 100644
    --- a/main/tests/cancun/eip4844_blobs/test_excess_blob_gas/index.html
    +++ b/main/tests/cancun/eip4844_blobs/test_excess_blob_gas/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13733,7 +13733,7 @@
     
     
     

    Test Excess Blob Gas

    -

    Documentation for tests/cancun/eip4844_blobs/test_excess_blob_gas.py.

    +

    Documentation for tests/cancun/eip4844_blobs/test_excess_blob_gas.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_excess_blob_gas.py
    diff --git a/main/tests/cancun/eip4844_blobs/test_excess_blob_gas/index/test_cases/index.html b/main/tests/cancun/eip4844_blobs/test_excess_blob_gas/index/test_cases/index.html
    index 04614f399f..b25c9a375c 100644
    --- a/main/tests/cancun/eip4844_blobs/test_excess_blob_gas/index/test_cases/index.html
    +++ b/main/tests/cancun/eip4844_blobs/test_excess_blob_gas/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Excess Blob Gas - Test Cases

    Test cases generated from tests/cancun/eip4844_blobs/test_excess_blob_gas.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_excess_blob_gas.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_excess_blob_gas.py:

    test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0]
     test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1]
     test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2]
    diff --git a/main/tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition/index.html b/main/tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition/index.html
    index 7fb24196f3..b56ce5a278 100644
    --- a/main/tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition/index.html
    +++ b/main/tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13652,7 +13652,7 @@
     
     
     

    Test Excess Blob Gas Fork Transition

    -

    Documentation for tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py.

    +

    Documentation for tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py
    diff --git a/main/tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition/index/test_cases/index.html b/main/tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition/index/test_cases/index.html
    index e3afaeb0f7..5937d45717 100644
    --- a/main/tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition/index/test_cases/index.html
    +++ b/main/tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Excess Blob Gas Fork Transition - Test Cases

    Test cases generated from tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py:

    test_invalid_pre_fork_block_with_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_present_True-blob_gas_used_present_False]
     test_invalid_pre_fork_block_with_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_present_False-blob_gas_used_present_True]
     test_invalid_pre_fork_block_with_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_present_True-blob_gas_used_present_True]
    diff --git a/main/tests/cancun/eip4844_blobs/test_point_evaluation_precompile/index.html b/main/tests/cancun/eip4844_blobs/test_point_evaluation_precompile/index.html
    index 685aafbc89..af197b0279 100644
    --- a/main/tests/cancun/eip4844_blobs/test_point_evaluation_precompile/index.html
    +++ b/main/tests/cancun/eip4844_blobs/test_point_evaluation_precompile/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13688,7 +13688,7 @@
     
     
     

    Test Point Evaluation Precompile

    -

    Documentation for tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py.

    +

    Documentation for tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py
    diff --git a/main/tests/cancun/eip4844_blobs/test_point_evaluation_precompile/index/test_cases/index.html b/main/tests/cancun/eip4844_blobs/test_point_evaluation_precompile/index/test_cases/index.html
    index a8b241fbd1..e803489ee4 100644
    --- a/main/tests/cancun/eip4844_blobs/test_point_evaluation_precompile/index/test_cases/index.html
    +++ b/main/tests/cancun/eip4844_blobs/test_point_evaluation_precompile/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Point Evaluation Precompile - Test Cases

    Test cases generated from tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py:

    test_valid_inputs[fork_Cancun-blockchain_test-result_Result.SUCCESS-in_bounds_z]
     test_valid_inputs[fork_Cancun-blockchain_test_engine-result_Result.SUCCESS-in_bounds_z]
     test_valid_inputs[fork_Cancun-state_test-result_Result.SUCCESS-in_bounds_z]
    diff --git a/main/tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas/index.html b/main/tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas/index.html
    index bbaa56b751..6127f10e7c 100644
    --- a/main/tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas/index.html
    +++ b/main/tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test Point Evaluation Precompile Gas

    -

    Documentation for tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py.

    +

    Documentation for tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py
    diff --git a/main/tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas/index/test_cases/index.html b/main/tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas/index/test_cases/index.html
    index 844ab01842..b054fe4e55 100644
    --- a/main/tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas/index/test_cases/index.html
    +++ b/main/tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Point Evaluation Precompile Gas - Test Cases

    Test cases generated from tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py:

    test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-exact_gas-call_type_CALL]
     test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-exact_gas-call_type_DELEGATECALL]
     test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-exact_gas-call_type_CALLCODE]
    diff --git a/main/tests/cancun/eip5656_mcopy/index.html b/main/tests/cancun/eip5656_mcopy/index.html
    index 68572c343d..42da0c9852 100644
    --- a/main/tests/cancun/eip5656_mcopy/index.html
    +++ b/main/tests/cancun/eip5656_mcopy/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    EIP-5656 Mcopy

    -

    Documentation for tests/cancun/eip5656_mcopy.

    +

    Documentation for tests/cancun/eip5656_mcopy.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip5656_mcopy
    diff --git a/main/tests/cancun/eip5656_mcopy/test_mcopy/index.html b/main/tests/cancun/eip5656_mcopy/test_mcopy/index.html
    index 88b4c37fea..88c62350e4 100644
    --- a/main/tests/cancun/eip5656_mcopy/test_mcopy/index.html
    +++ b/main/tests/cancun/eip5656_mcopy/test_mcopy/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13643,7 +13643,7 @@
     
     
     

    Test Mcopy

    -

    Documentation for tests/cancun/eip5656_mcopy/test_mcopy.py.

    +

    Documentation for tests/cancun/eip5656_mcopy/test_mcopy.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip5656_mcopy/test_mcopy.py
    diff --git a/main/tests/cancun/eip5656_mcopy/test_mcopy/index/test_cases/index.html b/main/tests/cancun/eip5656_mcopy/test_mcopy/index/test_cases/index.html
    index 8a3078e5ef..d451415c9f 100644
    --- a/main/tests/cancun/eip5656_mcopy/test_mcopy/index/test_cases/index.html
    +++ b/main/tests/cancun/eip5656_mcopy/test_mcopy/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Mcopy - Test Cases

    Test cases generated from tests/cancun/eip5656_mcopy/test_mcopy.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip5656_mcopy/test_mcopy.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip5656_mcopy/test_mcopy.py:

    test_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-zero_inputs]
     test_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-zero_length_out_of_bounds_destination]
     test_valid_mcopy_operations[fork_Cancun-evm_code_type_LEGACY-blockchain_test-single_byte_rewrite]
    diff --git a/main/tests/cancun/eip5656_mcopy/test_mcopy_contexts/index.html b/main/tests/cancun/eip5656_mcopy/test_mcopy_contexts/index.html
    index 1662b8a7df..8be0ddea62 100644
    --- a/main/tests/cancun/eip5656_mcopy/test_mcopy_contexts/index.html
    +++ b/main/tests/cancun/eip5656_mcopy/test_mcopy_contexts/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13643,7 +13643,7 @@
     
     
     

    Test Mcopy Contexts

    -

    Documentation for tests/cancun/eip5656_mcopy/test_mcopy_contexts.py.

    +

    Documentation for tests/cancun/eip5656_mcopy/test_mcopy_contexts.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip5656_mcopy/test_mcopy_contexts.py
    diff --git a/main/tests/cancun/eip5656_mcopy/test_mcopy_contexts/index/test_cases/index.html b/main/tests/cancun/eip5656_mcopy/test_mcopy_contexts/index/test_cases/index.html
    index f655c805bd..50e5bef33b 100644
    --- a/main/tests/cancun/eip5656_mcopy/test_mcopy_contexts/index/test_cases/index.html
    +++ b/main/tests/cancun/eip5656_mcopy/test_mcopy_contexts/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Mcopy Contexts - Test Cases

    Test cases generated from tests/cancun/eip5656_mcopy/test_mcopy_contexts.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip5656_mcopy/test_mcopy_contexts.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip5656_mcopy/test_mcopy_contexts.py:

    test_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test]
     test_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine]
     test_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test]
    diff --git a/main/tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion/index.html b/main/tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion/index.html
    index cfed4f2710..1d5056b71f 100644
    --- a/main/tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion/index.html
    +++ b/main/tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13643,7 +13643,7 @@
     
     
     

    Test Mcopy Memory Expansion

    -

    Documentation for tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py.

    +

    Documentation for tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py
    diff --git a/main/tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion/index/test_cases/index.html b/main/tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion/index/test_cases/index.html
    index f0409bd81f..9da9240abb 100644
    --- a/main/tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion/index/test_cases/index.html
    +++ b/main/tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Mcopy Memory Expansion - Test Cases

    Test cases generated from tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py:

    test_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-single_byte_expansion]
     test_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_2]
     test_mcopy_memory_expansion[fork_Cancun-evm_code_type_LEGACY-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary]
    diff --git a/main/tests/cancun/eip6780_selfdestruct/index.html b/main/tests/cancun/eip6780_selfdestruct/index.html
    index ed456ee048..920821e7b7 100644
    --- a/main/tests/cancun/eip6780_selfdestruct/index.html
    +++ b/main/tests/cancun/eip6780_selfdestruct/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    EIP-6780 Selfdestruct

    -

    Documentation for tests/cancun/eip6780_selfdestruct.

    +

    Documentation for tests/cancun/eip6780_selfdestruct.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip6780_selfdestruct
    diff --git a/main/tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision/index.html b/main/tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision/index.html
    index 308728af83..b3a3e05fea 100644
    --- a/main/tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision/index.html
    +++ b/main/tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13652,7 +13652,7 @@
     
     
     

    Test Dynamic Create2 Selfdestruct Collision

    -

    Documentation for tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py.

    +

    Documentation for tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py
    diff --git a/main/tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision/index/test_cases/index.html b/main/tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision/index/test_cases/index.html
    index ad3bc0b9e0..f76dc8ccf3 100644
    --- a/main/tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision/index/test_cases/index.html
    +++ b/main/tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Dynamic Create2 Selfdestruct Collision - Test Cases

    Test cases generated from tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py:

    test_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]
     test_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]
     test_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]
    diff --git a/main/tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert/index.html b/main/tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert/index.html
    index b2766fb659..7872fc7fe5 100644
    --- a/main/tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert/index.html
    +++ b/main/tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test Reentrancy Selfdestruct Revert

    -

    Documentation for tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py.

    +

    Documentation for tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py
    diff --git a/main/tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert/index/test_cases/index.html b/main/tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert/index/test_cases/index.html
    index 51dd4aa092..69d19f6919 100644
    --- a/main/tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert/index/test_cases/index.html
    +++ b/main/tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Reentrancy Selfdestruct Revert - Test Cases

    Test cases generated from tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py:

    test_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALL-first_suicide_CALL]
     test_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALL-first_suicide_CALLCODE]
     test_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALL-first_suicide_DELEGATECALL]
    diff --git a/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct/index.html b/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct/index.html
    index 2ba7a7e88b..e88b5c1f57 100644
    --- a/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct/index.html
    +++ b/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13706,7 +13706,7 @@
     
     
     

    Test Selfdestruct

    -

    Documentation for tests/cancun/eip6780_selfdestruct/test_selfdestruct.py.

    +

    Documentation for tests/cancun/eip6780_selfdestruct/test_selfdestruct.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
    diff --git a/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct/index/test_cases/index.html b/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct/index/test_cases/index.html
    index 7be22326ac..4ee5beac7a 100644
    --- a/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct/index/test_cases/index.html
    +++ b/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Selfdestruct - Test Cases

    Test cases generated from tests/cancun/eip6780_selfdestruct/test_selfdestruct.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip6780_selfdestruct/test_selfdestruct.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip6780_selfdestruct/test_selfdestruct.py:

    test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]
     test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]
     test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]
    diff --git a/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert/index.html b/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert/index.html
    index d9f5c695c6..9276e5055b 100644
    --- a/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert/index.html
    +++ b/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13643,7 +13643,7 @@
     
     
     

    Test Selfdestruct Revert

    -

    Documentation for tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py.

    +

    Documentation for tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py
    diff --git a/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert/index/test_cases/index.html b/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert/index/test_cases/index.html
    index a01b52392b..60e1c8e2a2 100644
    --- a/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert/index/test_cases/index.html
    +++ b/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Selfdestruct Revert - Test Cases

    Test cases generated from tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py:

    test_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-no_outer_selfdestruct]
     test_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-outer_selfdestruct_before_inner_call]
     test_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-outer_selfdestruct_after_inner_call]
    diff --git a/main/tests/cancun/eip7516_blobgasfee/index.html b/main/tests/cancun/eip7516_blobgasfee/index.html
    index 15333666ad..fbab37aec4 100644
    --- a/main/tests/cancun/eip7516_blobgasfee/index.html
    +++ b/main/tests/cancun/eip7516_blobgasfee/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    EIP-7516 Blobgasfee

    -

    Documentation for tests/cancun/eip7516_blobgasfee.

    +

    Documentation for tests/cancun/eip7516_blobgasfee.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip7516_blobgasfee
    diff --git a/main/tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/index.html b/main/tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/index.html
    index 617ef08f28..7989bd6419 100644
    --- a/main/tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/index.html
    +++ b/main/tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13661,7 +13661,7 @@
     
     
     

    Test Blobgasfee Opcode

    -

    Documentation for tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py.

    +

    Documentation for tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py.

    Generate fixtures for these test cases with:

    fill -v tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py
    diff --git a/main/tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/index/test_cases/index.html b/main/tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/index/test_cases/index.html
    index 65d884828d..731728b0f7 100644
    --- a/main/tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/index/test_cases/index.html
    +++ b/main/tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Blobgasfee Opcode - Test Cases

    Test cases generated from tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py

    -

    Parametrized test cases generated from the test module tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py:

    +

    Parametrized test cases generated from the test module tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py:

    test_blobbasefee_stack_overflow[fork_Cancun-blockchain_test-no_stack_overflow]
     test_blobbasefee_stack_overflow[fork_Cancun-blockchain_test-stack_overflow]
     test_blobbasefee_stack_overflow[fork_Cancun-blockchain_test_engine-no_stack_overflow]
    diff --git a/main/tests/cancun/index.html b/main/tests/cancun/index.html
    index dc1f43c801..8c2355929d 100644
    --- a/main/tests/cancun/index.html
    +++ b/main/tests/cancun/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13621,7 +13621,7 @@
     
     
     

    Cancun

    -

    Documentation for tests/cancun.

    +

    Documentation for tests/cancun.

    Generate fixtures for these test cases with:

    fill -v tests/cancun
    diff --git a/main/tests/constantinople/eip1014_create2/index.html b/main/tests/constantinople/eip1014_create2/index.html
    index 4df3a6ce9e..46a6fb3bbb 100644
    --- a/main/tests/constantinople/eip1014_create2/index.html
    +++ b/main/tests/constantinople/eip1014_create2/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    EIP-1014 Create2

    -

    Documentation for tests/constantinople/eip1014_create2.

    +

    Documentation for tests/constantinople/eip1014_create2.

    Generate fixtures for these test cases with:

    fill -v tests/constantinople/eip1014_create2
    diff --git a/main/tests/constantinople/eip1014_create2/spec/index.html b/main/tests/constantinople/eip1014_create2/spec/index.html
    index e9a0165fc6..a37d96aae2 100644
    --- a/main/tests/constantinople/eip1014_create2/spec/index.html
    +++ b/main/tests/constantinople/eip1014_create2/spec/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13690,7 +13690,7 @@
     
     
     

    Spec

    -

    Documentation for tests/constantinople/eip1014_create2/spec.py.

    +

    Documentation for tests/constantinople/eip1014_create2/spec.py.

    diff --git a/main/tests/constantinople/eip1014_create2/test_create_returndata/index.html b/main/tests/constantinople/eip1014_create2/test_create_returndata/index.html index feb9acb1c7..448bdac46c 100644 --- a/main/tests/constantinople/eip1014_create2/test_create_returndata/index.html +++ b/main/tests/constantinople/eip1014_create2/test_create_returndata/index.html @@ -20,7 +20,7 @@ - + @@ -13634,7 +13634,7 @@

    Test Create Returndata

    -

    Documentation for tests/constantinople/eip1014_create2/test_create_returndata.py.

    +

    Documentation for tests/constantinople/eip1014_create2/test_create_returndata.py.

    Generate fixtures for these test cases with:

    fill -v tests/constantinople/eip1014_create2/test_create_returndata.py
    diff --git a/main/tests/constantinople/eip1014_create2/test_create_returndata/index/test_cases/index.html b/main/tests/constantinople/eip1014_create2/test_create_returndata/index/test_cases/index.html
    index 7c9f94fbd3..a6638e14df 100644
    --- a/main/tests/constantinople/eip1014_create2/test_create_returndata/index/test_cases/index.html
    +++ b/main/tests/constantinople/eip1014_create2/test_create_returndata/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Create Returndata - Test Cases

    Test cases generated from tests/constantinople/eip1014_create2/test_create_returndata.py

    -

    Parametrized test cases generated from the test module tests/constantinople/eip1014_create2/test_create_returndata.py:

    +

    Parametrized test cases generated from the test module tests/constantinople/eip1014_create2/test_create_returndata.py:

    test_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_35]
     test_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_32]
     test_create2_return_data[fork_Istanbul-blockchain_test-return_type_in_create_RETURN-return_type_RETURN-create_type_CREATE-call_return_size_0]
    diff --git a/main/tests/constantinople/eip1014_create2/test_recreate/index.html b/main/tests/constantinople/eip1014_create2/test_recreate/index.html
    index 96ca7aa65f..5c47fe6c26 100644
    --- a/main/tests/constantinople/eip1014_create2/test_recreate/index.html
    +++ b/main/tests/constantinople/eip1014_create2/test_recreate/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test Recreate

    -

    Documentation for tests/constantinople/eip1014_create2/test_recreate.py.

    +

    Documentation for tests/constantinople/eip1014_create2/test_recreate.py.

    Generate fixtures for these test cases with:

    fill -v tests/constantinople/eip1014_create2/test_recreate.py
    diff --git a/main/tests/constantinople/eip1014_create2/test_recreate/index/test_cases/index.html b/main/tests/constantinople/eip1014_create2/test_recreate/index/test_cases/index.html
    index 2af65cdc2b..7ac7077c34 100644
    --- a/main/tests/constantinople/eip1014_create2/test_recreate/index/test_cases/index.html
    +++ b/main/tests/constantinople/eip1014_create2/test_recreate/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Recreate - Test Cases

    Test cases generated from tests/constantinople/eip1014_create2/test_recreate.py

    -

    Parametrized test cases generated from the test module tests/constantinople/eip1014_create2/test_recreate.py:

    +

    Parametrized test cases generated from the test module tests/constantinople/eip1014_create2/test_recreate.py:

    test_recreate[fork_Constantinople-blockchain_test-recreate_on_separate_block_True]
     test_recreate[fork_Constantinople-blockchain_test-recreate_on_separate_block_False]
     test_recreate[fork_ConstantinopleFix-blockchain_test-recreate_on_separate_block_True]
    diff --git a/main/tests/constantinople/index.html b/main/tests/constantinople/index.html
    index 8f35e703cd..1abbccdde7 100644
    --- a/main/tests/constantinople/index.html
    +++ b/main/tests/constantinople/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13621,7 +13621,7 @@
     
     
     

    Constantinople

    -

    Documentation for tests/constantinople.

    +

    Documentation for tests/constantinople.

    Generate fixtures for these test cases with:

    fill -v tests/constantinople
    diff --git a/main/tests/frontier/index.html b/main/tests/frontier/index.html
    index 2231f0ba8e..cc22343521 100644
    --- a/main/tests/frontier/index.html
    +++ b/main/tests/frontier/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13621,7 +13621,7 @@
     
     
     

    Frontier

    -

    Documentation for tests/frontier.

    +

    Documentation for tests/frontier.

    Generate fixtures for these test cases with:

    fill -v tests/frontier
    diff --git a/main/tests/frontier/opcodes/index.html b/main/tests/frontier/opcodes/index.html
    index e78cd7c494..5e57813fc7 100644
    --- a/main/tests/frontier/opcodes/index.html
    +++ b/main/tests/frontier/opcodes/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    Opcodes

    -

    Documentation for tests/frontier/opcodes.

    +

    Documentation for tests/frontier/opcodes.

    Generate fixtures for these test cases with:

    fill -v tests/frontier/opcodes
    diff --git a/main/tests/frontier/opcodes/test_all_opcodes/index.html b/main/tests/frontier/opcodes/test_all_opcodes/index.html
    index b05b8ead12..5d2ae9dd7e 100644
    --- a/main/tests/frontier/opcodes/test_all_opcodes/index.html
    +++ b/main/tests/frontier/opcodes/test_all_opcodes/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13643,7 +13643,7 @@
     
     
     

    Test All Opcodes

    -

    Documentation for tests/frontier/opcodes/test_all_opcodes.py.

    +

    Documentation for tests/frontier/opcodes/test_all_opcodes.py.

    Generate fixtures for these test cases with:

    fill -v tests/frontier/opcodes/test_all_opcodes.py
    diff --git a/main/tests/frontier/opcodes/test_all_opcodes/index/test_cases/index.html b/main/tests/frontier/opcodes/test_all_opcodes/index/test_cases/index.html
    index c2bcd42fc9..a6709990ef 100644
    --- a/main/tests/frontier/opcodes/test_all_opcodes/index/test_cases/index.html
    +++ b/main/tests/frontier/opcodes/test_all_opcodes/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test All Opcodes - Test Cases

    Test cases generated from tests/frontier/opcodes/test_all_opcodes.py

    -

    Parametrized test cases generated from the test module tests/frontier/opcodes/test_all_opcodes.py:

    +

    Parametrized test cases generated from the test module tests/frontier/opcodes/test_all_opcodes.py:

    test_all_opcodes[fork_Frontier-blockchain_test]
     test_all_opcodes[fork_Frontier-state_test]
     test_all_opcodes[fork_Homestead-blockchain_test]
    diff --git a/main/tests/frontier/opcodes/test_call_and_callcode_gas_calculation/index.html b/main/tests/frontier/opcodes/test_call_and_callcode_gas_calculation/index.html
    index 304a9bc29e..099b0bb7f2 100644
    --- a/main/tests/frontier/opcodes/test_call_and_callcode_gas_calculation/index.html
    +++ b/main/tests/frontier/opcodes/test_call_and_callcode_gas_calculation/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test Call And Callcode Gas Calculation

    -

    Documentation for tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py.

    +

    Documentation for tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py.

    Generate fixtures for these test cases with:

    fill -v tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py
    diff --git a/main/tests/frontier/opcodes/test_call_and_callcode_gas_calculation/index/test_cases/index.html b/main/tests/frontier/opcodes/test_call_and_callcode_gas_calculation/index/test_cases/index.html
    index 302dddf29c..374fa63523 100644
    --- a/main/tests/frontier/opcodes/test_call_and_callcode_gas_calculation/index/test_cases/index.html
    +++ b/main/tests/frontier/opcodes/test_call_and_callcode_gas_calculation/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Call And Callcode Gas Calculation - Test Cases

    Test cases generated from tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py

    -

    Parametrized test cases generated from the test module tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py:

    +

    Parametrized test cases generated from the test module tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py:

    test_value_transfer_gas_calculation[fork_London-blockchain_test-callee_opcode_CALL-caller_gas_limit_36620-is_sufficient_gas_True]
     test_value_transfer_gas_calculation[fork_London-blockchain_test-callee_opcode_CALL-caller_gas_limit_36619-is_sufficient_gas_False]
     test_value_transfer_gas_calculation[fork_London-blockchain_test-callee_opcode_CALLCODE-caller_gas_limit_11620-is_sufficient_gas_True]
    diff --git a/main/tests/frontier/opcodes/test_dup/index.html b/main/tests/frontier/opcodes/test_dup/index.html
    index 8754c4398c..1fc789fdc2 100644
    --- a/main/tests/frontier/opcodes/test_dup/index.html
    +++ b/main/tests/frontier/opcodes/test_dup/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test DUP

    -

    Documentation for tests/frontier/opcodes/test_dup.py.

    +

    Documentation for tests/frontier/opcodes/test_dup.py.

    Generate fixtures for these test cases with:

    fill -v tests/frontier/opcodes/test_dup.py
    diff --git a/main/tests/frontier/opcodes/test_dup/index/test_cases/index.html b/main/tests/frontier/opcodes/test_dup/index/test_cases/index.html
    index 889641b22c..6ee312b4e2 100644
    --- a/main/tests/frontier/opcodes/test_dup/index/test_cases/index.html
    +++ b/main/tests/frontier/opcodes/test_dup/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test DUP - Test Cases

    Test cases generated from tests/frontier/opcodes/test_dup.py

    -

    Parametrized test cases generated from the test module tests/frontier/opcodes/test_dup.py:

    +

    Parametrized test cases generated from the test module tests/frontier/opcodes/test_dup.py:

    test_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP1]
     test_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP2]
     test_dup[fork_Frontier-evm_code_type_LEGACY-blockchain_test-DUP3]
    diff --git a/main/tests/frontier/opcodes/test_selfdestruct/index.html b/main/tests/frontier/opcodes/test_selfdestruct/index.html
    index c1b43bc16e..eda3d7e609 100644
    --- a/main/tests/frontier/opcodes/test_selfdestruct/index.html
    +++ b/main/tests/frontier/opcodes/test_selfdestruct/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test Selfdestruct

    -

    Documentation for tests/frontier/opcodes/test_selfdestruct.py.

    +

    Documentation for tests/frontier/opcodes/test_selfdestruct.py.

    Generate fixtures for these test cases with:

    fill -v tests/frontier/opcodes/test_selfdestruct.py
    diff --git a/main/tests/frontier/opcodes/test_selfdestruct/index/test_cases/index.html b/main/tests/frontier/opcodes/test_selfdestruct/index/test_cases/index.html
    index c275af2f74..5d0db052c6 100644
    --- a/main/tests/frontier/opcodes/test_selfdestruct/index/test_cases/index.html
    +++ b/main/tests/frontier/opcodes/test_selfdestruct/index/test_cases/index.html
    @@ -18,7 +18,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13618,7 +13618,7 @@
     

    Test Selfdestruct - Test Cases

    Test cases generated from tests/frontier/opcodes/test_selfdestruct.py

    -

    Parametrized test cases generated from the test module tests/frontier/opcodes/test_selfdestruct.py:

    +

    Parametrized test cases generated from the test module tests/frontier/opcodes/test_selfdestruct.py:

    test_double_kill[fork_Frontier-blockchain_test]
     test_double_kill[fork_Homestead-blockchain_test]
     
    diff --git a/main/tests/homestead/coverage/index.html b/main/tests/homestead/coverage/index.html index 218984b817..3b4884bc6b 100644 --- a/main/tests/homestead/coverage/index.html +++ b/main/tests/homestead/coverage/index.html @@ -20,7 +20,7 @@ - + @@ -13623,7 +13623,7 @@

    Coverage

    -

    Documentation for tests/homestead/coverage.

    +

    Documentation for tests/homestead/coverage.

    Generate fixtures for these test cases with:

    fill -v tests/homestead/coverage
    diff --git a/main/tests/homestead/coverage/test_coverage/index.html b/main/tests/homestead/coverage/test_coverage/index.html
    index d3d90aba7c..4d9fd37b59 100644
    --- a/main/tests/homestead/coverage/test_coverage/index.html
    +++ b/main/tests/homestead/coverage/test_coverage/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test Coverage

    -

    Documentation for tests/homestead/coverage/test_coverage.py.

    +

    Documentation for tests/homestead/coverage/test_coverage.py.

    Generate fixtures for these test cases with:

    fill -v tests/homestead/coverage/test_coverage.py
    diff --git a/main/tests/homestead/coverage/test_coverage/index/test_cases/index.html b/main/tests/homestead/coverage/test_coverage/index/test_cases/index.html
    index 0a7d438c34..2a0c606cfc 100644
    --- a/main/tests/homestead/coverage/test_coverage/index/test_cases/index.html
    +++ b/main/tests/homestead/coverage/test_coverage/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Coverage - Test Cases

    Test cases generated from tests/homestead/coverage/test_coverage.py

    -

    Parametrized test cases generated from the test module tests/homestead/coverage/test_coverage.py:

    +

    Parametrized test cases generated from the test module tests/homestead/coverage/test_coverage.py:

    test_coverage[fork_Homestead-blockchain_test]
     test_coverage[fork_Homestead-state_test]
     test_coverage[fork_Byzantium-blockchain_test]
    diff --git a/main/tests/homestead/index.html b/main/tests/homestead/index.html
    index 9063cf18c2..c40a9a8427 100644
    --- a/main/tests/homestead/index.html
    +++ b/main/tests/homestead/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13621,7 +13621,7 @@
     
     
     

    Homestead

    -

    Documentation for tests/homestead.

    +

    Documentation for tests/homestead.

    Generate fixtures for these test cases with:

    fill -v tests/homestead
    diff --git a/main/tests/homestead/yul/index.html b/main/tests/homestead/yul/index.html
    index 30f740ab38..e3f8fb7be2 100644
    --- a/main/tests/homestead/yul/index.html
    +++ b/main/tests/homestead/yul/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    Yul

    -

    Documentation for tests/homestead/yul.

    +

    Documentation for tests/homestead/yul.

    Generate fixtures for these test cases with:

    fill -v tests/homestead/yul
    diff --git a/main/tests/homestead/yul/test_yul_example/index.html b/main/tests/homestead/yul/test_yul_example/index.html
    index da74f7e83d..72cb7d9915 100644
    --- a/main/tests/homestead/yul/test_yul_example/index.html
    +++ b/main/tests/homestead/yul/test_yul_example/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test Yul Example

    -

    Documentation for tests/homestead/yul/test_yul_example.py.

    +

    Documentation for tests/homestead/yul/test_yul_example.py.

    Generate fixtures for these test cases with:

    fill -v tests/homestead/yul/test_yul_example.py
    diff --git a/main/tests/homestead/yul/test_yul_example/index/test_cases/index.html b/main/tests/homestead/yul/test_yul_example/index/test_cases/index.html
    index 0b9d64ad23..4d28d8008a 100644
    --- a/main/tests/homestead/yul/test_yul_example/index/test_cases/index.html
    +++ b/main/tests/homestead/yul/test_yul_example/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Yul Example - Test Cases

    Test cases generated from tests/homestead/yul/test_yul_example.py

    -

    Parametrized test cases generated from the test module tests/homestead/yul/test_yul_example.py:

    +

    Parametrized test cases generated from the test module tests/homestead/yul/test_yul_example.py:

    test_yul[fork_Homestead-blockchain_test]
     test_yul[fork_Homestead-state_test]
     test_yul[fork_Byzantium-blockchain_test]
    diff --git a/main/tests/index.html b/main/tests/index.html
    index 8108a17eb3..4457555e16 100644
    --- a/main/tests/index.html
    +++ b/main/tests/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13619,7 +13619,7 @@
     
     
     

    Test case reference

    -

    Documentation for tests.

    +

    Documentation for tests.

    Generate fixtures for these test cases for all forks deployed to mainnet with:

    fill -v tests
    diff --git a/main/tests/istanbul/eip1344_chainid/index.html b/main/tests/istanbul/eip1344_chainid/index.html
    index 04d56f3995..c02fe4f923 100644
    --- a/main/tests/istanbul/eip1344_chainid/index.html
    +++ b/main/tests/istanbul/eip1344_chainid/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    EIP-1344 CHAINID

    -

    Documentation for tests/istanbul/eip1344_chainid.

    +

    Documentation for tests/istanbul/eip1344_chainid.

    Generate fixtures for these test cases with:

    fill -v tests/istanbul/eip1344_chainid
    diff --git a/main/tests/istanbul/eip1344_chainid/test_chainid/index.html b/main/tests/istanbul/eip1344_chainid/test_chainid/index.html
    index bba348f777..c4b946e8fb 100644
    --- a/main/tests/istanbul/eip1344_chainid/test_chainid/index.html
    +++ b/main/tests/istanbul/eip1344_chainid/test_chainid/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test CHAINID

    -

    Documentation for tests/istanbul/eip1344_chainid/test_chainid.py.

    +

    Documentation for tests/istanbul/eip1344_chainid/test_chainid.py.

    Generate fixtures for these test cases with:

    fill -v tests/istanbul/eip1344_chainid/test_chainid.py
    diff --git a/main/tests/istanbul/eip1344_chainid/test_chainid/index/test_cases/index.html b/main/tests/istanbul/eip1344_chainid/test_chainid/index/test_cases/index.html
    index 400652a1d6..5610c92c3e 100644
    --- a/main/tests/istanbul/eip1344_chainid/test_chainid/index/test_cases/index.html
    +++ b/main/tests/istanbul/eip1344_chainid/test_chainid/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test CHAINID - Test Cases

    Test cases generated from tests/istanbul/eip1344_chainid/test_chainid.py

    -

    Parametrized test cases generated from the test module tests/istanbul/eip1344_chainid/test_chainid.py:

    +

    Parametrized test cases generated from the test module tests/istanbul/eip1344_chainid/test_chainid.py:

    test_chainid[fork_Istanbul-blockchain_test]
     test_chainid[fork_Istanbul-state_test]
     test_chainid[fork_Berlin-blockchain_test]
    diff --git a/main/tests/istanbul/index.html b/main/tests/istanbul/index.html
    index 76c37280da..defb7527a6 100644
    --- a/main/tests/istanbul/index.html
    +++ b/main/tests/istanbul/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13621,7 +13621,7 @@
     
     
     

    Istanbul

    -

    Documentation for tests/istanbul.

    +

    Documentation for tests/istanbul.

    Generate fixtures for these test cases with:

    fill -v tests/istanbul
    diff --git a/main/tests/paris/index.html b/main/tests/paris/index.html
    index d0b7fd726b..651964c27a 100644
    --- a/main/tests/paris/index.html
    +++ b/main/tests/paris/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13621,7 +13621,7 @@
     
     
     

    Paris

    -

    Documentation for tests/paris.

    +

    Documentation for tests/paris.

    Generate fixtures for these test cases with:

    fill -v tests/paris
    diff --git a/main/tests/paris/security/index.html b/main/tests/paris/security/index.html
    index b2f672606b..764b87ff34 100644
    --- a/main/tests/paris/security/index.html
    +++ b/main/tests/paris/security/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    Security

    -

    Documentation for tests/paris/security.

    +

    Documentation for tests/paris/security.

    Generate fixtures for these test cases with:

    fill -v tests/paris/security
    diff --git a/main/tests/paris/security/test_selfdestruct_balance_bug/index.html b/main/tests/paris/security/test_selfdestruct_balance_bug/index.html
    index ce4a7fe682..7ffe0eb88c 100644
    --- a/main/tests/paris/security/test_selfdestruct_balance_bug/index.html
    +++ b/main/tests/paris/security/test_selfdestruct_balance_bug/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test Selfdestruct Balance Bug

    -

    Documentation for tests/paris/security/test_selfdestruct_balance_bug.py.

    +

    Documentation for tests/paris/security/test_selfdestruct_balance_bug.py.

    Generate fixtures for these test cases with:

    fill -v tests/paris/security/test_selfdestruct_balance_bug.py
    diff --git a/main/tests/paris/security/test_selfdestruct_balance_bug/index/test_cases/index.html b/main/tests/paris/security/test_selfdestruct_balance_bug/index/test_cases/index.html
    index 73bb9a3fa6..b36642188f 100644
    --- a/main/tests/paris/security/test_selfdestruct_balance_bug/index/test_cases/index.html
    +++ b/main/tests/paris/security/test_selfdestruct_balance_bug/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Selfdestruct Balance Bug - Test Cases

    Test cases generated from tests/paris/security/test_selfdestruct_balance_bug.py

    -

    Parametrized test cases generated from the test module tests/paris/security/test_selfdestruct_balance_bug.py:

    +

    Parametrized test cases generated from the test module tests/paris/security/test_selfdestruct_balance_bug.py:

    test_tx_selfdestruct_balance_bug[fork_Constantinople-blockchain_test]
     test_tx_selfdestruct_balance_bug[fork_ConstantinopleFix-blockchain_test]
     test_tx_selfdestruct_balance_bug[fork_Istanbul-blockchain_test]
    diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/index.html
    index 8b2fb6eb6d..2c27452c00 100644
    --- a/main/tests/prague/eip2537_bls_12_381_precompiles/index.html
    +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    EIP-2537 Bls 12 381 Precompiles

    -

    Documentation for tests/prague/eip2537_bls_12_381_precompiles.

    +

    Documentation for tests/prague/eip2537_bls_12_381_precompiles.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/spec/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/spec/index.html index 290309051c..bf87f519b9 100644 --- a/main/tests/prague/eip2537_bls_12_381_precompiles/spec/index.html +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/spec/index.html @@ -20,7 +20,7 @@ - + @@ -13690,7 +13690,7 @@

    Spec

    -

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/spec.py.

    +

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/spec.py.

    diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/index.html index 7b318bfd0e..b788ba739f 100644 --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/index.html +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/index.html @@ -20,7 +20,7 @@ - + @@ -13661,7 +13661,7 @@

    Test Bls12 G1add

    -

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py.

    +

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/index/test_cases/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/index/test_cases/index.html index d98e39cb2f..b405a219dc 100644 --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/index/test_cases/index.html +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13620,7 +13620,7 @@

    Test Bls12 G1add - Test Cases

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py

    -

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py:

    test_valid[fork_Prague-blockchain_test-bls_g1add_g1+p1-]
     test_valid[fork_Prague-blockchain_test-bls_g1add_p1+g1-]
     test_valid[fork_Prague-blockchain_test-bls_g1add_g1_wrong_order+g1-]
    diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/index.html
    index 4de573014d..fa5782d86c 100644
    --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/index.html
    +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13652,7 +13652,7 @@
     
     
     

    Test Bls12 G1msm

    -

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py.

    +

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/index/test_cases/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/index/test_cases/index.html index 9cdad6cad8..bcdca91d20 100644 --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/index/test_cases/index.html +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13620,7 +13620,7 @@

    Test Bls12 G1msm - Test Cases

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py

    -

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1msm.py:

    test_valid[fork_Prague-blockchain_test-bls_g1multiexp_(g1+g1=2*g1)-]
     test_valid[fork_Prague-blockchain_test-bls_g1multiexp_(p1+p1=2*p1)-]
     test_valid[fork_Prague-blockchain_test-bls_g1multiexp_(1*g1=g1)-]
    diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/index.html
    index e6d06b121d..d11f9674be 100644
    --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/index.html
    +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13661,7 +13661,7 @@
     
     
     

    Test Bls12 G1mul

    -

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py.

    +

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/index/test_cases/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/index/test_cases/index.html index 1ec4ed696c..f59dafffcd 100644 --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/index/test_cases/index.html +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13620,7 +13620,7 @@

    Test Bls12 G1mul - Test Cases

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py

    -

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1mul.py:

    test_valid[fork_Prague-blockchain_test-bls_g1mul_(g1+g1=2*g1)-]
     test_valid[fork_Prague-blockchain_test-bls_g1mul_(p1+p1=2*p1)-]
     test_valid[fork_Prague-blockchain_test-bls_g1mul_(1*g1=g1)-]
    diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/index.html
    index 7069c63af3..5467cb0bef 100644
    --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/index.html
    +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13661,7 +13661,7 @@
     
     
     

    Test Bls12 G2add

    -

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py.

    +

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/index/test_cases/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/index/test_cases/index.html index 45555b6bb0..3cfa9494f9 100644 --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/index/test_cases/index.html +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13620,7 +13620,7 @@

    Test Bls12 G2add - Test Cases

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py

    -

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2add.py:

    test_valid[fork_Prague-blockchain_test-bls_g2add_g2+p2-]
     test_valid[fork_Prague-blockchain_test-bls_g2add_p2+g2-]
     test_valid[fork_Prague-blockchain_test-bls_g2add_g2_wrong_order+g2-]
    diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm/index.html
    index fa4becd183..bbd953bfb1 100644
    --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm/index.html
    +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13652,7 +13652,7 @@
     
     
     

    Test Bls12 G2msm

    -

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py.

    +

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm/index/test_cases/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm/index/test_cases/index.html index 2212daca65..7e5a51cb54 100644 --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm/index/test_cases/index.html +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13620,7 +13620,7 @@

    Test Bls12 G2msm - Test Cases

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py

    -

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2msm.py:

    test_valid[fork_Prague-blockchain_test-bls_g2multiexp_(g2+g2=2*g2)-]
     test_valid[fork_Prague-blockchain_test-bls_g2multiexp_(p2+p2=2*p2)-]
     test_valid[fork_Prague-blockchain_test-bls_g2multiexp_(1*g2=g2)-]
    diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/index.html
    index f6f44b088f..377dbb0fd6 100644
    --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/index.html
    +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13661,7 +13661,7 @@
     
     
     

    Test Bls12 G2mul

    -

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py.

    +

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/index/test_cases/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/index/test_cases/index.html index ea3a6e6c85..637c34aab5 100644 --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/index/test_cases/index.html +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13620,7 +13620,7 @@

    Test Bls12 G2mul - Test Cases

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py

    -

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py:

    test_valid[fork_Prague-blockchain_test-bls_g2mul_(g2+g2=2*g2)-]
     test_valid[fork_Prague-blockchain_test-bls_g2mul_(p2+p2=2*p2)-]
     test_valid[fork_Prague-blockchain_test-bls_g2mul_(1*g2=g2)-]
    diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/index.html
    index 8cdd0a4e0a..89574f4562 100644
    --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/index.html
    +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13661,7 +13661,7 @@
     
     
     

    Test Bls12 Map Fp2 To G2

    -

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py.

    +

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/index/test_cases/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/index/test_cases/index.html index d329b4cbf8..8ee650d5a6 100644 --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/index/test_cases/index.html +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13620,7 +13620,7 @@

    Test Bls12 Map Fp2 To G2 - Test Cases

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py

    -

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp2_to_g2.py:

    test_valid[fork_Prague-blockchain_test-bls_g2map_-]
     test_valid[fork_Prague-blockchain_test-bls_g2map_616263-]
     test_valid[fork_Prague-blockchain_test-bls_g2map_6162636465663031-]
    diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/index.html
    index 2ce3102a8c..cf7acd17c5 100644
    --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/index.html
    +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13661,7 +13661,7 @@
     
     
     

    Test Bls12 Map Fp To G1

    -

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py.

    +

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/index/test_cases/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/index/test_cases/index.html index 6c4956e6f0..ef37cfdf9c 100644 --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/index/test_cases/index.html +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13620,7 +13620,7 @@

    Test Bls12 Map Fp To G1 - Test Cases

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py

    -

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_map_fp_to_g1.py:

    test_valid[fork_Prague-blockchain_test-bls_g1map_-]
     test_valid[fork_Prague-blockchain_test-bls_g1map_616263-]
     test_valid[fork_Prague-blockchain_test-bls_g1map_6162636465663031-]
    diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing/index.html
    index 89f575c7a4..63570b3f1f 100644
    --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing/index.html
    +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13652,7 +13652,7 @@
     
     
     

    Test Bls12 Pairing

    -

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py.

    +

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing/index/test_cases/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing/index/test_cases/index.html index 17fc47a68c..5289b941ac 100644 --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing/index/test_cases/index.html +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13620,7 +13620,7 @@

    Test Bls12 Pairing - Test Cases

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py

    -

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py:

    test_valid[fork_Prague-blockchain_test-bls_pairing_e(G1,0)=e(0,G2)-]
     test_valid[fork_Prague-blockchain_test-bls_pairing_non-degeneracy-]
     test_valid[fork_Prague-blockchain_test-bls_pairing_bilinearity-]
    diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork/index.html
    index ea454a2deb..08aecd9af5 100644
    --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork/index.html
    +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13634,7 +13634,7 @@
     
     
     

    Test Bls12 Precompiles Before Fork

    -

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork.py.

    +

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork/index/test_cases/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork/index/test_cases/index.html index 10ecf02efa..8a020f642a 100644 --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork/index/test_cases/index.html +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13620,7 +13620,7 @@

    Test Bls12 Precompiles Before Fork - Test Cases

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork.py

    -

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_precompiles_before_fork.py:

    test_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--G1ADD]
     test_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--G1MSM]
     test_precompile_before_fork[fork_CancunToPragueAtTime15k-blockchain_test--G1MUL]
    diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/index.html
    index 99f503753e..e48f90b89f 100644
    --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/index.html
    +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13706,7 +13706,7 @@
     
     
     

    Test Bls12 Variable Length Input Contracts

    -

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py.

    +

    Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/index/test_cases/index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/index/test_cases/index.html index dfbc976fbc..25c406160c 100644 --- a/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/index/test_cases/index.html +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13620,7 +13620,7 @@

    Test Bls12 Variable Length Input Contracts - Test Cases

    Test cases generated from tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py

    -

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip2537_bls_12_381_precompiles/test_bls12_variable_length_input_contracts.py:

    test_valid_gas_g1msm[fork_Prague-blockchain_test-precompile_address_13---exact_gas_full_discount_table]
     test_valid_gas_g1msm[fork_Prague-blockchain_test-precompile_address_13---one_extra_gas_full_discount_table]
     test_valid_gas_g1msm[fork_Prague-blockchain_test_engine-precompile_address_13---exact_gas_full_discount_table]
    diff --git a/main/tests/prague/eip2537_bls_12_381_precompiles/vectors/test-vectors./index.html b/main/tests/prague/eip2537_bls_12_381_precompiles/vectors/test-vectors./index.html
    index dbf39c19e5..d1dd89b644 100644
    --- a/main/tests/prague/eip2537_bls_12_381_precompiles/vectors/test-vectors./index.html
    +++ b/main/tests/prague/eip2537_bls_12_381_precompiles/vectors/test-vectors./index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    diff --git a/main/tests/prague/eip2935_historical_block_hashes_from_state/index.html b/main/tests/prague/eip2935_historical_block_hashes_from_state/index.html
    index d9579de10f..2db0e127b4 100644
    --- a/main/tests/prague/eip2935_historical_block_hashes_from_state/index.html
    +++ b/main/tests/prague/eip2935_historical_block_hashes_from_state/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    EIP-2935 Historical Block Hashes From State

    -

    Documentation for tests/prague/eip2935_historical_block_hashes_from_state.

    +

    Documentation for tests/prague/eip2935_historical_block_hashes_from_state.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip2935_historical_block_hashes_from_state/spec/index.html b/main/tests/prague/eip2935_historical_block_hashes_from_state/spec/index.html index 82c5f1a640..32fdbeb4d1 100644 --- a/main/tests/prague/eip2935_historical_block_hashes_from_state/spec/index.html +++ b/main/tests/prague/eip2935_historical_block_hashes_from_state/spec/index.html @@ -20,7 +20,7 @@ - + @@ -13690,7 +13690,7 @@

    Spec

    -

    Documentation for tests/prague/eip2935_historical_block_hashes_from_state/spec.py.

    +

    Documentation for tests/prague/eip2935_historical_block_hashes_from_state/spec.py.

    diff --git a/main/tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes/index.html b/main/tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes/index.html index 129ffd61c8..c54760dd93 100644 --- a/main/tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes/index.html +++ b/main/tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes/index.html @@ -20,7 +20,7 @@ - + @@ -13652,7 +13652,7 @@

    Test Block Hashes

    -

    Documentation for tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py.

    +

    Documentation for tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes/index/test_cases/index.html b/main/tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes/index/test_cases/index.html index e713dc470b..d3b7d0c842 100644 --- a/main/tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes/index/test_cases/index.html +++ b/main/tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13620,7 +13620,7 @@

    Test Block Hashes - Test Cases

    Test cases generated from tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py

    -

    Parametrized test cases generated from the test module tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip2935_historical_block_hashes_from_state/test_block_hashes.py:

    test_block_hashes_history_at_transition[fork_CancunToPragueAtTime15k-blockchain_test-blocks_before_fork_1-blocks_after_fork_2]
     test_block_hashes_history_at_transition[fork_CancunToPragueAtTime15k-blockchain_test-blocks_before_fork_257-blocks_after_fork_10]
     test_block_hashes_history_at_transition[fork_CancunToPragueAtTime15k-blockchain_test-blocks_before_fork_1-blocks_after_fork_257]
    diff --git a/main/tests/prague/eip6110_deposits/index.html b/main/tests/prague/eip6110_deposits/index.html
    index 1421d76a7d..b65de92307 100644
    --- a/main/tests/prague/eip6110_deposits/index.html
    +++ b/main/tests/prague/eip6110_deposits/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    EIP-6110 Deposits

    -

    Documentation for tests/prague/eip6110_deposits.

    +

    Documentation for tests/prague/eip6110_deposits.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip6110_deposits/spec/index.html b/main/tests/prague/eip6110_deposits/spec/index.html index 14dc609325..a62369a581 100644 --- a/main/tests/prague/eip6110_deposits/spec/index.html +++ b/main/tests/prague/eip6110_deposits/spec/index.html @@ -20,7 +20,7 @@ - + @@ -13690,7 +13690,7 @@

    Spec

    -

    Documentation for tests/prague/eip6110_deposits/spec.py.

    +

    Documentation for tests/prague/eip6110_deposits/spec.py.

    diff --git a/main/tests/prague/eip6110_deposits/test_deposits/index.html b/main/tests/prague/eip6110_deposits/test_deposits/index.html index 5b021875ab..1260d030d9 100644 --- a/main/tests/prague/eip6110_deposits/test_deposits/index.html +++ b/main/tests/prague/eip6110_deposits/test_deposits/index.html @@ -20,7 +20,7 @@ - + @@ -13643,7 +13643,7 @@

    Test Deposits

    -

    Documentation for tests/prague/eip6110_deposits/test_deposits.py.

    +

    Documentation for tests/prague/eip6110_deposits/test_deposits.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip6110_deposits/test_deposits/index/test_cases/index.html b/main/tests/prague/eip6110_deposits/test_deposits/index/test_cases/index.html index 50987cc047..82c6532273 100644 --- a/main/tests/prague/eip6110_deposits/test_deposits/index/test_cases/index.html +++ b/main/tests/prague/eip6110_deposits/test_deposits/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13620,7 +13620,7 @@

    Test Deposits - Test Cases

    Test cases generated from tests/prague/eip6110_deposits/test_deposits.py

    -

    Parametrized test cases generated from the test module tests/prague/eip6110_deposits/test_deposits.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip6110_deposits/test_deposits.py:

    test_deposit[fork_Prague-blockchain_test-single_deposit_from_eoa]
     test_deposit[fork_Prague-blockchain_test-single_deposit_from_eoa_huge_amount]
     test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa]
    diff --git a/main/tests/prague/eip7002_el_triggerable_withdrawals/index.html b/main/tests/prague/eip7002_el_triggerable_withdrawals/index.html
    index 0c0e4f0829..24f9f11b6a 100644
    --- a/main/tests/prague/eip7002_el_triggerable_withdrawals/index.html
    +++ b/main/tests/prague/eip7002_el_triggerable_withdrawals/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    EIP-7002 El Triggerable Withdrawals

    -

    Documentation for tests/prague/eip7002_el_triggerable_withdrawals.

    +

    Documentation for tests/prague/eip7002_el_triggerable_withdrawals.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7002_el_triggerable_withdrawals/spec/index.html b/main/tests/prague/eip7002_el_triggerable_withdrawals/spec/index.html index 2cc027808f..a12ecc1a0a 100644 --- a/main/tests/prague/eip7002_el_triggerable_withdrawals/spec/index.html +++ b/main/tests/prague/eip7002_el_triggerable_withdrawals/spec/index.html @@ -20,7 +20,7 @@ - + @@ -13690,7 +13690,7 @@

    Spec

    -

    Documentation for tests/prague/eip7002_el_triggerable_withdrawals/spec.py.

    +

    Documentation for tests/prague/eip7002_el_triggerable_withdrawals/spec.py.

    diff --git a/main/tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests/index.html b/main/tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests/index.html index 4b9dc0d662..d918fddb81 100644 --- a/main/tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests/index.html +++ b/main/tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests/index.html @@ -20,7 +20,7 @@ - + @@ -13643,7 +13643,7 @@

    Test Withdrawal Requests

    -

    Documentation for tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py.

    +

    Documentation for tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests/index/test_cases/index.html b/main/tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests/index/test_cases/index.html index 5873831250..0d2f202d38 100644 --- a/main/tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests/index/test_cases/index.html +++ b/main/tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13620,7 +13620,7 @@

    Test Withdrawal Requests - Test Cases

    Test cases generated from tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py:

    test_withdrawal_requests[fork_Prague-blockchain_test-single_block_single_withdrawal_request_from_eoa]
     test_withdrawal_requests[fork_Prague-blockchain_test-single_block_single_withdrawal_request_from_eoa_insufficient_fee]
     test_withdrawal_requests[fork_Prague-blockchain_test-single_block_single_withdrawal_request_from_eoa_input_too_short]
    diff --git a/main/tests/prague/eip7251_consolidations/index.html b/main/tests/prague/eip7251_consolidations/index.html
    index fe22a62a8b..35e2fcf9e9 100644
    --- a/main/tests/prague/eip7251_consolidations/index.html
    +++ b/main/tests/prague/eip7251_consolidations/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    EIP-7251 Consolidations

    -

    Documentation for tests/prague/eip7251_consolidations.

    +

    Documentation for tests/prague/eip7251_consolidations.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7251_consolidations/spec/index.html b/main/tests/prague/eip7251_consolidations/spec/index.html index 45320987db..98c3454e74 100644 --- a/main/tests/prague/eip7251_consolidations/spec/index.html +++ b/main/tests/prague/eip7251_consolidations/spec/index.html @@ -20,7 +20,7 @@ - + @@ -13690,7 +13690,7 @@

    Spec

    -

    Documentation for tests/prague/eip7251_consolidations/spec.py.

    +

    Documentation for tests/prague/eip7251_consolidations/spec.py.

    diff --git a/main/tests/prague/eip7251_consolidations/test_consolidations/index.html b/main/tests/prague/eip7251_consolidations/test_consolidations/index.html index a7cfda9b84..40001c1ac5 100644 --- a/main/tests/prague/eip7251_consolidations/test_consolidations/index.html +++ b/main/tests/prague/eip7251_consolidations/test_consolidations/index.html @@ -20,7 +20,7 @@ - + @@ -13643,7 +13643,7 @@

    Test Consolidations

    -

    Documentation for tests/prague/eip7251_consolidations/test_consolidations.py.

    +

    Documentation for tests/prague/eip7251_consolidations/test_consolidations.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7251_consolidations/test_consolidations/index/test_cases/index.html b/main/tests/prague/eip7251_consolidations/test_consolidations/index/test_cases/index.html index 012ed0f854..32fefbc8da 100644 --- a/main/tests/prague/eip7251_consolidations/test_consolidations/index/test_cases/index.html +++ b/main/tests/prague/eip7251_consolidations/test_consolidations/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13620,7 +13620,7 @@

    Test Consolidations - Test Cases

    Test cases generated from tests/prague/eip7251_consolidations/test_consolidations.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7251_consolidations/test_consolidations.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7251_consolidations/test_consolidations.py:

    test_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_eoa]
     test_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_eoa_equal_pubkeys]
     test_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_eoa_max_pubkeys]
    diff --git a/main/tests/prague/eip7685_general_purpose_el_requests/index.html b/main/tests/prague/eip7685_general_purpose_el_requests/index.html
    index c8cd66bbae..6eac68a642 100644
    --- a/main/tests/prague/eip7685_general_purpose_el_requests/index.html
    +++ b/main/tests/prague/eip7685_general_purpose_el_requests/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    EIP-7685 General Purpose El Requests

    -

    Documentation for tests/prague/eip7685_general_purpose_el_requests.

    +

    Documentation for tests/prague/eip7685_general_purpose_el_requests.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7685_general_purpose_el_requests/spec/index.html b/main/tests/prague/eip7685_general_purpose_el_requests/spec/index.html index cf13378bfd..8d6b95d4ba 100644 --- a/main/tests/prague/eip7685_general_purpose_el_requests/spec/index.html +++ b/main/tests/prague/eip7685_general_purpose_el_requests/spec/index.html @@ -20,7 +20,7 @@ - + @@ -13672,7 +13672,7 @@

    Spec

    -

    Documentation for tests/prague/eip7685_general_purpose_el_requests/spec.py.

    +

    Documentation for tests/prague/eip7685_general_purpose_el_requests/spec.py.

    diff --git a/main/tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations/index.html b/main/tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations/index.html index 90c2a231ce..0df8a4c583 100644 --- a/main/tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations/index.html +++ b/main/tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations/index.html @@ -20,7 +20,7 @@ - + @@ -13652,7 +13652,7 @@

    Test Deposits Withdrawals Consolidations

    -

    Documentation for tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py.

    +

    Documentation for tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations/index/test_cases/index.html b/main/tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations/index/test_cases/index.html index 7caafe954c..a3744ba674 100644 --- a/main/tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations/index/test_cases/index.html +++ b/main/tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13620,7 +13620,7 @@

    Test Deposits Withdrawals Consolidations - Test Cases

    Test cases generated from tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py:

    test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_eoa+withdrawal_from_eoa+consolidation_from_eoa]
     test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_eoa+consolidation_from_eoa+withdrawal_from_eoa]
     test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_eoa+deposit_from_eoa+consolidation_from_eoa]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/index.html
    index 47241201b1..cc50ce118a 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13625,7 +13625,7 @@
     
     
     

    EIP-3540 Eof V1

    -

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/spec/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/spec/index.html index 7821621834..28a6befec8 100644 --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/spec/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/spec/index.html @@ -20,7 +20,7 @@ - + @@ -13674,7 +13674,7 @@

    Spec

    -

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/spec.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/spec.py.

    diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/index.html index c7009c5908..f2151545a1 100644 --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/index.html @@ -20,7 +20,7 @@ - + @@ -13681,7 +13681,7 @@

    Test All Opcodes In Container

    -

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/index/test_cases/index.html index 38367dc1e5..a817799089 100644 --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test All Opcodes In Container - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py:

    test_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_STOP]
     test_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_ADD]
     test_all_opcodes_in_container[fork_CancunEIP7692-eof_test-opcode_MUL]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation/index.html
    index 918d858d3c..03d96b113b 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13645,7 +13645,7 @@
     
     
     

    Test Code Validation

    -

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation/index/test_cases/index.html index aacedc4a6e..0fd09687ea 100644 --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Code Validation - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_code_validation.py:

    test_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_max_stack_size]
     test_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_input_maximum]
     test_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-single_code_section_output_maximum]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size/index.html
    index e0a71d7fd5..66067076e5 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13654,7 +13654,7 @@
     
     
     

    Test Container Size

    -

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size/index/test_cases/index.html index 816fc4cb62..7acf42456a 100644 --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Container Size - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_size.py:

    test_max_size[fork_CancunEIP7692-eof_test-over_limit_0]
     test_max_size[fork_CancunEIP7692-eof_test-over_limit_1]
     test_max_size[fork_CancunEIP7692-eof_test-over_limit_2]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/index.html
    index 88b0766ec0..cc9dec31c9 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13663,7 +13663,7 @@
     
     
     

    Test Container Validation

    -

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/index/test_cases/index.html index 5e2815cba2..ecfb3c906b 100644 --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Container Validation - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py:

    test_magic_validation[fork_CancunEIP7692-eof_test-magic_1_0-magic_0_0]
     test_magic_validation[fork_CancunEIP7692-eof_test-magic_1_0-magic_0_1]
     test_magic_validation[fork_CancunEIP7692-eof_test-magic_1_0-magic_0_238]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example/index.html
    index f8f6b571de..9ce378221a 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13654,7 +13654,7 @@
     
     
     

    Test Eof Example

    -

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example/index/test_cases/index.html index 2104539805..e2ed272931 100644 --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Eof Example - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_eof_example.py:

    test_eof_example[fork_CancunEIP7692-eof_test]
     test_eof_example_custom_fields[fork_CancunEIP7692-eof_test]
     test_eof_example_parameters[fork_CancunEIP7692-eof_test-code_section_code_-exception_None-data_section_bytes_b'\x01']
    diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function/index.html
    index 2b8c4fc935..f22c3e569d 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13654,7 +13654,7 @@
     
     
     

    Test Execution Function

    -

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function/index/test_cases/index.html index 6b80729be2..0da573516a 100644 --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Execution Function - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_execution_function.py:

    test_eof_functions_contract_call_succeed[fork_CancunEIP7692-blockchain_test-function_finishes_contract_execution]
     test_eof_functions_contract_call_succeed[fork_CancunEIP7692-blockchain_test-max_recursive_callf]
     test_eof_functions_contract_call_succeed[fork_CancunEIP7692-blockchain_test-max_recursive_callf_sstore]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode/index.html
    index a11065694a..63cb42e0a4 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13636,7 +13636,7 @@
     
     
     

    Test Extcode

    -

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode/index/test_cases/index.html index efa5870941..3179e55713 100644 --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Extcode - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py:

    test_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test]
     test_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test_engine]
     test_legacy_calls_eof_sstore[fork_CancunEIP7692-state_test]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid/index.html
    index e58efe9985..bce88c593f 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13636,7 +13636,7 @@
     
     
     

    Test Migrated Valid Invalid

    -

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid/index/test_cases/index.html index 161754d292..d76d1059e3 100644 --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Migrated Valid Invalid - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_migrated_valid_invalid.py:

    test_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1V3540_0001_deployed_code_without_data_section]
     test_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1V3540_0002_deployed_code_with_data_section]
     test_migrated_valid_invalid[fork_CancunEIP7692-eof_test-EOF1V3540_0003_no_data_section_contents]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch/index.html
    index e36afb78ff..c121bf238f 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13636,7 +13636,7 @@
     
     
     

    Test Section Header Body Mismatch

    -

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch/index/test_cases/index.html index d97e7c9cf9..7f6153ca73 100644 --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Section Header Body Mismatch - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_header_body_mismatch.py:

    test_code_section_header_body_mismatch[fork_CancunEIP7692-eof_test-drop_code_section_and_header]
     test_code_section_header_body_mismatch[fork_CancunEIP7692-eof_test-drop_code_header]
     test_code_section_header_body_mismatch[fork_CancunEIP7692-eof_test-drop_code_section]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order/index.html
    index 38daf6b76c..be6e22e8f8 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13645,7 +13645,7 @@
     
     
     

    Test Section Order

    -

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order/index/test_cases/index.html index e49a499726..ebcfdd3c10 100644 --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Section Order - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py:

    test_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-section_test_SectionTest.MISSING-section_kind_TYPE]
     test_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-section_test_SectionTest.MISSING-section_kind_CODE]
     test_section_order[fork_CancunEIP7692-eof_test-test_position_CasePosition.BODY-section_test_SectionTest.MISSING-section_kind_DATA]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size/index.html
    index 9cfeac1f85..51dc0e1696 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13654,7 +13654,7 @@
     
     
     

    Test Section Size

    -

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size/index/test_cases/index.html index f1b46f5bfc..93bfc9095e 100644 --- a/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Section Size - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_size.py:

    test_section_size[fork_CancunEIP7692-eof_test-section_kind_DATA-section_size_NORMAL-exception_None]
     test_section_size[fork_CancunEIP7692-eof_test-section_kind_DATA-section_size_ZERO-exception_EOFException.INVALID_SECTION_BODIES_SIZE]
     test_section_size[fork_CancunEIP7692-eof_test-section_kind_DATA-section_size_UNDERSIZE-exception_EOFException.INVALID_SECTION_BODIES_SIZE]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/index.html b/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/index.html
    index f740244bc4..e1f5020b0a 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13625,7 +13625,7 @@
     
     
     

    EIP-4200 Relative Jumps

    -

    Documentation for tests/prague/eip7692_eof_v1/eip4200_relative_jumps.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip4200_relative_jumps.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/index.html b/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/index.html index 2d2ab2ca7f..87231d5a43 100644 --- a/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/index.html @@ -20,7 +20,7 @@ - + @@ -13951,7 +13951,7 @@

    Test Rjump

    -

    Documentation for tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/index/test_cases/index.html index 8e1976c966..266a72813c 100644 --- a/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Rjump - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjump.py:

    test_rjump_positive_negative[fork_CancunEIP7692-eof_test]
     test_rjump_positive_negative[fork_CancunEIP7692-state_test]
     test_rjump_positive_negative[fork_CancunEIP7692-blockchain_test]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/index.html b/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/index.html
    index faa7b4d128..6a88508c92 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13960,7 +13960,7 @@
     
     
     

    Test Rjumpi

    -

    Documentation for tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/index/test_cases/index.html index 36767f5f96..21ba3120ae 100644 --- a/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Rjumpi - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py:

    test_rjumpi_condition_forwards[fork_CancunEIP7692-blockchain_test-False]
     test_rjumpi_condition_forwards[fork_CancunEIP7692-blockchain_test-True]
     test_rjumpi_condition_forwards[fork_CancunEIP7692-blockchain_test_engine-False]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/index.html b/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/index.html
    index 2f4363828b..e263b1b603 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13960,7 +13960,7 @@
     
     
     

    Test Rjumpv

    -

    Documentation for tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/index/test_cases/index.html index 13e68d9f42..b493c2839b 100644 --- a/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Rjumpv - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py:

    test_rjumpv_condition[fork_CancunEIP7692-eof_test-t1-c0]
     test_rjumpv_condition[fork_CancunEIP7692-eof_test-t1-c1]
     test_rjumpv_condition[fork_CancunEIP7692-eof_test-t1-c3]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip4750_functions/index.html b/main/tests/prague/eip7692_eof_v1/eip4750_functions/index.html
    index 3e6b9a2fcc..2e19ab333b 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip4750_functions/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip4750_functions/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13625,7 +13625,7 @@
     
     
     

    EIP-4750 Functions

    -

    Documentation for tests/prague/eip7692_eof_v1/eip4750_functions.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip4750_functions.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/index.html b/main/tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/index.html index 38aa2d42b8..7aeb4dec14 100644 --- a/main/tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/index.html @@ -20,7 +20,7 @@ - + @@ -13690,7 +13690,7 @@

    Test Callf Execution

    -

    Documentation for tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/index/test_cases/index.html index 3ea9a366aa..1f7e38e8f5 100644 --- a/main/tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Callf Execution - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip4750_functions/test_callf_execution.py:

    test_callf_stack_size_1024[fork_CancunEIP7692-eof_test]
     test_callf_stack_size_1024[fork_CancunEIP7692-state_test]
     test_callf_stack_size_1024[fork_CancunEIP7692-blockchain_test]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation/index.html b/main/tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation/index.html
    index b46157ba20..e7882a50db 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13636,7 +13636,7 @@
     
     
     

    Test Code Validation

    -

    Documentation for tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation/index/test_cases/index.html index c08c1638a2..69c4459c3f 100644 --- a/main/tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Code Validation - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip4750_functions/test_code_validation.py:

    test_eof_validity[fork_CancunEIP7692-eof_test-retf_code_input_output]
     test_eof_validity[fork_CancunEIP7692-eof_test-stack_height_equal_code_outputs_retf_zero_stop]
     test_eof_validity[fork_CancunEIP7692-eof_test-callf_max_code_sections_1]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/index.html b/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/index.html
    index 2e15aa1cc0..47e60e55e8 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13625,7 +13625,7 @@
     
     
     

    EIP-6206 Jumpf

    -

    Documentation for tests/prague/eip7692_eof_v1/eip6206_jumpf.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip6206_jumpf.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/spec/index.html b/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/spec/index.html index a700f11ebd..afca7c1dea 100644 --- a/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/spec/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/spec/index.html @@ -20,7 +20,7 @@ - + @@ -13674,7 +13674,7 @@

    Spec

    -

    Documentation for tests/prague/eip7692_eof_v1/eip6206_jumpf/spec.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip6206_jumpf/spec.py.

    diff --git a/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/index.html b/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/index.html index 0ea242c855..5ec1f9bb39 100644 --- a/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/index.html @@ -20,7 +20,7 @@ - + @@ -13744,7 +13744,7 @@

    Test Jumpf Execution

    -

    Documentation for tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/index/test_cases/index.html index 0389a94d78..70bbe75d24 100644 --- a/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Jumpf Execution - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_execution.py:

    test_jumpf_forward[fork_CancunEIP7692-eof_test]
     test_jumpf_forward[fork_CancunEIP7692-state_test]
     test_jumpf_forward[fork_CancunEIP7692-blockchain_test]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack/index.html b/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack/index.html
    index 55fc61232d..f09c84ca6d 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13645,7 +13645,7 @@
     
     
     

    Test Jumpf Stack

    -

    Documentation for tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack/index/test_cases/index.html index 08d61d27e6..9dbae11503 100644 --- a/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Jumpf Stack - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py:

    test_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-0-ti-0]
     test_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-0-ti-2]
     test_jumpf_stack_non_returning_rules[fork_CancunEIP7692-eof_test-h-0-ti-4]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target/index.html b/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target/index.html
    index 3f87e1e8a8..629b258364 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13645,7 +13645,7 @@
     
     
     

    Test Jumpf Target

    -

    Documentation for tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target/index/test_cases/index.html index 9aeb017554..ea149de628 100644 --- a/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Jumpf Target - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_target.py:

    test_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-N-to-N]
     test_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-N-to-0]
     test_jumpf_target_rules[fork_CancunEIP7692-eof_test-so-N-to-2]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/index.html b/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/index.html
    index deea6a1469..daad50f524 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13625,7 +13625,7 @@
     
     
     

    EIP-663 DUPn Swapn Exchange

    -

    Documentation for tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn/index.html b/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn/index.html index 4c08511c8d..db2eec5f5f 100644 --- a/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn/index.html @@ -20,7 +20,7 @@ - + @@ -13654,7 +13654,7 @@

    Test DUPn

    -

    Documentation for tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn/index/test_cases/index.html index 60c2aba22b..c3a3c39be6 100644 --- a/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test DUPn - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_dupn.py:

    test_dupn_all_valid_immediates[fork_CancunEIP7692-eof_test]
     test_dupn_all_valid_immediates[fork_CancunEIP7692-state_test]
     test_dupn_all_valid_immediates[fork_CancunEIP7692-blockchain_test]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange/index.html b/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange/index.html
    index ce5dd4ca6b..17eced601f 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13645,7 +13645,7 @@
     
     
     

    Test Exchange

    -

    Documentation for tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange/index/test_cases/index.html index 9255cd9f96..39201eaa68 100644 --- a/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Exchange - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_exchange.py:

    test_exchange_all_valid_immediates[fork_CancunEIP7692-eof_test]
     test_exchange_all_valid_immediates[fork_CancunEIP7692-state_test]
     test_exchange_all_valid_immediates[fork_CancunEIP7692-blockchain_test]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn/index.html b/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn/index.html
    index 115923242f..f4bbec58de 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13654,7 +13654,7 @@
     
     
     

    Test Swapn

    -

    Documentation for tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn/index/test_cases/index.html index 406d62f351..44511db6e8 100644 --- a/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Swapn - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip663_dupn_swapn_exchange/test_swapn.py:

    test_swapn_all_valid_immediates[fork_CancunEIP7692-eof_test]
     test_swapn_all_valid_immediates[fork_CancunEIP7692-state_test]
     test_swapn_all_valid_immediates[fork_CancunEIP7692-blockchain_test]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/index.html b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/index.html
    index 2f5ee840b9..712e5ecb89 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13625,7 +13625,7 @@
     
     
     

    EIP-7069 Extcall

    -

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/spec/index.html b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/spec/index.html index c60817b2c8..334d038187 100644 --- a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/spec/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/spec/index.html @@ -20,7 +20,7 @@ - + @@ -13674,7 +13674,7 @@

    Spec

    -

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/spec.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/spec.py.

    diff --git a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension/index.html b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension/index.html index 26dbe284e7..65c1344d8c 100644 --- a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension/index.html @@ -20,7 +20,7 @@ - + @@ -13636,7 +13636,7 @@

    Test Address Space Extension

    -

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension/index/test_cases/index.html index 3e37a31fc2..9ff6b14150 100644 --- a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Address Space Extension - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_address_space_extension.py:

    test_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-empty-zero]
     test_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-empty-short]
     test_address_space_extension[fork_CancunEIP7692-blockchain_test-target_opcode_CALL-empty-mid_20]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/index.html b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/index.html
    index 485ff36c3d..6074acc1f9 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13663,7 +13663,7 @@
     
     
     

    Test Calldata

    -

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/index/test_cases/index.html index eda3075fec..8d5bb2ed47 100644 --- a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Calldata - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_calldata.py:

    test_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_0-value_0]
     test_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_0-value_1]
     test_extcalls_inputdata[fork_CancunEIP7692-blockchain_test-length_0-offset_0-size_16-value_0]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/index.html b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/index.html
    index b4c2ceed38..29d6c809c6 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13744,7 +13744,7 @@
     
     
     

    Test Calls

    -

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/index/test_cases/index.html index 141b881453..568baada1d 100644 --- a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Calls - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_calls.py:

    test_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test-opcode_CALL]
     test_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test-opcode_DELEGATECALL]
     test_legacy_calls_eof_sstore[fork_CancunEIP7692-blockchain_test-opcode_CALLCODE]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas/index.html b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas/index.html
    index 627944666d..7d932b0441 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13636,7 +13636,7 @@
     
     
     

    Test Gas

    -

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas/index/test_cases/index.html index fc9c5fe8a6..0e6d496747 100644 --- a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Gas - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_gas.py:

    test_ext_calls_gas[fork_CancunEIP7692-blockchain_test-EXTCALL]
     test_ext_calls_gas[fork_CancunEIP7692-blockchain_test-EXTCALL_with_value]
     test_ext_calls_gas[fork_CancunEIP7692-blockchain_test-EXTSTATICCALL]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion/index.html b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion/index.html
    index e386a6487c..69095c0f8b 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13645,7 +13645,7 @@
     
     
     

    Test Returndatacopy Memory Expansion

    -

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion/index/test_cases/index.html index a6b4546a58..a166fa84de 100644 --- a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Returndatacopy Memory Expansion - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndatacopy_memory_expansion.py:

    test_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-single_byte_expansion]
     test_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_2]
     test_returndatacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload/index.html b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload/index.html
    index 0d96b36c1c..985d605ad7 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13654,7 +13654,7 @@
     
     
     

    Test Returndataload

    -

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload/index/test_cases/index.html index ec35ec9e19..bb5feefe23 100644 --- a/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Returndataload - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7069_extcall/test_returndataload.py:

    test_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_0-opcode_CALL]
     test_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_0-opcode_CALLCODE]
     test_returndatacopy_handling[fork_CancunEIP7692-blockchain_test-size_0-offset_0-len_0-opcode_DELEGATECALL]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip7480_data_section/index.html b/main/tests/prague/eip7692_eof_v1/eip7480_data_section/index.html
    index 1494a68937..29c63feee7 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip7480_data_section/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip7480_data_section/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13625,7 +13625,7 @@
     
     
     

    EIP-7480 Data Section

    -

    Documentation for tests/prague/eip7692_eof_v1/eip7480_data_section.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip7480_data_section.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip7480_data_section/spec/index.html b/main/tests/prague/eip7692_eof_v1/eip7480_data_section/spec/index.html index e349304c38..fbf5db2e9e 100644 --- a/main/tests/prague/eip7692_eof_v1/eip7480_data_section/spec/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip7480_data_section/spec/index.html @@ -20,7 +20,7 @@ - + @@ -13674,7 +13674,7 @@

    Spec

    -

    Documentation for tests/prague/eip7692_eof_v1/eip7480_data_section/spec.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip7480_data_section/spec.py.

    diff --git a/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation/index.html b/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation/index.html index c9fac07698..ed8592e9f1 100644 --- a/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation/index.html @@ -20,7 +20,7 @@ - + @@ -13645,7 +13645,7 @@

    Test Code Validation

    -

    Documentation for tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation/index/test_cases/index.html index 768100952d..6a8eb0df01 100644 --- a/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Code Validation - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7480_data_section/test_code_validation.py:

    test_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-empty_data_section]
     test_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-small_data_section]
     test_legacy_initcode_valid_eof_v1_contract[fork_CancunEIP7692-eof_test-large_data_section]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes/index.html b/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes/index.html
    index 097f1aaa46..ab1aa62032 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13636,7 +13636,7 @@
     
     
     

    Test Data Opcodes

    -

    Documentation for tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes/index/test_cases/index.html index aeccda0df8..4cce0aeefa 100644 --- a/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Data Opcodes - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7480_data_section/test_data_opcodes.py:

    test_data_section_succeed[fork_CancunEIP7692-blockchain_test-empty_zero]
     test_data_section_succeed[fork_CancunEIP7692-blockchain_test-short_zero]
     test_data_section_succeed[fork_CancunEIP7692-blockchain_test-exact_zero]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion/index.html b/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion/index.html
    index 3f393b7ae6..6ba4bb44e0 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13645,7 +13645,7 @@
     
     
     

    Test Datacopy Memory Expansion

    -

    Documentation for tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion/index/test_cases/index.html index 7570ff6780..daed5d982c 100644 --- a/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Datacopy Memory Expansion - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7480_data_section/test_datacopy_memory_expansion.py:

    test_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-single_byte_expansion]
     test_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-single_byte_expansion_2]
     test_datacopy_memory_expansion[fork_CancunEIP7692-blockchain_test-empty_data_section-from_existent_memory-successful_True-single_byte_expansion_word_boundary]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/index.html b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/index.html
    index baf63fd2fd..2f205c86f9 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13625,7 +13625,7 @@
     
     
     

    EIP-7620 Eof Create

    -

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/spec/index.html b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/spec/index.html index fcca6a2b4a..00558d7ae0 100644 --- a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/spec/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/spec/index.html @@ -20,7 +20,7 @@ - + @@ -13674,7 +13674,7 @@

    Spec

    -

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/spec.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/spec.py.

    diff --git a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/index.html b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/index.html index d505592dc4..972d235f49 100644 --- a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/index.html @@ -20,7 +20,7 @@ - + @@ -13717,7 +13717,7 @@

    Test Eofcreate

    -

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/index/test_cases/index.html index 7702df2c0b..65acf7f252 100644 --- a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Eofcreate - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate.py:

    test_simple_eofcreate[fork_CancunEIP7692-blockchain_test]
     test_simple_eofcreate[fork_CancunEIP7692-blockchain_test_engine]
     test_simple_eofcreate[fork_CancunEIP7692-state_test]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/index.html b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/index.html
    index 9acdef4627..3508fe5df1 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13726,7 +13726,7 @@
     
     
     

    Test Eofcreate Failures

    -

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/index/test_cases/index.html index f56c4e5220..628f2cbea9 100644 --- a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Eofcreate Failures - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7620_eof_create/test_eofcreate_failures.py:

    test_initcode_revert[fork_CancunEIP7692-blockchain_test-empty]
     test_initcode_revert[fork_CancunEIP7692-blockchain_test-Error(string)]
     test_initcode_revert[fork_CancunEIP7692-blockchain_test_engine-empty]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates/index.html b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates/index.html
    index 7821d3859f..ec3ff87356 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13645,7 +13645,7 @@
     
     
     

    Test Legacy Eof Creates

    -

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates/index/test_cases/index.html index edd2603350..c79eeb92b6 100644 --- a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Legacy Eof Creates - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py:

    test_cross_version_creates_fail[fork_CancunEIP7692-blockchain_test-deploy_eof_initcontainer-CREATE]
     test_cross_version_creates_fail[fork_CancunEIP7692-blockchain_test-deploy_eof_initcontainer-CREATE2]
     test_cross_version_creates_fail[fork_CancunEIP7692-blockchain_test-deploy_eof_container-CREATE]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/index.html b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/index.html
    index e197d6c617..6843825d31 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13699,7 +13699,7 @@
     
     
     

    Test Returncontract

    -

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/index/test_cases/index.html index 252ef6d00a..1ce0e3b72f 100644 --- a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Returncontract - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py:

    test_returncontract_valid_index_0[fork_CancunEIP7692-eof_test]
     test_returncontract_valid_index_1[fork_CancunEIP7692-eof_test]
     test_returncontract_valid_index_255[fork_CancunEIP7692-eof_test]
    diff --git a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/index.html b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/index.html
    index 7c17432a12..a8c8a668e7 100644
    --- a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13780,7 +13780,7 @@
     
     
     

    Test Subcontainer Validation

    -

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py.

    +

    Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/index/test_cases/index.html b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/index/test_cases/index.html index 758b6c359d..82fef7e8a4 100644 --- a/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/index/test_cases/index.html +++ b/main/tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13622,7 +13622,7 @@

    Test Subcontainer Validation - Test Cases

    Test cases generated from tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py:

    test_simple_create_from_deployed[fork_CancunEIP7692-eof_test]
     test_simple_create_from_deployed[fork_CancunEIP7692-state_test]
     test_simple_create_from_deployed[fork_CancunEIP7692-blockchain_test]
    diff --git a/main/tests/prague/eip7692_eof_v1/index.html b/main/tests/prague/eip7692_eof_v1/index.html
    index e259aaa255..ffea994899 100644
    --- a/main/tests/prague/eip7692_eof_v1/index.html
    +++ b/main/tests/prague/eip7692_eof_v1/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    EIP-7692 Eof V1

    -

    Documentation for tests/prague/eip7692_eof_v1.

    +

    Documentation for tests/prague/eip7692_eof_v1.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7692_eof_v1/tracker./index.html b/main/tests/prague/eip7692_eof_v1/tracker./index.html index 0250a076ae..6fbec3d116 100644 --- a/main/tests/prague/eip7692_eof_v1/tracker./index.html +++ b/main/tests/prague/eip7692_eof_v1/tracker./index.html @@ -20,7 +20,7 @@ - + diff --git a/main/tests/prague/eip7702_eoa_code_tx/index.html b/main/tests/prague/eip7702_eoa_code_tx/index.html index 974c2262d9..2628eaa3f7 100644 --- a/main/tests/prague/eip7702_eoa_code_tx/index.html +++ b/main/tests/prague/eip7702_eoa_code_tx/index.html @@ -20,7 +20,7 @@ - + @@ -13623,7 +13623,7 @@

    EIP-7702 Eoa Code Tx

    -

    Documentation for tests/prague/eip7702_eoa_code_tx.

    +

    Documentation for tests/prague/eip7702_eoa_code_tx.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7702_eoa_code_tx/spec/index.html b/main/tests/prague/eip7702_eoa_code_tx/spec/index.html index a2f551daf6..00cdf99950 100644 --- a/main/tests/prague/eip7702_eoa_code_tx/spec/index.html +++ b/main/tests/prague/eip7702_eoa_code_tx/spec/index.html @@ -20,7 +20,7 @@ - + @@ -13690,7 +13690,7 @@

    Spec

    -

    Documentation for tests/prague/eip7702_eoa_code_tx/spec.py.

    +

    Documentation for tests/prague/eip7702_eoa_code_tx/spec.py.

    diff --git a/main/tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/index.html b/main/tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/index.html index 8484093e69..2e9fb4e896 100644 --- a/main/tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/index.html +++ b/main/tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/index.html @@ -20,7 +20,7 @@ - + @@ -13751,7 +13751,7 @@

    Test Eoa Code Txs

    -

    Documentation for tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py.

    +

    Documentation for tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/index/test_cases/index.html b/main/tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/index/test_cases/index.html index d4598c2f41..33e5b7e336 100644 --- a/main/tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/index/test_cases/index.html +++ b/main/tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs/index/test_cases/index.html @@ -20,7 +20,7 @@ - + @@ -13620,7 +13620,7 @@

    Test Eoa Code Txs - Test Cases

    Test cases generated from tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py

    -

    Parametrized test cases generated from the test module tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py:

    +

    Parametrized test cases generated from the test module tests/prague/eip7702_eoa_code_tx/test_eoa_code_txs.py:

    test_set_code_to_sstore[fork_Prague-blockchain_test-stop-eoa_balance_0]
     test_set_code_to_sstore[fork_Prague-blockchain_test-stop-eoa_balance_1]
     test_set_code_to_sstore[fork_Prague-blockchain_test-return-eoa_balance_0]
    diff --git a/main/tests/prague/index.html b/main/tests/prague/index.html
    index f50f6645be..5a836e3d9f 100644
    --- a/main/tests/prague/index.html
    +++ b/main/tests/prague/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13621,7 +13621,7 @@
     
     
     

    Prague

    -

    Documentation for tests/prague.

    +

    Documentation for tests/prague.

    Generate fixtures for these test cases for Prague with:

    Prague only: diff --git a/main/tests/shanghai/eip3651_warm_coinbase/index.html b/main/tests/shanghai/eip3651_warm_coinbase/index.html index e92a710b4d..fa58ae7066 100644 --- a/main/tests/shanghai/eip3651_warm_coinbase/index.html +++ b/main/tests/shanghai/eip3651_warm_coinbase/index.html @@ -20,7 +20,7 @@ - + @@ -13623,7 +13623,7 @@

    EIP-3651 Warm Coinbase

    -

    Documentation for tests/shanghai/eip3651_warm_coinbase.

    +

    Documentation for tests/shanghai/eip3651_warm_coinbase.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip3651_warm_coinbase
    diff --git a/main/tests/shanghai/eip3651_warm_coinbase/spec/index.html b/main/tests/shanghai/eip3651_warm_coinbase/spec/index.html
    index 7971a01032..3a00176d88 100644
    --- a/main/tests/shanghai/eip3651_warm_coinbase/spec/index.html
    +++ b/main/tests/shanghai/eip3651_warm_coinbase/spec/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13672,7 +13672,7 @@
     
     
     

    Spec

    -

    Documentation for tests/shanghai/eip3651_warm_coinbase/spec.py.

    +

    Documentation for tests/shanghai/eip3651_warm_coinbase/spec.py.

    diff --git a/main/tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase/index.html b/main/tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase/index.html index e6f0428c57..7719f9f4c5 100644 --- a/main/tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase/index.html +++ b/main/tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase/index.html @@ -20,7 +20,7 @@ - + @@ -13643,7 +13643,7 @@

    Test Warm Coinbase

    -

    Documentation for tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py.

    +

    Documentation for tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py
    diff --git a/main/tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase/index/test_cases/index.html b/main/tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase/index/test_cases/index.html
    index 2fa840dfe9..d0dcef1621 100644
    --- a/main/tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase/index/test_cases/index.html
    +++ b/main/tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Warm Coinbase - Test Cases

    Test cases generated from tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py

    -

    Parametrized test cases generated from the test module tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py:

    +

    Parametrized test cases generated from the test module tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py:

    test_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-CALL-sufficient_gas]
     test_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-CALL-insufficient_gas]
     test_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-CALLCODE-sufficient_gas]
    diff --git a/main/tests/shanghai/eip3855_push0/index.html b/main/tests/shanghai/eip3855_push0/index.html
    index c4e5c81d2c..d927662683 100644
    --- a/main/tests/shanghai/eip3855_push0/index.html
    +++ b/main/tests/shanghai/eip3855_push0/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    EIP-3855 Push0

    -

    Documentation for tests/shanghai/eip3855_push0.

    +

    Documentation for tests/shanghai/eip3855_push0.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip3855_push0
    diff --git a/main/tests/shanghai/eip3855_push0/spec/index.html b/main/tests/shanghai/eip3855_push0/spec/index.html
    index 089f391940..2e0a77d8b6 100644
    --- a/main/tests/shanghai/eip3855_push0/spec/index.html
    +++ b/main/tests/shanghai/eip3855_push0/spec/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13672,7 +13672,7 @@
     
     
     

    Spec

    -

    Documentation for tests/shanghai/eip3855_push0/spec.py.

    +

    Documentation for tests/shanghai/eip3855_push0/spec.py.

    diff --git a/main/tests/shanghai/eip3855_push0/test_push0/index.html b/main/tests/shanghai/eip3855_push0/test_push0/index.html index 25b6acf3c1..c06741770b 100644 --- a/main/tests/shanghai/eip3855_push0/test_push0/index.html +++ b/main/tests/shanghai/eip3855_push0/test_push0/index.html @@ -20,7 +20,7 @@ - + @@ -13658,7 +13658,7 @@

    Test Push0

    -

    Documentation for tests/shanghai/eip3855_push0/test_push0.py.

    +

    Documentation for tests/shanghai/eip3855_push0/test_push0.py.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip3855_push0/test_push0.py
    diff --git a/main/tests/shanghai/eip3855_push0/test_push0/index/test_cases/index.html b/main/tests/shanghai/eip3855_push0/test_push0/index/test_cases/index.html
    index 74e9f729fa..d11ab105d5 100644
    --- a/main/tests/shanghai/eip3855_push0/test_push0/index/test_cases/index.html
    +++ b/main/tests/shanghai/eip3855_push0/test_push0/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Push0 - Test Cases

    Test cases generated from tests/shanghai/eip3855_push0/test_push0.py

    -

    Parametrized test cases generated from the test module tests/shanghai/eip3855_push0/test_push0.py:

    +

    Parametrized test cases generated from the test module tests/shanghai/eip3855_push0/test_push0.py:

    test_push0_contracts[fork_Shanghai-blockchain_test-key_sstore]
     test_push0_contracts[fork_Shanghai-blockchain_test-fill_stack]
     test_push0_contracts[fork_Shanghai-blockchain_test-stack_overflow]
    diff --git a/main/tests/shanghai/eip3860_initcode/index.html b/main/tests/shanghai/eip3860_initcode/index.html
    index 2e652c28b3..24c88d950b 100644
    --- a/main/tests/shanghai/eip3860_initcode/index.html
    +++ b/main/tests/shanghai/eip3860_initcode/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    EIP-3860 Initcode

    -

    Documentation for tests/shanghai/eip3860_initcode.

    +

    Documentation for tests/shanghai/eip3860_initcode.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip3860_initcode
    diff --git a/main/tests/shanghai/eip3860_initcode/spec/index.html b/main/tests/shanghai/eip3860_initcode/spec/index.html
    index 7357a50e0d..89c721e5e4 100644
    --- a/main/tests/shanghai/eip3860_initcode/spec/index.html
    +++ b/main/tests/shanghai/eip3860_initcode/spec/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13690,7 +13690,7 @@
     
     
     

    Spec

    -

    Documentation for tests/shanghai/eip3860_initcode/spec.py.

    +

    Documentation for tests/shanghai/eip3860_initcode/spec.py.

    diff --git a/main/tests/shanghai/eip3860_initcode/test_initcode/index.html b/main/tests/shanghai/eip3860_initcode/test_initcode/index.html index 535547a518..ea44e31157 100644 --- a/main/tests/shanghai/eip3860_initcode/test_initcode/index.html +++ b/main/tests/shanghai/eip3860_initcode/test_initcode/index.html @@ -20,7 +20,7 @@ - + @@ -13682,7 +13682,7 @@

    Test Initcode

    -

    Documentation for tests/shanghai/eip3860_initcode/test_initcode.py.

    +

    Documentation for tests/shanghai/eip3860_initcode/test_initcode.py.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip3860_initcode/test_initcode.py
    diff --git a/main/tests/shanghai/eip3860_initcode/test_initcode/index/test_cases/index.html b/main/tests/shanghai/eip3860_initcode/test_initcode/index/test_cases/index.html
    index 5e7fce6c18..7639e4eec1 100644
    --- a/main/tests/shanghai/eip3860_initcode/test_initcode/index/test_cases/index.html
    +++ b/main/tests/shanghai/eip3860_initcode/test_initcode/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Initcode - Test Cases

    Test cases generated from tests/shanghai/eip3860_initcode/test_initcode.py

    -

    Parametrized test cases generated from the test module tests/shanghai/eip3860_initcode/test_initcode.py:

    +

    Parametrized test cases generated from the test module tests/shanghai/eip3860_initcode/test_initcode.py:

    test_contract_creating_tx[fork_Shanghai-blockchain_test-max_size_zeros]
     test_contract_creating_tx[fork_Shanghai-blockchain_test-max_size_ones]
     test_contract_creating_tx[fork_Shanghai-blockchain_test-over_limit_zeros]
    diff --git a/main/tests/shanghai/eip4895_withdrawals/index.html b/main/tests/shanghai/eip4895_withdrawals/index.html
    index 5acdcda906..11a0993033 100644
    --- a/main/tests/shanghai/eip4895_withdrawals/index.html
    +++ b/main/tests/shanghai/eip4895_withdrawals/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13623,7 +13623,7 @@
     
     
     

    EIP-4895 Withdrawals

    -

    Documentation for tests/shanghai/eip4895_withdrawals.

    +

    Documentation for tests/shanghai/eip4895_withdrawals.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip4895_withdrawals
    diff --git a/main/tests/shanghai/eip4895_withdrawals/spec/index.html b/main/tests/shanghai/eip4895_withdrawals/spec/index.html
    index 0da85f753c..61eeba1fe5 100644
    --- a/main/tests/shanghai/eip4895_withdrawals/spec/index.html
    +++ b/main/tests/shanghai/eip4895_withdrawals/spec/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13672,7 +13672,7 @@
     
     
     

    Spec

    -

    Documentation for tests/shanghai/eip4895_withdrawals/spec.py.

    +

    Documentation for tests/shanghai/eip4895_withdrawals/spec.py.

    diff --git a/main/tests/shanghai/eip4895_withdrawals/test_withdrawals/index.html b/main/tests/shanghai/eip4895_withdrawals/test_withdrawals/index.html index 5d8e6cf077..51ae9c4791 100644 --- a/main/tests/shanghai/eip4895_withdrawals/test_withdrawals/index.html +++ b/main/tests/shanghai/eip4895_withdrawals/test_withdrawals/index.html @@ -20,7 +20,7 @@ - + @@ -13754,7 +13754,7 @@

    Test Withdrawals

    -

    Documentation for tests/shanghai/eip4895_withdrawals/test_withdrawals.py.

    +

    Documentation for tests/shanghai/eip4895_withdrawals/test_withdrawals.py.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai/eip4895_withdrawals/test_withdrawals.py
    diff --git a/main/tests/shanghai/eip4895_withdrawals/test_withdrawals/index/test_cases/index.html b/main/tests/shanghai/eip4895_withdrawals/test_withdrawals/index/test_cases/index.html
    index 1fb22b9db8..c76350eecb 100644
    --- a/main/tests/shanghai/eip4895_withdrawals/test_withdrawals/index/test_cases/index.html
    +++ b/main/tests/shanghai/eip4895_withdrawals/test_withdrawals/index/test_cases/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13620,7 +13620,7 @@
     

    Test Withdrawals - Test Cases

    Test cases generated from tests/shanghai/eip4895_withdrawals/test_withdrawals.py

    -

    Parametrized test cases generated from the test module tests/shanghai/eip4895_withdrawals/test_withdrawals.py:

    +

    Parametrized test cases generated from the test module tests/shanghai/eip4895_withdrawals/test_withdrawals.py:

    TestUseValueInTx
     TestUseValueInTx
     TestUseValueInTx
    diff --git a/main/tests/shanghai/index.html b/main/tests/shanghai/index.html
    index 5b7484f3e0..64ad99445e 100644
    --- a/main/tests/shanghai/index.html
    +++ b/main/tests/shanghai/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -13621,7 +13621,7 @@
     
     
     

    Shanghai

    -

    Documentation for tests/shanghai.

    +

    Documentation for tests/shanghai.

    Generate fixtures for these test cases with:

    fill -v tests/shanghai
    diff --git a/main/tutorials/blockchain/index.html b/main/tutorials/blockchain/index.html
    index 11fec3cbc9..ebe76b6b64 100644
    --- a/main/tutorials/blockchain/index.html
    +++ b/main/tutorials/blockchain/index.html
    @@ -16,7 +16,7 @@
           
           
           
    -      
    +      
         
         
           
    diff --git a/main/tutorials/state_transition/index.html b/main/tutorials/state_transition/index.html
    index 28a2449a66..c0d3ee319f 100644
    --- a/main/tutorials/state_transition/index.html
    +++ b/main/tutorials/state_transition/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    diff --git a/main/tutorials/state_transition_bad_opcode/index.html b/main/tutorials/state_transition_bad_opcode/index.html
    index 2c369d8084..e7520a3d47 100644
    --- a/main/tutorials/state_transition_bad_opcode/index.html
    +++ b/main/tutorials/state_transition_bad_opcode/index.html
    @@ -16,7 +16,7 @@
           
           
           
    -      
    +      
         
         
           
    diff --git a/main/writing_tests/adding_a_new_test/index.html b/main/writing_tests/adding_a_new_test/index.html
    index 92bf344c32..5029f844ec 100644
    --- a/main/writing_tests/adding_a_new_test/index.html
    +++ b/main/writing_tests/adding_a_new_test/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    diff --git a/main/writing_tests/code_standards/index.html b/main/writing_tests/code_standards/index.html
    index 6970b9726a..faca95ef78 100644
    --- a/main/writing_tests/code_standards/index.html
    +++ b/main/writing_tests/code_standards/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    diff --git a/main/writing_tests/exception_tests/index.html b/main/writing_tests/exception_tests/index.html
    index 7e094430a3..4db3001a33 100644
    --- a/main/writing_tests/exception_tests/index.html
    +++ b/main/writing_tests/exception_tests/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    diff --git a/main/writing_tests/index.html b/main/writing_tests/index.html
    index e7eac8b63a..07a6d75789 100644
    --- a/main/writing_tests/index.html
    +++ b/main/writing_tests/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    diff --git a/main/writing_tests/reference_specification/index.html b/main/writing_tests/reference_specification/index.html
    index b70c6a3ec4..2b71c8f800 100644
    --- a/main/writing_tests/reference_specification/index.html
    +++ b/main/writing_tests/reference_specification/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    diff --git a/main/writing_tests/test_markers/index.html b/main/writing_tests/test_markers/index.html
    index e563947f63..bd3278daa1 100644
    --- a/main/writing_tests/test_markers/index.html
    +++ b/main/writing_tests/test_markers/index.html
    @@ -20,7 +20,7 @@
           
           
           
    -      
    +      
         
         
           
    @@ -1095,6 +1095,15 @@
         
       
       
    +
    +        
    +          
  • + + + marks + + +
  • @@ -13961,6 +13970,15 @@ + + +
  • + + + marks + + +
  • @@ -14229,6 +14247,19 @@

    selectorpass

    Ideally, the lambda function should be used to explicitly filter out values that are not compatible with the test (exclusive filter), rather than explicitly selecting values (inclusive filter), as the parametrized values might change with future forks.

    +

    marks

    +

    A marker, list of markers, or a lambda function that can be used to add additional markers to the test.

    +
    import pytest
    +
    +@pytest.mark.with_all_tx_types(
    +    marks=lambda tx_type: pytest.mark.skip("incompatible") if tx_type == 1 else None,
    +)
    +@pytest.mark.valid_from("London")
    +def test_something_with_all_tx_types_but_skip_type_1(state_test_only, tx_type):
    +    assert tx_type != 1
    +    ...
    +
    +

    In this example, the test will be skipped if tx_type is equal to 1 by returning a pytest.mark.skip marker, and return None otherwise.

    Other Markers

    @pytest.mark.slow

    This marker is used to mark tests that are slow to run. These tests are not run during tox testing, and are only run when a release is being prepared.

    diff --git a/main/writing_tests/types_of_tests/index.html b/main/writing_tests/types_of_tests/index.html index cd0e64f24e..f841136c8f 100644 --- a/main/writing_tests/types_of_tests/index.html +++ b/main/writing_tests/types_of_tests/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/writing_tests/verifying_changes/index.html b/main/writing_tests/verifying_changes/index.html index c365af1436..8f2ce06767 100644 --- a/main/writing_tests/verifying_changes/index.html +++ b/main/writing_tests/verifying_changes/index.html @@ -20,7 +20,7 @@ - + diff --git a/main/writing_tests/writing_a_new_test/index.html b/main/writing_tests/writing_a_new_test/index.html index 4308311c06..4e41b1cba2 100644 --- a/main/writing_tests/writing_a_new_test/index.html +++ b/main/writing_tests/writing_a_new_test/index.html @@ -20,7 +20,7 @@ - +